LinkedIn Jobs Feed
Pricing
from $1.28 / 1,000 job rows
LinkedIn Jobs Feed
Search LinkedIn jobs by keyword, location, date, workplace, and level, and get one row per job with the employer's own website domain attached. Description, seniority, employment type, industries, and applicants included. No login. Only new jobs on a schedule.
Pricing
from $1.28 / 1,000 job rows
Rating
0.0
(0)
Developer
Mamba Labs
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
14 hours ago
Last modified
Categories
Share
Search LinkedIn jobs the way you would in the job search box, by keywords and location, and get one row per job with the employer's own website domain already attached. Each row carries the job title, company, company page, location, posting date, and link, and by default the description, seniority level, employment type, job function, industries, and applicant count from the public posting page. Rows are flat, so they drop into a Clay table, a CRM, or a CSV.
Features
- The employer domain on every row you can trust. Each employer is looked up once by name, first in a public company name autocomplete and then with a web search, and the domain is returned only when it clearly matches the company name (
domain_statusresolved, withdomain_sourcesaying which route found it). A weak match is left empty and labeledlow_confidence, so a wrong domain never reads as an answer. Lookups are cached for 90 days in your own Apify account, so repeat employers cost nothing extra. - Location honored. The location goes to LinkedIn's own job search as you type it, one search per location, and every row keeps the location you asked for beside the location LinkedIn posted.
- Filters LinkedIn applies. Posted within 24 hours, a week, or a month; on site, remote, or hybrid; experience level; and job type. Exclude companies by name, such as staffing agencies.
- Posting details. Description, seniority level, employment type, job function, industries, and applicant count from each job's public page, at no extra charge.
- Only new jobs. Turn on
only_newwith astate_key, schedule the run, and each run returns only jobs that earlier runs did not return. Results come newest first, so a scheduled run stops paging once it reaches jobs it has already returned. - Paced reads. Requests are spaced and spread over Apify proxy IPs; a refused page is retried on a new IP. A search that LinkedIn refuses says so on its search row instead of returning a silent zero.
How it reads LinkedIn
Only the two public job pages LinkedIn serves to visitors who are not signed in: the job search list and the job posting page. No login, no cookie, no LinkedIn account, no profile or company page reads, and no other developer's actor. The employer domain comes from a public company name autocomplete (autocomplete.clearbit.com, no key) and a public web search results page. The saved state and the domain cache live in key-value stores in your own Apify account.
Input
| Field | Type | Default | What it does |
|---|---|---|---|
keywords | array | Job searches, one per line, up to 50 searches (keywords times locations) | |
locations | array | worldwide | Countries, cities, or regions as LinkedIn takes them; each search runs once per location |
posted_within | string | week | 24h, week, month, or any |
workplace_types | array | Any of on_site, remote, hybrid | |
experience_levels | array | Any of internship, entry, associate, mid_senior, director, executive | |
job_types | array | Any of full_time, part_time, contract, temporary, internship, volunteer, other | |
max_jobs_per_search | string | 100 | Job rows per search, newest first, up to 1000 |
exclude_companies | array | Drop jobs whose company name contains one of these | |
include_details | string | true | false skips the posting page for a faster run with the card fields only |
find_company_domain | string | true | false skips the domain lookup |
only_new | string | false | true returns only jobs not returned before under the same state_key |
state_key | string | Names the saved state; one key per schedule | |
reset_state | string | false | true forgets the saved state |
max_charge_usd | string | Stop before a row would pass this amount |
Every field accepts text, as Clay sends it: "true", "50", a JSON array, or one value per line.
Output
One row layout for every row type. Key fields:
| Field | Rows | Example |
|---|---|---|
row_type | all | job, search, input_error |
search_keywords, search_location | all | account executive, Germany |
job_id, job_title, job_url | job | 4484460127, Enterprise Account Executive, https://www.linkedin.com/jobs/view/4484460127 |
company_name, company_linkedin_url | job | hyrise, https://www.linkedin.com/company/hyrise |
company_domain, domain_status, domain_confidence, domain_source | job | hyrise.com, resolved, 50, web_search |
location, posted_date, posted_ago_text | job | Berlin, Germany, 2026-10-28, 2 hours ago |
seniority_level, employment_type, job_function, industries | job, with details | Associate, Full-time, Sales, Software Development |
description, applicants_text, salary_text | job, with details | plain text |
is_new, first_seen_at | job, with only_new | true |
jobs_found, jobs_returned | search | 20, 15 |
row_status, error_reason, billable_events_json | all | ok, null, {"job-row":1} |
The run summary (key-value store record RUN_SUMMARY) counts search pages, jobs listed and returned, posting pages read, domains found by status, and requests per host.
Pricing
Pay per event. You pay only these events; the Apify platform and proxy costs of your run are paid by Mamba Labs.
| Event | Free plan | Bronze | Silver | Gold |
|---|---|---|---|---|
Job row (job-row), one job returned, with details and the employer domain | $0.0015 | $0.001425 | $0.00135 | $0.001275 |
Actor start (apify-actor-start), once per run | $0.001 | $0.001 | $0.001 | $0.001 |
Free rows: one search row per search and location, and the row for a refused input. Posting details and the domain lookup carry no extra charge. On the Apify free plan the actor stops at 1.50 USD of evaluation a month (about 1000 job rows); any paid Apify plan removes that cap. The run also stops before any row that would pass your max_charge_usd or the maximum charge per run you set in Apify.
Example: three searches in two countries, 50 jobs each, return 300 jobs: 300 job rows ($0.45), $0.4510 with the actor start.
Usage examples
Apify Console or API
{ "keywords": ["account executive"], "locations": ["Germany"] }
{ "keywords": ["sdr manager", "head of sales"], "locations": ["London, England, United Kingdom", "Berlin, Germany"], "posted_within": "24h", "experience_levels": ["mid_senior", "director"] }
{ "keywords": ["revops"], "locations": ["United States"], "workplace_types": ["remote"], "only_new": "true", "state_key": "revops-us-daily", "max_jobs_per_search": "300" }
Clay
Send a job search and a location to keywords and locations, and read company_domain, company_name, job_title, and job_url from the job rows. Filter on domain_status = resolved before you enrich by domain.
Scheduled monitoring
Save the input as an Apify task with only_new on and a state_key, and schedule it daily with posted_within 24h or week. Each run returns only jobs earlier runs did not.
MCP
The MCP server @mambalabsdev/mcp-linkedin-jobs-feed exposes this actor as a tool for Claude and other MCP clients.
Error handling
| Situation | What you get |
|---|---|
| LinkedIn refuses the first search page after four tries on new IPs | One free search row with row_status blocked and the HTTP status |
| A later search page fails | The jobs read so far are returned; the search row says partial |
| A posting page cannot be read | The job row keeps the card fields, row_status partial, and says why; it is charged as a job row |
| Neither domain route answers | company_domain empty, domain_status search_failed |
| No job matches | One free search row with row_status no_results |
| The input names no search or is malformed | One free input_error row whose error_reason starts with input_invalid:; the run succeeds and nothing is charged by the actor |
| Max charge reached | The run stops before the next billable row; with only_new, that search's state is not saved, so its jobs come back next run |
Limitations
- LinkedIn shows visitors who are not signed in about 1,000 results per search. Split a wide search by location or keyword to see more.
- A job listed by a staffing agency names the agency as the company, as LinkedIn shows it.
- The employer domain is a name match. Two companies with the same name can share a suggestion, so read
domain_sourceanddomain_confidencebefore you rely on a domain. - The employer domain is found from the company name alone. A company with a common word as its name, or with no website, may come back
low_confidenceornot_foundrather than a guess. - Salary appears only when the employer posts one.
posted_dateandposted_ago_textare LinkedIn's; a reposted job can show its repost date.- You are responsible for how you use the data and for the terms of the sites you read.
More from Mamba Labs
Built by Mamba Labs.