Company details · by URL, slug or EnvoAPI ID
LinkedIn Company API for CRM Enrichment
EnvoAPI’s LinkedIn Company API retrieves public LinkedIn company data as JSON for developers building CRM integrations and B2B applications. Look up a company by its LinkedIn URL, slug or EnvoAPI ID to retrieve available website, industry, employee count, size range, follower count, logo and headquarters data. If you have only a domain or company name, search for the company first.
Company details cost 1 credit per request. New accounts receive 100 free credits once, with no credit card required.
- Have the URL, slug or EnvoAPI ID: one request
- Have only a domain or a name: search, then one request
- Look up by
- URL, slug or ID
- Search first by
- Domain or name
- Cost per request
- 1 credit
- Free to start
- 100 credits
EnvoAPI is an independent service, not an official LinkedIn product.
Access options
Compare official LinkedIn API access with EnvoAPI
LinkedIn’s official Organization Lookup API and EnvoAPI use different credentials and identifiers. Choose the access option that matches your company data integration.
| Access option | Authentication | Lookup inputs | Scope |
|---|---|---|---|
| LinkedIn Organization Lookup | 3-legged OAuth | Organization ID, vanity name or email domain | Official organization data access. Available fields depend on the call and permissions. Some calls require the authenticated member to hold the ADMINISTRATOR role; calls that allow non-admin access return a limited field set. |
| EnvoAPI company details | EnvoAPI Bearer API key | LinkedIn company URL, slug or EnvoAPI publicId | Public company profiles for enrichment. These lookup endpoints retrieve data; they do not manage or publish to a LinkedIn Page. |
For an integration using LinkedIn’s official permissions, start with the LinkedIn Organization Lookup documentation. For company enrichment with EnvoAPI, use the routes below. Read more about official and unofficial LinkedIn API access if you are still choosing an approach.
Lookup routes
Choose a company API endpoint by URL, slug or EnvoAPI ID
Use the base URL https://api.envoapi.com with the matching GET endpoint below to retrieve a company profile.
| Available input | GET route | Parameter | Next step |
|---|---|---|---|
| LinkedIn company URL | /v1/companies/details/by-url | url, for example https://www.linkedin.com/company/microsoft/ | Send the Page URL using company lookup by URL. |
| Company slug | /v1/companies/details/by-slug | slug=microsoft | Use the identifier after /company/ in the Page URL for company lookup by slug. |
| EnvoAPI company ID | /v1/companies/details/by-id | publicId=company_4T4tWj | Reuse the ID from an earlier company response for lookup by EnvoAPI ID. |
The publicId parameter takes an EnvoAPI ID. Do not substitute LinkedIn’s numeric company ID. Use a LinkedIn company URL or slug when you do not have an EnvoAPI ID.
When you only have a domain or company name
Search first, confirm the matching Page, then retrieve its details:
- For a domain, send a GET request to
/v1/companies/by-domain?domain=microsoft.com&offset=0. For a name, use/v1/companies/search?keywords=Microsoft&offset=0. - Read the candidates in
data.companies. Compare each company’s name andlinkedinUrlwith the account you intend to enrich. - Take the selected result’s
slugand call/v1/companies/details/by-slugto retrieve the company profile.
The domain search example includes Microsoft alongside related Pages such as Microsoft Azure. A domain does not identify a single Page in every result set, and search candidates are not full company profiles. Select the intended company before fetching details. See the LinkedIn Search API for broader search workflows.
Quickstart
Retrieve a LinkedIn company profile with one API request
Get an API key
Create an EnvoAPI account and get an API key.
Store the key on your server
Store the key in the server environment as
ENVO_API_KEY. Keep it out of browser and mobile application code; see API key authentication.Send the request
Send a GET request with your identifier and an
Authorization: Bearerheader.Read the response
On a successful response, read the company profile from
dataand the request’s credit cost frommeta.creditCost.
With your API key set in the environment, this request looks up the microsoft slug:
curl "https://api.envoapi.com/v1/companies/details/by-slug?slug=microsoft" \ --header "Authorization: Bearer $ENVO_API_KEY" \ --header "Accept: application/json"The JSON is shortened from EnvoAPI’s documented Microsoft response, with the source checked on . It is a documentation example, not a live API result captured for this page. Its employee count is a sample value, not a statement of Microsoft’s current headcount.
Save data.publicId for a later lookup by ID. Record meta.creditCost in your usage log; it describes the request, not the company. Every field is described below, and the company response schema has the full definitions.
{ "data": { "publicId": "company_4T4tWj", "name": "Microsoft", "slug": "microsoft", "linkedinUrl": "https://www.linkedin.com/company/microsoft/", "websiteUrl": "https://news.microsoft.com/", "primaryIndustry": { "publicId": null, "name": "Software Development" }, "employeeCount": 232066, "employeeCountRange": { "start": 10001, "end": null }, "headquarters": { "description": null, "address": { "line1": "1 Microsoft Way", "line2": null, "locality": "Redmond", "administrativeArea": "Washington", "postalCode": "98052", "country": "US", "countryCode": null } }, "foundedOn": null, "products": [] }, "meta": { "creditCost": 1 }}Python and Node.js
Call the LinkedIn Company API from Python or Node.js
Both samples send the cURL request above from your server: they read the key from ENVO_API_KEY, return the company record and its credit cost, and raise the documented error code, or the Retry-After wait on a 429.
import osimport requestsAPI_BASE = "https://api.envoapi.com"API_KEY = os.environ["ENVO_API_KEY"]def get_company(slug): response = requests.get( f"{API_BASE}/v1/companies/details/by-slug", params={"slug": slug}, headers={ "Authorization": f"Bearer {API_KEY}", "Accept": "application/json", }, timeout=30, ) if response.status_code == 429: wait = response.headers.get("Retry-After") raise RuntimeError(f"Rate limited; retry in {wait}s.") if not response.ok: error = response.json()["error"] message = f"{error['code']}: {error['message']}" raise RuntimeError(message) body = response.json() return body["data"], body["meta"]["creditCost"]company, credit_cost = get_company("microsoft")print(company["name"], company["employeeCount"], credit_cost)const API_BASE = "https://api.envoapi.com";const API_KEY = process.env.ENVO_API_KEY;async function getCompany(slug) { const path = "/v1/companies/details/by-slug"; const query = new URLSearchParams({ slug }); const url = `${API_BASE}${path}?${query}`; const response = await fetch(url, { headers: { Authorization: `Bearer ${API_KEY}`, Accept: "application/json", }, signal: AbortSignal.timeout(30_000), }); if (response.status === 429) { const wait = response.headers.get("Retry-After"); throw new Error(`Rate limited; retry in ${wait}s.`); } if (!response.ok) { const { error } = await response.json(); throw new Error(`${error.code}: ${error.message}`); } const { data, meta } = await response.json(); return { company: data, creditCost: meta.creditCost };}const { company, creditCost } = await getCompany("microsoft");console.log(company.name, company.employeeCount, creditCost);The Python sample uses the requests package (pip install requests). The Node.js sample uses the built-in fetch and runs as an ES module on Node.js 18 or later.
Response fields
LinkedIn company data fields the API returns
Every successful company details response carries the same 20 keys in data. Any value except publicId can be null and a list can be empty, so check each value before you write it to a record.
Identifiers and links
publicIdstring- The EnvoAPI company ID, such as
company_4T4tWj, for later lookups by ID. The one field that is never null. namestring- The company name, such as
Microsoft. slugstring- The Page identifier from its URL, such as
microsoft. linkedinUrlstring- The LinkedIn company Page URL.
websiteUrlstring- The website listed for the company, as a full URL such as
https://news.microsoft.com/.
Description, tagline and specialties
descriptionstring- The company description, as published on the Page.
taglinestring- The short tagline, when the Page has one.
specialtiesstring[]- Up to 100 specialty labels, such as
Cloud ComputingandDeveloper Tools.
Industry, organization type and founding date
primaryIndustryobject{ publicId, name }, such asSoftware Development.industriesobject[]- Up to 50 industries, each in the same shape.
organizationTypeobject{ code, name }, such aspublicCompanyandPublic Company. Other codes includeprivatelyHeld,nonProfitandgovernmentAgency.foundedOnobject- A partial date,
{ year, month, day }, where month and day can be null.
Employee count and follower count
employeeCountinteger- The returned employee count, such as
232066. It is not verified payroll headcount. employeeCountRangeobject- The size band as
{ start, end }, such as a start of10001with an open end ofnull. followerCountinteger- The Page’s follower count, such as
29094127.
Logo and cover image
logoobject[]- Up to 16 renditions of
{ url, width, height }; the example has 100, 200 and 400 pixel squares. coverImageobject[]- Up to 16 cover image renditions in the same shape, the largest 4200 × 700 pixels in the example.
Headquarters, locations and products
headquartersobject{ description, address }, with the address split intoline1,locality,administrativeArea,postalCodeandcountry.locationsobject[]- Up to 100 locations in the headquarters shape.
productsobject[]- Up to 100 products, each with a name, description, logo and categories. Empty in the example.
CRM mapping
Map company profile data to your CRM
Use the company profile to update your account record, with separate fields for identifiers, segmentation and location. Check for missing parent objects before reading nested values.
| JSON path | Account field or purpose | Handling note |
|---|---|---|
data.publicId | External company ID | Store it as the EnvoAPI identifier for subsequent details requests. |
data.slugdata.linkedinUrl | Page identifier and link | Keep the slug and URL in separate fields. |
data.namedata.websiteUrl | Account name and website | The website value is a URL. Parse its hostname if your CRM needs a domain. |
data.primaryIndustry.name | Industry segment | Use the available industry label for account grouping. |
data.employeeCountdata.employeeCountRange | Returned employee count and company size band | Store these separately. Preserve the range’s start and end values without inventing missing bounds. The count is not verified payroll headcount. |
data.headquarters.address | Headquarters and territory routing | Map components such as locality, administrativeArea and country. The address is an object, not a city/country string. |
data.foundedOndata.specialtiesdata.locations | Founding information, business focus and locations | Use these schema fields when populated. Specialties and locations are omitted from the shortened example above. |
meta.creditCost | Request usage | Write this to your usage log, outside the company record. |
Preserve missing values. In the example, foundedOn: null means no founding value is returned; do not convert it to zero. Likewise, products: [] means the response contains no product entries, not that the company has no products. A successful lookup can contain null fields or empty arrays.
Enrich an existing CRM account
Start with the LinkedIn URL or slug already stored on the account and call the matching details route. Map industry and the employee size range to your segmentation fields, then map headquarters components to territory routing. Save the returned publicId for the next lookup. These are mappings to implement in your integration.
Enrich a signup from its company domain
Send the signup’s company domain to domain search, check the candidate Pages, and fetch details for the selected slug. Add the matched profile to the account. If you cannot confirm the match, leave the account pending verification instead of attaching the first result.
For a broader account workflow, see the Data Enrichment API. Individual profiles use the LinkedIn Profile API; company post content uses the separate endpoint in the company posts endpoint documentation.
Credits and limits
Estimate credits and handle API rate limits
Credits and starting price
Budget for every search request as well as the details request. Company details and company search each cost 1 credit per request.
| Workflow | Requests | Credits |
|---|---|---|
| Direct details lookup by URL, slug or EnvoAPI ID | 1 | 1 |
| 1 search page followed by 1 details lookup | 2 | 2 |
The one-time 100 free credits cover 100 direct lookups or 50 workflows consisting of exactly 1 search page and 1 details lookup, assuming no other requests or retries. These totals describe request budgets; they do not guarantee that every workflow identifies a unique company.
As checked on , the Free plan requires no credit card and allows 10 requests per minute. Paid plans start with Launch at $49/month for 10,000 monthly credits and 60 requests per minute. See EnvoAPI pricing and credits for current terms.
Handle failed requests
| Status | Meaning | Next action |
|---|---|---|
401 | The API key is missing, invalid or inactive. | Check that ENVO_API_KEY is set and that the request sends the active key in the Bearer header. |
402 | The account has insufficient credits. | Check the balance and ensure enough credits are available before sending the request again. |
404 | The resource was not found. | Check the identifier and confirm that you selected the intended company Page. |
429 | The account’s request limit was exceeded. | Wait for the number of seconds in Retry-After, cap retry attempts and reduce the account’s request pace. |
The rate limit is shared across all API keys on the account. Coordinate requests across workers and read the response headers to track remaining capacity. X-RateLimit-Reset reports whole seconds until capacity resets, not a Unix timestamp. Follow the account rate limits guide when implementing retries.
FAQ
LinkedIn Company API questions, answered
Does LinkedIn have an official company API?
Yes. LinkedIn’s Organization Lookup API returns organization data through 3-legged OAuth, and some calls require the authenticated member to hold the ADMINISTRATOR role. EnvoAPI is an independent, unofficial service: it authenticates with an EnvoAPI API key and returns public company profiles for enrichment.
Do I need a LinkedIn account or access token?
No. Requests authenticate with your EnvoAPI API key, sent as a Bearer token from your server. You do not connect a LinkedIn account, supply a LinkedIn cookie, or apply for LinkedIn developer access.
Can I look up a company by its website domain?
Yes, in two requests. Send the domain to /v1/companies/by-domain, confirm the intended Page among the candidates, then fetch details for its slug. A domain can return several Pages, such as Microsoft and Microsoft Azure, so check the match before you attach a result.
Is the EnvoAPI ID the same as LinkedIn’s company ID?
No. publicId is an EnvoAPI ID, such as company_4T4tWj. The by-ID route does not take LinkedIn’s numeric company ID; use the company’s LinkedIn URL or slug when you do not have an EnvoAPI ID.
How much does a LinkedIn company lookup cost?
As of 2026-10-14, a company details request costs 1 credit, and so does each company search page. New accounts receive 100 one-time free credits with no credit card required. Paid plans start with Launch at $49/month for 10,000 monthly credits.
Is the employee count the company’s real headcount?
Not necessarily. employeeCount is the returned employee count, not verified payroll headcount. Store it beside the employeeCountRange size band, and keep a missing bound as null rather than inventing one.
What happens when a company is not found?
The API returns HTTP 404 with the resource_not_found code. Check the identifier and confirm that you selected the intended company Page instead of retrying the same request.
Can I get a company’s LinkedIn posts?
Not from company details. Posts come from the separate /v1/companies/posts endpoint, which has its own documentation.
Get an API key for your first company lookup
Create your account, get an API key and try the route that matches your company identifier. Start with 100 one-time free credits and no credit card required.