{
  "openapi": "3.0.1",
  "info": {
    "title": "Google Jobs Scraper with Salary and Apply Links",
    "description": "Google Jobs listings by search, location, date posted and job type. Title, company, salary, direct apply links, job highlights, posted date and full description. Blocked pages are retried and never charged. $0.004 per job ($4 per 1,000). Call it from curl or Python.",
    "version": "0.2",
    "x-build-id": "WNnvGJL4NOxc7nvBy"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/zovo-one~google-jobs-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-zovo-one-google-jobs-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/zovo-one~google-jobs-scraper/runs": {
      "post": {
        "operationId": "runs-sync-zovo-one-google-jobs-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/zovo-one~google-jobs-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-zovo-one-google-jobs-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "queries": {
            "title": "Job searches",
            "maxItems": 50,
            "type": "array",
            "description": "One search per line, up to 50, for example: software engineer, registered nurse, barista. Each line runs as its own Google Jobs search. If the list is empty, the Actor runs the example search \"software engineer\".",
            "items": {
              "type": "string"
            },
            "default": [
              "software engineer"
            ]
          },
          "location": {
            "title": "Location",
            "type": "string",
            "description": "City, region or country, for example \"Austin, TX\" or \"Berlin, Germany\". Added to every search as \"near <location>\". Leave empty for no location. Up to 100 characters."
          },
          "datePosted": {
            "title": "Date posted",
            "enum": [
              "any",
              "today",
              "3days",
              "week",
              "month"
            ],
            "type": "string",
            "description": "Adds Google's own date phrase to the search (\"since yesterday\", \"in the last 3 days\", ...). Rows whose English posted age is older than the window are also dropped and not charged. Ages Google shows in other languages are not checked.",
            "default": "any"
          },
          "employmentType": {
            "title": "Job type",
            "enum": [
              "any",
              "FULLTIME",
              "PARTTIME",
              "CONTRACTOR",
              "INTERN"
            ],
            "type": "string",
            "description": "Adds the job type to the search. A row that shows a different job type is dropped and not charged. Rows that show no job type are kept.",
            "default": "any"
          },
          "remoteOnly": {
            "title": "Remote jobs",
            "type": "boolean",
            "description": "Adds \"remote\" to the search. Google decides what matches; the isRemote field shows what the listing itself says.",
            "default": false
          },
          "maxJobsPerQuery": {
            "title": "Max jobs per search",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "Stop each search after this many saved jobs (1-500). Google shows about 10 jobs per page, so 20 jobs is about 2 pages. Paging stops early when Google has no more new jobs, so a search can return fewer than this.",
            "default": 20
          },
          "country": {
            "title": "Google country",
            "enum": [
              "us",
              "gb",
              "ca",
              "au",
              "nz",
              "ie",
              "in",
              "sg",
              "ph",
              "my",
              "za",
              "ng",
              "ke",
              "ae",
              "sa",
              "eg",
              "de",
              "at",
              "ch",
              "fr",
              "be",
              "nl",
              "lu",
              "it",
              "es",
              "pt",
              "pl",
              "cz",
              "se",
              "no",
              "dk",
              "fi",
              "gr",
              "ro",
              "hu",
              "tr",
              "il",
              "br",
              "mx",
              "ar",
              "cl",
              "co",
              "pe",
              "jp",
              "kr",
              "tw",
              "hk",
              "id",
              "th",
              "vn",
              "pk",
              "bd"
            ],
            "type": "string",
            "description": "Google's country setting (gl). It shapes results; use Location to pick the place.",
            "default": "us"
          },
          "language": {
            "title": "Google language",
            "enum": [
              "en",
              "de",
              "fr",
              "es",
              "it",
              "pt",
              "nl",
              "pl",
              "cs",
              "sv",
              "no",
              "da",
              "fi",
              "el",
              "ro",
              "hu",
              "tr",
              "he",
              "ar",
              "hi",
              "ja",
              "ko",
              "zh-CN",
              "zh-TW",
              "id",
              "th",
              "vi",
              "ms"
            ],
            "type": "string",
            "description": "Google's interface language (hl). Text such as \"3 days ago\" comes in this language.",
            "default": "en"
          },
          "dedupe": {
            "title": "Remove duplicates",
            "type": "boolean",
            "description": "Skip a job already saved in this run by another search. Jobs with a Google job ID match on that ID only. Jobs without one match on the apply URL, and on title, company and location when they have neither. Skipped duplicates are not charged. Repeats inside one search are always skipped. After a platform restart, jobs a search already saved are skipped either way.",
            "default": true
          },
          "source": {
            "title": "Data source",
            "enum": [
              "google",
              "serpapi"
            ],
            "type": "string",
            "description": "\"google\" reads the Google Jobs page through the proxy below. \"serpapi\" calls SerpApi's google_jobs API with your own key; SerpApi bills you for each search separately.",
            "default": "google"
          },
          "serpApiKey": {
            "title": "SerpApi key",
            "type": "string",
            "description": "Only for the SerpApi source. Your key from serpapi.com/manage-api-key. It is stored encrypted and never written to the log or OUTPUT."
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Google source only. Google answers plain connections with a \"turn on JavaScript\" page instead of jobs, so the default is Apify Proxy group GOOGLE_SERP, which Apify runs for Google Search pages. A page like that is fetched again through the proxy (up to 4 tries) and never charged. Other groups or your own proxies are allowed.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "GOOGLE_SERP"
              ]
            }
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}