Pricing
from $0.50 / 1,000 job saveds
LinkedIn Jobs Scraper
Scrape LinkedIn job listings from search URLs or keyword-based searches with date, job-type, experience, and remote filters. Each result includes title, company, location, salary, full description, criteria, apply links, and optional company profiles. No login required.
Pricing
from $0.50 / 1,000 job saveds
Rating
0.0
(0)
Developer
Actor stats
0
Bookmarked
3
Total users
2
Monthly active users
2 days ago
Last modified
Categories
Share
Collect structured job listing data from public LinkedIn job searches β using search URLs or keyword-based queries. Add one or more searches, start a run, and receive clean JSON records in your Apify dataset. No LinkedIn login required.
Use it for recruiting pipelines, job board aggregation, market research, competitive hiring intelligence, lead generation, and talent analytics β without copying listings manually.
What you get
Each saved row is one job listing, organized into clear sections:
| Section | What it contains |
|---|---|
| Job identity | Job ID, title, job URL, and company logo |
| Company (listing) | Company name, LinkedIn company ID, and company page URL |
| Location & workplace | Location string and workplace type (on-site, remote, or hybrid) when shown |
| Posting details | Posted date, relative posted text, salary when available, benefits, Easy Apply flag, and promoted flag |
| Description | Full job description as plain text and HTML |
| Employment criteria | Seniority, employment type, job function, industry, and related labels |
| Apply information | Apply type, apply URL, and applicant count when shown |
| Search context | Which search produced the job (searchId, keywords, location) |
input | Snapshot of the search configuration that produced this job |
company (optional) | Enriched company profile when Fetch company details is enabled |
Results are saved to the dataset as each job is processed, so you can preview progress before the run finishes.
Quick start on Apify
- Open the Actor in the Apify Console.
- Add at least one LinkedIn search URL or keyword search.
- Optionally enable Fetch company details for enriched company profiles.
- Click Start and open the Dataset tab as jobs are saved.
You can combine direct search URLs and keyword searches in a single run.
Example input:
{"startUrls":[{"url":"https://www.linkedin.com/jobs/search?keywords=Full+Stack+Developer&location=United+States&f_TPR=r86400"}],"keywordSearches":[{"keywords":"Python Developer","location":"United States"}],"maxJobsPerSearch":25,"deduplicateJobs":true,"fetchCompanyDetails":true}
Input parameters
Provide at least one LinkedIn search URL or keyword search. You can use both in the same run.
Direct search URLs
| Field | startUrls |
| Type | List of URLs |
| Description | Add one LinkedIn job search URL per row. Each URL is scraped exactly as provided, including filters already in the link. |
Copy URLs from your browser after applying filters on LinkedIn (date posted, job type, remote, etc.).
Example:
{"startUrls":[{"url":"https://www.linkedin.com/jobs/search?keywords=Full+Stack+Developer&location=United+States&f_TPR=r86400"}]}
Keyword searches
| Field | keywordSearches |
| Type | List of objects |
| Required per row | keywords |
| Optional per row | location (city, region, or country) |
The filters in the next section apply to keyword searches only. Direct search URLs are not modified.
Example:
{"keywordSearches":[{"keywords":"Python Developer","location":"United States"}]}
Filters (keyword searches only)
These filters apply to keyword searches only. Direct search URLs are scraped as-is.
| Field | Description |
|---|---|
datePosted | Time range: any time, last hour, last 12/24 hours, last 3/7/14/30 days |
jobTypes | Full-time, part-time, contract, temporary, internship, volunteer, or other |
experienceLevels | Internship, entry, associate, mid-senior, director, or executive |
workplaceTypes | On-site, remote, or hybrid |
companyIds | Limit results to specific LinkedIn company IDs (one numeric ID per row) |
easyApplyOnly | Include only jobs that support LinkedIn Easy Apply |
excludePromoted | Remove promoted listings from results |
Output configuration
| Field | Default | Description |
|---|---|---|
maxJobsPerSearch | 25 | Maximum jobs to collect from each search URL or keyword search (1β10,000) |
deduplicateJobs | true | When enabled, the same job appearing in multiple searches is saved only once |
fetchCompanyDetails | false | When enabled, each job includes an enriched company object. Each unique company is fetched once per run and reused across jobs |
What you will see during a run
The run log is written for end users β messages describe collection progress only.
Typical messages:
Starting job collection for N search(es).Company profile enrichment is enabled.(when fetch company details is on)Progress: 25 job(s) saved to the dataset.No jobs were found for: β¦(when a search returns no results)N job(s) from "β¦" could not be fully retrieved.(partial detail failures)N job(s) from "β¦" could not be enriched with company details.(when company enrichment is enabled)Run complete. Saved N job(s) to the dataset.
If one search fails or returns incomplete data, other searches in the same run can still succeed.
On the Apify free plan, you may also see a notice when free-tier limits apply (see Free plan limits).
Output overview
Dataset structure
- Results are saved to a single Apify dataset
- Each row is one job object with nested sections (
criteria,input, and optionallycompany) - Jobs from multiple searches include
searchId,searchKeywords, andsearchLocationso you can trace which query produced each result - The nested
inputobject records the exact search configuration for that job
Field presence varies by listing: not every job shows salary, benefits, workplace type, applicant count, or a job poster. Missing fields are omitted from the output β not necessarily a scraper error.
When Fetch company details is disabled, jobs do not include the company object. Basic company fields (companyName, companyId, companyUrl) are still included from the job listing.
Output fields
Job identity and listing
| Field | Description |
|---|---|
jobId | LinkedIn job ID |
title | Job title |
jobUrl | Public LinkedIn job view URL |
logoUrl | Company logo URL from the listing |
Company (from listing)
| Field | Description |
|---|---|
companyName | Employer name |
companyId | LinkedIn company slug |
companyIdNumeric | Numeric LinkedIn company ID when available |
companyUrl | LinkedIn company page URL |
Location, posting, and compensation
| Field | Description |
|---|---|
location | Job location as shown on the listing |
workplaceType | On-site, remote, or hybrid when shown |
postedAt | Parsed posting date (YYYY-MM-DD) when available |
postedText | Relative posting text (for example 5 days ago) |
postedAgeDays | Estimated age in days when parseable |
salary | Salary or pay range when LinkedIn displays it |
benefits | Benefits text when shown |
easyApply | Whether LinkedIn Easy Apply is available |
promoted | Whether the listing is marked as promoted |
Description and criteria
| Field | Description |
|---|---|
description | Full job description as plain text |
descriptionHtml | Job description with HTML formatting |
criteria | Array of { label, value } pairs (seniority, employment type, job function, industries) |
contractType | Employment type label when parsed |
experienceLevel | Seniority level when parsed |
workType | Job function when parsed |
sector | Industry when parsed |
applicantText | Applicant count label when shown (for example Over 200 applicants) |
Apply and poster
| Field | Description |
|---|---|
applyType | Apply method (for example EXTERNAL or Easy Apply) |
applyUrl | URL to apply or view the application |
posterProfileUrl | LinkedIn profile URL of the job poster when shown |
posterFullName | Name of the job poster when shown |
Search context
| Field | Description |
|---|---|
searchId | Internal ID for the search that produced this job |
searchKeywords | Keywords from a keyword search (null for direct URL searches) |
searchLocation | Location from a keyword search (null for direct URL searches) |
input | Snapshot of the search input β source, keywords, URL, filters, and limits |
company (when Fetch company details is enabled)
| Field | Description |
|---|---|
companyUrl | Canonical LinkedIn company page URL |
pageType | Page type (company or showcase) |
companyId | LinkedIn company slug |
companyIdNumeric | Numeric company ID |
name | Company name |
tagline | Company tagline when shown |
followerCount | Follower count when available |
logoUrl | Company logo URL |
description | Company about text |
industry | Primary industry |
companySize | Employee count range |
headquarters | Headquarters location |
website | Company website URL |
organizationType | Organization type (for example Privately Held) |
founded | Year founded when shown |
specialties | List of company specialties |
address | Structured address when available |
affiliatedCompanies | Related companies with name and url when shown |
Example output
The excerpts below come from a real run combining a keyword search and a direct search URL. Full output is available in the run dataset.
Example input
{"startUrls":[{"url":"https://www.linkedin.com/jobs/search?keywords=Full+Stack+Developer&location=United+States&f_TPR=r86400"}],"keywordSearches":[{"keywords":"Python Developer","location":"United States"}],"maxJobsPerSearch":25,"deduplicateJobs":true,"fetchCompanyDetails":true}
Excerpt β keyword search job with description and enriched company
{"jobId":"3952273769","title":"Python Developer","companyName":"Open Systems Technologies","companyId":"open-systems-technologies","companyIdNumeric":"11655","companyUrl":"https://www.linkedin.com/company/open-systems-technologies?trk=public_jobs_topcard-org-name","location":"New York, NY","postedAt":"2026-06-22","postedText":"5 days ago","postedAgeDays":5,"salary":"$150","easyApply":false,"promoted":false,"jobUrl":"https://www.linkedin.com/jobs/view/python-developer-at-open-systems-technologies-3952273769","searchId":"keyword_2","searchKeywords":"Python Developer","searchLocation":"United States","input":{"source":"keywordSearch","searchId":"keyword_2","keywords":"Python Developer","location":"United States","searchUrl":"https://www.linkedin.com/jobs/search?keywords=Python+Developer&location=United+States","maxJobsPerSearch":25,"filters":{"easyApplyOnly":false,"excludePromoted":false}},"description":"A major financial firm is looking for a Python Developer to join their team in New York, NY. Compensation: $150-200k/year β¦","criteria":[{"label":"Seniority level","value":"Not Applicable"},{"label":"Employment type","value":"Full-time"},{"label":"Job function","value":"Engineering and Information Technology"},{"label":"Industries","value":"Staffing and Recruiting"}],"applicantText":"Over 200 applicants","contractType":"Full-time","experienceLevel":"Not Applicable","workType":"Engineering and Information Technology","sector":"Staffing and Recruiting","applyType":"EXTERNAL","applyUrl":"https://www.linkedin.com/jobs/view/3952273769","company":{"companyUrl":"https://www.linkedin.com/company/open-systems-technologies/","pageType":"company","companyId":"open-systems-technologies","companyIdNumeric":"11655","name":"Open Systems Technologies","followerCount":286921,"description":"Open Systems Technologies is a tier-one vendor for the world's most competitive financial and technology companiesβ¦","industry":"Staffing and Recruiting","companySize":"201-500 employees","headquarters":"New York, NY","website":"http://www.opensystemstech.com","organizationType":"Privately Held","founded":"1990","specialties":["Staffing agency","Consulting services","Technology jobs"]}}
Excerpt β direct search URL job
{"jobId":"4434091820","title":"Front-End Engineer","companyName":"InAir","companyId":"inairstudio","location":"United States","postedAt":"2026-06-27","postedText":"1 day ago","postedAgeDays":1,"jobUrl":"https://www.linkedin.com/jobs/view/front-end-engineer-at-inair-4434091820","searchId":"url_1","searchKeywords":null,"searchLocation":null,"input":{"source":"startUrl","searchId":"url_1","url":"https://www.linkedin.com/jobs/search?keywords=Full+Stack+Developer&location=United+States&f_TPR=r86400","maxJobsPerSearch":25},"description":"We're looking for a full time Front-End Engineer (React) with strong hands-on coding experienceβ¦","criteria":[{"label":"Seniority level","value":"Not Applicable"},{"label":"Employment type","value":"Contract"},{"label":"Job function","value":"Engineering and Information Technology"},{"label":"Industries","value":"Software Development"}],"applicantText":"183 applicants","contractType":"Contract","applyType":"EXTERNAL"}
Pricing
Job collection is included when you run the Actor. See the Pricing tab on the Apify Store listing for compute and platform costs.
When Fetch company details is enabled, a company_detail event is charged for each unique company profile successfully retrieved in the run. If the same company appears on multiple jobs, it is counted once. Failed company lookups are not charged. Cached companies within the same run are not charged again.
Disable Fetch company details if you only need listing-level company fields (companyName, companyId, companyUrl).
Free plan limits
On the Apify free plan, the Actor may automatically apply:
| Limit | Value |
|---|---|
| Direct search URLs per run | 2 |
| Keyword searches per run | 2 |
| Maximum jobs per search | 10 |
Additional searches or higher job limits are trimmed for free-plan runs. Paid Apify plans can use the full input without these caps. If limits apply, the run log will include a short notice.
Public listings and data coverage
No LinkedIn login required
The Actor reads publicly visible job search and listing pages. It does not sign in to LinkedIn and does not use your account or cookies.
Guest view vs signed-in view
Results reflect what LinkedIn shows to visitors who are not logged in. Compared with what you see when signed in, output may include:
- Fewer applicant details or poster information
- Missing or partial salary data
- Shorter company descriptions
- Limited workplace type labels
Coverage varies by listing, company, and region.
Search URL vs keyword search
Direct URLs preserve every filter in the link. Keyword searches use the Actor's filter fields. For precise control (for example a specific LinkedIn date filter), use a copied search URL.
Company enrichment
The optional company object comes from the public LinkedIn company page. Some companies expose more fields than others. Enrichment adds time to the run proportional to the number of unique companies.
Compliance
You are responsible for using collected data in line with applicable laws and LinkedIn's terms of service.
Tips for best results
- Copy search URLs from LinkedIn β When you need exact filters, paste the URL from your browser instead of rebuilding filters manually.
- Combine searches in one run β Use multiple keyword searches and URLs together; enable Remove duplicate jobs to avoid repeats.
- Start with a small
maxJobsPerSearchβ Test with 10β25 jobs per search before large exports. - Enable company details when you need firmographics β Turn on Fetch company details for industry, size, headquarters, website, and specialties.
- Use
jobIdas a stable key β Deduplicate across runs onjobIdwhen refreshing listings over time. - Filter on
input.searchIdβ Split results by search when running multiple queries in one job. - Schedule recurring runs β Use Apify schedules to monitor new postings for your target roles and locations.
- Export flexibly β Download the dataset as JSON, CSV, Excel, or connect via API to your ATS, CRM, or data warehouse.
Frequently asked questions
Can I use both search URLs and keyword searches in one run?
Yes. Provide at least one of either type, or combine both. Enable Remove duplicate jobs to avoid saving the same listing twice.
Why is salary empty for some jobs?
LinkedIn only shows salary on some listings. When pay is not displayed publicly, the field is omitted or null.
Why is there no company object on my results?
The company object is only included when Fetch company details is enabled. Without it, you still receive companyName, companyId, and companyUrl from the job listing.
How is company enrichment billed?
Each unique company profile successfully retrieved counts as one company_detail event. Repeated jobs from the same employer in one run do not incur additional company charges. See the Pricing tab for rates.
Why did some jobs or company profiles fail?
Individual listings or company pages may be temporarily unavailable or restricted. The run continues for other searches and jobs; check the run log for counts of partial failures.
Do filters apply to my search URLs?
No. Filters in the input apply to keyword searches only. Direct URLs are scraped exactly as provided.
Can I scrape individual job URLs?
This Actor is built for job search results (search URLs or keyword queries). Paste a search URL or configure a keyword search rather than a single job view URL.
Why does the same job look different from my browser?
If you are signed in to LinkedIn, you may see more detail than a public guest visitor. This Actor matches the guest view.
Support
For Actor-specific issues, use the Issues tab on the Apify Store listing or contact the publisher through Apify.
For platform questions (runs, billing, API, schedules), see Apify documentation and Apify support.
