LinkedIn Jobs Scraper - Exact Post Date, No Browser Needed avatar

LinkedIn Jobs Scraper - Exact Post Date, No Browser Needed

Pricing

from $5.00 / 1,000 job postings

Go to Apify Store
LinkedIn Jobs Scraper - Exact Post Date, No Browser Needed

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

Henry Crawl

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

1

Monthly active users

4 days ago

Last modified

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

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.

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.

Pairs naturally with these: