{
  "openapi": "3.0.1",
  "info": {
    "title": "Google Jobs Scraper — pay per job",
    "description": "One clean row per job from Google’s Jobs tab: parsed location, ISO posted date, salary split out, every apply link, the job’s own Google link. USD 0.004 a row, no subscription. US, UK, Canada, India.",
    "version": "0.1",
    "x-build-id": "h043t1EBScknS9fN4"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/vibermacher~google-jobs/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-vibermacher-google-jobs",
        "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/vibermacher~google-jobs/runs": {
      "post": {
        "operationId": "runs-sync-vibermacher-google-jobs",
        "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/vibermacher~google-jobs/run-sync": {
      "post": {
        "operationId": "run-sync-vibermacher-google-jobs",
        "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": {
          "query": {
            "title": "Job search query",
            "type": "string",
            "description": "What to search for, such as \"registered nurse\"."
          },
          "location": {
            "title": "Location",
            "type": "string",
            "description": "Where, as a place name; the canonical form \"City,Region,Country\" (such as \"Houston,Texas,United States\") is the most precise."
          },
          "country": {
            "title": "Country",
            "enum": [
              "us",
              "gb",
              "ca",
              "in"
            ],
            "type": "string",
            "description": "The Google country site to search: google.com, google.co.uk, google.ca or google.co.in. These are the sites that serve the Jobs tab through the proxy; Australia, Ireland, Germany and France do not (tested 2026-10-27).",
            "default": "us"
          },
          "datePosted": {
            "title": "Date posted",
            "enum": [
              "any",
              "week",
              "day"
            ],
            "type": "string",
            "description": "Only jobs Google lists as posted within the last week or the last day; \"any\" takes Google's default list.",
            "default": "any"
          },
          "maxResultsPerSearch": {
            "title": "Maximum jobs per search",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "Google serves 10 jobs a page. Above 10, the actor also fetches the narrower date windows (past week, then past day) as further pages, so a search yields up to about 30 distinct jobs; more jobs come from more searches (other locations or query wordings).",
            "default": 10
          },
          "searches": {
            "title": "Several searches (overrides query, location and country)",
            "type": "array",
            "description": "A list of {\"query\", \"location\", \"country\"} objects. A job two searches both list is pushed once."
          },
          "concurrency": {
            "title": "Searches at a time",
            "minimum": 1,
            "maximum": 5,
            "type": "integer",
            "description": "How many searches run at the same time; each search's own pages are fetched one after another.",
            "default": 3
          },
          "mode": {
            "title": "Mode",
            "enum": [
              "scrape",
              "capture"
            ],
            "type": "string",
            "description": "\"scrape\" pushes job rows; \"capture\" saves every raw page fetched to the run's key-value store, with a manifest, for building the parser.",
            "default": "scrape"
          },
          "variant": {
            "title": "Google page variant",
            "enum": [
              "udm8",
              "udm8-uule",
              "udm8-jbr",
              "ibp",
              "web"
            ],
            "type": "string",
            "description": "Which Google page scrape mode fetches: udm8 (the Jobs tab), udm8-uule (the Jobs tab with the location encoded), udm8-jbr (the Jobs tab with jbr=sep:0), ibp (the older jobs panel) or web (the ordinary results page).",
            "default": "udm8"
          },
          "captureVariants": {
            "title": "Variants to capture",
            "type": "array",
            "description": "Capture mode fetches the first page of every search in each of these variants.",
            "default": [
              "udm8",
              "udm8-uule",
              "udm8-jbr",
              "ibp",
              "web"
            ],
            "items": {
              "type": "string"
            }
          },
          "captureSecondPage": {
            "title": "Capture a second page",
            "type": "boolean",
            "description": "Capture mode also fetches page two of the first search in each variant, to learn whether paging works.",
            "default": true
          },
          "captureJobPage": {
            "title": "Capture a job's own page",
            "type": "boolean",
            "description": "Capture mode also fetches the first job's own page in both URL forms, to learn whether a description costs a request per job.",
            "default": true
          },
          "captureParams": {
            "title": "Capture: extra query parameters",
            "type": "array",
            "description": "Capture mode also fetches, for every search, one more first page per entry: the named variant's URL with these query parameters added, to test a filter form before any code depends on it. Entries are {\"name\", \"variant\", \"params\"}; the name goes into the saved page's key."
          },
          "captureScrollPages": {
            "title": "Capture: scroll continuations per search",
            "minimum": 0,
            "maximum": 5,
            "type": "integer",
            "description": "Capture mode also requests the Jobs tab's infinite-scroll continuation this many pages deep after each search's first udm8 page, in each known URL format, to learn whether the proxy serves more than the first 10 jobs. 0 fetches none.",
            "default": 0
          },
          "captureExtrasSearches": {
            "title": "Capture: searches that get the extras",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "The extra parameter pages and scroll continuations are fetched for this many leading searches only; 0 means every search.",
            "default": 0
          },
          "proxyGroup": {
            "title": "Apify proxy group",
            "enum": [
              "GOOGLE_SERP",
              "RESIDENTIAL"
            ],
            "type": "string",
            "description": "GOOGLE_SERP (billed per page, plain HTTP to Google) or RESIDENTIAL (billed per GB, HTTPS).",
            "default": "GOOGLE_SERP"
          },
          "compareResidential": {
            "title": "Capture: also fetch the first search through RESIDENTIAL",
            "type": "boolean",
            "description": "Capture mode fetches the first search's first page once more through the RESIDENTIAL group in every variant, for comparison.",
            "default": false
          },
          "maxAttempts": {
            "title": "Attempts per page",
            "minimum": 1,
            "maximum": 6,
            "type": "integer",
            "description": "A blocked, failed or unreadable page is fetched again, through a new proxy address, up to this many times in all.",
            "default": 3
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}