LinkedIn Jobs and Indeed Scraper
Pricing
from $0.35 / 1,000 linkedin job with descriptions
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
Maintained by CommunityActor 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.

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 data | Pay and conditions | Links and context |
|---|---|---|
| Job ID, title, company, location | Salary as published (salaryText) | Job page on the board (jobUrl) |
| Full description, as text and HTML | Parsed salary: salaryMin, salaryMax, salaryCurrency, salaryPeriod | Apply 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 so | Applicant 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
- Click Try for free (or Start) on this page and sign in to Apify.
- Type the Keywords (
data engineer), the Location (Paris) and pick the Country (France). - Keep both Job boards or pick one.
- Set Max jobs per board. You pay per job returned, so start small to look at the data.
- 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.

Input
| Field | What it does |
|---|---|
keywords | What to search, as you would type it on LinkedIn or Indeed: a job title, a skill or a company. Required. |
location | A city, region or postcode. Empty searches the whole country. |
country | Picks Indeed's country site (fr.indeed.com, uk.indeed.com...) and completes the location for LinkedIn. 30 countries. |
boards | linkedin, indeed. Both by default. |
maxResultsPerBoard | Stop after this many jobs on each board (default 100, up to 5,000). |
includeDescription | LinkedIn: 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. |
indeedDescriptions | Indeed: the full description on every row (default on). Off returns the same rows without it, at the lower price. |
strictLocation | Both 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. |
datePosted | any, 24h, 3d, week, 2weeks, month. |
jobTypes | Full-time, part-time, contract, temporary, internship, volunteer. |
workplaceTypes | Remote, hybrid, on-site. |
experienceLevels | Internship to executive (LinkedIn seniority; Indeed where its country site offers the filter). |
proxy | auto (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.


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
applyUrlis the LinkedIn job page, andapplyTypesays 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: autodoes 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
partialwhen 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 LinkedIn | bebity LinkedIn | valig LinkedIn | valig Indeed | borderline Indeed | misceres Indeed | This Actor | |
|---|---|---|---|---|---|---|---|
| Price per 1,000 jobs | $2.00 | $1.50 | $0.40 | $0.10 | $5.00 | $6.00 | LinkedIn $0.35 ($0.15 cards only), Indeed $0.10 ($0.05 without descriptions) |
| Both boards in one run | no | no | no | no | no | no | yes |
| Run time for 100 jobs | 71 to 87 s | 33 to 44 s | 46 to 54 s | 3 to 4 s | 18 to 23 s | 9 to 17 s | LinkedIn 23 to 36 s, Indeed 10 to 11 s |
| Salary filled, Paris / London | 6% / 14% | 10% / 12% | 6% / 14% | 20% / 58% | 55% / 80% | 22% / 90% | LinkedIn 5% / 15%, Indeed 22% / 88% |
| One-sided salary ("From £X") kept | no | yes | |||||
| Posting date | employer's | employer's | employer's | Indeed's ingestion date | none | employer's, both boards | |
| External apply URL, LinkedIn | 0% | 58 to 93% | 0% | 0%, apply type flagged instead | |||
| Applicant count, LinkedIn | yes | ||||||
| Past 1,000 results | top complaint in its issues | "hardcapped at 1000" (its reviews) | yes, by date windows | ||||
| Duplicate rows | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
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:
| Event | Price |
|---|---|
| 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 ApifyClientclient = 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.
How many jobs can I get per search?
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.
Is it legal to scrape LinkedIn Jobs and Indeed?
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
- Job Scraper for Greenhouse, Lever, Ashby & Workable (JobsRadar): open roles from seven applicant tracking systems, straight from employers' career pages, deduplicated into one list.
- Shopify & WooCommerce Scraper and Price Tracker: every product of any Shopify or WooCommerce store, with price and stock change tracking.
Learn more
- What this LinkedIn Jobs and Indeed scraper returns, board by board
- How to scrape LinkedIn Jobs and Indeed without an account: what each board shows logged out
- JobsRadar: employers' own job boards for AI agents, as an MCP server
Built by AgentToolWorks. Not affiliated with LinkedIn or Indeed.