LinkedIn Jobs Scraper: Every Job, Counted avatar

LinkedIn Jobs Scraper: Every Job, Counted

Pricing

$1.00 / 1,000 jobs

Go to Apify Store
LinkedIn Jobs Scraper: Every Job, Counted

LinkedIn Jobs Scraper: Every Job, Counted

$1 per 1,000 jobs. Every job a LinkedIn search lists, checked against LinkedIn's own count, each with its full description, applicants, poster and company id.

Pricing

$1.00 / 1,000 jobs

Rating

0.0

(0)

Developer

Luzi

Luzi

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

11 minutes ago

Last modified

Share

Get every job a LinkedIn job search lists, checked against the count LinkedIn shows for that search, and each job with its full description, the number of applicants, seniority, employment type, industry, the job poster when shown, the company's id and how you apply. One row per job. No LinkedIn account, login or cookies needed.

Tested daily. Latest check: 56 of 56 Golang jobs in Da Nang, Vietnam, matching LinkedIn's own count; 800 jobs from two United States searches, each read to its 400-job limit.

What does this Actor do?

You give it keywords and a location, or links to LinkedIn job searches. For each search it reads LinkedIn's results and then each job's own page, and saves one row per job, until it reaches your limit or the search has no more jobs. When the search shows an exact count (up to 1,000 jobs), the run's final status tells you whether every job was read: "That is every job the site lists for Golang in Da Nang, Vietnam (56 of 56)."

Each job comes with:

  • its title, link, location and the date it was posted
  • the company's name, page, logo and LinkedIn id
  • the full description, as text and as HTML
  • the applicant count ("43 applicants", or "Be among the first 25 applicants" for new jobs)
  • seniority level, employment type and industries
  • whether you apply on LinkedIn (Easy Apply) or on the company's site, and whether the job still takes applications
  • the salary, when the job shows one
  • the job poster's name, headline, profile and photo, when the job shows them
  • the highlights LinkedIn puts on the job ("Actively Hiring", "Be an early applicant")
  • the search it was found in, and how many jobs LinkedIn counted for it

Why use it?

  • Know you have the whole search. When LinkedIn shows an exact count (up to 1,000 jobs), the run checks the search against it, so a short read is never silent.
  • Find hiring companies and recruiters. Every row carries the company id, and the poster's profile when the job shows one.
  • Track a job market. Run it daily on your keywords with "Past 24 hours" and collect each day's new jobs.
  • Use the data anywhere. Download as JSON, CSV or Excel, or send it to your own tools through Apify's API and integrations.

How to use it

  1. Type one or more Keywords and a Location, or paste Search links, or both.
  2. Optionally, choose Date posted, Easy Apply only and Max jobs per search.
  3. Click Start. When the run ends, open the Output tab to view the jobs or download them.

A LinkedIn job search, such as https://www.linkedin.com/jobs/search?keywords=data%20engineer&location=Germany. Its keywords, location, date posted and Easy Apply filters are used. Other filters in the link (remote, job type, experience level, company) are not applied. Other LinkedIn pages (a single job, a company, a profile) and other sites stop the run before anything is read, naming the link.

Input

FieldWhat it doesDefault
Keywords (keywords)Job titles or skills to search for, one search each—
Location (location)A country, region or city, used for every keyword. Empty = LinkedIn chooses—
Date posted (datePosted)any, 24h, week or month, for the keywordsany
Easy Apply only (easyApplyOnly)Only jobs you apply to on LinkedIn, for the keywordsfalse
Search links (startUrls)LinkedIn job search links—
Max jobs per search (maxJobsPerSearch)Stop each keyword or link after this many jobs, 1 to 1,000100

Give at least one keyword or one link. Example input:

{
"keywords": ["data engineer", "analytics engineer"],
"location": "Germany",
"datePosted": "week",
"maxJobsPerSearch": 200
}

Output

One row per job. An example, with made-up values:

{
"job_id": "4400000001",
"url": "https://www.linkedin.com/jobs/view/4400000001",
"job_url": "https://de.linkedin.com/jobs/view/data-engineer-at-example-gmbh-4400000001",
"title": "Data Engineer",
"company_name": "Example GmbH",
"company_url": "https://de.linkedin.com/company/example-gmbh",
"company_id": "12345678",
"company_logo_url": "https://media.licdn.com/dms/image/…",
"location": "Berlin, Germany",
"posted_date": "2026-10-14",
"posted_ago": "2 days ago",
"is_new": false,
"benefits": ["Actively Hiring"],
"salary": "€60,000.00/yr - €75,000.00/yr",
"applicants_count": 43,
"applicants_text": "43 applicants",
"apply_type": "offsite",
"accepting_applications": true,
"seniority_level": "Mid-Senior level",
"employment_type": "Full-time",
"industries": "Software Development",
"description_text": "About the role\nYou will build our data platform…",
"description_html": "<strong>About the role</strong><br>You will build our data platform…",
"job_poster_name": "Alex Example",
"job_poster_title": "Technical Recruiter at Example GmbH",
"job_poster_url": "https://de.linkedin.com/in/alex-example",
"job_poster_photo_url": "https://media.licdn.com/dms/image/…",
"search_keyword": "data engineer",
"search_location": "Germany",
"search_url": "https://www.linkedin.com/jobs/search?keywords=data%20engineer&location=Germany",
"search_total": 1840,
"search_total_exact": true
}
FieldWhat it holds
job_idLinkedIn's id for the job
urlThe job's page
job_urlThe same page under the link LinkedIn shows, with the job's title in it
titleThe job's title
company_nameThe company hiring
company_urlThe company's LinkedIn page
company_idLinkedIn's numeric id for the company
company_logo_urlThe company's logo
locationWhere the job is
posted_dateThe day the job was posted, YYYY-MM-DD
posted_agoHow long ago, as LinkedIn says it ("3 days ago")
is_newtrue when LinkedIn marks the job as new
benefitsThe highlights LinkedIn shows on the job ("Actively Hiring", "Be an early applicant"). Often empty
salaryThe pay range, as shown. Empty on most jobs: only some jobs show one
applicants_countThe number of applicants. "Over 200 applicants" gives 200. Empty for "Be among the first 25 applicants"
applicants_textThe applicant line exactly as LinkedIn shows it
apply_typeeasy_apply (apply on LinkedIn) or offsite (apply on the company's site). Empty when the job shows neither
accepting_applicationsfalse when LinkedIn says the job no longer takes applications
seniority_levelInternship, Entry level, Associate, Mid-Senior level, Director, Executive or Not Applicable
employment_typeFull-time, Part-time, Contract, Temporary, Internship, Volunteer or Other
industriesThe industries LinkedIn gives the job
description_textThe full description, as plain text
description_htmlThe full description, with its formatting
job_poster_nameThe person who posted the job. Empty when the job does not show one
job_poster_titleThat person's headline
job_poster_urlThat person's profile
job_poster_photo_urlThat person's photo
search_keywordThe keyword the job was found under
search_locationThe location searched
search_urlThe search on LinkedIn
search_totalHow many jobs LinkedIn counted for the search ("5,000+" gives 5000)
search_total_exactfalse when LinkedIn showed the count as "5,000+", a floor rather than a count

Not included: the apply link (LinkedIn shows it only to signed-in members), the company's size, website and description, and the job function (LinkedIn did not show it on any job we tested).

How much does it cost?

You pay for what you get:

  • $1 per 1,000 jobs ($0.001 a job). Each job is charged once per run, even when two of your searches list it.
  • No start fee, and nothing per search.

So a search that lists 400 jobs costs $0.40. If you set a maximum cost for a run, the Actor stops when it reaches it and keeps every job saved so far.

How long does a run take?

About 56 jobs in under a minute; 800 jobs from two searches in about 10 minutes.

Good to know

  • At most 1,000 jobs per search. That is what LinkedIn lists for one search. For more, split it: several cities instead of one country, or "Past 24 hours" every day.
  • LinkedIn decides what matches. For a rare keyword LinkedIn also lists jobs that only loosely match it, and the count includes them; the Actor returns what LinkedIn lists.
  • Counts move. LinkedIn's count for a big search changes from minute to minute, and its list can change order while it is read, so a big search can read a few jobs short of the count. The final status says so, by search.
  • One job, one row. A job found again in the same run, under the same or another search, is not saved again. It counts for the search that found it first, so a later search that shares jobs with it can read short of its own count.
  • A search that cannot be read is reported in the run's status; the other searches carry on. The run fails only when none could be read. A job taken down while the run reads it makes its search count as not read; the jobs already saved from that search stay saved.
  • Running it daily? Remove repeats by job_id.

FAQ

Do I need a LinkedIn account or cookies? No. The Actor reads what anyone can see on LinkedIn without signing in.

Can I filter by remote, job type or experience level? Not yet. Date posted and Easy Apply are the filters it applies.

Can I run it from my own code, on a schedule, or with other apps? Yes. Like any Apify Actor, you can start it through the Apify API, run it on a schedule, and connect it to other apps with Apify's integrations and webhooks.

This Actor reads only public job postings. A posting can name the person who posted it; treat that as personal data. Check LinkedIn's terms and the laws that apply to you (such as the GDPR) before you use the data. If you are unsure, ask a lawyer.

Support

Found a problem or missing a feature? Open an issue on the Issues tab and include the run's link.


This Actor is not affiliated with, endorsed by or sponsored by LinkedIn or Microsoft.