Home › Guides › LinkedIn company jobs scraper

LinkedIn company jobs scraper: open roles, salaries and company data for a list of companies

Give the LinkedIn Company Jobs Scraper a list of companies and it returns their open LinkedIn jobs as clean rows — title, location, posted date, seniority, employment type, job function, applicant count, the full description and salary, with the company's own data on every row. It reads only LinkedIn's public job pages: no LinkedIn account, no cookies.

Who it's for

What is different, measured on the platform

  1. Salary sits in the description. LinkedIn's own pay box was filled for only 53 of 897 jobs in our test runs; most employers write the range into the description instead (“The annual US base salary range for this role is …”). The scraper reads both, under strict rules, and tells you where each figure came from (salarySource, salaryRaw). Salary was found for 99% of US-located jobs (493 of 498 — mostly California, New York and Washington, which require pay ranges), 30% of jobs elsewhere and 68% overall.
  2. No location means US only. Without a location, LinkedIn quietly searches the United States only — Stripe showed 625 US jobs against 942 worldwide. The scraper asks for worldwide unless you name a place.
  3. LinkedIn's own job count is worth keeping. linkedinJobCount is on every row: a hiring-volume signal, and a check that you got everything.
  4. Public pages ignore seniority and job-type filters. The results do not change when you set them. The scraper applies these filters to what each job page states. About half of the employers tested state no seniority at all, and the run tells you when that is the case.

What you get

FieldsWhat they are
Title, location, posted date, job URL and IDFrom the job listing
Seniority, employment type, job function, industriesAs LinkedIn states them on the job page
salaryMin, salaryMax, currency, periodParsed pay — yearly, monthly or hourly, cents kept
salarySource, salaryRawlinkedin (LinkedIn's pay box) or description (the employer's own sentence, quoted)
Applicant count and its bounds“Over 200 applicants” is a floor, “Be among the first 25” a ceiling
DescriptionThe full text, line breaks and bullets kept, plus the HTML
Company identityName, ID, LinkedIn URL, website as LinkedIn lists it, and the registrable domain (news.microsoft.com becomes microsoft.com)
Company firmographicsIndustry, employee count, followers, HQ and founding year from the company's LinkedIn page, on every row
linkedinJobCountLinkedIn's own count of open jobs for the company and your search
ProvenanceWhether the job page was read, how the company was identified, which input it came from, and whether a monitor saw it before

A real row from a platform run, trimmed:

{
  "companyName": "Vercel",
  "companyDomain": "vercel.com",
  "companyIndustry": "Software Development",
  "companyEmployeeCount": 1027,
  "companyHQ": "San Francisco, California, US",
  "linkedinJobCount": 32,
  "title": "Software Engineer, Financial Data Platform",
  "location": "New York, United States",
  "postedDate": "2026-09-19",
  "employmentType": "Full-time",
  "salaryMin": 190000,
  "salaryMax": 258000,
  "salaryCurrency": "USD",
  "salaryPeriod": "yearly",
  "salarySource": "description",
  "applicantCountText": "Be among the first 25 applicants",
  "detailStatus": "ok"
}

The same row shows a limit worth knowing: this New York job quotes only the San Francisco pay range. salaryRaw always carries the employer's sentence, so you can see which location a range belongs to.

How salary is read

Input example

Engineering jobs posted this week at three companies:

{
  "companies": [
    "stripe",
    "vercel",
    "https://www.linkedin.com/company/notionhq/"
  ],
  "keywords": "engineer",
  "datePosted": "past-week",
  "maxJobsPerCompany": 100
}

Companies can be a LinkedIn company URL, a slug, a numeric company ID or a name. Slugs can belong to a namesake: notion is a 39-person company called “Notion”, while Notion Labs is notionhq — when in doubt, paste the URL. Keywords, location and posting date are applied by LinkedIn; seniority and job type are applied by the scraper. For a weekly watch on target accounts, add onlyNewJobs and a monitorName and schedule the run.

Measured data quality and speed

Platform runs on builds 0.1.1–0.1.4, 2026-09-24:

FieldsShare of jobs
Title, location, posted date, job URL100%
Company name, ID, domain, industry, employees, HQ100%
Seniority, employment type, job function, industries, applicant count, description (details on)100% of jobs whose page was read; 512 of 512 pages read
Salary (details on)68% of 897 unique jobs: 99% of US-located jobs, 30% elsewhere
Founding year61–100% — some company pages state none, and none is invented
Unique jobs per input100%

Salary coverage depends on the employer: from 0% in the Shopify and Goldman Sachs samples to 94% at Figma; Microsoft's jobs in Germany had it on 12 of 12. On 512 MB with residential proxy, Stripe, Vercel and Microsoft at 200 jobs each with full details came back as 512 jobs in 342 s — about 90 jobs a minute. The scraper only makes HTTP requests and parses HTML, with no browser.

Honest limits

Pricing

Pay per event: one event per job delivered, and one per job page read — every delivered job with details on, plus, when you use the seniority or job-type filter, the pages of jobs the filter left out. Companies that are not found or have no jobs cost nothing and leave an explanatory row. Current prices are on the actor's Pricing tab.

Related

More company-data scrapers on foXLabs. For what a public LinkedIn company page exposes beyond jobs, read LinkedIn company data without a login; for the same roles straight from Greenhouse, Lever, Ashby and other applicant tracking systems, read hiring signals from ATS job boards.

Frequently asked questions

Do I need a LinkedIn account or cookies?

No. Only LinkedIn's public job pages are read, without logging in.

Why did I get fewer jobs than linkedinJobCount?

LinkedIn's public search stops at about 1,000 jobs per company and search. Split big employers by location, keywords or datePosted. linkedinJobCountIsLowerBound marks counts LinkedIn shows as 2,000+.

Why is there no remote or hybrid filter?

LinkedIn's public pages ignore the workplace filter (the results do not change) and do not state the workplace type reliably, so the scraper offers neither the filter nor a column rather than guess. Use keywords, for example remote, if the word matters to you.

How do I catch every new job with a monitor?

Each monitoring run returns at most “Max jobs per company” jobs the monitor has not seen, and remembers them. Set it above the company's volume for your search (linkedinJobCount on the rows shows it) and use “Posted: past week” for a weekly schedule. Measured: a second run over ten companies returned 157 jobs, none of them returned before.

Why does the seniority filter find nothing at some companies?

Many employers state no seniority on LinkedIn. In a sample of twelve tech companies, six (Vercel, Microsoft, HubSpot, Snowflake, OpenAI, Notion) had “Not Applicable” on every job, while Stripe, Figma, Shopify, Airbnb and Goldman Sachs state it. Run without the seniority filter, or add “Not Applicable”.

Try it: paste your target accounts into the input above and run it on Apify, then export the jobs or schedule a weekly monitor.

Open the LinkedIn Company Jobs Scraper →

Or browse all foXLabs datasets on Apify.