LinkedIn Jobs Scraper — No Login, No Cookies avatar

LinkedIn Jobs Scraper — No Login, No Cookies

Pricing

Pay per usage

Go to Apify Store
LinkedIn Jobs Scraper — No Login, No Cookies

LinkedIn Jobs Scraper — No Login, No Cookies

Scrape LinkedIn job listings without login or cookies. Filter by keyword, location, remote and posting age, and get clean JSON with title, company, location, salary and apply URL. Ideal for job search automation, market research and recruiting pipelines.

Pricing

Pay per usage

Rating

0.0

(0)

Developer

Nomad.Dev

Nomad.Dev

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

1

Monthly active users

10 hours ago

Last modified

Categories

Share

Extract live job postings from LinkedIn's public job search — no account, no cookies, no browser. Filter by keyword, location, remote-only and posting age, and receive one clean JSON record per job.

What LinkedIn jobs data does this scraper extract?

Each result is one flat JSON record per job posting:

FieldMeaning
idNumeric LinkedIn job posting id, extracted from the posting URL (null if it couldn't be parsed)
titleJob title as posted
companyHiring company / organisation
locationLocation / duty station (may include remote hints)
postedAtPosting date (YYYY-MM-DD) read from the search card, when LinkedIn includes it (null otherwise)
urlDirect link to the posting
sourceAlways "linkedin"
descriptionFull plain-text job description (empty string if includeDescription is off or the fetch failed)
snippetAlias of description, same value — kept for compatibility with other scrapers in this collection

LinkedIn's guest cards never carry salary data, so no salary field is emitted — we don't fabricate one.

How to scrape LinkedIn jobs with this Actor

  1. Click Try for free / Run — no login to the target site, no cookies, no proxies to configure.
  2. Adjust the input (keyword, filters, maxItems) or keep the defaults.
  3. Run it and export the dataset as JSON, CSV or Excel, or read it over the API.

Run it from your own code:

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("nomad-agent/linkedin-scraper").call(run_input={"maxItems": 50})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["title"], "—", item["company"], item["url"])

Or a single HTTP call that runs the Actor and returns items in one response:

curl -X POST \
"https://api.apify.com/v2/acts/nomad-agent~linkedin-scraper/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>" \
-H "Content-Type: application/json" \
-d '{"maxItems": 50}'

Input

FieldTypeDefaultNotes
keywordstring""Job title, skill or role to search for (e.g. "software engineer", "product manager react"). Leave empty to…
locationstring""City, region or country to filter by (e.g. "Spain", "London", "European Union"). Leave empty for worldwide…
remotebooleanfalseWhen enabled, restricts results to remote-eligible postings.
timeFilterstring"r86400"Restrict to postings published within the chosen window.
maxItemsinteger100Maximum number of job postings to return. Set 0 for no limit (up to ~200 per run).
includeDescriptionbooleantrueFetch and include the full plain-text job description for each posting. Disabling this makes runs faster…
postedSinceinteger0Drop results whose posting date is older than this many days. Items without a known posting date are not filtered out. Set 0 to disable.
titleExcludearray of strings[]Drop a result if its title contains any of these words or phrases (case-insensitive).
companyExcludearray of strings[]Drop a result if its company name contains any of these words or phrases (case-insensitive).
cacheTtlSecondsinteger1800Reuses the last fetch for this many seconds so rapid re-runs don't hit LinkedIn again. Set 0 to always fetch live.

All three filters default to off/empty, so existing integrations see no behavior change unless you opt in.

Output example

{
"id": "4429472960",
"title": "Senior Frontend Engineer (React)",
"company": "Acme Software",
"location": "Berlin, Germany (Remote)",
"postedAt": "2026-06-30",
"url": "https://www.linkedin.com/jobs/view/4429472960",
"source": "linkedin",
"description": "We are hiring a Senior Frontend Engineer...",
"snippet": "We are hiring a Senior Frontend Engineer..."
}

id and postedAt are null on the rare card where LinkedIn's markup doesn't include them — the rest of the record is unaffected.

Pricing

Pay per event: $0.05 per Actor start and $0.004 per job returned. 100 jobs ≈ $0.45. No subscription, no rental — you pay only for what you fetch.

Integrations

Export results as JSON, CSV or Excel; connect via Make, Zapier or n8n; call directly with run-sync-get-dataset-items; or plug into AI agents through the Apify MCP server.

Use cases

  • Job-alert bots and job boards that need fresh LinkedIn postings
  • Recruiting and sourcing pipelines tracking who is hiring
  • Salary and hiring-market research by role or region
  • AI agents that match candidates to live openings

FAQ

Is it legal to scrape LinkedIn jobs? This Actor reads only publicly available job postings — data any visitor can see without logging in. No personal data behind authentication is touched. Review the target site's terms and your local regulations for your specific use case.

Do I need an account on the target site? No. Postings are fetched from public pages/APIs — no login, cookies or session tokens.

How fresh is the data? Every run fetches live listings. Results are cached for cacheTtlSeconds (default 30 min, set 0 to always hit the source live).

How many jobs can I get? maxItems caps the run (set 0 where supported for no cap). Most sources paginate from newest to oldest.

Does it work without a LinkedIn account? Yes. The scraper reads LinkedIn's public guest job-search endpoint, so no login, cookies or session tokens are needed.

Something broken or missing? Open an issue on the Actor's Issues tab — it is monitored and reliability fixes ship fast.