LinkedIn Jobs Scraper — CSV Export & API
Pricing
from $0.90 / 1,000 job extracteds
LinkedIn Jobs Scraper — CSV Export & API
Collect accessible public LinkedIn job search and detail fields; source availability and coverage vary. Bulk export: JSON, CSV, Excel and API. PPE: $0.9/1K job results; start fee, usage extra.
Pricing
from $0.90 / 1,000 job extracteds
Rating
0.0
(0)
Developer
Apivault Labs
Maintained by CommunityActor stats
0
Bookmarked
38
Total users
3
Monthly active users
a day ago
Last modified
Categories
Share
LinkedIn Jobs Scraper
Collect public LinkedIn job listings without a LinkedIn account. Search by keywords and location, or paste public LinkedIn Jobs search URLs. Each useful delivered job has a stable jobId and canonical URL. Optional detail collection adds descriptions, salaries, application information and company fields when LinkedIn makes them available.
Start with five jobs, inspect the data, then increase your result limit. This actor collects a public search sample; it does not promise every matching job or a complete LinkedIn inventory.
Quick start
{"keywords": "software engineer","location": "United States","maxResults": 5,"maxPages": 5,"deepFetchAll": false,"outputPreset": "recruiting"}
To collect descriptions and compensation, enable deepFetchAll. To collect company details, enable includeCompanyDetails; this also requests the job detail page to find the actual company URL. Company enrichment visits at most 25 distinct companies per run.
For a pasted search URL:
{"workflow": "searchUrls","urls": "https://www.linkedin.com/jobs/search/?keywords=python&location=Berlin&f_TPR=r604800","maxResults": 5,"deepFetchAll": true,"outputPreset": "full"}
Use one URL per line, up to 20. Legacy API lists are also accepted. In Auto mode URLs take precedence over keywords; Keyword Search ignores URLs. Invalid entries alongside valid URLs appear in ERRORS; invalid-only URL input fails instead of silently changing the search.
Search and coverage
Collection uses LinkedIn's public guest jobs endpoint through direct HTTP. Offsets advance by 10. Cards can overlap; deduplication uses job ID, preserving distinct jobs with the same title, company and location. maxPages limits pages across all searches in the run. Searches are visited in input order; later searches are visited after earlier ones return an empty page. Narrow queries or run separate searches when you want balanced coverage across locations.
URL parameters keywords, location, geoId, distance, f_TPR / f_TP, f_C, f_AL and f_EA are forwarded. Legacy experience, job-type and workplace filters become search words. The remote, experienceLevel and jobType selections are search preferences, not guaranteed structured filters. LinkedIn controls ranking and may broaden or reinterpret a query; inspect returned titles and locations. Unsupported URL filters are not implemented.
onlyRemote, onlyWithSalary, minRecruiterScore and deduplicateCompanies are local filters applied before delivery and charging. Salary and remote filters request job detail pages. Work mode is heuristic: unknown and hybrid jobs are excluded by onlyRemote. A description mentioning remote work is not an employer guarantee.
Source access varies by region and datacenter. No proxy or external scraping key is configured. Login walls, HTTP errors and rate limits are reported, never disguised as a successful empty search. Network failures can retry within the time budget; access denials and rate limits do not retry. An incomplete detail page leaves its valid search card available, with detailFetched=false and detailFailures in the summary. Missing company fields stay absent.
Example workflows
These small inputs can be copied into the Console or API:
| Goal | Input |
|---|---|
| Quick discovery | {"keywords":"software engineer","location":"United States","maxResults":5,"outputPreset":"compact"} |
| Description and company research | {"maxResults":2,"deepFetchAll":true,"includeCompanyDetails":true,"outputPreset":"full"} |
| Disclosed compensation sample | {"maxResults":2,"maxPages":2,"onlyWithSalary":true,"outputPreset":"full"} |
| Remote language sample | {"keywords":"remote software engineer","maxResults":2,"maxPages":2,"onlyRemote":true,"outputPreset":"full"} |
| One job per company, CSV | {"maxResults":4,"maxPages":2,"deduplicateCompanies":true,"exportFormat":"csv"} |
Results and analysis
The Dataset contains only useful jobs identified by source ID, title, company and location before field selection. Available fields include:
| Group | Fields |
|---|---|
| Identity | jobId, jobCanonicalUrl, jobUrl, jobTitle, companyName, location |
| Search facts | postedDate, companyLogo, salaryRawText when present |
| Optional detail | description, descriptionHtml, jobType, seniorityRaw, industries, application information, available applicant and poster fields |
| Optional company | companyWebsite, companyIndustry, companyDescription, companyEmployeesCount |
| Heuristic analysis | annualized salary, work mode, skills, benefits, seniority, category, freshness, DEI text signals, recruiter score |
| Provenance | scrapedAt, detailFetched, sourceUpdatedAt=null, freshnessVerified=false, analysisIsHeuristic=true |
scrapedAt is collection time, not a verified source update. Posting age is calculated from the observed date; it does not prove a job is still open. Salary USD figures are approximate annualized calculations: 40 hours/week, 52 weeks/year, 22 days/month and fixed approximate currency factors. A missing period is assumed yearly. salaryCalculation labels these assumptions. For company size ranges, companyEmployeesCount is a lower bound labeled by companyEmployeesCountBasis.
Recruiter score is a heuristic 0–100 sum: observed hiring count (up to 25 points), posting age (15), disclosed compensation (15), skills (10), benefits (10), seniority (10), remote language (5) and visa language (3), bounded at 100. Hiring counts refer to the running delivered sample, so scores depend on input order. They do not prove budget, buying intent or company-wide vacancy counts. recruiterScoreScope records this limitation.
Outreach assets are neutral drafts and search links. They do not assert your track record, candidate network or business relationships. extractPayTransparencyLaw is retained for input compatibility but returns payTransparencyAssessment=not_assessed and null compliance/state. This actor does not make legal compliance determinations.
Output controls and continuation
outputPreset selects Compact, Recruiting (default) or Full JSON. exportFormat=csv creates flat records that Apify can export as CSV. Raw-field and analysis switches apply to both formats. Identity and provenance are always included. Analysis can use observed fields even if the raw field is hidden from the output.
The key-value store always contains:
SUMMARY: delivered count, status, page offsets, new job IDs, filtered/duplicate counts, source limits andnextInput.ERRORS: safe input/source diagnostics outside the paid Dataset.
writeSummary=false disables optional aggregate statistics and TOP_HIRING_COMPANIES / TOP_JOBS; operational SUMMARY and ERRORS remain available. Company aggregates refer only to delivered jobs.
To resume, use the complete object in SUMMARY.nextInput as the next run's input. It contains a search cursor and previously seen IDs, bound to the same search/filter settings. You may change page/result/time limits. Search order can change between runs, so continuation prevents duplicate IDs but cannot guarantee gap-free coverage. A stalled source has no usable continuation. A result/page/time cap is not complete coverage; check searchComplete.
The collection timeout is a shared run budget. Requests are capped by remaining time. maxConcurrency is an upper bound; current scheduling is sequential to reduce source throttling. deepFetchTopN collects one representative job for each of the first N distinct observed companies, not ranked companies.
Pricing
Provider price: $0.90 per 1,000 useful delivered jobs, plus $0.00005 per actor-start event (one per GB, minimum one). Apify platform resource usage is paid by the user in addition to provider events. Check the Pricing tab for the applicable current rates and platform estimate.
Only delivered useful rows trigger result events. Errors, duplicate IDs, rejected filters and summary records do not trigger result events. maxResults and Apify's maximum total charge limit control paid delivery; the actor checks charge capacity before source requests and respects the accepted charged count.
MCP and AI agents
Use the hosted Apify MCP tool apivault_labs--linkedin-jobs-scraper. Start with maxResults=5 and Compact output. Read the Dataset, SUMMARY and ERRORS before treating the search as complete. Enable detail fetching when descriptions or salaries are needed; treat derived fields as heuristic and missing fields as unknown.
API name: apivault_labs/linkedin-jobs-scraper. The same input contract is used by API, Console and MCP clients.