Indeed Jobs Scraper
Under maintenancePricing
Pay per usage
Indeed Jobs Scraper
Under maintenanceScrape Indeed job listings: title, company, salary, description and more. Search by keywords, location and country, or start from Indeed URLs.
Indeed Jobs Scraper
Under maintenancePricing
Pay per usage
Scrape Indeed job listings: title, company, salary, description and more. Search by keywords, location and country, or start from Indeed URLs.
You can access the Indeed Jobs Scraper programmatically from your own applications by using the Apify API. You can also choose the language preference from below. To use the Apify API, you’ll need an Apify account and your API token, found in Integrations settings in Apify Console.
{ "openapi": "3.0.1", "info": { "version": "0.1", "x-build-id": "7I2AVCl6dKglhsSjc" }, "servers": [ { "url": "https://api.apify.com/v2" } ], "paths": { "/acts/osamih~indeed-scraper/run-sync-get-dataset-items": { "post": { "operationId": "run-sync-get-dataset-items-osamih-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/osamih~indeed-scraper/runs": { "post": { "operationId": "runs-sync-osamih-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/osamih~indeed-scraper/run-sync": { "post": { "operationId": "run-sync-osamih-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", "required": [ "country" ], "properties": { "position": { "title": "Search keywords", "type": "string", "description": "Job title or any combination of keywords — same as Indeed's <b>what</b> search box. Leave empty if you only use Start URLs." }, "location": { "title": "Location", "type": "string", "description": "City, state, zip code or locality — same as Indeed's <b>where</b> search box. Leave empty for a country-wide search." }, "country": { "title": "Country", "enum": [ "US", "GB", "CA", "AU", "NZ", "IE", "DE", "FR", "ES", "IT", "NL", "BE", "AT", "CH", "LU", "PT", "PL", "CZ", "HU", "RO", "GR", "SE", "NO", "DK", "FI", "UA", "TR", "IN", "SG", "MY", "PH", "ID", "TH", "VN", "JP", "KR", "HK", "TW", "PK", "AE", "SA", "QA", "KW", "BH", "OM", "IL", "EG", "MA", "ZA", "NG", "KE", "BR", "MX", "AR", "CL", "CO", "PE" ], "type": "string", "description": "Which Indeed country site to search. Determines the Indeed domain (e.g. <code>uk.indeed.com</code> for the United Kingdom).", "default": "US" }, "maxItemsPerSearch": { "title": "Max items per search", "minimum": 1, "type": "integer", "description": "Maximum number of jobs to save for each keyword search and each Start URL. Note that Indeed itself caps any single search at roughly 1,000 results — for deeper coverage split your search by location or date.", "default": 50 }, "datePosted": { "title": "Date posted", "enum": [ "any", "1", "3", "7", "14" ], "type": "string", "description": "Only return jobs posted within this window — Indeed's <b>Date posted</b> filter.", "default": "any" }, "jobType": { "title": "Job type", "enum": [ "any", "fulltime", "parttime", "contract", "temporary", "internship", "permanent", "apprenticeship", "seasonal", "commission", "subcontract" ], "type": "string", "description": "Filter by employment type — Indeed's <b>Job type</b> filter. Indeed supports only one job type per search. Types beyond the first five are only available on some country sites.", "default": "any" }, "experienceLevel": { "title": "Experience level", "enum": [ "any", "entry_level", "mid_level", "senior_level" ], "type": "string", "description": "Filter by required experience — Indeed's <b>Experience level</b> filter.", "default": "any" }, "minSalary": { "title": "Minimum pay", "type": "string", "description": "Only return jobs paying at least this amount — Indeed's <b>Pay</b> filter. Write it the way it appears on your Indeed site, e.g. <code>$60,000</code>, <code>£35,000</code> or <code>€45.000</code>. Indeed matches it against its own salary estimates, so jobs without pay data may be excluded." }, "remote": { "title": "Remote jobs only", "type": "boolean", "description": "Only return remote / work-from-home jobs. Best-effort — relies on Indeed's remote filter code, which can vary by country.", "default": false }, "radius": { "title": "Search radius", "minimum": 0, "maximum": 100, "type": "integer", "description": "Distance from the <b>Location</b> to include, in miles. Ignored when no location is set. Indeed snaps to its allowed steps (0, 5, 10, 15, 25, 50, 100)." }, "sortBy": { "title": "Sort by", "enum": [ "relevance", "date" ], "type": "string", "description": "Result ordering. <b>Relevance</b> is Indeed's default; <b>Date</b> returns the newest jobs first.", "default": "relevance" }, "startUrls": { "title": "Start URLs", "type": "array", "description": "Indeed URLs to scrape directly — search result URLs, company job listing URLs (<code>/cmp/…/jobs</code>) or single job URLs (<code>/viewjob?jk=…</code>). When set, they are scraped in addition to the keyword search (each URL gets its own <b>Max items</b> budget).", "items": { "type": "object", "required": [ "url" ], "properties": { "url": { "type": "string", "title": "URL of a web page", "format": "uri" } } } }, "parseCompanyDetails": { "title": "Scrape company details", "type": "boolean", "description": "Also visit the Indeed company page of each employer and attach a <code>companyInfo</code> object (rating, size, industry, HQ, description…). Each unique company page is fetched only once per run. Slower and uses more proxy traffic.", "default": false }, "saveOnlyUniqueItems": { "title": "Save only unique jobs", "type": "boolean", "description": "Deduplicate jobs by Indeed job key across all searches and Start URLs in this run.", "default": true }, "followApplyRedirects": { "title": "Resolve external apply links", "type": "boolean", "description": "Follow the redirects of Indeed's external apply link and output the final employer URL instead of the Indeed redirect. Adds one extra request per job.", "default": false }, "maxConcurrency": { "title": "Max concurrency", "minimum": 1, "maximum": 20, "type": "integer", "description": "How many pages are scraped in parallel. Higher is faster but increases proxy usage and the chance of blocking.", "default": 5 }, "proxyConfiguration": { "title": "Proxy configuration", "type": "object", "description": "Proxies to use. <b>Residential proxies are strongly recommended</b> — Indeed blocks datacenter IP addresses.", "default": { "useApifyProxy": true, "apifyProxyGroups": [ "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 } } } } } } } } }}OpenAPI is a standard for designing and describing RESTful APIs, allowing developers to define API structure, endpoints, and data formats in a machine-readable way. It simplifies API development, integration, and documentation.
OpenAPI is effective when used with AI agents and GPTs by standardizing how these systems interact with various APIs, for reliable integrations and efficient communication.
By defining machine-readable API specifications, OpenAPI allows AI models like GPTs to understand and use varied data sources, improving accuracy. This accelerates development, reduces errors, and provides context-aware responses, making OpenAPI a core component for AI applications.
You can download the OpenAPI definitions for Indeed Jobs Scraper from the options below:
If you’d like to learn more about how OpenAPI powers GPTs, read our blog post.
You can also check out our other API clients: