Jobs API — Indeed, LinkedIn & career sites avatar

Jobs API — Indeed, LinkedIn & career sites

Pricing

from $2.10 / 1,000 jobs

Go to Apify Store
Jobs API — Indeed, LinkedIn & career sites

Jobs API — Indeed, LinkedIn & career sites

Job listings from Indeed (60+ countries), LinkedIn and company career sites (Greenhouse, Lever, Ashby, Workable, SmartRecruiters) in one schema: salary as numbers, remote flag, full description, apply link, company website, recruiter emails. No login, no API key.

Pricing

from $2.10 / 1,000 jobs

Rating

5.0

(2)

Developer

Matvey

Matvey

Maintained by Community

Actor stats

0

Bookmarked

20

Total users

12

Monthly active users

a day ago

Last modified

Share

Jobs API returns job listings from Indeed (60+ country sites), LinkedIn and company career sites (Greenhouse, Lever, Ashby, Workable, SmartRecruiters) as one clean table. Every job carries the same fields whatever the source: title, company, company website, industry and size, location split into city, region and country, remote / hybrid / on-site, employment type, salary as numbers with currency and period, posting date, the full description, the apply link, skills, and the recruiter emails and phone numbers found in the posting. No login, no API key, no browser: 100 Indeed jobs with full descriptions are one request; 1,000 jobs take a couple of minutes.

One run of Jobs API: Indeed and LinkedIn postings in the same columns, salary parsed into numbers.

Type job titles and a location, pick the boards and filters, and click Start. Export as JSON, CSV or Excel, run it on a schedule for fresh postings, or call it from the API and AI agents.

What is Jobs API?

It is a job postings API for people who need listings as data: job boards and aggregators, recruiters and sourcing teams, lead generation (companies that are hiring for X are buying Y), salary and labour-market research, alerts for job seekers, and AI agents asked "who is hiring Python developers in Berlin this week". Indeed and LinkedIn have no public job-search API; licensed feeds cost hundreds of dollars a month. This Actor reads the same data the boards' own apps and pages use.

What makes it different from a single-board scraper:

  • Three kinds of source, one schema. Compare Indeed, LinkedIn and direct career-site postings in the same columns, deduplicated per source.
  • Numbers, not strings. salaryMin, salaryMax, salaryCurrency, salaryPeriod are parsed from every source; postedAt is ISO 8601; isRemote, workplaceType, employmentType are normalised.
  • Contacts built in. Emails and phones from the posting text, the company domain from its website or apply link, and — on request — general contacts from the company website. That is what turns a job list into a lead list.
  • Company data on Indeed rows: website, industry, employee count, revenue band, description and logo, straight from the posting.

What data does it return?

FieldExample
source, id, url, applyUrlindeed · 2e6243f5ef576267 · https://www.indeed.com/viewjob?jk=… · https://careers.spglobal.com/jobs/331257
title, company, companyUrl, companyLogoSoftware Engineering Lead · S&P Global · https://www.indeed.com/cmp/S&P-Global · …
companyWebsite, companyDomain, companyIndustry, companySize, companyRevenue, companyDescription, companyAddresshttps://www.spglobal.com/en/ · spglobal.com · Information Technology · 10,000+ · more than $10B (USD) · … · New York, NY
location, city, region, country, countryCode, postalCodeNew York, NY · New York · NY · United States · US · 10041
isRemote, workplaceType, employmentType, jobTypes, schedulefalse · hybrid · fulltime · ["fulltime"] · Monday to Friday
salaryMin, salaryMax, salaryCurrency, salaryPeriod, salaryText, salaryEstimated93000 · 150000 · USD · year · "$93,000 - $150,000 a year" · false
postedAt, listedAt, expired2026-09-06T05:00:00.000Z · 2026-09-06T02:39:44.587Z · false
description, descriptionHtmlfull text and HTML
skills, attributes["AI models", "Spring Boot", "Kotlin"] · every Indeed tag
LinkedIn: seniority, jobFunction, industries, applicants, applicantsText, benefitsMid-Senior level · Information Technology · Software Development · null · "Be among the first 25 applicants"
Career sites: board, department, experienceLevelstripe · Engineering · Senior
emails, phones["careers@coreweave.com"] · ["+14155552671"]
companyEmails, companyPhones, companySocials (website look-up)["info@acme.com"] · ["+1…"] · {linkedin, facebook, x…}
query, queryLocation, scrapedAtpython developer · New York, NY · …

How much does it cost?

Pricing is pay per job row; there is no browser, so platform usage is close to zero and error rows are free.

RowPrice
Job (any source)$0.003 — 1,000 jobs for $3
Job that came with an email address+$0.002

From 2 October 2026 the prices are $0.006 per job and +$0.01 for a job that came with an email address.

A week of "python developer" postings in New York on Indeed and LinkedIn is roughly 300 rows: about $0.90 today, about $1.80 from 2 October 2026 (plus the email add-on on rows that have one). Larger monthly plans get 10–30 % off.

Bulk export

This Actor is built for bulk jobs — put hundreds of inputs into one run, or call it from the API on a schedule. There is no fee per run, no fee per page and no proxy charge: you pay for the rows you keep, and error rows are free, so a 50,000-row job costs exactly 50,000 × the row price with nothing added on top.

How to get job listings

  1. Enter Job titles or keywords (one per line) and a Location; pick the Indeed country if it is not the US.
  2. Choose Sources and, if you want direct postings, add Career-site boards (greenhouse:stripe, https://jobs.lever.co/figma).
  3. Set the filters: posted within, remote / hybrid / on-site, job types, experience, radius, sort.
  4. Keep Extract emails and phones on; switch on Look up contacts on the company website for a lead list.
  5. Click Start; export, or read the dataset through the API.

⬇️ Input

Jobs API input form: the fields a buyer fills in before pressing Start

{
"keywords": ["python developer", "data engineer"],
"location": "New York, NY",
"country": "us",
"sources": ["indeed", "linkedin"],
"maxJobsPerQuery": 200,
"datePosted": "week",
"remote": "any",
"includeContacts": true
}

Remote jobs across a country, newest first

{ "keywords": ["customer success manager"], "location": "United Kingdom", "country": "uk", "remote": "remote", "sortBy": "date", "datePosted": "3days" }

Company career sites only

{ "sources": [], "boards": ["greenhouse:stripe", "ashby:openai", "https://jobs.lever.co/figma"], "boardKeywords": ["engineer", "designer"] }

A lead list of companies hiring, with contacts

{ "keywords": ["salesforce administrator"], "location": "Texas", "sources": ["indeed"], "maxJobsPerQuery": 300, "enrichCompanyContacts": true, "maxCompaniesToEnrich": 100 }

Search URLs from the browser

{ "startUrls": ["https://www.indeed.com/jobs?q=nurse&l=Chicago%2C+IL", "https://www.linkedin.com/jobs/search?keywords=nurse&location=Chicago"] }

⬆️ Output

{
"type": "job",
"source": "indeed",
"id": "2e6243f5ef576267",
"url": "https://www.indeed.com/viewjob?jk=2e6243f5ef576267",
"applyUrl": "https://careers.spglobal.com/jobs/331257?lang=en-us",
"title": "Software Engineering Lead",
"company": "S&P Global",
"companyWebsite": "https://www.spglobal.com/en/",
"companyDomain": "spglobal.com",
"companySize": "10,000+",
"companyRevenue": "more than $10B (USD)",
"location": "New York, NY",
"city": "New York",
"region": "NY",
"country": "United States",
"countryCode": "US",
"isRemote": false,
"workplaceType": "hybrid",
"employmentType": "fulltime",
"jobTypes": ["fulltime"],
"salaryMin": 93000,
"salaryMax": 150000,
"salaryCurrency": "USD",
"salaryPeriod": "year",
"postedAt": "2026-09-06T05:00:00.000Z",
"description": "About the Role: S&P Dow Jones Indices is seeking a highly experienced…",
"skills": ["AI models", "Spring Boot", "Agile product development", "Kotlin"],
"emails": ["eeo.compliance@spglobal.com"],
"phones": [],
"query": "python developer",
"queryLocation": "New York, NY",
"scrapedAt": "2026-09-06T10:38:00.000Z"
}

A search or board that cannot be read arrives as a type: "error" row with the reason, never as a silently empty run.

Use cases

Job boards and aggregators

Feed a niche board (nursing jobs in Texas, remote React jobs) from three sources with one schedule; dedupe on source + id.

Recruiting and sourcing

Find who is hiring for a role, in which city, with which salary band — and the recruiter's email when it is in the posting.

Lead generation

Companies hiring "Salesforce administrator" need Salesforce consultants. Run the keyword, switch on the website look-up, and export company, companyDomain, companyEmails.

Salary and market research

salaryMin/salaryMax with period and currency across thousands of postings; skills for demand analysis; postedAt for time series.

AI agents

An agent asked "find me remote data-engineer jobs posted this week paying over $150k" gets typed rows it can filter.

Integrations and job postings API

Run it from the Apify API, the JavaScript and Python clients, a schedule, or a webhook, and push results to Google Sheets, Airtable, Slack, a CRM or a database through n8n, Make or Zapier. The Apify MCP server exposes it to Claude, ChatGPT and other agents as a tool.

🤖 For AI Agents & LLM Apps

Compact reference for agents calling this Actor through the Apify MCP server or the Apify API (lergassy/jobs-api).

Purpose: job listings from Indeed, LinkedIn and company career sites for a job title and location, with salary numbers, remote flag, description, apply link, company website and recruiter contacts.

Minimal input:

{ "keywords": ["python developer"], "location": "Berlin", "country": "de", "maxJobsPerQuery": 50 }

Output: rows with type: "job" — source, title, company, companyWebsite, companyDomain, location, city, region, countryCode, isRemote, workplaceType, employmentType, salaryMin, salaryMax, salaryCurrency, salaryPeriod, postedAt, description, url, applyUrl, skills, emails, phones; LinkedIn adds seniority, jobFunction, industries, applicants; career sites add board, department.

Behaviors an agent should know:

  • country selects the Indeed site (us, uk, ca, au, de, fr, in…); location is free text as on the board. LinkedIn ignores country.
  • If a location turns out to be in another country than country ("location": "Berlin" with the default "country": "us"), the search is repeated on the right Indeed site and the run says so in its status message. Setting country yourself skips the extra request.
  • A run that finds nothing never returns an empty dataset: it returns one type: "error" row saying what was searched and what to change.
  • maxJobsPerQuery is per keyword per source. Indeed returns up to 100 per request with full descriptions; LinkedIn returns 25 per page and one request per job for descriptions (includeDescription).
  • Salary fields are null when the posting has none; salaryEstimated: true means Indeed's estimate rather than the employer's number.
  • postedAt is the board's posting date (Indeed also gives listedAt, when it appeared on Indeed). datePosted filters at the source; postedAfter filters rows.
  • emails/phones come from the posting text; companyEmails/companyPhones appear only with enrichCompanyContacts. They are public business contacts found on the posting or the company site.
  • Career-site boards need the ATS slug (greenhouse:stripe) or board URL; unknown slugs return an error row.
  • A datacenter proxy is on by default and is enough; a source that rate-limits returns an error row with blocked: true.

❓ FAQ

Does it need an Indeed or LinkedIn account?

No. Indeed is read through the public endpoint its mobile app uses; LinkedIn through its public guest job pages; career sites through their public board APIs.

How many jobs can I get?

Indeed: up to the number the site has for the query (thousands, 100 per request). LinkedIn: up to 1,000 per search, the same ceiling as the site. Career sites: the whole board.

Which countries?

Indeed: 60+ country sites via country. LinkedIn: worldwide by location. Career sites: wherever the company posts.

Are the emails verified?

They are extracted from public postings and websites, not guessed. Pair with the Email & Phone Verifier to check deliverability before a campaign.

The Actor reads public job postings without logging in and returns factual listing data and public business contacts. Respect the boards' terms and local law for outreach; this is not legal advice.

Your feedback

Need another board (Glassdoor, ZipRecruiter, Workday) or a field? Open an issue in the Issues tab.

You might also like

Use via API

Run this Actor from your own code or pipeline. Get your token in Apify Console → Settings → API & Integrations. Every input field below has the same name as in the JSON tab of the input form.

Python

from apify_client import ApifyClient
client = ApifyClient("<YOUR_API_TOKEN>")
run = client.actor("lergassy/jobs-api").call(run_input={
"boards": [
"greenhouse:stripe",
"ashby:openai"
],
"sources": [],
"maxJobsPerQuery": 25,
"includeDescription": False,
"includeContacts": False
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)

JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_API_TOKEN>' });
const run = await client.actor('lergassy/jobs-api').call({
"boards": [
"greenhouse:stripe",
"ashby:openai"
],
"sources": [],
"maxJobsPerQuery": 25,
"includeDescription": false,
"includeContacts": false
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

cURL (runs the Actor and returns the results in one call)

curl -X POST "https://api.apify.com/v2/acts/lergassy~jobs-api/run-sync-get-dataset-items?token=<YOUR_API_TOKEN>" \
-H "Content-Type: application/json" \
-d '{"boards": ["greenhouse:stripe", "ashby:openai"], "sources": [], "maxJobsPerQuery": 25, "includeDescription": false, "includeContacts": false}'