~ / endpoints / Search Results API

LinkedIn Search Results Scraper API

Our LinkedIn search results scraper runs against LinkedIn's own public guest jobs search: pass keywords and a location, and get back a clean list of job-card results as JSON, each with title, company, company URL, location, posted date, salary when shown, and logo, with offset pagination for more.

Get a free API keyBrowse the endpoints
1,000
free requests / mo
2.6s
median response
JSON
structured output
10
cards per page
why it is walled

Why LinkedIn Search Results data is login-walled

The only LinkedIn search surface that answers logged-out is the guest jobs endpoint; people search and Sales Navigator sit behind a login and are not returned here. LinkedIn serves the jobs results as a bare HTML fragment of 10 cards with offset pagination, so a naive parser has to handle the missing page wrapper and the +10 offset itself.

one request

Call the LinkedIn Search Results Scraper API in one request

cURL
curl "https://api.linkedinscraperapi.com/api/v1/linkedin/search?keywords=software+engineer&location=United+States&api_key=$API_KEY"
Python
import requests

BASE = "https://api.linkedinscraperapi.com"
API_KEY = "YOUR_API_KEY"

# Page 1: keywords + location. start is an OFFSET (0, 10, 20, ...).
params = {
    "keywords": "software engineer",
    "location": "United States",
    "start": 0,
    "api_key": API_KEY,
}
data = requests.get(f"{BASE}/api/v1/linkedin/search", params=params, timeout=30).json()

print(data["total_results"], "cards on page", data["page"])
for job in data["results"]:
    print(job["position"], job["title"], "-", job["company"], "-", job["location"])

# Next page: bump the offset by 10.
params["start"] = 10
next_page = requests.get(f"{BASE}/api/v1/linkedin/search", params=params, timeout=30).json()
inputs

Parameters

ParameterRequiredDefaultNotes
keywordsrequired-The search query, e.g. software engineer. The alias q is also accepted. Required.
locationoptionalUnited StatesGeographic filter, e.g. United States. Defaults to United States.
startoptional0Pagination OFFSET, not a page number: 0, 10, 20, and so on (+10 per page).
limitoptional25Maximum cards to return; the guest endpoint serves up to 10 per call.
api_keyrequired-Your API key, passed as a query parameter. Get one free at signup.
the JSON

The JSON the LinkedIn Search Results Scraper API returns

200 OK
{
  "query": "software engineer",
  "keywords": "software engineer",
  "location": "United States",
  "start": 0,
  "page": 1,
  "total_results": 10,
  "results": [
    {
      "position": 1,
      "id": "4406118990",
      "job_id": "4406118990",
      "title": "Software Engineer, New Grad",
      "url": "https://www.linkedin.com/jobs/view/software-engineer-new-grad-at-notion-4406118990",
      "currency": "USD",
      "thumbnail": "https://media.licdn.com/dms/image/v2/D4E0BAQGwvcv_1tHZ4w/company-logo_100_100/B4EZW25gE2GgAQ-/0/1742530282185/notionhq_logo?e=2147483647&v=beta&t=h_sgZm5R2TgP9Fpbo95m2wmxnSDoEz06eupofZwpSXs",
      "company": "Notion",
      "company_url": "https://www.linkedin.com/company/notionhq",
      "location": "San Francisco, CA",
      "posted_date": "2026-06-27",
      "posted_label": "3 days ago",
      "salary": null,
      "company_logo": "https://media.licdn.com/dms/image/v2/D4E0BAQGwvcv_1tHZ4w/company-logo_100_100/B4EZW25gE2GgAQ-/0/1742530282185/notionhq_logo?e=2147483647&v=beta&t=h_sgZm5R2TgP9Fpbo95m2wmxnSDoEz06eupofZwpSXs"
    },
    {
      "position": 4,
      "id": "4433513807",
      "job_id": "4433513807",
      "title": "Software Engineer I",
      "url": "https://www.linkedin.com/jobs/view/software-engineer-i-at-uber-4433513807",
      "currency": "USD",
      "thumbnail": "https://media.licdn.com/dms/image/v2/C4D0BAQFiYnR1Mbtxdg/company-logo_100_100/company-logo_100_100/0/1630552741617/uber_com_logo?e=2147483647&v=beta&t=eLjukYsixVQJyGQQ7asxFiNOUNa3RVdnAMESgTWs_AQ",
      "company": "Uber",
      "company_url": "https://www.linkedin.com/company/uber-com",
      "location": "Sunnyvale, CA",
      "posted_date": "2026-06-25",
      "posted_label": "5 days ago",
      "salary": null,
      "company_logo": "https://media.licdn.com/dms/image/v2/C4D0BAQFiYnR1Mbtxdg/company-logo_100_100/company-logo_100_100/0/1630552741617/uber_com_logo?e=2147483647&v=beta&t=eLjukYsixVQJyGQQ7asxFiNOUNa3RVdnAMESgTWs_AQ"
    }
  ]
}
FieldTypeDescription
keywordsstringThe search query that was run, echoed back from your request.
locationstringThe location filter applied to the search.
startintegerThe pagination offset used for this response.
pageintegerThe page number derived from the offset, starting at 1.
total_resultsintegerNumber of job cards returned on this page.
resultsarrayThe job cards for this page. The same list is also mirrored under the jobs key.
results[].job_idstringThe numeric job ID, usable directly with the linkedin/job endpoint.
results[].titlestringThe job title from the card.
results[].urlstringThe /jobs/view/ URL for the posting, with tracking params stripped.
results[].companystringThe hiring company name.
results[].company_urlstringThe hiring company's /company/ page URL.
results[].locationstringThe job location shown on the card.
results[].posted_datestringThe machine-readable posting date, e.g. "2026-06-27".
results[].posted_labelstringRelative posting time, e.g. "3 days ago".
results[].salarystringThe salary text when the card shows it, otherwise null.
results[].company_logostringURL of the company logo (also mirrored as thumbnail).
who uses it

Who pulls LinkedIn data, and for what

>

Job board building

Run keyword and location searches on a schedule and pull fresh job cards to populate a niche job board or listings feed.
>

Hiring-trend tracking

Search the same role over time and count how many postings surface to chart hiring demand by keyword and region.
>

Recruiting sourcing

Harvest company and company_url from results across a role to build a list of companies actively hiring for it.
>

Feed and alert pipelines

Page through results with the offset to catch new postings for a saved search and push them to an alert or app feed.
>

Search-to-detail workflows

Take each job_id from a search page and expand it with the linkedin/job endpoint to get the full description and criteria.
>

Labor-market datasets

Collect posted_date, company, and location across many queries to build a dataset for labor-market or geography analysis.
why this endpoint

Why teams build on our LinkedIn Search Results Scraper API

Each call returns a page of parsed job cards in the order LinkedIn's guest search ranks them, with company URLs and job IDs ready to reuse. We handle the missing page wrapper, the +10 offset, and de-duping, and route through residential proxies with retries at a 2.6s median so a page reliably comes back instead of a rate-limit shell.

*

Keywords and location input

Pass a keywords query and an optional location, and get the guest jobs search results parsed into a flat list.
*

Offset pagination

start is an offset (0, 10, 20, ...), so you page deeper by bumping it +10 per call, with the derived page number returned for convenience.
*

Ready-to-chain job IDs

Every card carries a job_id and a clean /jobs/view/ URL, so you can feed results straight into the linkedin/job detail endpoint.
*

Real logo URLs

We read the lazy-loaded company logo (data-delayed-url), so company_logo and thumbnail are real image URLs, not grey placeholders.
*

Residential-first routing

We lead with residential proxies and fall back through datacenter and free tiers, because LinkedIn rate-limits datacenter egress more often.
*

Block vs empty diagnostics

When a page returns no cards, the endpoint reports whether it hit a block or a genuinely empty result, so retries are smarter.
measured against

LinkedIn Search Results Scraper API measured against the alternatives

Our APIDIY (requests / headless)Official LinkedIn API
Search inputKeywords plus locationBuild the guest URL yourselfNo public jobs-search endpoint
OutputParsed job cards as JSONBare HTML fragment to parsePartner-gated, if approved
PaginationOffset handled, page returnedTrack the +10 offset yourselfCursor, partner-only
SetupAPI key onlyResidential proxies, parsersTalent Solutions partnership
Anti-bot and proxiesResidential-first, built inYou build and maintain itNot applicable
Chaining to detailjob_id ready for the job endpointExtract the ID yourselfSeparate authorized calls
Scope, logged-outPublic jobs searchSame, if you dodge blocksPeople search needs a login
what it costs

Usage-based pricing, no seats

PlanPriceBest for
Free1,000 requestsTesting and small jobs
Pro$0.60 / 1kProduction workloads
Pay-as-you-go$0.90 / 1kSpiky or one-off volume

Median response 2.6s. You only pay for successful requests.

FAQ

What is a LinkedIn search results scraper?

A LinkedIn search results scraper reads a LinkedIn results page and returns the entries in a structured format. Ours runs against LinkedIn's public guest jobs search: you pass keywords and a location, and it returns a paginated list of job cards as JSON, each with title, company, company URL, location, posted date, salary when shown, and logo.

Can I scrape LinkedIn people search or Sales Navigator with this?

No. People search and Sales Navigator sit behind a LinkedIn login and are not exposed to logged-out visitors, so this endpoint does not return them. The search surface LinkedIn does render publicly is its guest jobs search, which is what this endpoint reads. We describe the scope plainly rather than implying access to login-only results.

How does pagination work?

The start parameter is an offset, not a page number. The guest endpoint serves up to 10 cards per call, so you fetch the next page by increasing start by 10 (0, 10, 20, and so on). Each response also returns a derived page number so you can track position without doing the math yourself.

How do I get the full job details for a result?

Each card in the results array includes a job_id and a clean /jobs/view/ URL. Pass that job_id to our LinkedIn job endpoint to get the full posting: description, salary when shown, seniority, employment type, job function, and industries. The search endpoint finds postings; the job endpoint expands them.

Do I need a LinkedIn login or the official API?

No. You only need a linkedinscraperapi key, passed as the api_key query parameter. There is no LinkedIn login, no cookies, and no Talent Solutions partnership. We read the public guest jobs search. The free tier includes 1,000 requests per month.

Why did a search return no results?

Either the query genuinely has no guest-visible postings for that location, or the egress hit a LinkedIn rate-limit or block. The endpoint distinguishes the two by reporting the markers it matched when a page comes back empty, so a block can be retried while a truly empty search is not. We lead with residential proxies to keep blocks rare.

How fast is the LinkedIn search results scraper API?

Median end-to-end response is about 2.6 seconds per page, which includes residential proxy routing, anti-bot handling, retries, and parsing. Each call returns one page of up to 10 job cards.

Ship search results api data as JSON today
Start with 1,000 free requests. No credit card, no LinkedIn login.
Get a free API key Browse the endpoints