# LinkedIn Search People API (https://www.socialcrawl.dev/platforms/linkedin/search-people) > Searches LinkedIn members by name and B2B filters (title, current/past company, school, industry, location, language). Returns a paginated list of matching profiles with handle, headline, location, follower count, and the member URN for follow-up enrichment calls. Each page is 10 members. On a plain call `author.followers` is LinkedIn's rounded display bucket, and only on the rows that show one (flagged `author.ext.followers_approximate: true`), and `author.following` is null on every row. Send `include=profile` and every row is joined, in the same call, to the member's profile lookup (`/v1/linkedin/profile`): `author.followers` becomes the exact follower count and `author.ext.followers_approximate` reads false on every row the lookup filled, whether the row arrived with LinkedIn's rounded bucket or with no count at all, `author.following` is filled with the member's connection count (on LinkedIn a member's `following` is the number of connections), and the location, the joined date (`author.joined_at`), and the country, website, cover image and profile flags on `author.ext` land where the row lacks them. Cost: 10 credits for the list; include=profile holds 4 credits per row and keeps only the rows filled from a fresh lookup, so a call costs at most 50; rows already in cache are free and unfilled rows are refunded. Pass `limit` (1 to 10) to join only the top rows: `limit=3&include=profile` costs at most 22. Time: the lookups run in parallel, about 1 second for 10 rows, up to 3 on a slow second, and never more than 8 seconds. The response carries a `hydration` block itemising rows, lookups, cache hits, credits and milliseconds. TL;DR: `GET /v1/linkedin/search/people` costs 10 credits for the list. include=profile holds 4 credits per row and keeps only the rows filled from a fresh lookup: at most 50 for the 10-row page, or 10 + 4 x limit when you pass `limit`. Rows served from cache are free, unfilled rows are refunded, and a repeat of a fully joined page within the list's cache window costs 0. The list is cached for 2 minutes and each profile lookup for 15 minutes. With `max_pages`, `max_items` or `max_credits`, each page walked is billed at this price (a cached page is free), and `max_credits` caps the total. and returns SocialCrawl's unified JSON schema. Single x-api-key auth, 100 free credits on signup. ## Parameters | Parameter | Required | Description | | --- | --- | --- | | `query` | yes | Name or display-name keyword to search for (e.g. 'Bill Gates'). | | `page` | no | Page number for pagination (default 1). | | `first_name` | no | Filter by first name. | | `last_name` | no | Filter by last name. | | `title` | no | Filter by job title or headline. | | `current_company` | no | Filter by current company, using a numeric company id from /v1/linkedin/company (`author.id`). Comma-separated for multiple. | | `past_company` | no | Filter by a previously-worked company, using a numeric company id from /v1/linkedin/company (`author.id`). | | `school` | no | Filter by school, using a school id from /v1/linkedin/search/schools (`id`). | | `industry` | no | Filter by industry, using an industry id from /v1/linkedin/search/industry (`industry_id`). | | `geocode_location` | no | Filter by location, using a geocode id from /v1/linkedin/search/location (`geocode`). | | `profile_language` | no | Filter by profile language (ISO 2-letter code, e.g. 'en'). | | `service_category` | no | Filter by service category, using a numeric service-category id. No endpoint resolves these, so pass one you already hold. | | `follower_of` | no | Return people who follow a specific member, using the member's URN from /v1/linkedin/profile (`author.ext.urn`). This one is a URN and not a numeric id. | | `include` | no | Set to `profile` (one token only) to join every row to the member's profile lookup in this one call: `author.followers` becomes the exact count and `author.ext.followers_approximate` reads false on every row the lookup filled, `author.following` is filled with the member's connection count, and the location, joined date, country, website, cover image and profile flags land where the row lacks them. Holds 4 credits per row and keeps only the rows filled from a fresh lookup; rows already in cache and rows that could not be filled are refunded, so a call costs at most 50 (10 + 4 per row) and the usual bill is lower. Adds about 1 second for 10 rows, up to 3 on a slow second and never more than 8, and nothing when the members are already cached; read `data.hydration` for the rows, the credits held and kept, and the time. (profile) | | `limit` | no | Take the top N rows of this page (1 to 10). With `include=profile` it caps both the rows joined and the extra credits: `limit=3&include=profile` costs at most 22. The page cursor still advances past the full page of 10, so the rows past your limit are skipped, not carried to the next page. Without `include=profile` the call stays 10 credits. | | `max_pages` | no | 1 to 50 (default 1, or 50 when `max_items` or `max_credits` is sent). Walk up to this many pages in one call and return the rows from all of them. Each page walked is billed exactly as one call to this endpoint (a cached page is free) and counts against your rate limit; its charge and any refund are recorded under the page's own request id, listed in `data.walk.request_ids`. The walk stops early at the last page, or when the request's time budget runs low; `data.walk.stopped` says why (`end`, `max_pages`, `max_items`, `max_credits`, `time_budget`, `page_error`) and `pagination.next_cursor` continues from where it stopped. | | `max_items` | no | 1 to 5000. Get more in one call: keep walking pages until the response holds at least this many rows, then stop with `data.walk.stopped: "max_items"`. The last page is returned whole (it was billed), so `data.items` can hold up to one page more than this, and `pagination.next_cursor` resumes right after it without skipping a row. Walks up to 50 pages unless `max_pages` says fewer; each page is billed as one call (a cached page is free). Add `max_credits` to cap the spend. A long walk can stop on the time budget first (`"time_budget"`): send the returned cursor with the same params to continue. | | `max_credits` | no | 1 to 100000. The most this call may spend, across every page it walks. A page starts only while the credits already spent plus that page's price (or, when higher, the most any page of this walk has cost) still fit, so the call never goes past it; the walk then stops with `data.walk.stopped: "max_credits"` and the cursor to resume. Sent alone, it walks as far as the budget goes (up to 50 pages). A value below the price of one page is a free 400 whose `error.details.page_credits` names that price. Credits a row join (`include=`) adds are known only once a page has run, so page 1 is checked against its own price. | ## Code example ```bash curl -G "https://www.socialcrawl.dev/v1/linkedin/search/people" \ --data-urlencode "query=Bill Gates" \ -H "x-api-key: sc_YOUR_API_KEY" ``` ## FAQ ### How do I search for LinkedIn people with an API? Send a GET request to /v1/linkedin/search/people with a query keyword (a name or role). SocialCrawl returns a paginated list of people, each with handle, headline, location, follower count, and member URN. Add include=profile for exact counts, or page to walk deeper. ### What B2B filters can I use to narrow the search? Combine query with optional filters: title, current_company, past_company, school, industry, geocode_location, and profile_language. Stack them to build a precise prospecting list without a Sales Navigator seat. ### What fields come back for each person? Each result includes the public handle, headline, location, follower count, and member URN. Add include=profile and every row is joined to that member's profile in the same call, which fills the exact follower and connection counts plus location, joined date, country, website, cover image, and the creator, influencer, open to work, hiring, top voice and premium flags. ### How do I get exact LinkedIn follower counts on a people search? Pass include=profile. LinkedIn publishes a rounded bucket on a search row, so a member on 39,278 followers shows as 39,000 and some rows carry no count at all. The join returns the exact number on every row it fills, and author.following carries that member's connection count. ### How much does LinkedIn people search cost? A plain page costs 10 credits on the premium tier, regardless of how many people come back. With include=profile the page costs 10 credits plus four credits per row filled, never more than 50 credits. Cached rows are free, unfilled rows are refunded, and limit (1 to 10) caps both the rows and the credits. data.hydration explains the bill. ### How do I paginate through people search results? Add the page query parameter (integer) and increment it to fetch more results. Start at page 1 and continue until the response returns an empty list, which signals the end of the matches. ### Can I use this for recruiting and prospecting? Yes, sourcing and prospecting are the main use cases. Filter by title, current_company, and geocode_location to build a targeted candidate or lead list, then add include=profile to the same call rather than running a profile lookup per row. See the full LinkedIn API: https://www.socialcrawl.dev/platforms/linkedin ## Pricing - Standard endpoints: 1 credit per call - Advanced endpoints: 5 credits per call - Premium endpoints: 10 credits per call - 100 free credits on signup, no credit card required. Cached responses cost 0 credits. Credit packs never expire. - Full pricing: https://www.socialcrawl.dev/pricing ## Explore with AI Questions this API answers, phrased for an AI assistant: - How to search LinkedIn people by title and company without Sales Navigator - What does the SocialCrawl LinkedIn People Search API return? - How to get exact LinkedIn follower counts on people search results in one call - Which API returns LinkedIn connection counts alongside people search rows