{
  "openapi": "3.0.1",
  "info": {
    "title": "Google Jobs Scraper — Salary, Apply Links & Filters",
    "description": "Scrape Google Jobs listings by keyword and location: job title, company, salary, employment type, posted date, apply links. Filters, remote, no login.",
    "version": "1.0",
    "x-build-id": "bqW6V9yS9vuDE5W2e"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/cheapapi~google-jobs-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-cheapapi-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/cheapapi~google-jobs-scraper/runs": {
      "post": {
        "operationId": "runs-sync-cheapapi-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/cheapapi~google-jobs-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-cheapapi-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",
        "required": [
          "searchTerms"
        ],
        "properties": {
          "searchTerms": {
            "title": "Job search terms",
            "type": "array",
            "description": "Job titles or keywords to search on Google Jobs, one per line (e.g. \"software engineer\", \"nurse\", \"barista\"). Each term is one search.",
            "items": {
              "type": "string"
            }
          },
          "country": {
            "title": "Country",
            "type": "string",
            "description": "Country to search jobs in. Pick one from the list, or type any other two-letter country code (e.g. \"KR\", \"AR\") or country name (e.g. \"Portugal\"); 230+ countries are supported.",
            "default": "US"
          },
          "location": {
            "title": "City or region (optional)",
            "type": "string",
            "description": "Narrow the search to a city or region in the selected country, e.g. \"New York\", \"Austin, Texas\" or \"London, United Kingdom\". Leave empty to search the whole country. To search several cities in one run, use \"Several locations\" in the advanced section."
          },
          "language": {
            "title": "Language",
            "type": "string",
            "description": "Language of the Google Jobs interface, as a two-letter code: \"en\" (English), \"de\" (German), \"fr\" (French), \"es\" (Spanish), \"pt-BR\" (Portuguese, Brazil) and so on. Pick one from the list or type another code. It affects the language of labels such as salary and \"posted\" texts; use the local language (e.g. \"de\" for Germany) to get the most local listings.",
            "default": "en"
          },
          "maxJobsPerSearch": {
            "title": "Maximum jobs per search term",
            "minimum": 1,
            "maximum": 200,
            "type": "integer",
            "description": "How many jobs to collect for each search term (Google Jobs shows up to 200, in pages of 10). You pay $0.0021 per delivered job; each delivered job covers one fetched page, and pages left uncovered (no jobs, or all removed by filters / only new jobs) cost $0.0018 each.",
            "default": 20
          },
          "locations": {
            "title": "Several locations",
            "type": "array",
            "description": "Cities, regions or countries, one per line, e.g. \"Austin, Texas\", \"London, United Kingdom\", \"Germany\" or a numeric location code. Cities without a country are looked up in the selected \"Country\". Every search term is searched in every location (up to 100 locations); \"City or region\" above, if set, is added to this list. Filters, language and radius below apply to every location. Leave empty to use a single location.",
            "items": {
              "type": "string"
            }
          },
          "employmentTypes": {
            "title": "Employment type",
            "type": "array",
            "description": "Only return jobs with these contract types. Google Jobs filters full-time, contractor and internship; with part-time selected, the selected types are matched against each job's employment type after collection (removed jobs are not charged as jobs). A search that delivers fewer jobs than the 10-job result pages it fetched pays $0.0018 per uncovered page (\"Result page checked\"). Leave empty for all types.",
            "items": {
              "type": "string",
              "enum": [
                "fullTime",
                "partTime",
                "contractor",
                "internship"
              ],
              "enumTitles": [
                "Full-time",
                "Part-time",
                "Contractor",
                "Internship"
              ]
            },
            "default": []
          },
          "radiusKm": {
            "title": "Search radius (km)",
            "minimum": 1,
            "maximum": 300,
            "type": "integer",
            "description": "Only jobs within this distance of the location (1–300 km; for miles multiply by 1.609), e.g. 50. Works best with a city. Leave empty to search anywhere in the location."
          },
          "remoteOnly": {
            "title": "Remote jobs",
            "type": "boolean",
            "description": "Adds \"remote\" to every search so Google Jobs focuses on remote and work-from-home positions. Every row also has an \"isRemote\" flag.",
            "default": false
          },
          "postedWithin": {
            "title": "Posted within",
            "enum": [
              "any",
              "today",
              "3days",
              "week",
              "month"
            ],
            "type": "string",
            "description": "Keep only jobs posted within this period (based on the posting date Google shows). Removed jobs are not charged as jobs. A search that delivers fewer jobs than the 10-job result pages it fetched pays $0.0018 per uncovered page (\"Result page checked\").",
            "default": "any"
          },
          "onlyWithSalary": {
            "title": "Only jobs with salary",
            "type": "boolean",
            "description": "Keep only jobs where Google shows a salary. Removed jobs are not charged as jobs. A search that delivers fewer jobs than the 10-job result pages it fetched pays $0.0018 per uncovered page (\"Result page checked\").",
            "default": false
          },
          "deduplicate": {
            "title": "Remove duplicate jobs",
            "type": "boolean",
            "description": "When several search terms or locations return the same job, keep it only once (you are charged once). A search that delivers fewer jobs than the 10-job result pages it fetched pays $0.0018 per uncovered page (\"Result page checked\").",
            "default": true
          },
          "onlyNewJobs": {
            "title": "Only new jobs since the last run",
            "type": "boolean",
            "description": "Deliver only jobs that earlier runs of the same search (same term, location, language and Google filters) have not delivered yet. The first run delivers everything and starts the history. Repeats are skipped and not charged as jobs; a search with fewer new jobs than result pages fetched pays $0.0018 per uncovered page (e.g. 20 jobs asked, nothing new: $0.0036). Ideal with an Apify Schedule.",
            "default": false
          },
          "monitoringStoreName": {
            "title": "Monitoring store name",
            "type": "string",
            "description": "Name of the key-value store in your Apify account that keeps the job history (lowercase letters, digits and hyphens). Use a different name to keep separate histories, e.g. one per client or alert. Delete the store to start over.",
            "default": "google-jobs-monitor"
          },
          "locationCode": {
            "title": "Location code",
            "minimum": 1,
            "maximum": 99999999,
            "type": "integer",
            "description": "Numeric Google location code (e.g. 2840 = United States, 1023191 = New York, NY). Overrides country and city. Also overrides \"Several locations\"."
          },
          "locationName": {
            "title": "Exact location name",
            "type": "string",
            "description": "Full Google location name in the form \"City,Region,Country\", e.g. \"London,England,United Kingdom\" or \"Austin,Texas,United States\". Overrides country and city. Also overrides \"Several locations\"."
          },
          "languageName": {
            "title": "Language name",
            "type": "string",
            "description": "Full language name (e.g. \"English\", \"German\") instead of the two-letter code. Overrides \"Language\"."
          },
          "processingSpeed": {
            "title": "Processing speed",
            "enum": [
              "auto",
              "fast",
              "economy"
            ],
            "type": "string",
            "description": "Auto: fast processing for up to 25 search terms, economy for larger runs. Fast: results usually within 1–2 minutes. Economy: can take up to ~45 minutes. The price per job is the same.",
            "default": "auto"
          },
          "maxWaitMinutes": {
            "title": "Maximum wait (minutes)",
            "minimum": 1,
            "maximum": 600,
            "type": "integer",
            "description": "Stop waiting for searches that are not ready after this many minutes. Unfinished searches are reported in the run summary; they were already processed, so each is charged $0.0018 per requested result page.",
            "default": 60
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}