One URL in. Clean JSON out.
Give this endpoint a LinkedIn company URL or the slug from it, and it returns the company's public profile as JSON: follower count, headcount, industry, website, headquarters, founding year. 10 credits per company, one company per call. It reads the same page a logged-out visitor sees, so there is no OAuth dance and no LinkedIn partner application to fill in.
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-co","name": "Example Co","industry": "Software Development","employees_range": "201-500","headquarters": "Austin, Texas","metrics": {"followers": 96210}},"request_id": "req_01JZX4M8Q2TE9W"}
The payload
One flat object per company. Two halves, roughly: firmographics that barely change (industry, website, founding year, headquarters city) and figures that drift (follower count, employee count). Nothing is nested, so you can write the whole thing into a row without flattening logic.
Employee count deserves a note. LinkedIn shows two different numbers for headcount — a precise-looking count and a bucketed band like 51-200 — and we return both, as `employees` and `employee_range`. The count is derived from profiles that list the company as their employer, not from a payroll file. It undercounts firms in regions where LinkedIn adoption is low and overcounts ones where ex-employees never updated their profile.
The response is thinner than the company page looks in a browser. There are no specialties, no locations list, no funding history, no logo URL, and no posts. If a key is not in the table below, this endpoint does not return it.
Headcount as LinkedIn counts it — profiles that list this company as employer. An estimate, not a payroll number.
Pricing
One company lookup is 10 credits — about 5¢ on the monthly plan, so $5 covers roughly 100 companies. Cached repeats bill the same, and failed calls are never charged.
Estimate only, on a full-year basis. 10 credits per returned company. 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.
Pass the full https://www.linkedin.com/company/acme-robotics/ URL, or just acme-robotics. Both resolve to the same call and the same 10 credits.
What does not work is a numeric company ID from LinkedIn's ad tooling, or a showcase-page URL under a different path. If you only have a name, resolve it to a slug first — guessing slugs from company names fails often enough to be a bad strategy.
`employees` looks precise and is not. It reflects how many LinkedIn members currently list the company as their employer. Firms in the US and Western Europe read high relative to their real headcount; firms in markets with low LinkedIn penetration read low.
If you are segmenting, use `employee_range`. It is coarser, which is the point — it does not shift by three people overnight and break your bucket boundaries.
Every field except the object itself is nullable. Small companies, regional subsidiaries and pages set up years ago and abandoned routinely have no About text, no website, no founding year. A response with a name, a handle and four nulls is a normal response, not a failure.
A page that does not exist, or has been taken down, returns an error rather than an object of nulls — and errored calls are not charged.
Company pages change slowly, so responses are cached with a long window and repeat calls for the same company come back in milliseconds with x-cache: hit. A hit costs the same 10 credits.
That caching is a feature when you are enriching a list where the same parent company appears fifty times. It is a problem if you are specifically watching follower counts move — add fresh=true on those calls to force a live fetch.
We read the logged-out company page. Anything LinkedIn shows only to signed-in members, only to page admins, or only inside Sales Navigator is out of reach and always will be. There is no login, no session, no member data beyond what LinkedIn itself publishes to anonymous visitors.
Questions
Send a GET to /v1/linkedin/company with the company URL or slug and your API key. LinkedIn's official Marketing and Pages APIs only reach organisations you already administer, and access requires a partner application, so they cannot enrich a list of third-party companies. This endpoint reads the public company page instead and returns the same firmographics as JSON.
It is an estimate. LinkedIn derives headcount from member profiles that name the company as their current employer, so it drifts from real headcount in both directions — high where LinkedIn use is near-universal, low in markets where it is not, and high again where former employees never updated their profiles. For segmentation, use employee_range rather than the raw number.
10 credits, covering one company. Credits are $0.005 each on monthly billing and $0.0045 on annual, so a lookup runs about 5 cents, and $50 enriches roughly a thousand companies. Cached responses are billed the same as fresh ones. Calls that fail — dead page, bad slug — are not charged at all.
No. One company per call. Run them concurrently instead; the calls are independent and the API handles parallel traffic fine. For a large enrichment job, dedupe your input list on the company slug first — repeated companies each cost full price even when the second one is served from cache.
No, it returns the profile only. Follower count, headcount, industry, website, description, headquarters, founding year. For the content a company page publishes — post text, engagement counts, timestamps — call the LinkedIn Company Posts API with the same URL. They are separate endpoints because most enrichment jobs need one and never the other.
No. This endpoint returns organisation-level data only, and email addresses are not on a LinkedIn company page in the first place, so they are not in the response. If you need individual public member profiles, that is the LinkedIn Profile API. We read public pages logged out and never access anything behind a login.
It reflects what the company page showed when the page was last fetched, and this endpoint caches for a long window because company data changes slowly. For a one-off enrichment that is fine. If you are charting follower growth week over week, pass fresh=true so each sample is a live read rather than a repeat of the cached one.
Next
100 trial credits on signup — no card, key on screen immediately.