{
  "openapi": "3.0.1",
  "info": {
    "title": "Indeed Scraper",
    "description": "Scrape Indeed jobs with full descriptions in text and HTML — the blanks other scrapers leave empty are re-fetched and filled. Adds company profile (website, industry, size, CEO), verified apply links, and salaries. Search by keyword, Indeed URL, or a specific company.",
    "version": "0.1",
    "x-build-id": "8Day50Umnd3AUs2OC"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/dataharbor~indeed-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-dataharbor-indeed-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/dataharbor~indeed-scraper/runs": {
      "post": {
        "operationId": "runs-sync-dataharbor-indeed-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/dataharbor~indeed-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-dataharbor-indeed-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": {
          "position": {
            "title": "Positions / keywords for search",
            "type": "string",
            "description": "Job title or keywords to search on Indeed, e.g. \"accountant\". Enter multiple keywords on separate lines — each is scraped independently and capped by Max job listings. Optional if you provide Start URLs."
          },
          "startUrls": {
            "title": "Start URLs",
            "type": "array",
            "description": "Indeed URLs to scrape. Supports search-result URLs (e.g. https://www.indeed.com/jobs?q=accountant&l=New+York) and company-jobs URLs (e.g. https://www.indeed.com/cmp/Google/jobs). Each is scraped independently, capped by Max job listings. Runs alongside any keywords above.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "maxItems": {
            "title": "Max job listings per search",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "Maximum number of job listings to return (capped at 5000).",
            "default": 100
          },
          "country": {
            "title": "Country for search",
            "enum": [
              "USA",
              "UK",
              "Canada",
              "Australia",
              "Ireland",
              "India",
              "Germany",
              "France",
              "Netherlands",
              "Spain",
              "Italy",
              "Singapore",
              "New Zealand",
              "Mexico",
              "Brazil"
            ],
            "type": "string",
            "description": "Indeed country domain to search.",
            "default": "USA"
          },
          "location": {
            "title": "Location for search",
            "type": "string",
            "description": "City, state, or region to narrow the search (optional)."
          },
          "maxAgeDays": {
            "title": "Max job age (days)",
            "minimum": 1,
            "maximum": 90,
            "type": "integer",
            "description": "Only return jobs posted within this many days.",
            "default": 7
          },
          "scrapeCompanyDetails": {
            "title": "Scrape company details",
            "type": "boolean",
            "description": "Include company industry, description, address, size, website, logo, and bonus employer key / CEO name.",
            "default": true
          },
          "detectStaffingAgencies": {
            "title": "Detect staffing / recruiting agencies",
            "type": "boolean",
            "description": "Add `isStaffingAgency` (true/false) and `staffingAgencyReason` to each job, flagging postings from staffing/recruiting firms vs direct employers. Uses company name, industry, description, and 'our client' language in the job — no LLM. Great for recruiters who only want direct employers. Most accurate with company details enabled.",
            "default": false
          },
          "excludeStaffingAgencies": {
            "title": "Exclude staffing / recruiting agencies",
            "type": "boolean",
            "description": "Drop staffing/recruiting-agency postings from the results entirely, so you only get direct employers (and aren't billed for the agency rows). Implies staffing-agency detection.",
            "default": false
          },
          "uniqueOnly": {
            "title": "Save only unique job listings",
            "type": "boolean",
            "description": "Collapse duplicate listings (same company + title + location).",
            "default": true
          },
          "followApplyRedirect": {
            "title": "Follow redirects for apply link",
            "type": "boolean",
            "description": "Resolve the real employer apply URL behind Indeed's redirect and return it as applyUrl.",
            "default": true
          },
          "compatibleFieldNames": {
            "title": "Add compatible field names (drop-in migration)",
            "type": "boolean",
            "description": "Also emit alternate output keys (positionName, url, id, externalApplyLink, postedAt, scrapedAt, salary) that match the field names other Indeed scrapers commonly use, so an existing pipeline can switch to this actor without changing code. This actor's own clean field names are always included too.",
            "default": false
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "A proxy is required for the scrape to work on the Apify platform (Indeed refuses direct datacenter/hosting IPs). Apify Proxy (datacenter) is the tested default and is what this Actor is tuned for. Residential groups consume far more bandwidth and are rarely needed.",
            "default": {
              "useApifyProxy": true
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}