> ## Documentation Index
> Fetch the complete documentation index at: https://docs.spidra.io/llms.txt
> Use this file to discover all available pages before exploring further.

# LinkedIn

> Scrape LinkedIn job searches, job postings, company pages, public profiles, posts and articles as structured data, for 1 credit per page.

LinkedIn pages are read with a purpose-built **site rule** instead of a browser. You don't turn anything on: send a LinkedIn URL as usual and the rule is used automatically. A page costs 1 credit, and pages that can't be delivered are free.

Spidra reads LinkedIn the way a visitor who isn't signed in sees it. It never signs in, and it doesn't use cookies you pass for LinkedIn pages.

The rule steps aside when a request needs something only a browser can do: a screenshot, browser `actions`, `forEach` or an AI `instruction`. Those URLs use the normal browser flow.

## Page types

| Page type | Example | What you get |
| - | - | - |
| Job search | `linkedin.com/jobs/search/?keywords=data%20engineer&location=United%20States` | Every job on the page: 60 on the first page, 10 per page after that |
| Job posting | `linkedin.com/jobs/view/4454862094/` | The full posting, including the description |
| Company | `linkedin.com/company/stripe/` | The company profile and its recent posts |
| School | `linkedin.com/school/stanford-university/` | The school profile, in the same shape as a company |
| Public profile | `linkedin.com/in/williamhgates/` | What LinkedIn shows a visitor who isn't signed in |
| Post | `linkedin.com/posts/...` or `linkedin.com/feed/update/urn:li:activity:...` | The post, its author, reactions and comments |
| Article | `linkedin.com/pulse/...` | The article with its full text |
| Any other public LinkedIn page | A company's jobs tab, topic pages | The full page as markdown |

Links work as you copy them. Tracking parameters are removed, country subdomains such as `uk.linkedin.com` work, a search link with a job selected (`currentJobId=`) opens that job, and a company's `/about/` link reads the company page, which shows the same details.

## Job searches

Put your search in the URL the same way LinkedIn does: `keywords`, `location`, and filters such as `f_TPR=r86400` (posted in the past 24 hours). The first page returns up to 60 jobs. For more, add `start`: `start=60`, then `start=70`, and so on in steps of 10. Each response includes `nextStart`, the value to use for the next page.

LinkedIn shows at most 1,000 results per search to visitors who aren't signed in. A request with `start` above 990 fails straight away with a message and costs nothing. To cover more jobs, split the search by location, keyword or date.

## Fields you get

Every field is optional on LinkedIn's side, so a missing value comes back as `null` or an empty list, never a guess.

| Page | Fields |
| - | - |
| Job search (each job) | `position`, `jobId`, `title`, `company`, `companyUrl`, `location`, `postedAt`, `postedText`, `salary`, `benefits`, `url` |
| Job posting | `jobId`, `title`, `company`, `companyUrl`, `location`, `postedText`, `applicants`, `salary`, `seniorityLevel`, `employmentType`, `jobFunction`, `industries`, `descriptionText`, `descriptionMarkdown`, `url` |
| Company or school | `name`, `tagline`, `description`, `website`, `industry`, `companySize`, `headquarters`, `organizationType`, `founded`, `specialties`, `followers`, `employeesOnLinkedIn`, `address`, `logo`, `recentPosts` |
| Public profile | `name`, `headline`, `location`, `country`, `about`, `followers`, `connections`, `photo`, `currentRoles`, `experience`, `education`, `languages`, `websites`, `activity` |
| Post | `author`, `authorUrl`, `authorType`, `publishedAt`, `text`, `likes`, `commentCount`, `images`, `video`, `comments` |
| Article | `title`, `author`, `authorUrl`, `publishedAt`, `modifiedAt`, `likes`, `commentCount`, `image`, `bodyText`, `bodyMarkdown` |

A few notes on coverage:

* `salary` appears only when the employer shows pay. In testing, about 1 in 5 job postings did.
* Public profiles show current roles, education and a limited part of the experience history. Since November 2025, LinkedIn shows a profile's full history only to signed-in members. Some entries are masked with asterisks by LinkedIn itself; those come back with `"masked": true`.
* `employeesOnLinkedIn` is the number of members who list the company, not the company's own headcount.

## What comes back

* **`output: "json"` with no `prompt` or `schema`:** the structured data as is. No AI is used, so the cost is the base credit only.
* **`output: "markdown"`:** the whole page as markdown, followed by the structured data.
* **With a `prompt` or `schema`:** the AI reads a compact copy of the structured data instead of the whole page. A company page with a five-field schema cost 2 credits in testing.

## Limits you should know about

* **Signed-in pages are refused.** People search, a company's People tab, a profile's full details, the feed, messaging and Sales Navigator need a signed-in member. Those requests fail straight away with a message and are not charged.
* **School pages are often refused.** LinkedIn turns away most visitors who aren't signed in from school pages. When it does, the request fails with a message and is not charged.
* **A profile LinkedIn won't show** fails with a message and is not charged. LinkedIn answers a missing profile and a refused request the same way, so the message can't say which it was.
* **1,000 results per job search**, as above.
* **A page that doesn't exist**, such as a mistyped company slug, fails with a message and is not charged.

<Note>
  Check LinkedIn's User Agreement before you scrape it, and the data protection laws that apply to you. Profiles contain personal data, which laws such as GDPR protect even when it is public. You are responsible for how you use the data you collect. Spidra is not affiliated with LinkedIn.
</Note>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.