{
  "openapi": "3.0.1",
  "info": {
    "title": "Indeed Jobs Scraper & Company Reviews",
    "description": "Indeed Jobs Scraper & Company Reviews — Scrape Indeed job listings and company reviews, including job titles, employers, locations, salaries, ratings, review counts, employee feedback, and company insights. Export structured data for recruitment, market research, and employer analysis.",
    "version": "0.1",
    "x-build-id": "IlefcW1pht1a9oUFL"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/api-empire~indeed-job-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-api-empire-indeed-job-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/api-empire~indeed-job-scraper/runs": {
      "post": {
        "operationId": "runs-sync-api-empire-indeed-job-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/api-empire~indeed-job-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-api-empire-indeed-job-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": {
          "includeCompanyReviews": {
            "title": "⭐ Collect employer reviews",
            "type": "boolean",
            "description": "Fetch each employer's public company page and emit its reviews as child rows. Turn this off to run as a plain job scraper.",
            "default": true
          },
          "maxReviewsPerCompany": {
            "title": "🗂️ Reviews per employer",
            "minimum": 0,
            "maximum": 1000,
            "type": "integer",
            "description": "Upper bound on review rows collected per employer (20 reviews per page). Large employers can have tens of thousands — Comcast alone has ~19,600 — so keep this tight unless you really want the whole archive. Set 0 to keep the star rating and skip review rows entirely.",
            "default": 25
          },
          "reviewSort": {
            "title": "🔀 Review order",
            "enum": [
              "newest",
              "helpful",
              "rating_low",
              "rating_high"
            ],
            "type": "string",
            "description": "Applied SERVER-SIDE by Indeed, so it decides which reviews you get first, not just their order. 'Newest' is the page default.",
            "default": "newest"
          },
          "reviewRatingFilter": {
            "title": "⚖️ Star band",
            "enum": [
              "all",
              "1-2",
              "3",
              "4-5"
            ],
            "type": "string",
            "description": "Keeps only reviews in this star band. Indeed does NOT accept a star filter as a URL parameter, so this is applied client-side after fetching — pair it with 'Lowest rated first' or 'Highest rated first' so the walk reaches the band you want without paging the whole archive.",
            "default": "all"
          },
          "reviewsWorldwide": {
            "title": "🌐 Include reviews from every country",
            "type": "boolean",
            "description": "Indeed's company page defaults to the reviews written in the site's own country. Leave this on to widen to every country (on the Comcast page that is 19,577 reviews instead of 19,233).",
            "default": true
          },
          "reviewBrowserProfile": {
            "title": "🧬 Company-page browser profile",
            "enum": [
              "firefox133",
              "safari17_0"
            ],
            "type": "string",
            "description": "TLS fingerprint used for the company page. Indeed's Cloudflare configuration is fingerprint-keyed. Measured in-container 2026-08-11 from Apify residential egress: firefox133 returned comp-initialData on 5/6 fetches while safari17_0 was 403-challenged on 7/7. The actor alternates between both profiles on retry regardless of this setting, so this only picks which one is tried FIRST.",
            "default": "firefox133"
          },
          "query": {
            "title": "🔍 Job keywords",
            "type": "string",
            "description": "What to search for — job title, skill or company name (e.g. 'Sales', 'Registered Nurse', 'Comcast').",
            "default": "Sales"
          },
          "location": {
            "title": "📍 Where",
            "type": "string",
            "description": "City, state, ZIP code, or 'remote'. Leave empty to search the whole country.",
            "default": ""
          },
          "countryCode": {
            "title": "🌍 Indeed country site",
            "enum": [
              "us",
              "ae",
              "ar",
              "au",
              "at",
              "bh",
              "be",
              "br",
              "ca",
              "cl",
              "cn",
              "co",
              "cr",
              "cz",
              "dk",
              "ec",
              "eg",
              "es",
              "fi",
              "fr",
              "de",
              "gr",
              "hk",
              "hu",
              "in",
              "id",
              "ie",
              "il",
              "it",
              "jp",
              "kr",
              "kw",
              "lu",
              "my",
              "mx",
              "ma",
              "nl",
              "nz",
              "ng",
              "no",
              "om",
              "pk",
              "pa",
              "pe",
              "ph",
              "pl",
              "pt",
              "qa",
              "ro",
              "ru",
              "sa",
              "sg",
              "za",
              "se",
              "ch",
              "tw",
              "th",
              "tr",
              "uk",
              "uy",
              "ve",
              "vn"
            ],
            "type": "string",
            "description": "Which Indeed domain to search — and which domain the company pages are read from.",
            "default": "us"
          },
          "maxRows": {
            "title": "📦 Max job rows",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "How many JOB rows to collect. Review rows are counted separately and never eat this budget.",
            "default": 10
          },
          "radius": {
            "title": "📏 Distance from location",
            "enum": [
              "",
              "0",
              "5",
              "10",
              "15",
              "25",
              "35",
              "50",
              "100"
            ],
            "type": "string",
            "description": "Only applied when a location is set — it is ignored on a country-wide search.",
            "default": ""
          },
          "jobType": {
            "title": "💼 Employment type",
            "enum": [
              "",
              "fulltime",
              "parttime",
              "contract",
              "temporary",
              "internship",
              "volunteer",
              "permanent",
              "seasonal",
              "freelance"
            ],
            "type": "string",
            "description": "Full-time, part-time, contract and internship are filtered by Indeed itself. Temporary, permanent, seasonal and freelance are matched on the listing text instead.",
            "default": ""
          },
          "remote": {
            "title": "🏠 Work setup",
            "enum": [
              "",
              "remote",
              "hybrid"
            ],
            "type": "string",
            "description": "'Remote' is applied by Indeed; 'Hybrid' is matched on the listing's own text.",
            "default": ""
          },
          "level": {
            "title": "🎯 Seniority",
            "enum": [
              "",
              "entry_level",
              "mid_level",
              "senior_level"
            ],
            "type": "string",
            "description": "Matched on title/attributes/description. Indeed only exposes this reliably on the US site.",
            "default": ""
          },
          "fromDays": {
            "title": "📅 Posted within",
            "enum": [
              "0",
              "1",
              "3",
              "7",
              "14",
              "30"
            ],
            "type": "string",
            "description": "Only listings posted in the last N days. Indeed will not combine this with an employment-type filter server-side — when both are set, employment type falls back to a text match.",
            "default": "0"
          },
          "sort": {
            "title": "↕️ Listing order",
            "enum": [
              "",
              "relevance",
              "date"
            ],
            "type": "string",
            "description": "Order the job results by relevance or by posting date.",
            "default": "relevance"
          },
          "urls": {
            "title": "🔗 Indeed URLs",
            "type": "array",
            "description": "Paste Indeed search URLs (https://www.indeed.com/jobs?q=…&l=…) or company URLs (https://www.indeed.com/cmp/<company>). Each URL runs as its own search and its parameters (q, l, radius, fromage, jt, sort) win over the settings above.",
            "items": {
              "type": "string"
            }
          },
          "maxRowsPerUrl": {
            "title": "📄 Cap per URL",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Optional per-URL job cap, only meaningful with two or more URLs. Leave empty so 'Max job rows' is the single ceiling."
          },
          "maxJobsPerUrl": {
            "title": "📄 Cap per URL (alias)",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Same knob as 'Cap per URL', kept so either name works in an API call. If both are supplied, 'Cap per URL' wins."
          },
          "enableUniqueJobs": {
            "title": "🧹 Drop duplicate listings",
            "type": "boolean",
            "description": "Deduplicate job rows by Indeed job key across pages and URLs. Review rows are separately deduplicated per employer, so a second listing from the same company never re-emits its reviews.",
            "default": true
          },
          "includeSimilarJobs": {
            "title": "🧩 Include similar jobs",
            "type": "boolean",
            "description": "Accepted for compatibility with the original actor's input. It has no effect: Indeed's mobile endpoint does not return 'View similar jobs' placeholder cards.",
            "default": true
          },
          "proxyConfiguration": {
            "title": "🛡️ Proxy",
            "type": "object",
            "description": "Company pages sit behind Cloudflare, so a residential proxy is strongly recommended for the review side of the run. On block, the actor escalates automatically: direct → datacenter → residential."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}