LinkedIn Jobs Scraper — exact posting dates, no login
Pricing
from $5.00 / 1,000 job postings
LinkedIn Jobs Scraper — exact posting dates, no login
Scrape public LinkedIn job postings: title, company, location and the exact posting timestamp LinkedIn published, plus the full description on request. Job listings only, no member profiles. Hard cap on results and per-field coverage reported for every run.
Pricing
from $5.00 / 1,000 job postings
Rating
0.0
(0)
Developer
Henry Crawl
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
17 hours ago
Last modified
Categories
Share
Scrape public LinkedIn job postings into typed rows. Every posting carries the exact timestamp LinkedIn published it with, not a parsed "6 days ago" string, and the run reports the fill rate of every field so you know the data is complete before you use it.
Scope: job listings only. This actor 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.