One keyword in. Clean JSON out.
Send a keyword string, get back an array of public LinkedIn profiles matching it — name, headline, location, current company, follower count, profile URL. This is LinkedIn's people search returned as JSON, logged out, reading only what a signed-out visitor can see. Billing is per profile returned at 5 credits, so a default 20-result search costs 100 credits.
The difference
On the left, what a headless browser hands you. On the right, what the endpoint hands you.
<div class="feed-shared-update-v2 artdeco-card" data-urn="urn:li:activity:7181111111111111111"><div class="update-components-text relative"><span dir="ltr">We just cut p95 latency in half by moving the cache closer to the edge.</span></div><div class="social-details-social-counts"><li class="social-details-social-counts__item"><span aria-label="842 reactions">842</span></li><li class="social-details-social-counts__comments">63 comments</li><li>41 reposts</li></div><time class="update-components-actor__sub-description">4d</time><code style="display:none">{"data":{"*elements":["urn:li:fsd_update:(urn:li:activity... {"data": [{"platform": "linkedin","handle": "example-person","name": "Example Person","headline": "Head of Growth at Example Co","location": "Austin, Texas, United States","current_company": "Example Co","url": "https://www.linkedin.com/in/example-person"}],"meta": {"count": 1,"limit": 20,"item": "profile"},"request_id": "req_01JZX4M8Q2TE9W"}
The payload
An array. Each element is one person: their public handle and profile URL, display name, the headline they wrote under it, where they say they are based, and the company on their current position. Follower and connection-adjacent counts come along when LinkedIn shows them publicly.
The shape is identical to the single-profile endpoint, which is deliberate. You can search once, store the array, and later re-fetch any individual handle for a fresher read without writing a second parser or a second database table.
Two fields deserve advance warning. `posts` is always null here — this endpoint indexes people, not their content. And `email` is null on essentially every result, because the search runs in the cheap profile mode that does not perform contact lookup. Do not build a lead-enrichment pipeline that assumes an address will arrive.
How many accounts this person follows. Rarely public; expect null far more often than a number.
Pricing
Billing is per profile returned at 5 credits — about 2.5¢ on the monthly plan — so a default 20-result search runs about 50¢, and a search matching nobody still costs 1 credit.
Estimate only, on a full-year basis. 5 credits per returned profile. Monthly: $5 per 1,000 credits with $4/1,000 top-ups. Annual: $54 per 12,000 credits with $3/1,000 top-ups. We show whichever plan is cheaper for your annual volume, divided by 12. Failed calls are never charged; cache hits cost the same as fresh calls.
Entry price, side by side
Credits are not equivalent units across vendors — each meters differently. Price your own workload on both before deciding on entry price alone. At high volume, several of these are cheaper per credit than we are.
Engineering notes
We document exactly how every endpoint behaves — nulls, caching, billing — so what you ship on day one is still running in month six. No surprises, no support tickets.
5 credits per result. The default limit is 20, so an unqualified call costs 100 credits — about 50 cents on the monthly plan. Pass `limit` explicitly on every call in production code; a loop with limit=100 spends 500 credits per iteration and will drain a plan faster than you expect.
Billing follows what actually returns. A tight query that only matches six people costs 30 credits, not 100. That makes narrow queries cheaper as well as more useful, which is a rare alignment.
The `query` parameter is a single string handed to LinkedIn's own people search. Write it the way you would type it into the site: role words, a skill, a place, a company name. There is no AND/OR operator support, no field-scoping syntax, and no guarantee that quoting a phrase pins it exactly.
Relevance degrades as you add terms. Four or five words is usually the sweet spot; ten-word queries tend to return either nothing or a loose set that ignored half your input. If a query returns junk, shorten it rather than lengthening it.
We read what a signed-out visitor sees. LinkedIn shows signed-out visitors less than it shows a logged-in recruiter, which means some profiles are missing from results entirely, and the ones that appear often arrive with bio, followers and following null. That is coverage, not a bug in the parser.
There is no way to widen this. We do not log in, do not use member sessions, and do not reach anything behind a connection or paywall. If your use case depends on Recruiter-grade filters, this endpoint will disappoint you and you should know that before you spend credits.
Every result describes an identifiable person. Cached copies of this endpoint's responses are capped at 30 days rather than held indefinitely, and you should apply a similar discipline downstream: store what you need, set a retention window, and be ready to delete on request. Depending on where you and the person sit, GDPR or a state privacy law applies to what you keep, regardless of the data having been public.
Run the same query a week apart and expect a different set. People edit headlines, change jobs, tighten visibility settings, and LinkedIn re-ranks constantly. Deduplicate on `handle` when you merge runs, and never treat position in the array as a meaningful score.
Responses are cached in the fast class, so a repeated identical query inside the window returns in milliseconds and sets x-cache: hit. A cache hit costs the same credits. Add fresh=true when you deliberately want to re-run a search rather than re-read one.
Questions
Send a GET request to /v1/linkedin/people-search with a query string and your API key. Your API key is the only credential involved — nothing to register with LinkedIn, nothing to wait for approval on. The endpoint reads public, signed-out search results and returns them as a JSON array. LinkedIn's own partner APIs do not expose people search to general developers at all, which is the usual reason people end up here.
5 credits per profile returned. Credits are $0.005 each on monthly and $0.0045 on annual, so the default 20 results run about 50 cents. Set the limit parameter to control it — you pay for what comes back, so a query matching four people costs 20 credits. Failed calls are never charged.
No. The `email` field exists in the response shape because the profile parser is shared with the single-profile endpoint, but people search runs in a mode that skips contact lookup, so it is null in practice. No parameter enables it. If you need contact data, take the handles from here and run them through a dedicated enrichment provider that is set up for that and handles the consent side.
Only through the wording of your query. The endpoint accepts a keyword string and a limit, nothing else — there are no structured filters for title, seniority, company size or industry. Put the company or title in the query text and then filter the returned array yourself on current_company or headline. Filtering afterwards does not refund credits for results you discard, so keep queries narrow.
Because LinkedIn does not show them to a signed-out visitor for most profiles. Search results carry a trimmed record; follower counts tend to appear only on accounts with a public audience, and the About section is often withheld. Fetching the same handle through the LinkedIn Profile API sometimes fills in more, but there is no setting that forces LinkedIn to publish a field it is hiding.
Set `limit` to what you need; the default is 20. That one call is all you get — there is no cursor or page token to fetch the next batch, so `limit` is the ceiling for the whole query. Larger limits take longer and the cost scales linearly at 5 credits each. In practice several tighter queries beat one broad query with a high limit — you get better relevance and you can stop paying as soon as a query stops being useful.
We only read public pages, logged out, with no member session and nothing behind a login. That said, legality depends on your jurisdiction and what you do with the records, and this is not legal advice. Results describe identifiable people, so treat them as personal data: keep a retention window, honour deletion requests, and check your obligations under GDPR or your local equivalent before you build a permanent database.
Next
100 trial credits on signup — no card, key on screen immediately.