LinkedIn Jobs Scraper - Exact Post Date, No Browser Needed
Pricing
from $5.00 / 1,000 job postings
LinkedIn Jobs Scraper - Exact Post Date, No Browser Needed
Track hiring trends and build recruiting lead lists from public LinkedIn job postings: title, company, location and the exact posting date LinkedIn publishes, plus the full description on request. No login and no API key. Job listings only, no member profiles.
Pricing
from $5.00 / 1,000 job postings
Rating
0.0
(0)
Developer
Henry Crawl
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
LinkedIn Jobs Scraper - Exact Post Date, No Login
Track hiring trends and build recruiting lead lists from public LinkedIn job postings. No login, no cookies, no API key.
Every posting carries the exact timestamp LinkedIn published it with, not a parsed "6 days ago" string, and every run reports the fill rate of each field so you know the data is complete before you use it.
Scope: job listings only. This reads company-published postings from LinkedIn's public job search. It does not touch member profiles, contact details, or anything behind a login.
What you get per posting
| Field | Example | Notes |
|---|---|---|
jobId | 4437461678 | LinkedIn's own id, use it to deduplicate across runs |
title | Software Engineer, Early Career | |
company | Notion | |
companyUrl | LinkedIn company page | |
companyLogoUrl | ||
location | San Francisco, CA | |
postedDate | 2026-07-28T00:00:00.000Z | Exact timestamp from LinkedIn, not a relative string |
postedDaysAgo | 6 | Derived from the timestamp |
isNewPosting | true | LinkedIn's own "new" marker |
benefitBadge | Be an early applicant | LinkedIn's own badge when present |
jobUrl | Direct link to the posting | |
searchKeyword, searchLocation, pageNumber, scrapedAt | Provenance of every row |
With Include full job description enabled, each row also carries:
| Field | Notes |
|---|---|
description | Full posting text |
seniorityLevel, employmentType, jobFunction, industries | LinkedIn's own criteria list |
applicantCountText | Applicant count when LinkedIn shows it |
Input
{"keywords": ["software engineer", "data engineer"],"location": "United States","datePosted": "last_week","workplaceType": "remote","experienceLevel": "mid_senior","maxJobs": 1000}
Filters: date posted, job type, experience level, workplace type (on-site / remote /
hybrid), sorting by relevance or date, plus an optional geoId when you need a more
precise location than the text field allows.
Why this one is cheap to run
LinkedIn's public job search returns server-rendered HTML, so this actor needs no browser at all. That keeps the cost per thousand rows far below a browser-based scraper — which is why the price per result is what it is.
Enabling descriptions adds one request per posting, so it multiplies run cost. It is off by default for that reason.
The result cap is real
maxJobs stops the run at exactly that number, and duplicates are dropped on
LinkedIn's job id, so the same posting is never delivered — or billed — twice. The run
also stops on its own if three consecutive pages return nothing usable.
Runs fail loudly, not silently
Every run writes a DIAGNOSTICS record with block rate, bytes per item and the fill
rate of every output field:
{ "itemsExtracted": 500, "blockRate": "0%", "fieldCoverage": { "postedDate": "100%", "company": "100%" } }
If nothing was extracted, or more than half the pages were blocked, the run is marked failed with the reason instead of handing you empty columns.
Typical uses
- Tracking who is hiring for a role, and how fast postings turn over
- Feeding a niche job board or a recruiting pipeline
- Labour market research on posting volume by company, location and seniority
- Competitive hiring intelligence: which teams a company is building out
Notes and limits
- Salary is not available in LinkedIn's public job search. Measured: the search fragment contains no compensation markup at all. When an employer publishes pay, it appears inside the description body, so enable descriptions if you need it. This actor does not invent an estimate.
- The public search returns a limited depth per query. For large harvests, split the work by location, seniority or date window rather than paging very deep.
- Keep
maxConcurrencymoderate; the endpoint rate limits per IP.
Support
If a field stops filling or you need a filter that is not exposed, open an issue on the actor page with the input you used.
FAQ
Do I need a LinkedIn account or cookies? No. This uses LinkedIn's public guest jobs endpoint, which returns server-rendered HTML to an ordinary request. No login, no session cookie, no API key.
Does it include salary? No, and no scraper can from this source. Measured across a 600-row run: LinkedIn's public job search publishes no salary markup at all. Benefit badges are there; pay is not.
Why is it so much cheaper than other job scrapers? Because it needs no browser. Measured: 3.2 MB per 1,000 rows here against 71 MB per 1,000 for equivalent job data scraped with a headless browser. You are not paying for a Chrome instance.
Can it scrape member profiles? No, by design. Job listings only.
A LinkedIn job was reposted — can I get the original posting date?
You get the date attached to the posting LinkedIn is serving, as an absolute timestamp rather
than the "2 weeks ago" label. When a recruiter reposts a role, LinkedIn issues a new job id
with a new date, and no public field links it back to the earlier posting — so nothing can hand
you the true original date honestly. What you can do is spot it: keep the jobId and the
absolute date from each run, and a repost shows up as the same company plus the same title
arriving with a fresh id. That is why this actor returns exact dates and stable ids rather than
relative text; it gives you the raw material to detect reposts yourself instead of pretending
to have resolved them.
Can I scrape LinkedIn jobs without logging in?
Yes, and that is how this runs. It reads LinkedIn's public guest job endpoints — the same pages
LinkedIn serves to a visitor who is not signed in — so there is no li_at cookie to supply, no
session to keep alive, and no account of yours at risk. Scrapers that ask you to paste a
LinkedIn session cookie are automating your own logged-in account, and it is that account
LinkedIn restricts when it notices. The trade-off is honest: signed-out pages do not expose
everything a signed-in view would, so this returns job listings rather than recruiter contact
details or member profiles.
Is there a free LinkedIn jobs API? LinkedIn's own Jobs API is partner-only, so for most people the answer is no. This actor is not free either, but it is unusually cheap to run for a reason worth knowing: because the guest endpoints need no browser, it uses a plain HTTP crawler rather than a headless one, and a run measured 3.21 MB per 1,000 jobs. Browser-based LinkedIn scrapers move tens of megabytes for the same rows, and on usage-based pricing that difference is the bill.
How do I scrape LinkedIn jobs from Python, or from n8n / Make?
You do not have to write the scraping part. Start a run through Apify's API from Python with the
apify-client package, or use the Apify node that n8n and Make already ship, and read the
dataset when it finishes. What you get back is JSON with exact posting dates and stable job ids
rather than HTML you still have to parse, which is usually the part that breaks when LinkedIn
changes its markup.
Is there a LinkedIn job postings dataset I can download? Not a current one that is legitimately redistributable — LinkedIn does not license bulk job data for that, so the datasets floating around are old scrapes of unclear provenance and unclear freshness. Generating your own is the honest route, and it is what this does: you choose the keywords, location and date window, and get back rows you know the age of, because each carries an absolute posting date and a stable job id rather than a "2 weeks ago" label.
What is the cheapest way to collect job postings at scale? Avoid the browser. LinkedIn's public guest endpoints return the job data as plain HTML, so a headless browser is pure overhead here — this uses an HTTP crawler instead and measured 3.21 MB per 1,000 jobs. Browser-driven scrapers move an order of magnitude more traffic for identical rows, and on any usage-based platform that traffic is the bill. Combine that with the fact that no login is involved and there is no session to buy, warm up or replace.
Related scrapers
Pairs naturally with these:
- Indeed Jobs Scraper — the same job market from the other major board, also with absolute posting dates.
- Amazon Product Scraper — prices, ASIN and demand signals.
- eBay Scraper - Listings, Sellers & Sold Price Check — sold prices and exact sale timestamps from public pages.
- eBay Seller Scraper — everything one seller currently lists.