{
  "openapi": "3.0.1",
  "info": {
    "title": "Indeed Jobs MCP Server & API - 62 Countries",
    "description": "Indeed jobs for AI agents: an MCP server and live API that searches Indeed's 62 country sites by keyword, city, pay and experience level, and looks jobs up by key. Answers in seconds with title, company, yearly pay, full description, employer details and the apply link.",
    "version": "0.1",
    "x-build-id": "3LA84znxBtIX3VEJ2"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/akhil_rajesh~indeed-jobs-mcp-server/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-akhil_rajesh-indeed-jobs-mcp-server",
        "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/akhil_rajesh~indeed-jobs-mcp-server/runs": {
      "post": {
        "operationId": "runs-sync-akhil_rajesh-indeed-jobs-mcp-server",
        "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/akhil_rajesh~indeed-jobs-mcp-server/run-sync": {
      "post": {
        "operationId": "run-sync-akhil_rajesh-indeed-jobs-mcp-server",
        "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": {
          "searchQuery": {
            "title": "Job keyword",
            "type": "string",
            "description": "What to search for, e.g. 'software developer', 'registered nurse', 'warehouse associate'. Indeed needs a keyword for every search, and matches it as written, so use the language of the country you are searching."
          },
          "extraKeywords": {
            "title": "More keywords",
            "type": "array",
            "description": "Extra job keywords to search as well. Every keyword is searched in every location, and the results are combined and de-duplicated.",
            "items": {
              "type": "string"
            }
          },
          "country": {
            "title": "Country",
            "enum": [
              "ar",
              "au",
              "at",
              "bh",
              "be",
              "br",
              "ca",
              "cl",
              "cn",
              "co",
              "cr",
              "cz",
              "dk",
              "ec",
              "eg",
              "fi",
              "fr",
              "de",
              "gr",
              "hk",
              "hu",
              "in",
              "id",
              "ie",
              "il",
              "it",
              "jp",
              "kw",
              "lu",
              "my",
              "mx",
              "ma",
              "nl",
              "nz",
              "ng",
              "no",
              "om",
              "pk",
              "pa",
              "pe",
              "ph",
              "pl",
              "pt",
              "qa",
              "ro",
              "sa",
              "sg",
              "za",
              "kr",
              "es",
              "se",
              "ch",
              "tw",
              "th",
              "tr",
              "ua",
              "ae",
              "gb",
              "us",
              "uy",
              "ve",
              "vn",
              "both"
            ],
            "type": "string",
            "description": "Which Indeed site to search: any of Indeed's 62 country sites. Add more under More countries to search several in one run.",
            "default": "ca"
          },
          "extraCountries": {
            "title": "More countries",
            "uniqueItems": true,
            "type": "array",
            "description": "Extra Indeed sites to search as well. Every keyword and location is searched in each country you pick, except where a location clearly belongs to one of them — 'Toronto, ON' only goes to Canada, while a bare 'London' goes to every country selected.",
            "items": {
              "type": "string",
              "enum": [
                "ar",
                "au",
                "at",
                "bh",
                "be",
                "br",
                "ca",
                "cl",
                "cn",
                "co",
                "cr",
                "cz",
                "dk",
                "ec",
                "eg",
                "fi",
                "fr",
                "de",
                "gr",
                "hk",
                "hu",
                "in",
                "id",
                "ie",
                "il",
                "it",
                "jp",
                "kw",
                "lu",
                "my",
                "mx",
                "ma",
                "nl",
                "nz",
                "ng",
                "no",
                "om",
                "pk",
                "pa",
                "pe",
                "ph",
                "pl",
                "pt",
                "qa",
                "ro",
                "sa",
                "sg",
                "za",
                "kr",
                "es",
                "se",
                "ch",
                "tw",
                "th",
                "tr",
                "ua",
                "ae",
                "gb",
                "us",
                "uy",
                "ve",
                "vn"
              ],
              "enumTitles": [
                "Argentina",
                "Australia",
                "Austria",
                "Bahrain",
                "Belgium",
                "Brazil",
                "Canada",
                "Chile",
                "China",
                "Colombia",
                "Costa Rica",
                "Czech Republic",
                "Denmark",
                "Ecuador",
                "Egypt",
                "Finland",
                "France",
                "Germany",
                "Greece",
                "Hong Kong",
                "Hungary",
                "India",
                "Indonesia",
                "Ireland",
                "Israel",
                "Italy",
                "Japan",
                "Kuwait",
                "Luxembourg",
                "Malaysia",
                "Mexico",
                "Morocco",
                "Netherlands",
                "New Zealand",
                "Nigeria",
                "Norway",
                "Oman",
                "Pakistan",
                "Panama",
                "Peru",
                "Philippines",
                "Poland",
                "Portugal",
                "Qatar",
                "Romania",
                "Saudi Arabia",
                "Singapore",
                "South Africa",
                "South Korea",
                "Spain",
                "Sweden",
                "Switzerland",
                "Taiwan",
                "Thailand",
                "Turkey",
                "Ukraine",
                "United Arab Emirates",
                "United Kingdom",
                "United States",
                "Uruguay",
                "Venezuela",
                "Vietnam"
              ]
            }
          },
          "location": {
            "title": "Location",
            "type": "string",
            "description": "City, or a region such as a province, state, county or Bundesland — e.g. 'Toronto, ON', 'Austin, TX', 'Manchester', 'Sydney NSW', 'Mumbai, Maharashtra', 'München'. Write it the way the local Indeed site does. Indeed's search doesn't accept Canadian postal codes, so use the city instead. Leave it empty for the whole country, or name a region: either way the Actor searches it as a whole first and then goes city by city when Indeed cuts the search off at about 1,000 jobs."
          },
          "extraLocations": {
            "title": "More locations",
            "type": "array",
            "description": "Extra locations to search as well; every keyword is searched in every location. With Country set to Both, you can mix Canadian and US locations here, e.g. 'Vancouver, BC' and 'Seattle, WA'.",
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "Start URLs",
            "type": "array",
            "description": "Indeed pages to scrape directly, instead of or alongside keyword searches. Paste a search URL (https://ca.indeed.com/jobs?q=nurse&l=Toronto%2C+ON) with its filters, a company's jobs page (https://www.indeed.com/cmp/Apple/jobs), or a single job (https://ca.indeed.com/viewjob?jk=...). URLs from any of Indeed's 62 country sites work.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "jobKeys": {
            "title": "Jobs to look up",
            "type": "array",
            "description": "Look up specific jobs directly: paste Indeed job URLs, or the 16-character jobKey values from earlier results. Each job comes back with its current details and isExpired, so this is how you check which saved jobs are still open. Jobs Indeed no longer has are listed in the log and saved as JOB_KEYS_NOT_FOUND in the run's key-value store; you are not charged for them.",
            "items": {
              "type": "string"
            }
          },
          "onlyNewJobs": {
            "title": "Only jobs you haven't seen before",
            "type": "boolean",
            "description": "Skip jobs that earlier runs already delivered, and don't charge for them. Turn this on for a scheduled run: the first run collects everything, and each run after it returns only what is new, so you stop paying for the same listings every day. Jobs you ask for by key in 'Jobs to look up' are always returned, so you can still re-check saved jobs.",
            "default": false
          },
          "historyName": {
            "title": "History name",
            "type": "string",
            "description": "Which history 'Only jobs you haven't seen before' reads and writes. Runs sharing a name share their memory of delivered jobs, so use one name per monitoring job and a different name to start fresh. Jobs are forgotten after 45 days.",
            "default": "indeed-jobs-mcp-history"
          },
          "maxResults": {
            "title": "Max results",
            "minimum": 1,
            "maximum": 20000,
            "type": "integer",
            "description": "Stop after this many jobs, shared fairly between your searches. One search yields up to about 1,000 jobs; a country- or province-wide search carries on city by city beyond that, so this number decides how deep the run goes and what it costs.",
            "default": 100
          },
          "fullDescriptions": {
            "title": "Include full job descriptions",
            "type": "boolean",
            "description": "Recommended ON. Adds each job's complete description as plain text and as the original HTML. Turn it off for a lighter dataset; the price per job is the same either way.",
            "default": true
          },
          "searchRadius": {
            "title": "Search radius",
            "minimum": 0,
            "maximum": 200,
            "type": "integer",
            "description": "Distance around the location to include — miles in the United States and the UK, kilometres everywhere else. Defaults to 25, the same as Indeed's own search. Use 0 for the exact location only."
          },
          "datePosted": {
            "title": "Posted within",
            "enum": [
              "",
              "1",
              "3",
              "7",
              "14",
              "30"
            ],
            "type": "string",
            "description": "Only include jobs posted in this window. Both the job's posting date (datePosted) and the day Indeed listed it must fall inside, so older postings that Indeed lists again are left out. New listings normally appear within hours; if a short window comes back empty, widen it or try again later, because Indeed's search occasionally runs behind.",
            "default": ""
          },
          "jobType": {
            "title": "Job type",
            "enum": [
              "",
              "fulltime",
              "parttime",
              "contract",
              "temporary",
              "internship",
              "permanent",
              "casual",
              "seasonal"
            ],
            "type": "string",
            "description": "Only include jobs Indeed tags with this type.",
            "default": ""
          },
          "workArrangement": {
            "title": "Remote or hybrid",
            "enum": [
              "",
              "remote",
              "hybrid"
            ],
            "type": "string",
            "description": "Only include jobs Indeed tags as remote, or as hybrid work.",
            "default": ""
          },
          "experienceLevel": {
            "title": "Experience level",
            "enum": [
              "",
              "entry",
              "mid",
              "senior",
              "noExperience"
            ],
            "type": "string",
            "description": "Only jobs Indeed tags with this level. Entry, mid and senior level are tagged on Indeed's United States site only (elsewhere every level is returned, and the run says so); 'No experience needed' works in every country.",
            "default": ""
          },
          "sort": {
            "title": "Sort order",
            "enum": [
              "relevance",
              "date"
            ],
            "type": "string",
            "description": "Indeed's own ordering. When 'Posted within' is combined with a job type or remote filter, results always come newest first.",
            "default": "relevance"
          },
          "titleKeywords": {
            "title": "Title must contain",
            "type": "array",
            "description": "Keep only jobs whose title contains at least one of these words or phrases, as whole words, ignoring case and accents ('engineer' matches 'Software Engineer II' but not 'Engineering Manager'; end a word with * for any ending: 'engineer*').",
            "items": {
              "type": "string"
            }
          },
          "excludeTitleKeywords": {
            "title": "Title must not contain",
            "type": "array",
            "description": "Leave out jobs whose title contains any of these words or phrases ('senior', 'intern', 'sales').",
            "items": {
              "type": "string"
            }
          },
          "excludeCompanies": {
            "title": "Exclude companies",
            "type": "array",
            "description": "Leave out jobs from employers whose name contains any of these words (staffing agencies you don't want, your own company). Both the employer's Indeed company page name and the name the job was posted under are checked.",
            "items": {
              "type": "string"
            }
          },
          "minSalary": {
            "title": "Minimum yearly pay",
            "minimum": 0,
            "type": "integer",
            "description": "Leave out jobs whose pay tops out below this yearly amount, in the job's own currency. Hourly, daily, weekly and monthly pay is turned into a yearly figure (2,080 hours, 260 days, 52 weeks, 12 months), shown as salaryYearlyMin and salaryYearlyMax. Jobs that state no pay are kept unless 'Only jobs that show pay' is on."
          },
          "onlyWithSalary": {
            "title": "Only jobs that show pay",
            "type": "boolean",
            "description": "Leave out jobs without a stated or estimated pay range."
          },
          "applyType": {
            "title": "Apply type",
            "enum": [
              "",
              "easyApply",
              "external"
            ],
            "type": "string",
            "description": "Only jobs you can apply to on Indeed (Easy apply), or only jobs that send you to the employer's own site.",
            "default": ""
          },
          "oneJobPerCompany": {
            "title": "One job per company",
            "type": "boolean",
            "description": "Keep only the first job from each employer (by Indeed's employer key, else the name), for a list of hiring companies rather than of jobs."
          },
          "alertWebhookUrl": {
            "title": "Alert webhook URL",
            "type": "string",
            "description": "A Slack incoming webhook, a Discord channel webhook, a Microsoft Teams Workflows webhook, or any HTTPS endpoint that takes JSON (Zapier, Make, n8n). Up to 50 new jobs are posted per run, newest first. The URL is kept secret and masked in logs."
          },
          "telegramBotToken": {
            "title": "Telegram bot token",
            "type": "string",
            "description": "To post to Telegram: your bot's token from @BotFather (123456789:AAH...). Fill in the chat id too. The token is kept secret and masked in logs."
          },
          "telegramChatId": {
            "title": "Telegram chat id",
            "type": "string",
            "description": "The chat the bot posts to: a public channel or group (@mychannel), or a chat id (-1001234567890). Add the bot to the group, or to the channel as an admin that can post."
          },
          "proxy": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Indeed does not accept connections from Apify's servers, so every run goes through Apify Proxy — it is enabled automatically even if you leave this off. The default datacenter proxy is all this Actor needs; set this only if you want specific proxy groups, a country or your own proxies. Residential and other groups billed per GB or per request aren't used: the run uses the datacenter proxy instead and says so."
          },
          "debug": {
            "title": "Debug mode",
            "type": "boolean",
            "description": "Verbose logging for troubleshooting.",
            "default": false
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}