LinkedIn Jobs Scraper
Pricing
from $1.10 / 1,000 results
LinkedIn Jobs Scraper
Search LinkedIn jobs by keyword and location with date, experience, job-type, and workplace filters, paginate through results, and optionally enrich each job with the full posting.
Pricing
from $1.10 / 1,000 results
Rating
0.0
(0)
Developer
The Netaji
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
The Actor searches public LinkedIn job postings by keyword and location, applies date, experience, employment-type, and workplace filters, paginates through the result set, and optionally fetches the full posting for every result. No LinkedIn account or session cookie is required.
Accepted input
| Field | Type | Default | Description |
|---|---|---|---|
keywords | string | — | Required. Job title, skill, or free-text query. |
location | string | — | Place name. Resolved to a LinkedIn geo ID automatically. |
geo_id | string | — | A known LinkedIn geo ID. Overrides location when set. |
maxItems | integer | 100 | Maximum job listings saved. 0 removes the limit. |
enrichJob | boolean | false | Fetches the full posting for each result. |
date_posted | enum | — | past_24_hours, past_week, past_month. |
experience_levels | multi-select | — | internship, entry_level, associate, mid_senior, director, executive. |
job_types | multi-select | — | full_time, part_time, contract, temporary, internship, volunteer, other. |
workplace | enum | — | on_site, remote, hybrid. |
sortBy | enum | — | most_recent, most_relevant. |
{"keywords": "data engineer","location": "Berlin","maxItems": 100,"date_posted": "past_week","experience_levels": ["mid_senior"],"workplace": "remote","sortBy": "most_recent"}
How the location is resolved
A location value is a place name, not a code. Before the search begins it is sent to LinkedIn's geo typeahead and matched to a geo ID, and the resolved name and ID are written to the run log so the interpretation is visible.
When the place name matches nothing, the run does not fail. A warning is logged and the search proceeds without a location filter, returning jobs from everywhere. A result set far larger and geographically broader than expected is almost always this case, and the run log states it explicitly. Supplying geo_id directly bypasses the lookup and removes the ambiguity.
Response fields
One record per job listing.
| Field | Contents |
|---|---|
job_id | LinkedIn job posting ID |
title | Job title |
company | Hiring company name |
company_url | Company page URL |
location | Location as displayed on the listing |
url | Job posting URL |
posted_at | Posting timestamp |
posted_label | Relative posting text, such as 2 days ago |
salary | Salary information, where published |
benefits | Benefits listed |
logo | Company logo URL |
urn | LinkedIn URN for the posting |
enriched | Whether the full posting was fetched |
Present only when enrichJob is enabled:
| Field | Contents |
|---|---|
applicants | Number of applicants reported |
is_active | Whether the posting is still open |
criteria | Seniority, employment type, job function, industries |
description_text | Full description as plain text |
description_html | Full description as HTML |
poster | The member who posted the role, where attributed |
{"job_id": "4021884321","title": "Senior Data Engineer","company": "Zalando","location": "Berlin, Germany","posted_label": "3 days ago","url": "https://www.linkedin.com/jobs/view/4021884321","enriched": false}
Pagination and result limits
Results are collected in pages of 20 and the search offset advances until one of four conditions is met: maxItems is reached, a page contributes no listing not already seen, a page returns fewer than 20 listings, or the offset passes 1,000.
That last condition is a hard ceiling imposed by the search endpoint itself. A single search cannot return more than approximately 1,000 listings, regardless of maxItems or how many jobs match. Setting maxItems to 0 does not lift it. Covering a query with more matches than that requires splitting it into narrower searches — by location, by date window, or by experience level — and combining the results.
Listings are deduplicated within a run by job ID, so the same posting surfaced at two offsets is saved once.
Behaviour on partial results
A page request that fails after the client's own retries ends collection and the run completes with the listings already gathered, rather than aborting and discarding them. A dataset smaller than maxItems therefore indicates the result set was exhausted, the 1,000 ceiling was reached, or a page failed; the run log distinguishes the three.
Enrichment is applied per listing and issues one additional request each. A failed enrichment leaves that record with its search fields, enriched set to false, and no description, and is not charged. The run continues.
Frequently asked questions
Why did the run return around 1,000 jobs when far more match?
The search endpoint stops serving results past an offset of roughly 1,000, and this is a property of LinkedIn's search rather than of maxItems. Split the query into narrower searches to cover more of the result set.
Why were jobs returned from the wrong country?
The place name in location did not resolve, so the search ran without a location filter. The run log records the failure and names the value that was not matched. Supplying geo_id avoids the lookup entirely.
Where is a geo ID found?
In the geoId query parameter of a LinkedIn job search URL performed in a browser. Once known, it is stable and can be reused.
What does enabling enrichJob add, and what does it cost?
It attaches applicants, is_active, criteria, description_text, description_html, and poster. Each listing costs one additional request and one additional billed event, so a 500-listing run performs 500 extra requests. The search fields alone are usually sufficient for filtering, after which a second enriched run over the shortlist is cheaper than enriching everything.
Is a LinkedIn account or session cookie required? No. Only publicly visible job postings are read, and no credentials or logged-in session are supplied.
Why is salary empty on most listings?
Salary is published only where the employer chose to include it or where local pay-transparency law requires it. Where it is absent from the posting it is returned as null rather than estimated.
Related Actors
| Actor | Purpose |
|---|---|
| LinkedIn Company Scraper | Details of the hiring company by handle or URL |
| LinkedIn Profile Scraper | Member profile details by username or URL |
| LinkedIn Post Scraper | Post, activity, and article details by URL |
| LinkedIn Related User Scraper | Profiles LinkedIn shows alongside a seed profile |