Indeed Jobs API | Search Listings, Salaries, Descriptions avatar

Indeed Jobs API | Search Listings, Salaries, Descriptions

Pricing

from $3.43 / 1,000 job returneds

Go to Apify Store
Indeed Jobs API | Search Listings, Salaries, Descriptions

Indeed Jobs API | Search Listings, Salaries, Descriptions

Indeed job listings as clean, structured JSON. Search by keyword and location on any Indeed country site, list every job on a company page, or fetch exact job URLs. Get title, company, pay, type, benefits, apply link, and the full description as Markdown, text, or HTML. MCP-ready.

Pricing

from $3.43 / 1,000 job returneds

Rating

0.0

(0)

Developer

John

John

Maintained by Community

Actor stats

1

Bookmarked

2

Total users

1

Monthly active users

20 hours ago

Last modified

Share

Indeed API for Job Listings, Salaries and Descriptions

An indeed api for live Indeed job listings as clean, structured JSON. Search by keyword and location, collect jobs from a search URL you already hold, or list every role on a company jobs page. Every row includes structured pay, listing flags, and the full description as Markdown, plain text, or HTML. Not affiliated with, endorsed by, or connected to Indeed.

What this API returns

FieldWhat it is
jobTitle, companyNameThe role and who is hiring
location, city, state, postalCode, countryWhere the job is
isRemote, workModelRemote or hybrid, as the listing states it
salaryMin, salaryMax, salaryPeriod, salaryCurrency, salaryIsEstimatedStructured pay range, plus salaryText exactly as written
jobType, benefits, shiftScheduleEmployment type and what the posting promises
isEasyApply, isSponsored, isUrgentlyHiring, isHiringMultiple, isNewListing flags for filtering and prioritising
companyRating, companyReviewsCount, companyLogo, companyUrlEmployer reputation and pages
companyIndustry, companySize, companyRevenue, companyHeadquarters, companyDescriptionOptional company details (see below)
datePosted, datePostedTextISO timestamp plus the human form ("5 days ago")
applyUrl, jobUrlDirect apply link and the canonical posting
descriptionMarkdown / descriptionText / descriptionHtmlThe full description, your format
summaryOne-line plain-language digest, handy for AI agents

Use cases

  • Recruiters benchmarking pay and competition for a role in a specific market (salary api depth on every row)
  • Job seekers and career tools watching new postings for a role and location, sorted by date
  • Market researchers measuring hiring volume by employer, title, region or work model
  • Sales teams spotting companies that are actively hiring as a growth signal (job board api style watch on a company page)
  • AI agents that need job data as structured, readable Markdown

Indeed API as a jobs API: listings as structured JSON

This Actor is a jobs api: one call returns one flat row per job, ready for CSV, Sheets, a CRM, or an agent. You pay per job returned. Empty runs and failed inputs are free. There is no start fee and no minimum charge.

Job Search API: keyword, location and filters

Job search api mode (mode=search) is the default. Pass keywords plus an optional location, then filter with job type, remote or hybrid, experience level, date posted, sort by newest, easy apply, a yearly pay floor (minPay), and a location radius. Set country to pick which Indeed country site to read (US, GB, CA, AU, IN, DE, FR and about 55 more).

Job Posting API: collect from URLs you already hold

Job posting api mode (mode=url) takes jobUrls: Indeed search-results pages (filters kept) or individual viewjob links. Prefer a fresh search-results URL for demos; individual postings expire. mode=company takes companyJobUrls such as https://www.indeed.com/cmp/<slug>/jobs and lists every open role on that page.

Input parameters

ParameterTypeRequiredDefaultDescription
modestring enumyessearchsearch, url, or company
keywordsstring listno-Search keywords (search mode). Up to 5 per run.
locationstringno-City, region, zip, or Remote (search mode).
countrystringnoUSTwo-letter Indeed country code.
domainstringno-Optional host override (www.indeed.com, uk.indeed.com, ...).
datePostedstring enumnoanyLast 24 hours, 3 / 7 / 14 days.
jobTypestring listno-fulltime, parttime, contract, temporary, internship, permanent, new_grad, commission.
remotestring enumnoanyany, remote, or hybrid.
experienceLevelstring enumnoanyentry, mid, or senior.
sortBystring enumnorelevancerelevance or date (newest first).
easyApplyOnlybooleannofalseOnly Easy Apply postings.
minPayintegerno-Yearly pay floor; other periods converted.
locationRadiusMilesintegernosite default0 to 100 miles.
jobUrlsstring listno-Job or search URLs (url mode). Up to 100.
companyJobUrlsstring listno-Company jobs page URLs (company mode). Up to 10.
maxResultsPerInputintegerno50Cap per keyword, search URL, or company page (1 to 1000).
uniqueJobsOnlybooleannotrueDedupe jobs within a run.
includeCompanyDetailsbooleannofalseOptional add-on for employer industry, size, revenue, HQ, and profile text. Charged once per distinct employer when details are found. Leave off unless the add-on is enabled for your account.
descriptionFormatstring enumnomarkdownmarkdown, text, html, or all.

Example output

{
"result_type": "job",
"jobId": "c5f86dd00cb355b5",
"jobTitle": "Junior Data Analyst",
"companyName": "Anovaeon, LLC",
"companyUrl": "https://www.indeed.com/cmp/Anovaeon%2C-LLC-1",
"companyRating": 5,
"companyReviewsCount": 2,
"location": "Remote",
"city": "Remote",
"country": "US",
"domain": "www.indeed.com",
"jobUrl": "https://www.indeed.com/viewjob?jk=c5f86dd00cb355b5",
"applyUrl": "https://www.indeed.com/applystart?jk=c5f86dd00cb355b5&from=jobsearch",
"datePosted": "2026-08-26T19:46:53.000Z",
"datePostedText": "12 days ago",
"jobType": "Full-time",
"salaryText": "$60,000 - $65,000 a year",
"salaryMin": 60000,
"salaryMax": 65000,
"salaryPeriod": "YEARLY",
"salaryCurrency": "USD",
"salaryIsEstimated": false,
"isRemote": true,
"workModel": "Remote",
"shiftSchedule": ["Holidays", "Weekends as needed"],
"isExpired": false,
"isSponsored": false,
"isEasyApply": true,
"isUrgentlyHiring": false,
"isHiringMultiple": false,
"isNew": false,
"descriptionMarkdown": "The Junior Data Analyst supports the collection, cleaning, analysis, and reporting of business data ...",
"searchKeyword": "data analyst",
"searchLocation": "Remote",
"sourceInput": "data analyst",
"summary": "Junior Data Analyst at Anovaeon, LLC in Remote. Pay: $60,000 - $65,000 a year. Full-time. Remote. Posted 12 days ago."
}

Pricing

You pay per job returned, and nothing else: no start fee and no minimum. A run that returns no jobs is never charged, and rows that report a failed input, such as a posting that has been taken down, are never charged either.

Company details are an optional add-on, charged once per distinct employer whose details were added, only when includeCompanyDetails is on and details were found. See the Pricing tab for the current rates.

Speed and result limits

Results come straight from the live site, so nothing is served from a stale cache. Keywords run in parallel, and a typical 50-job search finishes in about a minute; a few hundred jobs take a few minutes. If you ask for more than can finish in the time available, the run trims itself and says so in the log rather than being cut off part way.

How to get started

  1. Open the Actor on Apify
  2. Pick a mode, fill in the keywords or URLs, choose your filters, and click Start
  3. Grab the results as JSON, CSV, or Excel, or via the API

View on Apify Store

🔌 Use this API from Claude (MCP)

This Actor is MCP-ready, so Claude Code (free trial) and Claude Cowork (free trial) and other AI agents can call it directly. See the Apify MCP docs.

Add this MCP server URL:

https://mcp.apify.com/?tools=actors,docs,johnvc/indeed-jobs-api

Then just ask: "Find remote Python developer jobs posted in the last week, sorted by date, with salary."

💸 Pay per run with crypto (x402)

Prefer to pay per call in USDC instead of holding an account balance? This Actor is reachable over the x402 payment standard, which lets an agent settle each run on-chain with no subscription.

See the Apify x402 documentation for setup.

Output views

The dataset ships with four ready-made views, so you can jump straight to what you need:

  • Job listings - title, company, location, remote flag, pay, type, posted date, easy apply
  • Pay and benefits - structured pay range and period next to type, remote flag and benefits
  • Hiring employers - rating, review count, industry, size, revenue, headquarters and website
  • Full descriptions - the complete description with qualifications, benefits and apply link

🔌 Integrations: Automate Job Listing Monitoring

A single run answers one question. The real value comes from running it repeatedly: watch a role and location for new postings, track a company's open jobs week over week, and pipe fresh rows into Sheets, Slack, or your own database. Wire it through Apify platform integrations without running your own servers.

Tasks + Schedules: register a regular monitoring run

The core pattern is one saved task per search or company you care about, one schedule across all of them.

  1. Create a task. Save the Actor with a fixed input, for example remote "software engineer" jobs sorted by date, or a specific companyJobUrls page. Click Create empty task on the Actor page, fill the input, and save.
  2. Attach a schedule. From the Actor's Actions, then Schedule, or from Console Schedules, add a cron: 0 7 * * * (daily 7 AM), 0 */6 * * * (every 6 hours), or 0 9 * * 1 (Mondays at 9 AM). One schedule can trigger many tasks.
  3. Review the history. Each run appends rows to the task dataset. Export JSON, CSV, or Excel when you need a snapshot.

Keep maxResultsPerInput modest on shared proxy capacity (for example 25 for demos, 1 for keep-alive).

n8n

Use the Apify n8n integration to run this Actor from a workflow. A typical alert flow: Schedule Trigger → Apify Run Actor and get dataset → Filter (new or matching roles) → Slack or email. A dedicated community node may land later; until then the official Apify node is the supported path.

Make and Zapier

Make and Zapier both support Apify Run Actor and Get Dataset Items. Same pattern: schedule, run, filter, notify or store.

Supabase: store listing history

Accumulate job rows in Supabase (or any Postgres):

  • No code: n8n Apify node → Supabase node, insert one row per job.
  • Python: run the Actor and bulk-insert flat fields.
from apify_client import ApifyClient
from supabase import create_client
apify = ApifyClient("YOUR_APIFY_TOKEN")
supabase = create_client("https://YOUR_PROJECT.supabase.co", "YOUR_SERVICE_ROLE_KEY")
run = apify.actor("johnvc/indeed-jobs-api").call(
run_input={
"mode": "search",
"keywords": ["software engineer"],
"location": "Austin, TX",
"maxResultsPerInput": 25,
"descriptionFormat": "markdown",
}
)
rows = []
for item in apify.dataset(run["defaultDatasetId"]).iterate_items():
if item.get("result_type") != "job":
continue
rows.append(
{
"job_title": item.get("jobTitle"),
"company_name": item.get("companyName"),
"location": item.get("location"),
"salary_min": item.get("salaryMin"),
"salary_max": item.get("salaryMax"),
"apply_url": item.get("applyUrl"),
"date_posted": item.get("datePosted"),
}
)
if rows:
supabase.table("indeed_jobs").insert(rows).execute()

MCP and AI agents

Apify exposes this Actor on the Apify MCP server, so Claude Code (free trial), Cursor, and other MCP clients can ask for live jobs and get structured rows back. See the dedicated MCP section above for the server URL.

Webhooks

Attach an Apify webhook to ACTOR.RUN.SUCCEEDED when a scheduled run finishes. Your endpoint receives the run details (including the dataset ID) and can push to Sheets, Slack, or any custom handler.

❓ FAQ

Does Indeed have an API?

Indeed's own partner API is limited to approved businesses. This Actor is a separate indeed api on Apify that reads public Indeed listing pages and returns structured JSON. It is not Indeed's official product and is not affiliated with Indeed.

How do you use the Indeed API without a partner key?

Open johnvc/indeed-jobs-api, pick search, url, or company, set filters, and run. No Indeed partner program or API key is required. You need an Apify account to run Actors.

Is the Indeed API free?

This Actor is pay-per-result on Apify's free tier and paid plans. Empty runs cost nothing. See the Pricing tab for current event rates. Relative phrasing only: there is no start fee and no minimum charge.

How do you get job listings in JSON?

Every successful run writes one dataset row per job. Export as JSON, CSV, or Excel from the dataset, or fetch via the Apify API.

How do you get salary data from job postings?

Each row includes salaryText as written plus structured salaryMin, salaryMax, salaryPeriod, and salaryCurrency, with salaryIsEstimated when the range is an estimate rather than the employer's figure. That is the salary api surface on this Actor.

Does the Indeed Jobs API return the full job description?

Yes. Every job carries the complete description as Markdown by default, or as plain text, the original HTML, or all three via descriptionFormat.

Which countries are supported?

About 60 Indeed country sites, selected with the two-letter country code: US, GB, CA, AU, IN, DE, FR, NL, ES, IT, BR, MX, JP, SG and more.

Can I filter by job type, remote work or date?

Yes. Search mode supports job type, remote or hybrid, experience level, date posted, sort by newest, easy apply, a yearly pay floor and a location radius.

Can I pass my own Indeed search URL?

Yes. URL mode accepts search-results URLs with your own filters, as well as individual job posting URLs. Prefer search-results URLs for stable demos; viewjob links expire.

Can I schedule this Indeed Jobs API?

Yes. Save a task with your input, then attach an Apify schedule from Actions → Schedule. Useful crons: 0 7 * * * (daily 7 AM), 0 */6 * * * (every 6 hours), 0 9 * * 1 (Mondays at 9 AM). One schedule can trigger many tasks. See Integrations: Automate Job Listing Monitoring for the full monitoring recipe.

Should I use an API or a Web Scraper?

An official partner API is often gated, quota-bound, and missing fields you need. A web scraper or this Actor returns the same public listing data as structured JSON you can call like an API, without a partner approval process. This Actor leads with an API identity and MCP surface while still scraping public pages.

Can I integrate this Indeed Jobs Scraper with other apps?

Yes. Connect through Apify integrations: Make, Zapier, Slack, n8n, and webhooks on ACTOR.RUN.SUCCEEDED. Full recipes are in the Integrations section above.

Can I use this Actor with the Apify API?

Yes. Run, schedule, and fetch datasets through the Apify API and the apify-client packages for Python and Node.js. Open the Actor's API tab for generated snippets.

Can I use this Actor through an MCP Server?

Yes. Add it as a tool via the Apify MCP server with https://mcp.apify.com/?tools=actors,docs,johnvc/indeed-jobs-api. Works with Claude Code (free trial), Cursor, and other MCP clients. See the MCP docs.

How else can I collect job data?

Related Actors in this portfolio:

For a thinner Indeed-only keyword scraper, see cheap_scraper/indeed-job-scraper.

Is the data fresh?

Every run reads the live site at request time; nothing is cached.

🌐 About Alpha OSINT

This Actor is part of Alpha OSINT, a catalogue of open source intelligence and web data tools. Browse the full set of data APIs there.

Last Updated: 2026.09.10