{
  "openapi": "3.0.1",
  "info": {
    "title": "Indeed Scraper — Indeed Jobs API with Salaries",
    "description": "Scrape Indeed jobs in 22 countries by keyword, location or Indeed URL: title, company, rating, size, salary parsed to min and max, job type, remote flag, posting date, full description and apply link. No login, proxy included. Export CSV, JSON or Excel.",
    "version": "0.3",
    "x-build-id": "OE8mCy1IuzxmyDas4"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/glasswing~indeed-jobs-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-glasswing-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/glasswing~indeed-jobs-scraper/runs": {
      "post": {
        "operationId": "runs-sync-glasswing-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/glasswing~indeed-jobs-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-glasswing-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",
        "properties": {
          "keywords": {
            "title": "Keywords",
            "type": "array",
            "description": "Job titles or skills to search, one per line, as you would type them into Indeed's 'What' box (for example `nurse`, `python developer`). Each line is one search. The example `software engineer` is skipped when you give your own Indeed URLs.",
            "default": [
              "software engineer"
            ],
            "items": {
              "type": "string"
            }
          },
          "location": {
            "title": "Location",
            "type": "string",
            "description": "City, state, region or postcode, as you would type it into Indeed's 'Where' box (for example `New York, NY`, `London`, `Berlin`, `Remote`). Leave empty to search the whole country."
          },
          "country": {
            "title": "Country (Indeed site)",
            "enum": [
              "us",
              "uk",
              "ca",
              "au",
              "de",
              "fr",
              "in",
              "nl",
              "ie",
              "es",
              "it",
              "ch",
              "at",
              "be",
              "pl",
              "mx",
              "br",
              "sg",
              "nz",
              "ae",
              "za",
              "jp"
            ],
            "type": "string",
            "description": "Which Indeed country site to search. Location must be in this country.",
            "default": "us"
          },
          "radius": {
            "title": "Radius",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "Distance around the location: miles on the US and UK sites, kilometres elsewhere. Default 25."
          },
          "datePosted": {
            "title": "Date posted",
            "enum": [
              "any",
              "1",
              "3",
              "7",
              "14"
            ],
            "type": "string",
            "description": "Only jobs first posted on Indeed within this many days.",
            "default": "any"
          },
          "jobType": {
            "title": "Job type",
            "enum": [
              "any",
              "fulltime",
              "parttime",
              "contract",
              "temporary",
              "internship",
              "permanent"
            ],
            "type": "string",
            "description": "Only jobs Indeed tags with this job type.",
            "default": "any"
          },
          "remote": {
            "title": "Remote / hybrid",
            "enum": [
              "any",
              "remote",
              "hybrid"
            ],
            "type": "string",
            "description": "Only remote jobs, or only hybrid jobs, as tagged by Indeed.",
            "default": "any"
          },
          "experienceLevel": {
            "title": "Experience level",
            "enum": [
              "any",
              "entry",
              "mid",
              "senior"
            ],
            "type": "string",
            "description": "Only jobs Indeed tags with this experience level (`Entry level`, `Mid-level`, `Senior level`). Many postings carry no level tag; they are skipped when a level is chosen. Each row also carries `experienceLevel` when Indeed gives one.",
            "default": "any"
          },
          "salaryMin": {
            "title": "Minimum salary (per year)",
            "minimum": 0,
            "type": "integer",
            "description": "Only jobs whose pay reaches this yearly amount, in the Indeed site's own currency (USD on indeed.com, GBP on the UK site, EUR in Germany...). Hourly, daily, weekly and monthly pay is converted to a year (hour x 2,080, day x 260, week x 52, month x 12) and the top of the range counts; Indeed's own salary estimate counts too. Jobs without any salary are skipped. A salary search reads about 3 x its share of maxItems (at least 100 jobs) to find matches. Leave empty for no salary filter."
          },
          "excludeAgencies": {
            "title": "Exclude staffing and recruitment agencies",
            "type": "boolean",
            "description": "Skip jobs posted by staffing, temp or recruitment agencies, so only direct employers remain. A job counts as an agency job when its company industry is staffing or recruiting, its company name is an agency name (words such as Staffing, Recruitment or Personnel, or large agencies such as Robert Half, Randstad, Adecco, Aerotek, Hays), or its description says so (\"Our client is...\", \"on behalf of our client\", \"we are a staffing agency\", \"Personaldienstleister\", \"Arbeitnehmerüberlassung\"). Skipped jobs are free and counted in the run's status message. It is a heuristic: a small agency that never says it is one can slip through.",
            "default": false
          },
          "sort": {
            "title": "Sort by",
            "enum": [
              "relevance",
              "date"
            ],
            "type": "string",
            "description": "`Relevance` keeps Indeed's own order. `Date` returns the newest jobs first: Indeed's API ignores a date sort, so the Actor reads a pool of up to 3 x each search's share of maxItems (at least 100, at most 1,000 jobs) in relevance order and returns the newest of them. Combine with `Date posted` to cover only recent jobs.",
            "default": "relevance"
          },
          "maxItems": {
            "title": "Maximum jobs",
            "minimum": 1,
            "type": "integer",
            "description": "Stop after this many jobs in total. With several keywords or URLs it is split evenly between them. Each job saved with status `ok` is one billable result.",
            "default": 20
          },
          "includeDescriptionHtml": {
            "title": "Include description HTML",
            "type": "boolean",
            "description": "Also save the job description as HTML (`descriptionHtml`). The plain-text `description` is always included.",
            "default": false
          },
          "dedupeAcrossSearches": {
            "title": "Remove duplicates across searches",
            "type": "boolean",
            "description": "With several keywords or search URLs, a job that an earlier search of the same run already returned is skipped (free) instead of appearing twice. The skip does not use up that search's share of maxItems.",
            "default": true
          },
          "onlyNewSinceLastRun": {
            "title": "Only new jobs since the last run",
            "type": "boolean",
            "description": "For scheduled runs: return (and bill) only jobs no earlier run with this option delivered. The job keys are remembered in a named key-value store on your own account (see the next field). The first run returns everything. Filtered searches read up to about 3 x maxItems jobs (at least 100) to find new ones, so combine with `Date posted` (for example the last 24 hours on a daily schedule).",
            "default": false
          },
          "seenJobsStoreName": {
            "title": "Memory store name",
            "type": "string",
            "description": "Name of the key-value store that remembers delivered jobs for `Only new jobs since the last run` (a-z, 0-9 and dashes). Use a different name for each monitor that must keep its own memory. Default `indeed-jobs-seen`."
          },
          "startUrls": {
            "title": "Indeed URLs (optional)",
            "uniqueItems": true,
            "type": "array",
            "description": "Indeed search result URLs (for example `https://www.indeed.com/jobs?q=nurse&l=Chicago`) or job URLs (`https://www.indeed.com/viewjob?jk=...`), or bare 16-character job keys. Search URLs keep their own keyword, location and filters. Clear the example if you only want your keywords.",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}