Jobs API โ Indeed, LinkedIn & career sites
Pricing
from $4.20 / 1,000 jobs
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 $4.20 / 1,000 jobs
Rating
5.0
(2)
Developer
Matvey
Maintained by CommunityActor stats
0
Bookmarked
30
Total users
18
Monthly active users
a day ago
Last modified
Categories
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.

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,salaryPeriodare parsed from every source;postedAtis ISO 8601;isRemote,workplaceType,employmentTypeare 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?
| Field | Example |
|---|---|
source, id, url, applyUrl | indeed ยท 2e6243f5ef576267 ยท https://www.indeed.com/viewjob?jk=โฆ ยท https://careers.spglobal.com/jobs/331257 |
title, company, companyUrl, companyLogo | Software Engineering Lead ยท S&P Global ยท https://www.indeed.com/cmp/S&P-Global ยท โฆ |
companyWebsite, companyDomain, companyIndustry, companySize, companyRevenue, companyDescription, companyAddress | https://www.spglobal.com/en/ ยท spglobal.com ยท Information Technology ยท 10,000+ ยท more than $10B (USD) ยท โฆ ยท New York, NY |
location, city, region, country, countryCode, postalCode | New York, NY ยท New York ยท NY ยท United States ยท US ยท 10041 |
isRemote, workplaceType, employmentType, jobTypes, schedule | false ยท hybrid ยท fulltime ยท ["fulltime"] ยท Monday to Friday |
salaryMin, salaryMax, salaryCurrency, salaryPeriod, salaryText, salaryEstimated | 93000 ยท 150000 ยท USD ยท year ยท "$93,000 - $150,000 a year" ยท false |
postedAt, listedAt, expired | 2026-09-06T05:00:00.000Z ยท 2026-09-06T02:39:44.587Z ยท false |
description, descriptionHtml | full text and HTML |
skills, attributes | ["AI models", "Spring Boot", "Kotlin"] ยท every Indeed tag |
LinkedIn: seniority, industries, applicants, applicantsText, applyType | Mid-Senior level ยท Software Development ยท 25 ยท "Be among the first 25 applicants" ยท external |
LinkedIn: posterName, posterTitle, posterProfileUrl | the recruiter or hiring manager who posted the job, when LinkedIn shows them (about 1 job in 5) |
LinkedIn, free company details: companyWebsite, companyDomain, companyIndustry, companySize, companySizeMin, companySizeMax, companyEmployeesOnLinkedIn, companyFollowers, companyHeadquarters, companyCity, companyCountry, companyFounded, companyType, companySpecialties, companyDescription, companyTagline | https://www.bankofamerica.com ยท bankofamerica.com ยท Banking ยท 10,001+ employees ยท 10001 ยท null ยท 227047 ยท 3488660 ยท Charlotte, NC ยท Charlotte ยท US ยท null ยท Public Company ยท ["Financial Services"] ยท โฆ |
Career sites: board, department, experienceLevel | stripe ยท Engineering ยท Senior |
emails, phones | ["careers@coreweave.com"] ยท ["+14155552671"] |
companyEmails, companyPhones, companySocials (website look-up) | ["info@acme.com"] ยท ["+1โฆ"] ยท {linkedin, facebook, xโฆ} |
query, queryLocation, scrapedAt | python developer ยท New York, NY ยท โฆ |
LinkedIn jobs: the company fields come from each hiring company's LinkedIn page, read once per run and free (Add company details, on by default); they are null when LinkedIn did not open the page โ the job row is still delivered. LinkedIn shows the external apply link and (on most postings) the job function to signed-in members only, so for LinkedIn rows applyUrl and jobFunction are usually null; applyType says Easy Apply or external. With the Workplace filter, LinkedIn rows carry it in workplaceType / isRemote.
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.
| Row | Price |
|---|---|
| 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
- Enter Job titles or keywords (one per line) and a Location; pick the Indeed country if it is not the US.
- Choose Sources and, if you want direct postings, add Career-site boards (
greenhouse:stripe,https://jobs.lever.co/figma). - Set the filters: posted within, remote / hybrid / on-site, job types, experience, radius, sort.
- Keep Extract emails and phones on; switch on Look up contacts on the company website for a lead list.
- Click Start; export, or read the dataset through the API.
โฌ๏ธ Input

{"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 LinkedIn row (shortened; company details are free and on by default):
{"type": "job","source": "linkedin","id": "4469321601","url": "https://www.linkedin.com/jobs/view/python-developer-at-ntt-data-north-america-4469321601","title": "Python Developer","company": "NTT DATA North America","location": "New York, NY","seniority": "Associate","employmentType": "fulltime","industries": "Banking and Investment Management","applicants": 200,"applyType": "easyApply","applyUrl": null,"workplaceType": null,"isRemote": false,"posterName": "Asif Shaikh","posterTitle": "Delivery Manager at NTT DATA North America","posterProfileUrl": "https://www.linkedin.com/in/shaikh-asif","companyUrl": "https://www.linkedin.com/company/ntt-data-americas","companyWebsite": "https://www.nttdata.com/en-us/","companyDomain": "nttdata.com","companyIndustry": "IT Services and IT Consulting","companySize": "10,001+ employees","companySizeMin": 10001,"companySizeMax": null,"companyEmployeesOnLinkedIn": 24108,"companyFollowers": 790941,"companyHeadquarters": "Plano, Texas","companyCity": "Plano","companyCountry": "US","companyFounded": null,"companyType": "Public Company","companySpecialties": ["BI","Analytics and Automation","Cloud"],"companyTagline": null,"companyDescription": "NTT DATA, Inc. is a trusted global innovator of business and technology services โฆ"}
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, industries, applicants, applyType, posterName, posterProfileUrl and free company details (companyIndustry, companySize, companyEmployeesOnLinkedIn, companyHeadquarters, companyFoundedโฆ); career sites add board, department.
Behaviors an agent should know:
countryselects the Indeed site (us,uk,ca,au,de,fr,inโฆ);locationis free text as on the board. LinkedIn ignorescountry.- 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. Settingcountryyourself 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. maxJobsPerQueryis per keyword per source. Indeed returns up to 100 per request with full descriptions; LinkedIn returns 10 per page and one request per job for descriptions (includeDescription), plus one request per unique company for company details (includeCompanyDetails).- Salary fields are null when the posting has none;
salaryEstimated: truemeans Indeed's estimate rather than the employer's number. postedAtis the board's posting date (Indeed also giveslistedAt, when it appeared on Indeed).datePostedfilters at the source;postedAfterfilters rows.emails/phonescome from the posting text;companyEmails/companyPhonesappear only withenrichCompanyContacts. 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 anerrorrow. - A datacenter proxy is on by default and is enough; a source that rate-limits returns an
errorrow withblocked: 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.
Is this legal?
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
- Indeed Jobs Scraper โ Indeed only, 60+ countries, same columns.
- LinkedIn Jobs Scraper โ LinkedIn only, no login.
- Website Contacts API โ emails, phones and social links from any website.
- Email & Phone Verifier โ check addresses and numbers before outreach.
- US Business Filings โ company registrations by state.
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 ApifyClientclient = 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}'