{
  "openapi": "3.0.1",
  "info": {
    "title": "Google Jobs Scraper: Salaries, Apply Links & Full Descriptions",
    "description": "Scrape Google Jobs in 30 countries: title, company, salary (also read from the job text), date, job type, full description and direct apply links. Up to ~90 jobs per search, filters, multiple locations and an only-new-jobs mode for schedules.",
    "version": "0.1",
    "x-build-id": "qx5XGhgSdgjqvhP0z"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/roomy_tweet~google-jobs-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-roomy_tweet-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/roomy_tweet~google-jobs-scraper/runs": {
      "post": {
        "operationId": "runs-sync-roomy_tweet-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/roomy_tweet~google-jobs-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-roomy_tweet-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": "Search queries",
            "type": "array",
            "description": "What you would type into Google, one search per line: a job title, skill or company, optionally with a place (\"registered nurse chicago\", \"python developer remote\"). Needed unless you paste Google Jobs URLs below.",
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "Google Jobs URLs",
            "type": "array",
            "description": "Optional. Paste searches straight from Google (google.com/search?q=…&udm=8, or a shared job link). Their own search text, Google domain and language are used, including any filters you picked on Google; Locations are not added to them.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "locations": {
            "title": "Locations",
            "type": "array",
            "description": "Optional. Cities or regions; every query is searched in every location (\"registered nurse Chicago, IL\", \"registered nurse Houston, TX\"...). Leave empty to put the place in the query itself. A job found in two locations is saved once.",
            "items": {
              "type": "string"
            }
          },
          "country": {
            "title": "Country",
            "enum": [
              "us",
              "gb",
              "ca",
              "au",
              "nz",
              "ie",
              "in",
              "sg",
              "ph",
              "za",
              "ae",
              "ng",
              "br",
              "pt",
              "mx",
              "es",
              "ar",
              "co",
              "cl",
              "pe",
              "de",
              "at",
              "ch",
              "fr",
              "be",
              "nl",
              "it",
              "pl",
              "se",
              "jp"
            ],
            "type": "string",
            "description": "Which Google is searched (google.com, google.co.uk, google.com.br, ...). Jobs are local to this country.",
            "default": "us"
          },
          "language": {
            "title": "Interface language",
            "enum": [
              "en",
              "pt-BR",
              "pt-PT",
              "es"
            ],
            "type": "string",
            "description": "Optional. Language of Google's labels, such as \"2 days ago\". By default Portuguese for Brazil and Portugal, Spanish for Spanish-speaking countries and English elsewhere. Job texts stay as the employer wrote them."
          },
          "datePosted": {
            "title": "Date posted",
            "enum": [
              "any",
              "yesterday",
              "3days",
              "week",
              "month"
            ],
            "type": "string",
            "description": "Google's own \"Date posted\" filter. Jobs whose age Google shows as older are also dropped and not charged.",
            "default": "any"
          },
          "employmentType": {
            "title": "Job type",
            "enum": [
              "ANY",
              "FULL_TIME",
              "PART_TIME",
              "CONTRACTOR",
              "INTERNSHIP"
            ],
            "type": "string",
            "description": "Jobs that Google labels with a different type are dropped and not charged; jobs without a label are kept.",
            "default": "ANY"
          },
          "remoteOnly": {
            "title": "Remote only",
            "type": "boolean",
            "description": "Adds \"remote\" to the search and keeps only jobs Google marks as work from home or with a remote location.",
            "default": false
          },
          "companies": {
            "title": "Only these companies",
            "type": "array",
            "description": "Keep only jobs whose company name contains one of these as whole words (\"Amazon\" matches \"Amazon.com Services LLC\", not \"Amazonia\"). Case and accents are ignored. Other jobs are not saved or charged, and the browser reads the whole list to find matches.",
            "items": {
              "type": "string"
            }
          },
          "excludeCompanies": {
            "title": "Exclude companies",
            "type": "array",
            "description": "Drop jobs from these companies (same matching), e.g. staffing agencies.",
            "items": {
              "type": "string"
            }
          },
          "sources": {
            "title": "Only these sources",
            "type": "array",
            "description": "Keep only jobs Google shows via one of these sites or that have an apply link to one of them, e.g. \"LinkedIn\", \"Indeed\", \"Glassdoor\".",
            "items": {
              "type": "string"
            }
          },
          "excludeSources": {
            "title": "Exclude sources",
            "type": "array",
            "description": "Drop jobs that Google shows via one of these sites, e.g. job aggregators you don't want.",
            "items": {
              "type": "string"
            }
          },
          "onlyNewJobs": {
            "title": "Only new jobs (for scheduled runs)",
            "type": "boolean",
            "description": "Remember the jobs this search has saved and, on later runs, skip them: you get and pay for new postings only. Works per set of queries and filters, or per history name below.",
            "default": false
          },
          "historyName": {
            "title": "History name",
            "type": "string",
            "description": "Optional. Runs with the same name share one memory of saved jobs, even when their queries differ. By default each set of queries and filters has its own. Stored in your account as the key-value store google-jobs-history-<name>."
          },
          "resetHistory": {
            "title": "Forget saved jobs",
            "type": "boolean",
            "description": "Start this run with an empty memory: every job counts as new again. The memory is then rebuilt from this run.",
            "default": false
          },
          "outputMode": {
            "title": "Output",
            "enum": [
              "full",
              "compact"
            ],
            "type": "string",
            "description": "Compact keeps every field except the bullet lists (qualifications, benefits, responsibilities, highlights) and cuts the description to its first 500 characters: about 77% smaller, handy for spreadsheets and AI agents.",
            "default": "full"
          },
          "maxJobsPerQuery": {
            "title": "Maximum jobs per query",
            "minimum": 1,
            "maximum": 150,
            "type": "integer",
            "description": "Up to 10 comes from one fast request. More are loaded by scrolling Google's list in a browser, which takes about 2–3 minutes per query; Google usually lists up to around 90–100 jobs per search.",
            "default": 30
          },
          "scrollWithBrowser": {
            "title": "Scroll for more than 10 jobs",
            "type": "boolean",
            "description": "Turn off to get only the first 10 jobs per query, faster.",
            "default": true
          },
          "maxItems": {
            "title": "Maximum jobs in total",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "Across all queries. A job found by two queries is saved and charged once.",
            "default": 1000
          },
          "maxConcurrency": {
            "title": "Queries at the same time",
            "minimum": 1,
            "maximum": 8,
            "type": "integer",
            "description": "Browsers are also limited by memory: one per ~1.5 GB.",
            "default": 3
          },
          "failOnQualityDrop": {
            "title": "Fail the run if quality drops",
            "type": "boolean",
            "description": "Mark the run as failed when its quality check finds a problem (listings Google showed but that could not be read, many jobs missing core fields, every search failing). Useful for scheduled runs: a failed run triggers Apify's failure notification. The check itself always runs and is in REPORT.qualityProblems.",
            "default": false
          },
          "maxDurationSecs": {
            "title": "Maximum duration (seconds)",
            "minimum": 60,
            "maximum": 3600,
            "type": "integer",
            "description": "No new query or scroll is started after this time.",
            "default": 1800
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}