{
  "openapi": "3.0.1",
  "info": {
    "title": "Indeed Fast Job Scraper: Annual Salary & Change Tracking",
    "description": "Indeed job listings scraper with 50+ fields per job. Pay normalized to an annual salary so hourly and salaried roles filter together. Structured location, sponsored-vs-organic flag, employer hiring signals, remote filter and change tracking. Clean JSON hiring data.",
    "version": "0.1",
    "x-build-id": "Q05SNNATm19wCc4KY"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/acebuilds~indeed-jobs-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-acebuilds-indeed-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/acebuilds~indeed-jobs-scraper/runs": {
      "post": {
        "operationId": "runs-sync-acebuilds-indeed-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/acebuilds~indeed-jobs-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-acebuilds-indeed-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": [
          "queries"
        ],
        "properties": {
          "queries": {
            "title": "Search terms",
            "type": "array",
            "description": "One or more job titles or keywords. Results from every term are merged and de-duplicated, so you pay once for a job that matches several searches.",
            "items": {
              "type": "string"
            }
          },
          "country": {
            "title": "Country",
            "enum": [
              "us",
              "ca",
              "uk",
              "ie",
              "au",
              "nz",
              "de",
              "fr",
              "es",
              "it",
              "nl",
              "se",
              "pl",
              "in",
              "sg",
              "ae",
              "za",
              "br",
              "mx",
              "jp"
            ],
            "type": "string",
            "description": "Which Indeed country site to search.",
            "default": "us"
          },
          "location": {
            "title": "Location",
            "type": "string",
            "description": "City, state or postal code. Leave empty to search the whole country."
          },
          "locations": {
            "title": "Additional locations",
            "type": "array",
            "description": "Run every search term against each of these locations and merge the results (de-duplicated). Indeed only serves the first page of results to logged-out visitors, so adding locations — not deeper paging — is how you collect more jobs.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "radius": {
            "title": "Search radius (miles)",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "How far from the location to search. 0 uses Indeed's default.",
            "default": 0
          },
          "jobType": {
            "title": "Job type",
            "enum": [
              "",
              "fulltime",
              "parttime",
              "contract",
              "temporary",
              "internship"
            ],
            "type": "string",
            "description": "Restrict to one employment type.",
            "default": ""
          },
          "sort": {
            "title": "Sort by",
            "enum": [
              "relevance",
              "date"
            ],
            "type": "string",
            "description": "Indeed's own ordering. Overridden by salary ranking when a salary filter is set.",
            "default": "relevance"
          },
          "postedWithinDays": {
            "title": "Posted within (days)",
            "minimum": 0,
            "maximum": 30,
            "type": "integer",
            "description": "Only jobs posted in the last N days. 0 means no limit.",
            "default": 0
          },
          "maxResults": {
            "title": "Max results",
            "minimum": 1,
            "type": "integer",
            "description": "Stop after this many matching jobs. You are charged per job returned, so this is your budget cap. Note Indeed returns about 45 jobs per search term + location, so reaching a high number needs several terms or locations.",
            "default": 200
          },
          "minAnnualSalary": {
            "title": "Minimum annual salary",
            "minimum": 0,
            "type": "integer",
            "description": "Filter by what the job actually pays per year. Hourly, daily, weekly and monthly rates are converted to an annual figure first (assuming full-time), so an hourly role and a salaried role compete on equal terms. 0 disables.",
            "default": 0
          },
          "requireSalary": {
            "title": "Only jobs that disclose salary",
            "type": "boolean",
            "description": "Drop listings with no pay information at all.",
            "default": false
          },
          "remoteOnly": {
            "title": "Remote only",
            "type": "boolean",
            "description": "Keep only roles Indeed marks as remote or hybrid.",
            "default": false
          },
          "minCompanyRating": {
            "title": "Minimum company rating",
            "minimum": 0,
            "maximum": 5,
            "type": "integer",
            "description": "Drop employers rated below this on Indeed (1-5). 0 disables. Companies with no rating are dropped when this is set.",
            "default": 0
          },
          "excludeAgencies": {
            "title": "Exclude staffing agencies",
            "type": "boolean",
            "description": "Filter out recruiters and staffing firms so you see direct employers. Heuristic name matching — it will miss small agencies.",
            "default": false
          },
          "titleMustInclude": {
            "title": "Title must include",
            "type": "array",
            "description": "Keep a job only if its title contains at least one of these words.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "titleMustExclude": {
            "title": "Title must exclude",
            "type": "array",
            "description": "Drop any job whose title contains one of these words (e.g. senior, intern).",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "mode": {
            "title": "Mode",
            "enum": [
              "snapshot",
              "watchlist"
            ],
            "type": "string",
            "description": "Snapshot returns everything matching now. Watchlist returns only what changed since your last run with the same watchlist name — new, removed and repriced jobs.",
            "default": "snapshot"
          },
          "watchlistName": {
            "title": "Watchlist name",
            "type": "string",
            "description": "Names the saved baseline. Use different names to track different searches independently.",
            "default": "default"
          },
          "fetchSurface": {
            "title": "Fetch surface",
            "enum": [
              "auto",
              "mobile",
              "desktop"
            ],
            "type": "string",
            "description": "Auto tries Indeed's lighter mobile pages first, using your own first search, and falls back to desktop if they are unavailable. The page it fetches is reused, so this costs no extra request.",
            "default": "auto"
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}