How to Export a Company’s LinkedIn Job Listings
To understand where a company is hiring, begin with the exact employer rather than a keyword search that can mix competitors and recruiters. The LinkedIn Company Jobs Scraper accepts company names, slugs, or LinkedIn URLs and returns job rows with company context. I maintain the Actor.
This walkthrough creates a small hiring snapshot, then explains how to expand it without calling a capped sample every open role.

Resolve the employer before counting its jobs
Use a company slug or full LinkedIn company URL when identity matters. Plain names are matched through LinkedIn's company search and can resolve to an unintended business. Check companyId, companySlug, and companyUrl in the result before aggregating.
Leave keywords and location empty for a broad company snapshot. Adding them intentionally excludes other roles. postedWithin defaults to any time; selecting the past week changes the question to recent postings rather than all currently discoverable jobs.
maxItems applies across all supplied companies. A large employer can consume the cap before you have a comparable sample of a smaller one. Run employers separately when comparing their hiring totals.
Budget for the sample
Pricing as of September 6, 2026. Free-tier listings cost $0.0008 each and detailed jobs cost $0.003 each. Gold rates are $0.0004 and $0.0012. The selected job event is charged per returned row. The Actor-start event is $0.00005 per GB of allocated memory, with a minimum of one event. A pricing change is scheduled for 2026-09-09; recheck the rate before a later run or recurring schedule. Check current Actor pricing and the run charge breakdown; these calculations describe Actor events, and separately billed platform or proxy resources may also apply.
Collect an employer sample
Open the Actor on Apify. In Input, switch to the JSON editor and paste:
{
"companies": [
"stripe",
"https://www.linkedin.com/company/apify"
],
"keywords": "",
"location": "",
"postedWithin": "",
"scrapeJobDetails": false,
"maxItems": 100,
"autoFanOut": true
}
Click Start, then open the completed run’s output dataset.
Start with listing mode to check the company resolution and job coverage. Enabling scrapeJobDetails opens postings for descriptions, salaries, seniority, employment type, applicant count, and apply type when available. It uses the higher per-job rate.
Review the dataset and RUN_SUMMARY in the run's key-value store. Reaching maxItems means your snapshot is deliberately bounded; increasing it still does not remove LinkedIn's own search limitations.
Read the returned fields
| Field | How to use it |
|---|---|
jobId | Job identifier |
title | Role title |
companyName | Resolved company |
location | Job location |
postedDate | Posting date |
companyUrl | Normalized company URL |
The company metadata appears alongside individual jobs. Repeated companyEmployeeCount values are context about one employer, not quantities to sum across its postings. Count unique jobId values for job rows.
Keep the original location text. One opening can be advertised in more than one place, and a remote label needs reading alongside the posting's location restrictions.

Build a company hiring snapshot
Export CSV with jobId, jobUrl, title, location, postedDate, company identifiers, and scrapedAt. Add the input scope, especially any keyword or date filter, to a separate notes tab.
Deduplicate by jobId, then group titles into functions such as engineering, sales, operations, and support. Review ambiguous titles manually rather than assuming a word like manager identifies a department. Build a pivot table by function and location, keeping the number of unique job IDs visible.
If you need compensation or employment type, rerun a manageable scope with detail mode enabled. Match the datasets by job ID, since jobs may appear or disappear between runs. Keep salaryCurrency and salaryPeriod beside salary bounds before comparing them; an hourly range is not comparable to an annual range.
For weekly tracking, retain dated snapshots and compare ID sets. Label additions as newly observed and missing IDs as not observed in the new snapshot. A disappeared role may be closed, filtered out, or beyond a search cap. Review the original posting before treating it as a confirmed closure.
Handle large companies and incomplete results
LinkedIn serves at most about 1,000 results for a search. autoFanOut attempts narrower posting-date searches and merges results, but a dense segment can still be truncated. Check the summary and document any remaining ceiling.
If a company yields no jobs, verify that its resolved URL is correct, then remove optional keyword, location, and date restrictions. If results stop at your cap, increase that cap for this employer alone. Changing filters to obtain more rows also changes the population being measured, so record that change beside your trend chart.
For collecting repeated employer snapshots, see the Node.js example. Use the current input fields above if the example differs.
Frequently asked questions
Can I use company names?
Yes, but names are resolved through LinkedIn search. A company slug or URL is the safer exact input.
Is the limit per company?
No. maxItems applies across the whole run.
What does job-detail mode add?
It opens each role for fields such as description, salary when posted, seniority, employment type, industries, applicant count, and apply type.
