LinkedIn Jobs Scraper - No Login, Full Descriptions
Pricing
from $0.35 / 1,000 job listeds
LinkedIn Jobs Scraper - No Login, Full Descriptions
Scrape LinkedIn job listings by keyword and location with full descriptions, salary, seniority, employment type, industries, applicant count and apply type. Filters for date posted, distance, job type and experience level. No login or cookies.
Pricing
from $0.35 / 1,000 job listeds
Rating
0.0
(0)
Developer
Solar G
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 hours ago
Last modified
Categories
Share
Scrapes LinkedIn job listings by keyword and location from LinkedIn's public job search, with no login or cookies. With details turned on, each job also has its full description (plain text and HTML), salary (when listed), seniority level, employment type, industries, applicant count, apply type and the employer's LinkedIn company ID.
Input
| Field | Description |
|---|---|
searches | Job keywords, e.g. "data engineer", "nurse". |
location | City, region or country. Leave empty for worldwide. |
distance | Optional radius around the location in miles: 0, 5, 10, 25, 50 or 100. |
maxJobsPerSearch | Default 100. LinkedIn shows up to about 1,000 jobs per search. |
postedWithin | any, day, week or month. |
jobTypes | Keep only fulltime, parttime, contract, temporary, internship, volunteer or other jobs. |
experienceLevels | Keep only internship, entry, associate, midsenior, director, executive or notapplicable jobs. |
includeDetails | Full description and job criteria. Default true. |
{"searches": ["data engineer", "analytics engineer"],"location": "London","distance": "10","postedWithin": "week","experienceLevels": ["entry", "associate"],"maxJobsPerSearch": 200}
How the inputs work:
- Location is matched to a LinkedIn location first. If LinkedIn does not recognise it, the run returns an error item for each search instead of worldwide results. Add a country to avoid ambiguous names, e.g.
"Cambridge, England". - Date posted and distance are applied by LinkedIn.
- Job type and experience level are not applied by LinkedIn's logged-out search, so the Actor reads each job's details and keeps only the jobs that match. This takes longer (many jobs may be read for each match), so each search checks at most 6 listings per job requested (at least 60) for up to about 75 seconds. A rare combination may therefore return fewer jobs than requested. If
includeDetailsis off, the details are used only for filtering and are not charged. - Remote, hybrid and on-site filters and "sort by date" are not offered: LinkedIn's logged-out search ignores them.
workplaceTypeis filled in only when the job title or location says "remote", "hybrid" or "on-site".
Output
{"search": "data engineer","searchLocation": "London","jobId": "4480480883","title": "Data Engineer","company": "LA International","companyId": "27624","companyUrl": "https://uk.linkedin.com/company/la-international","location": "London Area, United Kingdom","workplaceType": null,"postedDate": "2026-10-20","postedText": "3 days ago","salary": "£55,000.00/yr - £75,000.00/yr","benefits": "Actively Hiring","url": "https://www.linkedin.com/jobs/view/4480480883","companyLogo": "https://media.licdn.com/dms/image/...","description": "Data Engineer | SC Cleared / SC Eligible\nHybrid working in London\n...","descriptionHtml": "<p><strong>Data Engineer | SC Cleared / SC Eligible</strong></p>...","seniorityLevel": "Mid-Senior level","employmentType": "Full-time","industries": "IT Services and IT Consulting, Financial Services, and Defense and Space Manufacturing","applicants": "98 applicants","applicantsCount": 98,"applicantsCountIsMinimum": false,"applyType": "linkedin"}
applicantsCountis the number LinkedIn shows. For "Over 200 applicants" it is200withapplicantsCountIsMinimum: true. For "Be among the first 25 applicants" it isnull.applyTypeislinkedin(apply on LinkedIn) orexternal(apply on the employer's site).- Jobs that appear in more than one search are returned once.
- If a job's details cannot be read (expired, removed, or LinkedIn did not answer), the job has a
detailsErrorand is not charged the details add-on. - A search that finds nothing, or a location LinkedIn does not recognise, returns an error item:
{ "type": "error", "search": "...", "input": "...", "searchLocation": "...", "error": "..." }. Error items are free.
API usage
curl -X POST "https://api.apify.com/v2/acts/solarg~linkedin-jobs-scraper/run-sync-get-dataset-items?token=YOUR_API_TOKEN" \-H "Content-Type: application/json" \-d '{"searches": ["data engineer"], "location": "London", "postedWithin": "day"}'
from apify_client import ApifyClientclient = ApifyClient("YOUR_API_TOKEN")run = client.actor("solarg/linkedin-jobs-scraper").call(run_input={"searches": ["nurse"], "location": "Manchester"})items = client.dataset(run["defaultDatasetId"]).list_items().items
Schedule a daily run with postedWithin: "day" to get a feed of new jobs.
Pricing
- $0.50 per 1,000 jobs (listing)
- $0.50 per 1,000 jobs for full details (only when
includeDetailsis on, and only for jobs whose details were read)
Error items are free. Platform usage is included in the price.
Limitations
- Only public job postings are available. No profiles, recruiter names or applicant data.
- Salary appears only when the employer publishes it.
- LinkedIn limits each search to about 1,000 results. Use narrower searches for more.
- When a run is close to its timeout, the Actor stops early and saves what it has, so the run still succeeds.
Report problems in the Issues tab.