LinkedIn Jobs and Indeed Scraper avatar

LinkedIn Jobs and Indeed Scraper

Pricing

from $0.35 / 1,000 linkedin job with descriptions

Go to Apify Store
LinkedIn Jobs and Indeed Scraper

LinkedIn Jobs and Indeed Scraper

LinkedIn Jobs scraper plus Indeed scraper in one run, no account and no cookies: search by keywords, location and country, and get one table with title, company, location, remote or hybrid, posted date, salary, seniority, applicants, full description and apply link.

Pricing

from $0.35 / 1,000 linkedin job with descriptions

Rating

0.0

(0)

Developer

AgentToolWorks

AgentToolWorks

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Categories

Share

What is this LinkedIn Jobs scraper and Indeed scraper?

This Actor is a LinkedIn Jobs scraper and an Indeed scraper in one run. Type a job title, a skill or a company, a city and a country once, and get the public job listings of LinkedIn Jobs and Indeed back in one table, one row format: title, company, location, posting date, salary (parsed into min, max, currency and period), employment type, seniority, applicant count, remote or hybrid where the board says so, the full job description, and links to the job and to apply.

No LinkedIn account, no Indeed account, no cookies: the Actor reads what both boards show any logged-out visitor.

LinkedIn Jobs scraper and Indeed scraper: one search in, both boards out in one table, from a real run

What data can you extract from LinkedIn Jobs and Indeed?

One row per job, the same fields on both boards. Where a board does not publish a field, it is null, never guessed.

Job dataPay and conditionsLinks and context
Job ID, title, company, locationSalary as published (salaryText)Job page on the board (jobUrl)
Full description, as text and HTMLParsed salary: salaryMin, salaryMax, salaryCurrency, salaryPeriodApply link (applyUrl) and apply type on LinkedIn (external or easy-apply)
Posting date, the employer's date (postedAt)Employment type (full-time, contract, CDI...)Company page and company logo
Seniority and industries (LinkedIn)Workplace type: remote, hybrid or on-site, where the board says soApplicant count (LinkedIn)
Board (provider: linkedin or indeed)Benefits (where listed)The search that found it, and when it was read

What can you use LinkedIn and Indeed job data for?

  • Job market and salary research: what a role pays in a city, how many employers hire for it, which skills they ask for.
  • Recruiting and sales prospecting: which companies are hiring for a function right now, with the company page and the applicant count.
  • Job boards and aggregators: fresh listings from both boards, deduplicated, in one format.
  • Job alerts: schedule a search and get the new jobs every morning.
  • Data for AI agents and pipelines: one predictable JSON row whatever the board.

Need the employers' own career pages too (Greenhouse, Lever, Ashby, Workable and more)? Pair it with JobsRadar: same first columns, so the two outputs stack into one table.

How to scrape LinkedIn Jobs and Indeed

  1. Click Try for free (or Start) on this page and sign in to Apify.
  2. Type the Keywords (data engineer), the Location (Paris) and pick the Country (France).
  3. Keep both Job boards or pick one.
  4. Set Max jobs per board. You pay per job returned, so start small to look at the data.
  5. Click Start. When the run finishes, open the Output tab, pick the Jobs, Salaries or Descriptions view, and export as JSON, CSV, Excel or XML, or read it through the API.

The Actor's input form in Apify Console: keywords, location, country, job boards, max jobs per board and the description switches

Input

FieldWhat it does
keywordsWhat to search, as you would type it on LinkedIn or Indeed: a job title, a skill or a company. Required.
locationA city, region or postcode. Empty searches the whole country.
countryPicks Indeed's country site (fr.indeed.com, uk.indeed.com...) and completes the location for LinkedIn. 30 countries.
boardslinkedin, indeed. Both by default.
maxResultsPerBoardStop after this many jobs on each board (default 100, up to 5,000).
includeDescriptionLinkedIn: read each job's own page for the full description, seniority, employment type, industries, applicant count and base pay (default on). Off returns the search card only, at the lower price.
indeedDescriptionsIndeed: the full description on every row (default on). Off returns the same rows without it, at the lower price.
strictLocationBoth boards widen a city to its area (a London search returns Teddington). On, only jobs whose location names the searched place are returned and charged.
datePostedany, 24h, 3d, week, 2weeks, month.
jobTypesFull-time, part-time, contract, temporary, internship, volunteer.
workplaceTypesRemote, hybrid, on-site.
experienceLevelsInternship to executive (LinkedIn seniority; Indeed where its country site offers the filter).
proxyauto (recommended): LinkedIn through Apify datacenter proxy, Indeed through Apify residential proxy in the searched country, which is what worked in our cloud runs.

Example: data engineer jobs in Paris on both boards, 20 per board (the run shown on this page).

{
"keywords": "data engineer",
"location": "Paris",
"country": "FR",
"boards": ["linkedin", "indeed"],
"maxResultsPerBoard": 20
}

Example: remote Python jobs posted in the past week in the United States, LinkedIn only, search cards only (the cheapest LinkedIn rows).

{
"keywords": "python developer",
"country": "US",
"boards": ["linkedin"],
"datePosted": "week",
"workplaceTypes": ["remote"],
"includeDescription": false,
"maxResultsPerBoard": 500
}

Example: nurses in London itself, not the commuter belt, Indeed only, 1,000 jobs.

{
"keywords": "nurse",
"location": "London",
"country": "GB",
"boards": ["indeed"],
"strictLocation": true,
"maxResultsPerBoard": 1000
}

Output

The dataset holds one row per job, with three ready-made views in Apify Console and in the API:

  • Jobs: board, title, company, location, workplace, type, seniority, posting date, salary, applicants, apply type and links.
  • Salaries: the salary as published and parsed into min, max, currency and period.
  • Descriptions: the full description of every job.

No duplicates: a job is returned and charged once per run, keyed by board and job ID, across pages and date windows. An employer that posts the same role twice under two IDs gets two rows, as on the board.

Jobs view of a real run in Apify Console: LinkedIn data engineer jobs in Paris with logo, title, company, location, type, seniority, posting date, applicants and apply type

Salaries view of a real run: Indeed nurse jobs in London with the salary as published, parsed min and max, currency and period

A LinkedIn row from a cloud run (data engineer, Paris, 2026-10-05; description and logo URL shortened):

{
"id": "linkedin:4462226292",
"provider": "linkedin",
"jobId": "4462226292",
"title": "Senior Data Engineer",
"company": "PUR",
"location": "Paris, Île-de-France, France",
"postedAt": "2026-09-07",
"postedText": "3 weeks ago",
"employmentType": "Full-time",
"seniority": "Associate",
"industries": "Environmental Services",
"salaryText": "€50,000.00/yr - €60,000.00/yr",
"salaryMin": 50000,
"salaryMax": 60000,
"salaryCurrency": "EUR",
"salaryPeriod": "year",
"applicantsCount": 89,
"applyType": "external",
"jobUrl": "https://fr.linkedin.com/jobs/view/senior-data-engineer-at-pur-4462226292",
"applyUrl": "https://fr.linkedin.com/jobs/view/senior-data-engineer-at-pur-4462226292",
"companyUrl": "https://fr.linkedin.com/company/pur-projet",
"companyLogo": "https://media.licdn.com/dms/image/v2/D4D0BAQEcPN5Cei30AQ/company-logo_100_100/...",
"description": "Job title: Senior Data Engineer\nDepartment: Data team\nReports to: Lead Data Engineer\nLocation: Paris, France\nContract: Permanent, local and full-time...",
"detailStatus": "full",
"country": "FR",
"query": "data engineer",
"scrapedAt": "2026-10-05T01:02:55.121Z"
}

An Indeed row from a cloud run (nurse, London, 2026-10-05), with a one-sided salary kept ("From £37.50 an hour": salaryMax stays null rather than guessed):

{
"id": "indeed:7f2a10ab8e5955bf",
"provider": "indeed",
"jobId": "7f2a10ab8e5955bf",
"title": "Nurse Prescriber - PRP, Phlebotomy, ScleroTherapy practitioner",
"company": "Advanced Aesthetics of London",
"location": "Claremont KT10 8QS",
"postedAt": "2026-10-04T16:57:46.648Z",
"workplaceType": "onsite",
"salaryText": "From £37.50 an hour",
"salaryMin": 37.5,
"salaryMax": null,
"salaryCurrency": "GBP",
"salaryPeriod": "hour",
"jobUrl": "https://uk.indeed.com/viewjob?jk=7f2a10ab8e5955bf",
"applyUrl": "https://uk.indeed.com/applystart?jk=7f2a10ab8e5955bf",
"companyUrl": "https://uk.indeed.com/cmp/Advanced-Aesthetics-of-London",
"description": "Self-Employed: PRP / Phlebotomy / Sclerotherapy Practitioner / Independent Prescriber\nUKPay: From £37.50 per hour...",
"detailStatus": "full",
"country": "GB",
"query": "nurse",
"scrapedAt": "2026-10-05T01:03:39.716Z"
}

Run summary

The run's key-value store holds a SUMMARY record with one status per board: ok, partial (fewer jobs than asked while the board shows more, with the reason), or failed, plus how many jobs each board returned, how many requests it took and how long. A short result is never silent: a run can succeed on Apify while a board returned nothing, and the summary is where you see it.

Limits worth knowing before you run it

  • LinkedIn does not show the employer's external apply URL to logged-out visitors: its Apply button opens a sign-in page. So on LinkedIn rows applyUrl is the LinkedIn job page, and applyType says whether the job applies on the employer's site (external) or through LinkedIn (easy-apply). We checked from datacenter and residential addresses in the US and France: 0 of 4,440 cloud rows carried an external URL. The Actor never logs in to get it.
  • LinkedIn workplace type is partial: LinkedIn publishes no remote or hybrid field to visitors, so the Actor reads it from the title, the location and explicit phrases in the description. Filled on 0 to 13% of LinkedIn rows in our runs. Indeed labels it itself (16 to 30% of rows).
  • LinkedIn salary is filled when the employer publishes it: 5 to 15% of LinkedIn rows in our runs, the same share as the other LinkedIn scrapers we measured. On Indeed, 22 to 29% in Paris and 86 to 88% in London.
  • Indeed is read through Apify residential proxy in the searched country: Indeed refused Apify's cloud without proxy and challenged its datacenter proxy in our tests. proxy: auto does this for you. It is part of what the Indeed price pays for.
  • Indeed's search is broad: it matches the keywords anywhere in the job, so a "data engineer" search also returns data scientists and other engineers (7 of the first 20 Indeed titles in Paris named data). That is what Indeed's own site returns. LinkedIn's titles matched on 20 of 20.
  • Past 1,000 results: LinkedIn shows visitors about 1,000 per search, Indeed's search stops at 1,000. The Actor then reads narrower date windows of the same search and unions them by job ID: 1,812 Indeed jobs for a search Indeed counts at 1,821, and 1,299 LinkedIn cards for a London search. The summary says partial when it stops short of what the board shows.

How it compares with the leaders (measured)

Same queries on every Actor: "data engineer" in Paris and "nurse" in London, 100 jobs each. The leaders' figures are Apify cloud runs of 2026-10-02 (our teardown); ours are Apify cloud runs of 2026-10-05 (builds 0.1.1 and 0.1.2). Prices are the FREE-tier Store prices of 2026-10-02.

curious_coder LinkedInbebity LinkedInvalig LinkedInvalig Indeedborderline Indeedmisceres IndeedThis Actor
Price per 1,000 jobs$2.00$1.50$0.40$0.10$5.00$6.00LinkedIn $0.35 ($0.15 cards only), Indeed $0.10 ($0.05 without descriptions)
Both boards in one runnonononononoyes
Run time for 100 jobs71 to 87 s33 to 44 s46 to 54 s3 to 4 s18 to 23 s9 to 17 sLinkedIn 23 to 36 s, Indeed 10 to 11 s
Salary filled, Paris / London6% / 14%10% / 12%6% / 14%20% / 58%55% / 80%22% / 90%LinkedIn 5% / 15%, Indeed 22% / 88%
One-sided salary ("From £X") keptnoyes
Posting dateemployer'semployer'semployer'sIndeed's ingestion datenoneemployer's, both boards
External apply URL, LinkedIn0%58 to 93%0%0%, apply type flagged instead
Applicant count, LinkedInyes
Past 1,000 resultstop complaint in its issues"hardcapped at 1000" (its reviews)yes, by date windows
Duplicate rows0000000

The external apply URL is the one LinkedIn field we do not deliver and bebity does; we have not found where it comes from on any logged-out page.

How much does it cost to scrape LinkedIn Jobs and Indeed?

Pay per event, no subscription, platform usage included. You pay per job returned:

EventPrice
LinkedIn job with its full description and details (the default)$0.35 per 1,000 LinkedIn jobs
LinkedIn job, search card only (includeDescription off)$0.15 per 1,000 LinkedIn jobs
Indeed job with its full description (the default)$0.10 per 1,000 Indeed jobs
Indeed job without description (indeedDescriptions off)$0.05 per 1,000 Indeed jobs

Examples:

  • 1,000 LinkedIn jobs and 1,000 Indeed jobs, descriptions included: $0.45.
  • The 40 jobs on this page (20 per board, with descriptions): under one cent.
  • A duplicate, a job past your maximum, or a job left out by a filter (strict city, date, job type) is never charged.
  • Apify's free plan includes $5 of monthly usage (apify.com/pricing), enough for about 14,000 LinkedIn jobs or 50,000 Indeed jobs with descriptions a month.

Set a maximum cost per run in the run options and the Actor stops cleanly when it is reached.

Use the Actor through the Apify API

Run it and get the jobs in one HTTP call (replace YOUR_APIFY_TOKEN, from Settings > API & Integrations in Apify Console):

curl -X POST "https://api.apify.com/v2/acts/agenttoolworks~linkedin-indeed-jobs-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"keywords": "data engineer", "location": "Paris", "country": "FR", "maxResultsPerBoard": 50}'

Node.js, with the official apify-client:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('agenttoolworks/linkedin-indeed-jobs-scraper').call({
keywords: 'data engineer',
location: 'Berlin',
country: 'DE',
boards: ['linkedin', 'indeed'],
maxResultsPerBoard: 200,
});
const { items: jobs } = await client.dataset(run.defaultDatasetId).listItems();
console.log(jobs.map((job) => [job.provider, job.title, job.company, job.salaryText, job.postedAt]));

Python, with the official apify-client:

from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("agenttoolworks/linkedin-indeed-jobs-scraper").call(
run_input={"keywords": "nurse", "location": "London", "country": "GB", "boards": ["indeed"], "maxResultsPerBoard": 500}
)
for job in client.dataset(run["defaultDatasetId"]).iterate_items():
print(job["title"], job["company"], job["salaryMin"], job["salaryMax"], job["salaryPeriod"])

The API tab on this page has ready-made snippets for every language and endpoint.

FAQ

Do I need a LinkedIn or Indeed account?

No. The Actor reads the public job search of both boards the way a logged-out visitor sees it. It never logs in and uses no account or cookies, which also means your own LinkedIn account is never at risk.

Does it return the full job description?

Yes, by default, on both boards: as plain text (description) and as HTML (descriptionHtml). Turn the descriptions off for a cheaper, faster list.

Which countries does it cover?

30: the United States, the United Kingdom, Canada, Australia, India, most of Europe, and more (the Country list in the input). The country picks Indeed's country site and completes the location on LinkedIn.

Up to 5,000 per board per run. Both boards stop at about 1,000 results per search; past that, the Actor reads narrower date windows of the same search. The run summary says when the board shows more than was read.

How fast is it?

Measured on Apify, 2026-10-05: 100 LinkedIn jobs with descriptions in 23 to 36 seconds and 1,000 in about 5.5 minutes; 100 Indeed jobs in 10 to 11 seconds and 1,000 in 45 to 63 seconds. The run on this page (20 per board, both boards) took 13 seconds.

Can I get only remote jobs, or only jobs from this week?

Yes: workplaceTypes (remote, hybrid, on-site), datePosted (24 hours to a month), jobTypes and experienceLevels. Filtered-out jobs are not charged.

Can I use it with Make, Zapier, n8n or Google Sheets?

Yes, through Apify's integrations: the dataset works with every Apify integration, and a webhook can fire when a run finishes. Save your input as a task and schedule it for a daily job alert.

Can AI agents use it through MCP?

Yes. Apify's hosted MCP server exposes Store Actors to MCP clients such as Claude or Cursor: https://mcp.apify.com?tools=agenttoolworks/linkedin-indeed-jobs-scraper.

The Actor reads only job listings that LinkedIn and Indeed show to any visitor without logging in: jobs and the companies that post them. It never logs in, uses no account and collects no data about job seekers or recruiters' profiles. Both boards' terms restrict automated collection in some form; how you use the data is your responsibility.

Something is missing or broken?

Open an issue in the Issues tab: we read every one.

Other Actors by AgentToolWorks

Learn more

Built by AgentToolWorks. Not affiliated with LinkedIn or Indeed.