---
title: "Search LinkedIn by URL"
method: POST
path: "/search/linkedin/url"
tags: ["search"]
---

# Search LinkedIn by URL

`POST /search/linkedin/url`

# Search LinkedIn by URL

Paste any LinkedIn search URL and the endpoint will automatically extract the category, keywords, and all filters from it, then execute the search and return structured results.

## When to use this endpoint
- A user gives you a LinkedIn search URL and you want to get the results programmatically
- You want to replicate a search the user performed in their browser
- You want to automate searches based on bookmarked LinkedIn search URLs

## Supported URL formats
The endpoint supports all standard LinkedIn search URLs:
- `https://www.linkedin.com/search/results/people/?keywords=engineer`
- `https://www.linkedin.com/search/results/content/?keywords=AI&sortBy=%22date_posted%22`
- `https://www.linkedin.com/search/results/companies/?keywords=startup&companyHqGeo=%5B%22103644278%22%5D`
- `https://www.linkedin.com/jobs/search/?keywords=frontend&location=Paris`
- `https://www.linkedin.com/search/results/all/?keywords=test` (treated as people search)

## URL path → Category mapping
| URL path segment | Category |
|------------------|----------|
| `/results/content/` | posts |
| `/results/people/` | people |
| `/results/companies/` | companies |
| `/results/all/` | people |
| `/jobs/search/` | jobs |

## Extracted parameters
The following URL query parameters are parsed and mapped to search filters:
- `keywords` → keywords
- `network` → connectionDegree (people)
- `geoUrn` / `companyHqGeo` → location
- `industry` → industry
- `company` / `currentCompany` → currentCompany
- `pastCompany` → pastCompany
- `school` → school
- `profileLanguage` → profileLanguage
- `connectionOf` → connectionOf
- `firstName` / `lastName` → firstName / lastName
- `title` → title
- `companySize` → companySize (companies)
- `sortBy` → sortBy
- `datePosted` → datePosted
- `f_TPR` → datePosted (jobs)
- `f_JT` → jobType (jobs)
- `f_E` → experienceLevel (jobs)
- `f_WT` → workplaceType (jobs)

## Pagination override
You can optionally pass `start` and `count` to override the pagination embedded in the URL.

## Credits

## Request body

- object
  - `url` string, required — A LinkedIn search URL. The endpoint automatically extracts the category, keywords, and all filters from the URL. Example: 'https://www.linkedin.com/search/results/people/?keywords=engineer&network=%5B%22S%22%5D'
  - `start` integer — Override pagination offset. If not provided, uses the page from the URL (or defaults to 0).
  - `count` integer — Override results per page (default 10, max 50).

## Response `200`

Search results parsed from the LinkedIn URL

- object
  - `success` true, required
  - `category` 'posts' | 'people' | 'companies' | 'jobs', required
  - `items` union, required
    - object[]
      - `postUrl` string, required — Public URL of the post.
      - `text` string, required — Post text content.
      - `date` integer, required — Post creation timestamp (Unix milliseconds).
      - `likesCount` integer, required — Total reactions on this post.
      - `commentsCount` integer, required — Total top-level comments on this post.
      - `sharesCount` integer, required — Total shares/reposts of this post.
      - `postUrn` string, required — LinkedIn internal URN for this post. Use with engagement tools (like, comment, collect_engagers).
      - `postId` string, required — Numeric post identifier parsed from the URN.
      - `media` object — Media attached to the post (image, video, document, or article). Absent when the post is text-only.
        - `type` 'image' | 'video' | 'document' | 'article', required — Type of media attached to the post.
        - `urls` string[], required — Media URLs (image URLs for carousels, video streaming URL, article link, etc.).
        - `title` string — Title of the article or document, when available.
        - `thumbnailUrl` string — Thumbnail URL for videos, articles, or document covers.
      - `repostedFromName` string — On a repost, the ORIGINAL author's name when it differs from the resharer.
      - `reactionTypeCounts` object[] — Per-reaction-type breakdown, when LinkedIn exposes it.
        - `reactionType` string, required
        - `count` integer, required
      - `numImpressions` integer, nullable — Total impressions, exposed only on Creator-mode posts.
      - `highlightedReactorName` string, nullable — Social-proof attribution, when LinkedIn surfaces one in the feed.
      - `viewerLiked` boolean, nullable — Whether the authenticated account has reacted to this post.
      - `type` 'POST', required
      - `author` object, required
        - `name` string, required
        - `profileUrl` string, nullable, required
        - `headline` string, nullable, required
        - `profilePicture` string, nullable, required
        - `isCompany` boolean, required
        - `publicIdentifier` string, nullable, required — Vanity slug when not URN-based
        - `profileUrn` string, nullable, required — LinkedIn profile URN when available
      - `isRepost` boolean, required
    - object[]
      - `type` 'PEOPLE', required
      - `name` string, required
      - `profileUrl` string, nullable, required
      - `headline` string, nullable, required
      - `location` string, nullable, required
      - `profilePicture` string, nullable, required
      - `networkDistance` 'DISTANCE_1' | 'DISTANCE_2' | 'DISTANCE_3' | 'OUT_OF_NETWORK', nullable, required — LinkedIn network distance: DISTANCE_1=connected, DISTANCE_2=2nd degree, DISTANCE_3=3rd degree, OUT_OF_NETWORK=not connected.
      - `currentPositions` object[], required — Current work positions for this profile.
        - `company` string, nullable, required
        - `role` string, nullable, required
      - `profileUrn` string, nullable, required — LinkedIn profile URN (e.g. urn:li:fsd_profile:ACoAAA...) when available
      - `publicIdentifier` string, nullable, required — Vanity slug from profile URL (e.g. john-doe) when not URN-based
      - `nameMatch` boolean, nullable — True when the search ranker matched the literal name (vs headline/skills). When picking between two same-named people, the one with nameMatch=true is the one the user typed.
      - `badgeText` string, nullable — Profile badge surfaced by LinkedIn (Top Voice / Premium / Verified / Influencer). Indicates investment in the platform and is a useful qualifier weight.
      - `ringStatus` string, nullable — Profile ring status visualised on LinkedIn (OPEN_TO_WORK, HIRING, OPEN_FOR_BUSINESS, etc.). Open intent signal — directly relevant for recruiters, vendors, and sales.
      - `summary` string, nullable — Additional profile snippet returned by the search ranker, distinct from headline. Sometimes contains mutual-connection context or topic affinity (e.g. 'Writes about B2B sales').
      - `actorInsights` string[] — LinkedIn-curated context strings — typical entries: 'X mutual connections', 'Follows {company}', 'Worked at {company}'. Use these directly in personalised outreach openers.
    - object[]
      - `type` 'COMPANY', required
      - `name` string, required
      - `profileUrl` string, nullable, required
      - `summary` string, nullable, required
      - `industry` string, nullable, required
      - `location` string, nullable, required
      - `followersCount` integer, nullable, required
      - `logoUrl` string, nullable — Company logo URL when LinkedIn surfaces it on the result entity. Display this in the company card.
    - object[]
      - `type` 'JOB', required
      - `title` string, required
      - `company` string, nullable, required
      - `companyUrl` string, nullable, required
      - `companyLogo` string, nullable, required
      - `location` string, nullable, required
      - `workplaceType` string, nullable, required
      - `postedAt` string, nullable, required
      - `jobUrl` string, required
      - `listingId` string, required — LinkedIn job listing id — pass to /visit/linkedin/job to fetch the full posting (applicant count, full description, employment status, listed/expire timestamps, inferred benefits, job functions, industries, apply method).
  - `paging` object, required
    - `start` integer, required
    - `count` integer, required
    - `total` integer, required
  - `hasMore` boolean, required
  - `creditsUsed` integer, required — Credits consumed by this call. 0 for free endpoints, cached results, duplicates, and for every query that does not touch LinkedIn.
  - `retryAfter` integer, required — Seconds to wait before another call of the same type. 0 means no wait is needed.
  - `_meta` object — Credit balance carried on every response so a caller never has to ask for it separately. Absent when the caller has no connected account.
    - `credits` object, required
      - `current` number, required — Credits spent this period.
      - `limit` number, nullable, required — Period allowance, or null when unlimited.
      - `remaining` number, nullable, required — Allowance left, or null when unlimited.
      - `percentage` number, required — Share of the allowance spent, 0 to 100.
      - `isUnlimited` boolean, required
      - `accountPlan` string, required — The credential's plan.

## Other responses

- `400` — The server cannot or will not process the request due to something that is perceived to be a client error.
- `401` — Although HTTP specifies "unauthorized", this response means "unauthenticated". Authenticate to continue. NOTE: 401 is also returned with code "linkedin_not_connected" when the caller IS authenticated but has no connected LinkedIn account — connect LinkedIn (not re-authenticate) to continue.
- `403` — The client does not have access rights to the content.
- `404` — The server cannot find the requested resource.
- `409` — The request conflicts with the current state of the server.
- `410` — The requested content has been permanently deleted from the server.
- `422` — The request was well-formed but was unable to be followed due to semantic errors.
- `429` — Rate limit exceeded. Read error.retryAfter for the wait time in seconds.
- `500` — The server encountered a situation it does not know how to handle.
- `502` — LinkedIn returned a server error or the proxy connection failed. Retry after a few seconds.
- `503` — Proxy capacity temporarily exceeded. Retry after a few seconds.

---

[API](https://skmtc.net/berea/apis/bereach-api.md) · [All operations](https://skmtc.net/berea/apis/bereach-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/berea/bereach-api/revisions/9217eedacbb8/schema)
