LinkedIn Jobs Scraper — exact posting dates, no login avatar

LinkedIn Jobs Scraper — exact posting dates, no login

Pricing

from $5.00 / 1,000 job postings

Go to Apify Store
LinkedIn Jobs Scraper — exact posting dates, no login

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

Henry Crawl

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

17 hours ago

Last modified

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

FieldExampleNotes
jobId4437461678LinkedIn's own id, use it to deduplicate across runs
titleSoftware Engineer, Early Career
companyNotion
companyUrlLinkedIn company page
companyLogoUrl
locationSan Francisco, CA
postedDate2026-07-28T00:00:00.000ZExact timestamp from LinkedIn, not a relative string
postedDaysAgo6Derived from the timestamp
isNewPostingtrueLinkedIn's own "new" marker
benefitBadgeBe an early applicantLinkedIn's own badge when present
jobUrlDirect link to the posting
searchKeyword, searchLocation, pageNumber, scrapedAtProvenance of every row

With Include full job description enabled, each row also carries:

FieldNotes
descriptionFull posting text
seniorityLevel, employmentType, jobFunction, industriesLinkedIn's own criteria list
applicantCountTextApplicant 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 maxConcurrency moderate; 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.