LinkedIn Jobs Scraper - $0.80/1k, No Login
Pricing
from $0.80 / 1,000 linkedin jobs
LinkedIn Jobs Scraper - $0.80/1k, No Login
Pull public LinkedIn job listings without a login or cookies. Batch keywords, locations, job URLs or job IDs, filter by date posted, workplace type and experience level, then optionally fetch full descriptions. $0.80 per 1,000 jobs plus $0.001 per run start.
Pricing
from $0.80 / 1,000 linkedin jobs
Rating
0.0
(0)
Developer
Dami's Studio
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
LinkedIn Jobs Scraper
Collect public LinkedIn job listings without login, cookies, or a LinkedIn account. The actor uses LinkedIn's lightweight public guest jobs endpoints, starts with direct traffic, and activates rotating Apify datacenter proxy sessions only after a block or rate limit.
It supports batch keyword and location searches, direct job URLs and IDs, pagination, global deduplication, server-side LinkedIn filters, and optional full job descriptions.
Why this actor
- No login, cookies, or LinkedIn account.
- Batch every query against every location in one run.
- Mix search results with direct LinkedIn job URLs and IDs.
- Filter by country/location, date posted, workplace type, experience level, and job type.
- Choose fast card-only output or full descriptions and job criteria.
- Deduplicate all jobs globally by LinkedIn job ID.
- Use direct requests first, then rotating datacenter proxies. Metered proxy groups (residential, SERP) are never used.
- Receive explicit, uncharged diagnostics for blocked, empty, invalid, or failed sources.
Input
| Field | Description |
|---|---|
searchQueries | Job titles or keywords. Each query is paired with each location. |
locations | Cities, regions, or countries. Leave empty for an unrestricted location search. |
country | Optional country name appended to every location or used alone. |
jobUrls | Direct public LinkedIn /jobs/view/ URLs. |
jobIds | Direct numeric LinkedIn job IDs. |
datePosted | any, past24h, pastWeek, or pastMonth. |
workplaceType | any, onSite, remote, or hybrid. |
experienceLevels | One or more of internship, entry, associate, midSenior, director, executive. |
jobTypes | One or more of fullTime, partTime, contract, temporary, internship, volunteer, other. |
sortBy | relevance or recent. |
includeDetails | Fetch descriptions, seniority, employment type, job function, industries, and applicant text. Direct IDs and URLs always fetch details. |
maxItems | Global unique job limit across every source. Default 100, maximum 5,000. |
maxPagesPerSearch | Per query/location pagination limit. Default 10. |
countryCode | Optional two-letter country for the proxy fallback, such as US, CA, GB, or DE. |
proxyConfiguration | Fallback proxy configuration. It is not used until direct traffic is blocked or rate-limited. Metered groups are replaced with datacenter; your own proxyUrls are honoured verbatim. |
maxProxyRetries | Fresh datacenter proxy sessions tried per blocked request. Default 3. |
requestTimeoutSecs | Per-request timeout. Default 20 seconds. |
No field is required. An input with no query, URL, or ID returns exactly one clearly labeled _sample: true row and does not charge.
Batch search example
This creates four searches: two queries multiplied by two locations.
{"searchQueries": ["software engineer", "data engineer"],"locations": ["Toronto, Ontario", "Vancouver, British Columbia"],"country": "Canada","datePosted": "pastWeek","workplaceType": "remote","experienceLevels": ["entry", "associate", "midSenior"],"jobTypes": ["fullTime", "contract"],"sortBy": "recent","includeDetails": false,"maxItems": 100}
Direct job example
{"jobUrls": ["https://www.linkedin.com/jobs/view/example-role-1234567890"],"jobIds": ["9876543210"],"maxItems": 10}
Output
Each successful real job row contains:
jobId,title,company,companyUrl, andcompanyLogolocation,salary,postedAt, andpostedTextworkplaceType,employmentType, andseniorityLeveljobFunction,industries, andapplicantsdescriptionanddescriptionHtmlwhen details are fetched- canonical LinkedIn
url sourceType,searchQuery,searchLocation, anddetailFetched
Example:
{"ok": true,"sourceType": "search","jobId": "1234567890","title": "Senior Software Engineer","company": "Example Company","companyUrl": "https://www.linkedin.com/company/example","companyLogo": "https://media.licdn.com/example.png","location": "Toronto, Ontario, Canada","salary": null,"postedAt": "2026-07-24","postedText": "1 day ago","workplaceType": "remote","employmentType": "Full-time","seniorityLevel": "Mid-Senior level","jobFunction": ["Engineering"],"industries": ["Software Development"],"applicants": "25 applicants","description": "Build reliable systems...","descriptionHtml": "<p>Build reliable systems...</p>","url": "https://www.linkedin.com/jobs/view/1234567890","searchQuery": "software engineer","searchLocation": "Toronto, Ontario, Canada","detailFetched": true}
LinkedIn does not expose every field on every job. Card-only searches usually leave detail fields as null or empty arrays. Enable includeDetails when those fields matter.
Pricing and cost control
$0.80 per 1,000 jobs ($0.0008 each), plus $0.001 each time a run starts. Flat rate — no volume tiers, no plan gates — and you are charged only for job rows actually written to the dataset.
Two charge events exist and that is all: the run start, and one job event fired after a real row is saved. includeDetails does not cost extra — a full detail page bills the same $0.0008 as a card-only row — and there is no per-search, per-keyword or per-location fee, so a run that batches 40 queries costs no more than one that runs a single query for the same number of jobs.
Sample rows, no-result rows, blocked requests, parse failures, invalid direct jobs, and network errors are diagnostic output and are not charged. A run that returns nothing costs $0.001.
The default search mode downloads only small guest-search HTML fragments. Full detail pages are much larger, so includeDetails is off by default. Direct traffic is tried first and the datacenter proxy is only a fallback. Metered proxy groups (RESIDENTIAL, GOOGLE_SERP) are not offered: if you request one it is replaced with rotating datacenter addresses and the run log says so. Your own proxyUrls are always used exactly as supplied. Keep includeDetails off for high-volume discovery, use narrow date filters, and set a matching countryCode only when fallback is needed.
Diagnostics
Diagnostic rows have ok: false, _diagnostic: true, and an errorCode:
BLOCKEDorRATE_LIMITED: direct traffic and the configured datacenter proxy retries were exhausted.NO_RESULTS: LinkedIn returned an empty result page for that query/location.NOT_FOUND: a direct job no longer exists or is not public.PARSE_ERROR: LinkedIn returned HTML without the expected public job structure.NETWORKorSERVER_ERROR: a transient request failure.
Diagnostics never trigger the job billing event. A failed source does not prevent other batch sources from completing.
Limits and responsible use
This actor accesses public guest job pages only. It does not log in, use cookies, bypass private access controls, or collect private profile data. LinkedIn can change or throttle its public endpoints. Use reasonable limits, respect applicable law and LinkedIn's terms, and process personal data only when you have a lawful basis.
Billing
Two charges apply: a $0.001 run-start fee each time a run begins, and $0.0008 per job actually delivered. Samples, diagnostics, duplicates, blocked look-ups and no-result runs never incur the per-result fee — a run that returns nothing costs only the $0.001 start fee. 1,000 jobs works out at $0.801 all-in.