LinkedIn Jobs Scraper: Full Descriptions, Monitor
Pricing
from $2.00 / 1,000 complete jobs
LinkedIn Jobs Scraper: Full Descriptions, Monitor
LinkedIn jobs scraper for public job postings with full descriptions, company, location and posted date. Filter titles and schedule a monitor that skips jobs you already have. No login. $2 per 1,000 jobs.
Pricing
from $2.00 / 1,000 complete jobs
Rating
0.0
(0)
Developer
Agnes Maina
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
LinkedIn Jobs Scraper: full descriptions and a new jobs monitor
This LinkedIn jobs scraper collects public LinkedIn job postings with the full job description from the detail page, not the shortened search card, plus company, location and posted date. You get one row per job at $0.002 each, which is $2 per 1,000 jobs, and you can filter titles and schedule a monitor that returns only postings you have not seen. No LinkedIn login and no cookies.
Limits before you pay for anything: up to 10,000 delivered jobs in one run, up to 20 search URLs, and each search reads at most 1,000 source candidates or 100 pages. A job is delivered and charged only when the row has a confirmed job ID, title, company, canonical URL and a description of at least 100 characters. It does not guess emails, hiring managers, applicant counts or salaries the posting does not publish; jobPosterName is filled only when LinkedIn shows the poster. LinkedIn can return fewer results or limit access, and the run summary records when a search stopped early.
In the September 27, 2026 cloud benchmark, 20 searches across the US, UK, Canada, Germany and Australia delivered 500 jobs from 506 attempted detail pages. These are measured results from that benchmark, not a promise of full coverage.
What you get
One row per LinkedIn job, with these fields:
| Field | What it holds |
|---|---|
jobId | LinkedIn job ID |
url | Canonical job URL |
title | Job title from the detail page |
companyName | Hiring company |
companyUrl | Company LinkedIn page |
location | Location as shown on the posting |
descriptionText | Full description text, at least 100 characters or the job is not delivered |
postedAtRaw | Date text as displayed, for example "2 weeks ago" |
postedAt | Source date YYYY-MM-DD, or an approximate timestamp from relative text |
postedAtPrecision | day, approximate or null |
postedAtEstimated | true when the date is an estimate |
salaryText | Salary text when the posting publishes it |
employmentType | Full-time, part-time, contract and so on |
seniorityLevel | Seniority level as published |
jobFunction, industries | As published |
jobPosterName, jobPosterUrl | Job poster name and profile URL when shown |
scrapedAt | Collection timestamp |
Missing optional values are null. The actor never guesses emails, hiring managers, salaries or applicant counts. Each run also writes RUN_SUMMARY (per-search counts and stop reasons) and DIAGNOSTICS (errors) to the key-value store.
Try it in 30 seconds
- Open the actor page in the Apify Store and click Try for free.
- Keep the prefilled
software engineerandUnited Statessearch, or type your own. - Set
maxJobsto 25, click Start, then open the dataset and download it as JSON, CSV or Excel.
Apify's free plan includes monthly platform credit, so a first run of 25 jobs sits inside it.
Example output
One record from the September 27, 2026 benchmark run. descriptionText is shortened here.
{"jobId": "4419969671","url": "https://www.linkedin.com/jobs/view/4419969671/","title": "Senior Software Engineer \u2013 Go (Golang)","companyName": "General Motors","companyUrl": "https://www.linkedin.com/company/general-motors/","location": "Warren, MI","descriptionText": "(full job description text)","postedAtRaw": "2 weeks ago","postedAt": "2026-09-12","postedAtPrecision": "day","postedAtEstimated": false,"salaryText": null,"employmentType": "Full-time","seniorityLevel": "Not Applicable","jobFunction": null,"industries": null,"jobPosterName": null,"jobPosterUrl": null,"scrapedAt": "2026-09-27T15:31:19.157Z"}
Fields shown as null here are placeholders, a real posting fills them in when LinkedIn publishes them.
Pricing
Pay per event, no subscription:
| Event | Price |
|---|---|
job, one complete job delivered | $0.002 |
apify-actor-start, per run, per GB of memory, minimum one | $0.00005 |
That is $2 per 1,000 complete jobs. 1,000 jobs cost 1,000 x $0.002 = $2.00, plus $0.00005 for the run start at the default 256 MB memory. Proxy costs are included.
Incomplete records, duplicates and jobs rejected by your title filters are skipped and never charged. Set a maximum cost per run in Apify and the actor stops cleanly at that limit.
Input
| Field | Type | Default | What it does |
|---|---|---|---|
searchUrls | array of strings | none | Up to 20 HTTPS LinkedIn /jobs/search URLs. A URL carries its own search, so keywords and location are ignored when URLs are given; companyIds and postedWithinDays cannot be combined with URLs. Unsupported filters are rejected |
keywords | string | prefill software engineer | Search phrase. Use with location |
location | string | prefill United States | Sent to LinkedIn. LinkedIn controls geographic matching |
companyIds | array of strings | none | Numeric LinkedIn company IDs used as the source's company filter |
postedWithinDays | integer | any age | Posting age filter in whole days, 1 to 30 |
titleIncludes | array of strings | none | Case-insensitive phrases. A delivered title must contain at least one |
titleExcludes | array of strings | none | Reject titles containing any of these phrases |
maxJobs | integer | 100 | Total cap across all searches, 1 to 10,000. Incomplete and duplicate jobs do not count |
onlyNew | boolean | false | Skip job IDs delivered by the same search and filter configuration in the previous 90 days |
proxyConfiguration | object | Apify datacenter proxy | Direct, datacenter or residential access. Direct requests can be rate-limited |
{"keywords": "software engineer","location": "United States","titleIncludes": ["engineer"],"titleExcludes": ["intern"],"maxJobs": 100}
Results come newest first. Each search scans at most 1,000 source candidates or 100 pages, so split broad searches into narrower ones for more volume.
Schedule the new jobs monitor
- Save this input as a task in Apify Console:
{"keywords": "software engineer","location": "United States","postedWithinDays": 1,"titleIncludes": ["engineer"],"titleExcludes": ["intern"],"maxJobs": 100,"onlyNew": true}
- Open Schedules, create one, for example daily at 07:00, and add the task.
- Optionally add a webhook, or a Make, n8n or Zapier trigger on run succeeded, to send the new rows where you need them.
The first run delivers matching jobs up to the cap. Later runs skip job IDs already delivered under the same search and title filters within 90 days. Capped or failed jobs are not marked as seen, so they can arrive on the next run. History lives in the named key-value store linkedin-jobs-monitor-v1, and deleting it resets the baseline. Run one schedule per configuration.
Use cases
- Recruiting pipelines: pull every new "data engineer" posting in your target cities each morning and push it into your ATS.
- Job boards and aggregators: feed a niche board with full descriptions instead of one-line snippets.
- Hiring intent signals for sales: a company posting five DevOps roles this week is a warm lead. Filter by
companyIdsand route the rows to your CRM. - Labour market research: track posting volume by title, location and seniority over time.
- Salary and skills analysis: parse
salaryTextanddescriptionTextfor pay ranges, required tools and years of experience.
Integrations
Run it from the Apify API and get the jobs back in the same call:
curl -X POST "https://api.apify.com/v2/acts/agnes.developer.queen~linkedin-jobs-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"keywords":"data analyst","location":"London","maxJobs":50}'
The same call works from Python and Node.js with the Apify client, and from Make, n8n or Zapier with the Apify app or node. AI assistants and MCP clients can call the Actor as a tool through the Apify MCP server:
https://mcp.apify.com/?tools=agnes.developer.queen/linkedin-jobs-scraper
FAQ
Can you scrape LinkedIn jobs without login?
Yes. The actor reads public LinkedIn job pages. It needs no LinkedIn account, cookies or session, and no third-party data API.
Does it include the full job description?
Yes. descriptionText holds the full description from the job detail page. A job without a description of at least 100 characters is not delivered and not charged.
How do I get only new jobs?
Set onlyNew to true, save the input as a task and schedule it. Each run skips job IDs delivered under the same configuration in the last 90 days. Adding postedWithinDays: 1 keeps each daily run focused on fresh postings. Runs for one configuration must not overlap, and different searches keep separate histories.
Does it work outside the US?
Yes. The benchmark covered the United States, United Kingdom, Canada, Germany and Australia. LinkedIn decides geographic matching.
Why was a job not charged?
Only complete jobs are charged. Rows with missing identity data, descriptions under 100 characters, duplicates, and titles rejected by titleIncludes or titleExcludes are skipped for free. In the benchmark, 6 of 506 detail pages came back incomplete and were not charged.
Can I use my own LinkedIn search URL?
Yes. Build a search on LinkedIn and copy the /jobs/search URL into searchUrls, up to 20 of them. Unsupported filters in the URL are rejected with a clear error before scraping starts.
Is scraping LinkedIn job postings legal for me?
The actor only collects postings that LinkedIn shows publicly without a login, and no emails or private profile data. You are responsible for how you use the data, including your compliance with LinkedIn's terms and any privacy law that applies to you.
Related Actors
- LinkedIn Company Scraper turns company names, slugs and URLs into company facts such as industry, size and headquarters.
- LinkedIn People Search Scraper finds public profiles by job title and company, and charges only confirmed matches.
- LinkedIn New Hires Finder returns decision makers who joined a company recently, with the month they started.
Support
Open an issue on the Issues tab of the Store page with the run ID and your input. Docs: github.com/agnesthedeveloper/linkedin-jobs-scraper.