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.
Quickstart
curl "https://api.linkedinscraperapi.com/api/v1/linkedin/search?keywords=software+engineer&location=United+States&api_key=$API_KEY" 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() Params
| Parameter | Required | Default | Notes |
|---|---|---|---|
keywords | required | - | The search query, e.g. software engineer. The alias q is also accepted. Required. |
location | optional | United States | Geographic filter, e.g. United States. Defaults to United States. |
start | optional | 0 | Pagination OFFSET, not a page number: 0, 10, 20, and so on (+10 per page). |
limit | optional | 25 | Maximum cards to return; the guest endpoint serves up to 10 per call. |
api_key | required | - | Your API key, passed as a query parameter. Get one free at signup. |
Response
{
"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",
"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",
"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"
}
]
} | Field | Type | Description |
|---|---|---|
keywords | string | The search query that was run, echoed back from your request. |
location | string | The location filter applied to the search. |
start | integer | The pagination offset used for this response. |
page | integer | The page number derived from the offset, starting at 1. |
total_results | integer | Number of job cards returned on this page. |
results | array | The job cards for this page. The same list is also mirrored under the jobs key. |
results[].job_id | string | The numeric job ID, usable directly with the linkedin/job endpoint. |
results[].title | string | The job title from the card. |
Use it for
Job board building
Hiring-trend tracking
Recruiting sourcing
Feed and alert pipelines
How it compares
| Our API | DIY (requests / headless) | Official LinkedIn API | |
|---|---|---|---|
| Search input | Keywords plus location | Build the guest URL yourself | No public jobs-search endpoint |
| Output | Parsed job cards as JSON | Bare HTML fragment to parse | Partner-gated, if approved |
| Pagination | Offset handled, page returned | Track the +10 offset yourself | Cursor, partner-only |
| Setup | API key only | Residential proxies, parsers | Talent Solutions partnership |
| Anti-bot and proxies | Residential-first, built in | You build and maintain it | Not applicable |
| Chaining to detail | job_id ready for the job endpoint | Extract the ID yourself | Separate authorized calls |
| Scope, logged-out | Public jobs search | Same, if you dodge blocks | People search needs a login |
Pricing
| Plan | Price | Best for |
|---|---|---|
| Free | 1,000 requests | Testing and small jobs |
| Pro | $0.60 / 1k | Production workloads |
| Pay-as-you-go | $0.90 / 1k | Spiky 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.