{
  "openapi": "3.0.1",
  "info": {
    "title": "Google Jobs Scraper API",
    "description": "Scrape Google's jobs results into structured postings: title, company, location, posting source, posted date, employment type, full description and every apply link. Priced per job, and never charged for a search that returns nothing.",
    "version": "0.1",
    "x-build-id": "MmeUAVuu5Q4LbRCAf"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/shakamize~google-jobs-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-shakamize-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/shakamize~google-jobs-scraper/runs": {
      "post": {
        "operationId": "runs-sync-shakamize-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/shakamize~google-jobs-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-shakamize-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": {
          "searches": {
            "title": "Searches",
            "type": "array",
            "description": "One entry per search, as <code>{ \"keyword\": \"software engineer\", \"location\": \"New York, NY\" }</code>. A location is required: Google scopes its jobs results to a place, and a bare keyword usually returns nothing at all."
          },
          "keywords": {
            "title": "Keywords",
            "type": "array",
            "description": "Job titles or skills. Combined with every entry of <b>Locations</b>, so 3 keywords and 2 locations run 6 searches.",
            "items": {
              "type": "string"
            }
          },
          "locations": {
            "title": "Locations",
            "type": "array",
            "description": "Cities, regions or countries, written as a job seeker would type them. Verified to return only jobs in the requested place: <code>nurse jobs in Austin, TX</code> returned 10 of 10 in Austin.",
            "items": {
              "type": "string"
            }
          },
          "countryCode": {
            "title": "Country",
            "enum": [
              "US",
              "GB",
              "CA",
              "AU",
              "IN",
              "DE",
              "FR",
              "ES",
              "IT",
              "BR",
              "MX",
              "NL",
              "IE"
            ],
            "type": "string",
            "description": "The Google country to search from. Measured 2026-08-29: the United States, United Kingdom, Canada, India, Germany, France, Spain and Italy all return jobs. The Netherlands, Ireland, Poland, Sweden and Israel returned none in any phrasing, and a run against them says so in the log rather than looking like a market with no openings.",
            "default": "US"
          },
          "language": {
            "title": "Language",
            "type": "string",
            "description": "Google interface language, as a two-letter code. Defaults to the language that returns jobs for the chosen country. This matters more than the country does: Spain and Italy return nothing to an English query and full results to one in Spanish or Italian."
          },
          "maxJobsPerQuery": {
            "title": "Max jobs per search",
            "minimum": 1,
            "type": "integer",
            "description": "Google renders at most 10 jobs per request and its load-more control does nothing for a non-browser client. Above 10, the actor follows the filter links Google itself offers on the page, in the market's own language, and removes the jobs that repeat. Every extra request is logged.",
            "default": 10
          },
          "maxJobs": {
            "title": "Max jobs in total",
            "minimum": 1,
            "type": "integer",
            "description": "Stop the whole run after this many jobs, across every search. Prefilled with 100 so a run that fans out over many keywords and locations has a ceiling; clear it for no overall cap."
          },
          "includeDescription": {
            "title": "Include full description",
            "type": "boolean",
            "description": "Store the complete job description Google holds, not just the highlights. On by default and free: it is on the same page either way.",
            "default": true
          },
          "employmentTypes": {
            "title": "Employment type",
            "type": "array",
            "description": "Keep only jobs Google labels with one of these. Applied to the parsed label rather than to the query, so it never silently returns the wrong jobs when a market words the filter differently.",
            "items": {
              "type": "string",
              "enum": [
                "Full-time",
                "Part-time",
                "Contractor",
                "Internship",
                "Temp work",
                "Volunteer"
              ],
              "enumTitles": [
                "Full-time",
                "Part-time",
                "Contractor",
                "Internship",
                "Temp work",
                "Volunteer"
              ]
            }
          },
          "remoteOnly": {
            "title": "Remote only",
            "type": "boolean",
            "description": "Keep only jobs whose location, title or labels mark them as remote or work from home.",
            "default": false
          },
          "postedWithinDays": {
            "title": "Posted within",
            "minimum": 1,
            "type": "integer",
            "description": "Keep only jobs posted in the last N days. Google publishes an age rather than a date, so this compares against the date implied by that age at the time of the run. Jobs Google gives no age for are dropped, never assumed recent."
          },
          "companies": {
            "title": "Only these companies",
            "type": "array",
            "description": "Keep only jobs whose company name contains one of these.",
            "items": {
              "type": "string"
            }
          },
          "excludeCompanies": {
            "title": "Exclude companies",
            "type": "array",
            "description": "Drop jobs whose company name contains one of these. Useful for filtering out staffing agencies.",
            "items": {
              "type": "string"
            }
          },
          "sources": {
            "title": "Only these sources",
            "type": "array",
            "description": "Keep only jobs syndicated via one of these boards, matched against the <code>via</code> field, for example <code>LinkedIn</code> or <code>Indeed</code>.",
            "items": {
              "type": "string"
            }
          },
          "locationMatch": {
            "title": "Location match",
            "enum": [
              "strict",
              "off"
            ],
            "type": "string",
            "description": "Google's own filter links widen a search as well as narrowing it: following its \"remote\" link on a Chicago search returns postings in Japan and Dallas. On <b>strict</b>, the default, a posting whose location does not name the place you asked for is dropped and counted in the log. This also drops region-wide postings that name only the country or state, such as <code>España</code> for a Madrid search. Set it to <b>off</b> to keep everything Google returned.",
            "default": "strict"
          },
          "onlyNewJobs": {
            "title": "Only jobs not seen before",
            "type": "boolean",
            "description": "Remember the jobs stored by previous runs and skip them. Jobs repeated inside a single run are always removed, with or without this.",
            "default": false
          },
          "newJobsStoreName": {
            "title": "Memory name",
            "type": "string",
            "description": "The named key-value store holding the jobs already seen. Use a different name per saved search to keep their memories apart.",
            "default": "google-jobs-seen"
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Defaults to Apify's unblocking service, which is what makes Google's jobs results reachable over plain HTTP. Changing this is rarely useful: a plain datacenter or residential address is redirected away from the jobs results.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "UNBLOCKER"
              ]
            }
          }
        }
      },
      "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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}