# LinkedIn Scraper API - Jobs, Companies, Posts, Articles (`vonsensey/linkedin-scraper-api`) Actor

Used by recruiters, sales teams and market researchers who need LinkedIn at volume. LinkedIn scraper for jobs, company pages, public posts with their top comments, and Pulse articles in one typed dataset. Exact employee, follower and reaction counts. No login, no cookies. Failures are free.

- **URL**: https://apify.com/vonsensey/linkedin-scraper-api.md
- **Developed by:** [Blackcube](https://apify.com/vonsensey) (community)
- **Categories:** Jobs, Lead generation, Social media
- **Features:** Limited permissions
- **Stats:** 5 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.50 / 1,000 job (full posting)s

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## LinkedIn Scraper API - Jobs, Companies, Posts, Articles

<table style="border-collapse:collapse;width:100%;margin:0 0 4px">
<tr><td colspan="3" style="padding:9px 12px;background:#0B6E75;border:1px solid #0B6E75"><span style="color:#FFFFFF;font-weight:700;font-size:13px;letter-spacing:.3px">LinkedIn Public Data Suite</span><span style="color:#CFF0F2;font-size:12px"> &nbsp;&bull;&nbsp; 11 Actors, one codebase, one row billed once</span></td></tr>
<tr><td style="padding:9px 12px;border:1px solid #E5E7EB;background:#ECFDF5;vertical-align:top;width:33%"><span style="color:#0B6E75;font-weight:700;font-size:13px">LinkedIn Scraper API</span><br><span style="color:#0B6E75;font-size:11px;font-weight:600">&#10148; You are here</span></td><td style="padding:9px 12px;border:1px solid #E5E7EB;background:#FFFFFF;vertical-align:top;width:33%"><a href="https://apify.com/vonsensey/linkedin-jobs-search-scraper-api" style="color:#111827;font-weight:700;font-size:13px;text-decoration:none">LinkedIn Jobs Search Scraper API</a><br><span style="color:#6B7280;font-size:11px">Filters That Hold</span></td><td style="padding:9px 12px;border:1px solid #E5E7EB;background:#FFFFFF;vertical-align:top;width:33%"><a href="https://apify.com/vonsensey/linkedin-job-details-scraper-api" style="color:#111827;font-weight:700;font-size:13px;text-decoration:none">LinkedIn Job Details Scraper API</a><br><span style="color:#6B7280;font-size:11px">By URL or Job ID</span></td></tr>
<tr><td style="padding:9px 12px;border:1px solid #E5E7EB;background:#FFFFFF;vertical-align:top;width:33%"><a href="https://apify.com/vonsensey/linkedin-company-jobs-scraper-api" style="color:#111827;font-weight:700;font-size:13px;text-decoration:none">LinkedIn Company Jobs Scraper API</a><br><span style="color:#6B7280;font-size:11px">Open Jobs by Company</span></td><td style="padding:9px 12px;border:1px solid #E5E7EB;background:#FFFFFF;vertical-align:top;width:33%"><a href="https://apify.com/vonsensey/linkedin-new-jobs-scraper-api" style="color:#111827;font-weight:700;font-size:13px;text-decoration:none">LinkedIn New Jobs Scraper API</a><br><span style="color:#6B7280;font-size:11px">Last 24 Hours, Change-Only</span></td><td style="padding:9px 12px;border:1px solid #E5E7EB;background:#FFFFFF;vertical-align:top;width:33%"><a href="https://apify.com/vonsensey/linkedin-company-scraper-api" style="color:#111827;font-weight:700;font-size:13px;text-decoration:none">LinkedIn Company Scraper API</a><br><span style="color:#6B7280;font-size:11px">Exact Employees, Followers</span></td></tr>
<tr><td style="padding:9px 12px;border:1px solid #E5E7EB;background:#FFFFFF;vertical-align:top;width:33%"><a href="https://apify.com/vonsensey/linkedin-company-posts-scraper-api" style="color:#111827;font-weight:700;font-size:13px;text-decoration:none">LinkedIn Company Posts Scraper API</a><br><span style="color:#6B7280;font-size:11px">Newest Posts, Exact Counts</span></td><td style="padding:9px 12px;border:1px solid #E5E7EB;background:#FFFFFF;vertical-align:top;width:33%"><a href="https://apify.com/vonsensey/linkedin-post-scraper-api" style="color:#111827;font-weight:700;font-size:13px;text-decoration:none">LinkedIn Post Scraper API</a><br><span style="color:#6B7280;font-size:11px">Text, Exact Counts, Top Comments</span></td><td style="padding:9px 12px;border:1px solid #E5E7EB;background:#FFFFFF;vertical-align:top;width:33%"><a href="https://apify.com/vonsensey/linkedin-pulse-article-scraper-api" style="color:#111827;font-weight:700;font-size:13px;text-decoration:none">LinkedIn Pulse Article Scraper API</a><br><span style="color:#6B7280;font-size:11px">Full Text, Author</span></td></tr>
<tr><td style="padding:9px 12px;border:1px solid #E5E7EB;background:#FFFFFF;vertical-align:top;width:33%"><a href="https://apify.com/vonsensey/linkedin-profile-scraper-api" style="color:#111827;font-weight:700;font-size:13px;text-decoration:none">LinkedIn Profile Scraper API</a><br><span style="color:#6B7280;font-size:11px">Public Profiles, Exact Followers</span></td><td style="padding:9px 12px;border:1px solid #E5E7EB;background:#FFFFFF;vertical-align:top;width:33%"><a href="https://apify.com/vonsensey/linkedin-profile-posts-scraper-api" style="color:#111827;font-weight:700;font-size:13px;text-decoration:none">LinkedIn Profile Posts Scraper API</a><br><span style="color:#6B7280;font-size:11px">A Person's Recent Posts</span></td></tr>
</table>

**More from this account:** [YouTube Transcript Suite](https://apify.com/vonsensey/youtube-transcript-scraper) · [Website Contact & Email Suite](https://apify.com/vonsensey/website-contact-email-extractor) · [Career Site & ATS Jobs Suite](https://apify.com/vonsensey/career-page-job-postings-scraper-api) · [Google News Suite](https://apify.com/vonsensey/google-news-scraper-api) · [Keyword Research Suite](https://apify.com/vonsensey/google-keyword-ideas-scraper) · [Shopify Store Intelligence Suite](https://apify.com/vonsensey/shopify-store-leads-scraper) · [eBay Data Suite](https://apify.com/vonsensey/ebay-scraper-api) · [Amazon Reviews Suite](https://apify.com/vonsensey/amazon-reviews-scraper-api) · [Reddit](https://apify.com/vonsensey/reddit-scraper-posts-comments-api) · [Meta Ad Library](https://apify.com/vonsensey/facebook-ads-library-scraper-meta-ad-api) · [Vinted](https://apify.com/vonsensey/vinted-scraper-api) · [Trustpilot Review Intelligence Suite](https://apify.com/vonsensey/trustpilot-reviews-scraper) · [App Store & Google Play Reviews Suite](https://apify.com/vonsensey/app-store-google-play-reviews-scraper) · [Etsy Research Suite](https://apify.com/vonsensey/etsy-scraper) · [YouTube Comments Intelligence Suite](https://apify.com/vonsensey/youtube-comments-scraper) · [Telegram Channel Intelligence Suite](https://apify.com/vonsensey/telegram-channel-scraper-api) · [Business Reviews Suite](https://apify.com/vonsensey/business-reviews-aggregator-scraper-api) · [Google Trends Suite](https://apify.com/vonsensey/google-trends-scraper) · [Amazon Product Data Suite](https://apify.com/vonsensey/amazon-product-scraper-api) · [Polymarket Order Book](https://apify.com/vonsensey/polymarket-orderbook-clob-prices-scraper-api) · [Nordic Marketplaces Suite](https://apify.com/vonsensey/blocket-finn-nordic-marketplace-scraper-api) · [Google Sheets Suite](https://apify.com/vonsensey/google-sheets-scraper-api) · [TikTok Suite](https://apify.com/vonsensey/tiktok-scraper-api) · [Snapchat Suite](https://apify.com/vonsensey/snapchat-scraper-api) · [Instagram Suite](https://apify.com/vonsensey/instagram-posts-scraper-api) · [Contact Validation Suite](https://apify.com/vonsensey/email-verifier-validator-api) · [Google Maps Suite](https://apify.com/vonsensey/google-maps-reviews-scraper-api) · [X / Twitter](https://apify.com/vonsensey/tweet-scraper)

#### The LinkedIn suite

- [LinkedIn Jobs Search Scraper API](https://apify.com/vonsensey/linkedin-jobs-search-scraper-api) — keyword and location searches with filters re-checked on the posting
- [LinkedIn Job Details Scraper API](https://apify.com/vonsensey/linkedin-job-details-scraper-api) — job links or ids in, the full posting out
- [LinkedIn Company Scraper API](https://apify.com/vonsensey/linkedin-company-scraper-api) — company slugs or URLs in, exact counts and every office out
- [LinkedIn Company Posts Scraper API](https://apify.com/vonsensey/linkedin-company-posts-scraper-api) — the newest posts on a company page with exact reaction and comment counts
- [LinkedIn Post Scraper API](https://apify.com/vonsensey/linkedin-post-scraper-api) — post share links in, the full post and its visible comments out
- [LinkedIn Pulse Article Scraper API](https://apify.com/vonsensey/linkedin-pulse-article-scraper-api) — Pulse article links in, full text and exact engagement out
- [LinkedIn Company Jobs Scraper API](https://apify.com/vonsensey/linkedin-company-jobs-scraper-api) — company pages in, their open jobs out, id resolved for you
- [LinkedIn New Jobs Scraper API](https://apify.com/vonsensey/linkedin-new-jobs-scraper-api) — put a search on a daily schedule and pay only for postings you have not seen
- [LinkedIn Profile Scraper API](https://apify.com/vonsensey/linkedin-profile-scraper-api) — public profiles with experience, education and exact follower counts — about 7 in 10 are shown, the rest are free
- [LinkedIn Profile Posts Scraper API](https://apify.com/vonsensey/linkedin-profile-posts-scraper-api) — a person's recent public posts, each read in full with exact counts

LinkedIn jobs, company pages, public posts with their top comments, and Pulse articles in one typed dataset. No login, no cookies, no proxy to configure — it reads the pages LinkedIn shows to anyone. **Failures are free**: a closed job, a missing page or a page only members can see costs nothing and returns a row saying which.

**Exact numbers, not display numbers.** LinkedIn's page says "3M followers" or "10,001+ employees"; the rows carry 2,789,187 and 232,762.

### Quick start

1. Press **Start** with no targets entered — it runs a working example of this listing.
2. Enter your own mix: company slugs, post share links, job links, article links, and keywords with locations.
3. Take the dataset as JSON, CSV or Excel, or via the API. Every row has a `type`; the free `coverage` row says what was asked for and what arrived.

### What people use it for

- **Hiring-market intelligence.** Which companies are hiring for which roles, where, at what seniority, and since when — with the full posting text for a keyword or an LLM pipeline.
- **Lead lists from job postings.** A company hiring three data engineers is a company buying data tooling this quarter. Turn searches into a list of companies, then add their company pages in the same run: each job row then carries the company's size, industry, website and headquarters.
- **Job-board and alert products.** Put searches on a schedule with Monitor on and receive only postings you have not seen, with the exact posted date.
- **Account research and TAM sizing.** Exact member and follower counts, every office, industry, size band and founding year for a list of company slugs.
- **CRM enrichment.** Feed in the LinkedIn URLs you already hold and get back the numeric company id, website, headquarters and specialties.
- **Brand and competitor monitoring.** What a company page is posting and how each post performs, with exact reaction and comment counts, on a schedule.
- **Engagement analysis.** Who is commenting on a post and what they say, from the comments LinkedIn shows publicly.
- **Thought-leadership tracking.** The full text and engagement of Pulse articles by the people and newsletters you follow.
- **Feeding an AI agent or workflow.** One flat schema for jobs, companies, posts and articles, a `type` on every row, and a free coverage row that says what was asked for and what arrived.

### What the rows look like

#### A job row

```json
{
  "type": "job",
  "id": "4370823981",
  "url": "https://www.linkedin.com/jobs/view/sr-data-engineer-at-accenture-federal-services-4370823981",
  "title": "Sr. Data Engineer",
  "companyName": "Accenture Federal Services",
  "company": { "name": "Accenture Federal Services", "url": "https://www.linkedin.com/company/accenturefederalservices", "slug": "accenturefederalservices" },
  "location": "Washington, DC",
  "city": "Washington",
  "region": "District of Columbia",
  "countryCode": "US",
  "countrySource": "location",
  "postedAt": "2026-08-26",
  "applicants": { "count": 200, "text": "Over 200 applicants", "isEarly": false },
  "salary": { "text": "$116,900—$243,100", "min": 116900, "max": 243100, "currency": "USD", "period": null, "source": "description" },
  "seniorityLevel": "Mid-Senior level",
  "employmentType": "Full-time",
  "jobFunction": "Information Technology",
  "industries": ["IT Services and IT Consulting"],
  "description": { "text": "At Accenture Federal Services, nothing matters more than ...", "html": "<p>At Accenture Federal Services, ...</p>" },
  "searchQuery": "data engineer | United States"
}
```

`postedAt` is the exact date from LinkedIn's listing, not a "1 week ago" estimate. `city`, `region` and `countryCode` (ISO) are read from `location`; a metro area such as "Greater Seattle Area" names no country, so it takes the country of the search it came from, when that search names one, and `countrySource` says `search`. `isRemote` is true when the posting's workplace, its location or its title says remote, false when the workplace is on-site or hybrid, and null when nothing says. `salary` is filled only when the posting states one (`source` says whether it came from a salary element or the description text); "€50.000", "45 000 kr", "$120K" and "10-15 LPA" are read as written, and `period` is null unless the posting states it. With **Add company pages for job results** on, each job row also carries `companyInfo` (website, size band, members on LinkedIn, industry, headquarters, followers and the numeric company id) from the company's page (null when that page cannot be read), at no extra charge. `applicants.count` is null when LinkedIn only says "Be among the first 25 applicants".

#### A company row

```json
{
  "type": "company",
  "id": "microsoft",
  "numericId": 1035,
  "name": "Microsoft",
  "industry": "Software Development",
  "companySize": "10,001+ employees",
  "employeesOnLinkedIn": 232762,
  "followers": 29007369,
  "headquarters": "Redmond, Washington",
  "organizationType": "Public Company",
  "website": "https://news.microsoft.com/",
  "specialties": ["Business Software", "Developer Tools", "Home & Educational Software", "..."],
  "address": { "street": "1 Microsoft Way", "locality": "Redmond", "region": "Washington", "postalCode": "98052", "country": "US" },
  "locations": [{ "primary": true, "street": "1 Microsoft Way", "cityLine": "Redmond, Washington 98052, US" }, "... 44 more"],
  "affiliatedPages": [{ "name": "GitHub", "industry": "Software Development", "location": "San Francisco, CA", "url": "https://www.linkedin.com/company/github" }, "..."],
  "recentPosts": [{ "activityId": "7500677397822775296", "url": "https://www.linkedin.com/posts/microsoft_..." }, "..."]
}
```

`employeesOnLinkedIn` is the exact number of members who list the company, which is what LinkedIn actually counts; `companySize` is the band the company chose. Both are given so you are never guessing which one you are looking at.

#### A post row

```json
{
  "type": "post",
  "activityId": "7498030724533522432",
  "url": "https://www.linkedin.com/posts/microsoft_august-2026-ai-powered-discovery-activity-7498030724533522432-IzKE",
  "author": { "name": "Microsoft", "url": "https://www.linkedin.com/company/microsoft", "type": "company", "followers": 29006766 },
  "text": "Curiosity drives discovery, sparking questions about how we can better understand our world ...",
  "publishedAt": "2026-08-25T14:57:11.372Z",
  "reactions": 745,
  "comments": 98,
  "mediaType": "article",
  "article": { "title": "August 2026: AI-powered discovery", "url": "https://www.linkedin.com/pulse/..." },
  "commentsShownCount": 10
}
```

`reactions` and `comments` are exact. With comments on, each comment LinkedIn shows on the page (about ten) is its own `comment` row with the commenter, their profile URL, the text, the date and its like count.

#### An article row

```json
{
  "type": "article",
  "title": "The turbulent AI era is here. The choices we make now are critical.",
  "author": { "name": "Bill Gates", "url": "https://www.linkedin.com/in/williamhgates", "followers": 40617215 },
  "publishedAt": "2026-08-26T07:03:26.000Z",
  "likes": 9984,
  "comments": 1990,
  "readingTimeMinutes": 25,
  "text": "We need a plan to ensure that the good outweighs the bad ...",
  "newsletter": { "name": "Gates Notes", "subscribers": 6552252 }
}
```

### What it costs

| You pay for | Price |
|---|---|
| Each job found by a search, delivered with its full posting | **$1.50 per 1,000 jobs** |
| Each job you name by URL or id, delivered with its full posting (one request per row) | **$4.00 per 1,000 jobs** |
| Each job delivered as a listing card only ("Read the full posting" off) | **$0.50 per 1,000 jobs** |
| Each job search that delivered something: a keyword-and-location search, a pasted search link or a company's open jobs (never more than 250 a run) | **$2.00 per 1,000 searches** |
| Each company page delivered (once per company, never per job) | **$4.00 per 1,000 companies** |
| Each post delivered | **$1.50 per 1,000 posts** |
| Add-on: each comment shown on a post | **$2.00 per 1,000 comments** |
| Each Pulse article delivered | **$3.00 per 1,000 articles** |

**Free, always:** a job that has closed, a company, post or article that does not exist, a page LinkedIn only shows to signed-in members, a malformed URL, every error row, the coverage row and the run summary, a job skipped by your title filters or id list, and a posting whose stated seniority or job type does not match the filter you set. A run that reads nothing costs nothing.

On a one-off run a search is billed only when it delivered at least one job. With **Monitor** on, every search LinkedIn answered is billed, because that check is the work you scheduled — so a day with no new postings costs $2.00 per 1,000 searches and nothing else. A search the run's time limit cut before it delivered anything is free. A query LinkedIn cannot match (it returns unrelated "similar" jobs) is detected, delivers nothing and costs nothing. Searches never count against your result cap.

Set **Cost ceiling (USD)** to stop any run before it passes a number you choose; the free summary row reports what the run actually spent.

### Limits, stated plainly

LinkedIn shows its search results (people, companies, content), employee lists, reaction lists and Sales Navigator only to signed-in members, and serves member profiles to visitors only at its own discretion (measured 2026-09-02 from Apify's own exits: 35 of 50 ordinary profiles, and the refused ones stay refused). This Actor reads public pages only and never signs in, so it sells none of those — and says so here rather than on your invoice.

A public post page shows about ten comments and no repost count; the exact reaction and comment totals are always there.

LinkedIn's public job search stops at about 1,000 results per query and applies its experience-level and workplace filters inconsistently; seniority and job type are re-checked on the posting, workplace is not.

The external "Apply" link and the hiring team are behind LinkedIn's sign-in and are not sold. Salary is delivered when the posting states it.

### Use it from n8n, MCP, the API or a schedule

Built to be called by a workflow, not only from the Store form. The Actor is `vonsensey/linkedin-scraper-api`; every snippet below sends `{}`, which runs the defaults shown on the form — replace it with your own input.

#### n8n

Install the **Apify** community node (`@apify/n8n-nodes-apify` under *Settings → Community Nodes*, or search "Apify" on n8n Cloud). Add **Apify → Run Actor** with Actor `vonsensey/linkedin-scraper-api` and your input JSON, then **Apify → Get Dataset Items** on the run's `defaultDatasetId` and pipe the rows anywhere. For scheduled runs, the **On new Apify Event** trigger fires when a run of this Actor finishes.

#### MCP (Claude, Cursor, VS Code, any MCP client)

```json
{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com?tools=vonsensey/linkedin-scraper-api",
      "headers": {
        "Authorization": "Bearer <YOUR_APIFY_TOKEN>"
      }
    }
  }
}
```

Your agent then calls `vonsensey/linkedin-scraper-api` as a tool with the same input the form takes and reads the dataset back.

#### REST API (one call, rows in the response)

```bash
curl -X POST "https://api.apify.com/v2/acts/vonsensey~linkedin-scraper-api/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" -d '{}'
```

#### Python

```python
from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("vonsensey/linkedin-scraper-api").call(run_input={})
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(row)
```

#### JavaScript

```js
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('vonsensey/linkedin-scraper-api').call({});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
```

#### Make, Zapier, LangChain, CrewAI

The Apify app in **Make** and **Zapier** has a *Run an Actor* module: pick `vonsensey/linkedin-scraper-api`. In **LangChain** and **CrewAI** the Apify tool wrappers take the same Actor id. A daily **schedule** needs nothing but the Console: *Schedules → Create → this Actor → cron*, and the dataset fills on its own.

> **Run it without configuring anything** — [Get LinkedIn jobs, company pages and posts in one run](https://apify.com/vonsensey/linkedin-scraper-api/examples/linkedin-jobs-companies-posts-in-one-run), a ready-made example you can start as-is or copy.

### Use cases

- **Hiring-market intelligence.** Which companies are hiring for which roles, where, at what seniority and since when — with the complete posting as clean text and as HTML, ready for a keyword pass or an LLM.
- **Lead lists from job postings.** A company hiring three data engineers is a company buying data tooling this quarter. Turn searches into a list of companies, then add their company pages in the same run — charged once per distinct company, never per job.
- **Job-board and alert products.** Put searches on a daily schedule with change-only billing and receive only postings you have not seen, each with the exact posted date from the listing card.
- **Account research and TAM sizing.** Exact member and follower counts, every office address, industry, size band, founding year, specialties and the numeric organisation id for a list of company slugs or URLs.
- **Brand and competitor monitoring.** What a company page and its people are posting, and how each post performs — exact reaction and comment counts on posts, profile posts and Pulse articles.

### Run it on a schedule

A one-off pull answers a question; a schedule answers it every day without you. Open **Schedules** in the Apify Console, point a cron at this Actor, and the dataset keeps filling on its own — no server, no cron box, no babysitting. Everything here is built to be re-run: you are billed per row delivered, and the FAQ below says exactly what a scheduled run that finds nothing new costs.

### FAQ

#### Do I need a LinkedIn login, cookies or a proxy?

No. Every listing in this suite reads the pages LinkedIn shows to anyone without an account, and it never signs in, never sends a cookie and never uses a session. Everything is handled for you and there is nothing to buy on top.

#### Which LinkedIn surfaces are deliberately not sold here?

Search results for people, companies and content, employee lists, reaction lists, Sales Navigator, the external Apply link and the hiring team. LinkedIn shows those only to signed-in members, so no listing in this suite promises them — said here rather than discovered on your invoice.

#### Will every public profile come back?

No, and the price reflects it. LinkedIn serves member profiles to signed-out visitors at its own discretion — about 7 in 10 ordinary profiles on a measurement taken 2026-09-02 from Apify's own exits, and the ones it declines stay declined. A profile it refuses costs nothing and returns a free row saying so; you are charged only for profiles actually delivered.

#### Do the job filters actually work?

The date window, job type, Easy Apply, under-10-applicants and company filters change LinkedIn's results reliably. Since LinkedIn's August 2026 search change its experience-level and workplace filters are applied on some queries and ignored on others, so seniority and job type are re-checked against what the posting itself states and a posting that does not match is neither delivered nor billed. Workplace is passed straight to LinkedIn and is not re-checked, because the public posting carries no structured workplace field.

#### How many jobs can one search return?

LinkedIn's public search stops at about 1,000 results per query. To go deeper, add locations, split keywords or use a shorter date window — each combination is its own search with its own 1,000.

#### How many comments and posts do I get?

A public post page shows about ten comments and a company page about ten of its newest posts; the exact reaction and comment totals are always on the row. The full history and the list of everyone who reacted need a signed-in session, which this Actor does not use.

#### What does a scheduled search cost on a day with no new jobs?

One job-search charge per search that actually returned listings, and nothing else. Job ids already delivered are remembered for 60 days and never billed again, whichever of your searches finds them, a search that came back empty is never charged, and a company, post or article whose numbers have not moved comes back as a free `unchanged` row.

#### What happens to a job that closed or a page that does not exist?

It costs nothing. You get a free row saying which — closed, not found, or only visible to members — and the run keeps going. "All of these have closed" is a correct answer, not a failure, so the run still succeeds.

***

Something wrong, or a field you need that is missing? Open an issue on the **Issues** tab — it is read and it gets fixed. If this saved you time, a rating on the Store page helps the next person find it.

# Actor input Schema

## `startUrls` (type: `array`):

Paste any public LinkedIn links, mixed: company pages, showcase pages, post links (a /posts/... share link, a /feed/update/ link or an lnkd.in short link), job postings (/jobs/view/...), Pulse articles, or a jobs search URL copied from LinkedIn with its filters. Each becomes the matching row type. Links to search results or employee lists need a LinkedIn session and are returned as free rows explaining that.

## `keywords` (type: `array`):

Job titles or terms to search for. Each keyword is searched in each location, so 3 keywords and 2 locations are 6 searches. Boolean operators LinkedIn accepts in its search box (quotes, AND, OR, NOT) are passed through as typed.

## `locations` (type: `array`):

Locations as you would type them on LinkedIn: 'United States', 'London, England, United Kingdom', 'Remote'. Crossed with keywords.

## `datePosted` (type: `string`):

Only postings published within this window, in keyword searches and in a company's open jobs alike. A LinkedIn search URL you paste keeps its own window. Verified on 2026-09-02 to change the result set.

## `companies` (type: `array`):

Company or showcase slugs or URLs: 'microsoft', 'https://www.linkedin.com/company/apify/', a showcase URL. What you get for each is set by 'Company: what to read'.

## `companyScope` (type: `array`):

details: one company row (exact employee and follower counts, addresses, specialties, affiliated pages, featured employees, ids of the newest posts). posts: the newest posts the company page shows publicly (about ten) as post rows. jobs: the company's open jobs, up to LinkedIn's public cap of 1,000, as job rows. The posted-within window and the job search filters apply to them too, except 'Only jobs at these companies' and geoId.

## `postUrls` (type: `array`):

Public post links: the share link LinkedIn's Share > Copy link gives you (/posts/...); a /feed/update/ link or an lnkd.in short link is accepted too. One post row each, with the comments LinkedIn shows publicly as extra rows when the option below is on. A post LinkedIn will not show to a visitor without an account, or a link it declines to open, comes back as a free row saying so.

## `includeComments` (type: `boolean`):

Adds one row per comment LinkedIn renders on the public post page, about ten per post, each with the commenter, their profile URL, the text, the date and the like count. The post row always carries the exact total comment count.

## `jobUrls` (type: `array`):

Job posting links (/jobs/view/...), search links that carry currentJobId=, or bare numeric job ids. One full job row each.

## `articleUrls` (type: `array`):

LinkedIn Pulse article links (/pulse/...). One article row each with the full text.

## `experienceLevel` (type: `array`):

Passed to LinkedIn's search and then checked against the seniority the posting itself states; a posting that does not match is neither delivered nor billed. Needs 'Read the full posting' on.

## `jobType` (type: `array`):

Passed to LinkedIn's search and then checked against the employment type the posting states; a posting that does not match is neither delivered nor billed. Needs 'Read the full posting' on.

## `workplaceType` (type: `array`):

Passed to LinkedIn's search as its remote / hybrid / on-site filter. LinkedIn's public job pages carry no structured workplace field, so this one cannot be re-checked on the posting; treat it as LinkedIn's own filtering.

## `companyFilter` (type: `array`):

Company slugs, URLs or numeric LinkedIn company ids. Slugs are resolved to the id from the public company page.

## `geoId` (type: `string`):

Optional numeric region id from a LinkedIn jobs URL (geoId=...). Used together with the free-text location.

## `easyApply` (type: `boolean`):

Passed to LinkedIn's search as its Easy Apply filter.

## `under10Applicants` (type: `boolean`):

Passed to LinkedIn's search. Verified on 2026-09-02 to change the result set.

## `titleInclude` (type: `array`):

Free filter on the listing title before the posting is opened: keep a job only if its title contains every word of at least one of these phrases (case-insensitive). Skipped jobs are neither read nor billed.

## `titleExclude` (type: `array`):

Free filter: drop a job if its title contains any of these words or phrases. Skipped jobs are neither read nor billed.

## `excludeJobIds` (type: `array`):

Job ids you already have. They are never opened and never billed.

## `maxItemsPerQuery` (type: `integer`):

Cap per keyword-and-location search. LinkedIn's public search stops at about 1,000 results; add locations or a shorter date window to go deeper.

## `includeJobDetails` (type: `boolean`):

On: each job is opened and delivered in full (description, seniority, employment type, function, industries, applicants, salary when stated) as a 'job' row. Off: the listing card only (title, company, location, exact posted date, badges) as a cheaper 'job-card' row, ten per request.

## `includeCompany` (type: `boolean`):

For job results: also deliver one company row per distinct company, after the jobs, charged once per company and never per job. Each job row also carries companyInfo (website, size band, members on LinkedIn, industry, headquarters, followers and the numeric company id) from the same company page, at no extra charge.

## `monitorChangesOnly` (type: `boolean`):

For scheduled runs. The Actor remembers the job ids it delivered (for 60 days, under whichever of your searches finds them again) and the counts it saw on each company, post and article. On a re-run, jobs you already received are skipped and a company or post whose numbers have not moved is a free 'unchanged' row. Each search that returned listings is still billed as work done, even when nothing in it is new; one the run's time limit stopped before it delivered anything is free.

## `maxItems` (type: `integer`):

Hard cap on billable rows for the whole run, all types together.

## `maxCostUsd` (type: `number`):

Stop the run before it spends more than this, computed from the live event prices. Leave empty for no ceiling. The free summary row always reports what the run actually spent.

## `useProxy` (type: `boolean`):

Not normally needed. Jobs, company pages, posts and articles are read without any proxy; the Actor escalates to a residential exit by itself when LinkedIn refuses a request. Turn this on only if you have been asked to.

## Actor input object example

```json
{
  "datePosted": "any",
  "companyScope": [
    "details"
  ],
  "includeComments": false,
  "easyApply": false,
  "under10Applicants": false,
  "maxItemsPerQuery": 100,
  "includeJobDetails": true,
  "includeCompany": false,
  "monitorChangesOnly": false,
  "maxItems": 100,
  "useProxy": false
}
```

# Actor output Schema

## `dataset` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {};

// Run the Actor and wait for it to finish
const run = await client.actor("vonsensey/linkedin-scraper-api").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {}

# Run the Actor and wait for it to finish
run = client.actor("vonsensey/linkedin-scraper-api").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{}' |
apify call vonsensey/linkedin-scraper-api --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,vonsensey/linkedin-scraper-api"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/61GbjdL8h8QsSa7dZ/builds/hYegxlNuCFit1zb5N/openapi.json
