API Documentation

Quick Start

Make your first API call in under 2 minutes.

1
Endpoint for everything
1 credit
Per enrichment request
~3 sec
Average response time
1

Get your API key

Sign up for a free trial — your API key is in your dashboard under Settings → API Key. You get 100 free credits to start.

2

Make your first call

All requests go to one endpoint: POST https://api.linkfinderai.com. Change the type field to select the enrichment you need.

3

Handle the response

Every response includes a status field ("success" or "error") and a result field with your data. Some requests respond differently — see Sync vs Async below.

# Find a company's website — your first API call
curl -X POST "https://api.linkfinderai.com" \
     -H "Content-Type: application/json" \
     -H "Authorization: Bearer YOUR_API_KEY" \
     -d '{
       "type": "company_name_to_website",
       "input_data": "Tesla"
     }'
import requests

API_KEY = "YOUR_API_KEY"

response = requests.post(
    "https://api.linkfinderai.com",
    headers={
        "Authorization": f"Bearer {API_KEY}",
        "Content-Type": "application/json",
    },
    json={
        "type": "company_name_to_website",
        "input_data": "Tesla",
    }
)

data = response.json()
print(data["result"])  # "tesla.com"
const API_KEY = "YOUR_API_KEY";

const response = await fetch("https://api.linkfinderai.com", {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    type: "company_name_to_website",
    input_data: "Tesla",
  }),
});

const data = await response.json();
console.log(data.result); // "tesla.com"
// Success
{
  "result": "tesla.com",
  "status": "success"
}

// Not found
{
  "result": null,
  "status": "error",
  "message": "Company not found"
}
Every request costs 1 credit regardless of endpoint — including failed lookups where no data is found. Check your remaining credits in your dashboard.

Authentication

Pass your API key in the Authorization header on every request.

Authorization: Bearer YOUR_API_KEY
headers = {"Authorization": "Bearer YOUR_API_KEY"}
headers: { "Authorization": `Bearer ${API_KEY}` }
Never expose your API key in client-side JavaScript or public repositories. Rotate it immediately in your dashboard if compromised.

Sync vs Async Requests

Most endpoints respond immediately with your data. One endpoint — linkedin_profile_to_linkedin_info — always returns a job_id instead, which you then poll for the result. Look for the Sync / Async tag on each endpoint below; the async one shows the exact request + poll calls side by side in its section.

A 202 response with status: "processing" is not an error — it's the expected response for the always-async endpoint. Poll the returned poll_url until status is "done". Job results expire after 10 minutes.
Any endpoint can occasionally respond this way. Every request — not just the always-async one — races against a ~27 second window on our side. If the lookup hasn't finished by then, you'll get the same 202 / job_id / poll_url shape instead of an immediate result, even for endpoints tagged Sync. This is most likely on company_domain_to_employees, since bulk employee lookups can take longer than average. Don't assume a fixed response shape based on endpoint name alone — always check whether the response contains a job_id before parsing it as a final result.

Credits & Rate Limits

1 credit = 1 API request, regardless of endpoint. Credits reset at the start of each billing cycle.

PlanCredits / monthRequests / secondBatch size
Starter5,0005 req/sUp to 500 URLs
Professional20,00010 req/sUp to 500 URLs
Enterprise50,00020 req/sUp to 500 URLs
HyperGrowth250,00050 req/sUp to 500 URLs
If you exceed your rate limit, requests return 429 Too Many Requests. Implement exponential backoff — wait 1s, then 2s, then 4s between retries.

AI Lead Finder New

Describe the leads you want in plain English. Get back a list of matching LinkedIn profiles with full contact details and company data.

This is the most powerful endpoint. Instead of looking up one profile at a time, describe your ideal customer in natural language and get up to 100 matching leads in one call. Each profile costs 1 credit.

Company Enrichment

Look up company details from a name or domain. Each request costs 1 credit. All endpoints in this section are Sync.

POSTcompany_name_to_website Sync
Find a company's official website from its name
1 credit
curl -X POST "https://api.linkfinderai.com" \
     -H "Content-Type: application/json" \
     -H "Authorization: Bearer YOUR_API_KEY" \
     -d '{"type": "company_name_to_website", "input_data": "Tesla"}'
requests.post(url, headers=headers, json={
    "type": "company_name_to_website",
    "input_data": "Tesla"
})
POSTcompany_name_to_phone Sync
Get company contact phone number from company name
1 credit
curl -X POST "https://api.linkfinderai.com" \
     -H "Content-Type: application/json" \
     -H "Authorization: Bearer YOUR_API_KEY" \
     -d '{"type": "company_name_to_phone", "input_data": "Tesla"}'
POSTcompany_name_to_email Sync
Get company contact email address from company name
1 credit
curl -X POST "https://api.linkfinderai.com" \
     -H "Content-Type: application/json" \
     -H "Authorization: Bearer YOUR_API_KEY" \
     -d '{"type": "company_name_to_email", "input_data": "Tesla"}'
POSTcompany_name_to_employee_count Sync
Get total employee count from company name
1 credit
curl -X POST "https://api.linkfinderai.com" \
     -H "Content-Type: application/json" \
     -H "Authorization: Bearer YOUR_API_KEY" \
     -d '{"type": "company_name_to_employee_count", "input_data": "Tesla"}'
POSTcompany_name_to_linkedin_url Sync
Find company LinkedIn profile URL from company name
1 credit
curl -X POST "https://api.linkfinderai.com" \
     -H "Content-Type: application/json" \
     -H "Authorization: Bearer YOUR_API_KEY" \
     -d '{"type": "company_name_to_linkedin_url", "input_data": "Tesla"}'
POSTcompany_domain_to_employees Sync
Get a filtered list of employees from a company domain — filter by department and seniority
1 credit / employee
ParameterTypeRequiredDescription
input_datastringRequiredCompany domain e.g. tesla.com
departmentstringOptionalFilter by department e.g. "marketing", "engineering"
senioritystringOptionalFilter by seniority e.g. "director", "manager"
employee_countintegerOptionalMax results to return
curl -X POST "https://api.linkfinderai.com" \
     -H "Content-Type: application/json" \
     -H "Authorization: Bearer YOUR_API_KEY" \
     -d '{
       "type": "company_domain_to_employees",
       "input_data": "tesla.com",
       "department": "marketing",
       "seniority": "director",
       "employee_count": 20
     }'
This endpoint is normally sync, but larger employee lists can take longer to resolve. If a lookup exceeds our ~27s sync window, you'll receive a 202 with a job_id instead — if so, follow the same polling flow described in Sync vs Async.

B2B Data Lookup

Look up business contacts profiles, company pages, and posts without using your own LinkedIn account. Zero ban risk. One endpoint below is always async — look for the purple Async tag.

POSTlinkedin_profile_to_linkedin_info Async
Extract full profile data from a LinkedIn profile URL
1 credit

Always async — this call returns a job_id, then you poll for the result. Request and poll shown side by side below.

1 Make the request

curl -X POST "https://api.linkfinderai.com" \
     -H "Content-Type: application/json" \
     -H "Authorization: Bearer YOUR_API_KEY" \
     -d '{"type": "linkedin_profile_to_linkedin_info", "input_data": "https://linkedin.com/in/john-doe"}'

// Returns immediately:
{
  "job_id": "c9f1e2a0-...",
  "status": "processing",
  "poll_url": "https://api.linkfinderai.com/status/c9f1e2a0-..."
}

2 Poll for the result

curl "https://api.linkfinderai.com/status/c9f1e2a0-..." \
     -H "Authorization: Bearer YOUR_API_KEY"

// Repeat every 3-5s until:
{
  "status": "done",
  "data": { "result": {...}, "status": "success" }
}
POSTlinkedin_profile_to_email Sync
Find a person's professional email address from their LinkedIn profile URL
1 credit
ParameterTypeRequiredDescription
input_datastringRequiredFull LinkedIn profile URL e.g. https://linkedin.com/in/john-doe
curl -X POST "https://api.linkfinderai.com" \
     -H "Content-Type: application/json" \
     -H "Authorization: Bearer YOUR_API_KEY" \
     -d '{
       "type": "linkedin_profile_to_email",
       "input_data": "https://linkedin.com/in/john-doe"
     }'
response = requests.post(url, headers=headers, json={
    "type": "linkedin_profile_to_email",
    "input_data": "https://linkedin.com/in/john-doe"
})
print(response.json()["result"])  # "[email protected]"
// Success
{
  "result": "[email protected]",
  "status": "success"
}

// Not found
{
  "result": null,
  "status": "error",
  "message": "Email not found"
}
This endpoint is normally sync and resolves quickly. In rare cases where a lookup takes unusually long, you may receive a 202 with a job_id instead — if so, follow the same polling flow described in Sync vs Async.
POSTlinkedin_profile_to_phone Sync
Find a person's phone number from their LinkedIn profile URL
1 credit
ParameterTypeRequiredDescription
input_datastringRequiredFull LinkedIn profile URL e.g. https://linkedin.com/in/john-doe
curl -X POST "https://api.linkfinderai.com" \
     -H "Content-Type: application/json" \
     -H "Authorization: Bearer YOUR_API_KEY" \
     -d '{
       "type": "linkedin_profile_to_phone",
       "input_data": "https://linkedin.com/in/john-doe"
     }'
response = requests.post(url, headers=headers, json={
    "type": "linkedin_profile_to_phone",
    "input_data": "https://linkedin.com/in/john-doe"
})
print(response.json()["result"])  # "+1 415 555 0198"
// Success
{
  "result": "+1 415 555 0198",
  "status": "success"
}

// Not found
{
  "result": null,
  "status": "error",
  "message": "Phone not found"
}
This endpoint is normally sync and resolves quickly. In rare cases where a lookup takes unusually long, you may receive a 202 with a job_id instead — if so, follow the same polling flow described in Sync vs Async.
POSTlinkedin_company_to_linkedin_info Sync
Extract detailed company data from a LinkedIn company page URL
1 credit
curl -X POST "https://api.linkfinderai.com" \
     -H "Content-Type: application/json" \
     -H "Authorization: Bearer YOUR_API_KEY" \
     -d '{"type": "linkedin_company_to_linkedin_info", "input_data": "https://linkedin.com/company/tesla"}'
POSTlinkedin_company_to_employee_count Sync
Get employee count from a LinkedIn company page URL
1 credit
curl -X POST "https://api.linkfinderai.com" \
     -H "Content-Type: application/json" \
     -H "Authorization: Bearer YOUR_API_KEY" \
     -d '{"type": "linkedin_company_to_employee_count", "input_data": "https://linkedin.com/company/tesla"}'
POSTlead_full_name_to_linkedin_url Sync
Find a person's LinkedIn URL from their full name and company
1 credit
curl -X POST "https://api.linkfinderai.com" \
     -H "Content-Type: application/json" \
     -H "Authorization: Bearer YOUR_API_KEY" \
     -d '{"type": "lead_full_name_to_linkedin_url", "input_data": "Bill Gates Microsoft"}'
POSTemail_to_linkedin_url Sync
Reverse-lookup a person's LinkedIn profile URL from their email address
1 credit
ParameterTypeRequiredDescription
input_datastringRequiredProfessional email address e.g. [email protected]
curl -X POST "https://api.linkfinderai.com" \
     -H "Content-Type: application/json" \
     -H "Authorization: Bearer YOUR_API_KEY" \
     -d '{
       "type": "email_to_linkedin_url",
       "input_data": "[email protected]"
     }'
response = requests.post(url, headers=headers, json={
    "type": "email_to_linkedin_url",
    "input_data": "[email protected]"
})
print(response.json()["result"])  # "https://linkedin.com/in/john-doe"
// Success
{
  "result": "https://linkedin.com/in/john-doe",
  "status": "success"
}

// Not found
{
  "result": null,
  "status": "error",
  "message": "LinkedIn profile not found"
}
POSTlinkedin_post_to_reactions Sync
Get a list of people who reacted to a LinkedIn post
1 credit / profile
curl -X POST "https://api.linkfinderai.com" \
     -H "Content-Type: application/json" \
     -H "Authorization: Bearer YOUR_API_KEY" \
     -d '{"type": "linkedin_post_to_reactions", "input_data": "https://www.linkedin.com/feed/update/urn:li:activity:1234567890"}'

Instagram lookup

Extract profile data from public Instagram accounts.

POSTinstagram_profile_to_instagram_info Sync
Extract followers, bio, posts, and profile details from any public Instagram account
1 credit
curl -X POST "https://api.linkfinderai.com" \
     -H "Content-Type: application/json" \
     -H "Authorization: Bearer YOUR_API_KEY" \
     -d '{"type": "instagram_profile_to_instagram_info", "input_data": "https://www.instagram.com/username"}'
requests.post(url, headers=headers, json={
    "type": "instagram_profile_to_instagram_info",
    "input_data": "https://www.instagram.com/username"
})

Error Codes

All errors return a JSON body with status: "error" and a message field.

HTTP CodeMeaningWhat to do
200SuccessCheck result field — may be null if data wasn't found (still costs 1 credit)
202Accepted — processing asyncNot an error. Save the job_id and poll poll_url until status is "done" or "error". Always returned by linkedin_profile_to_linkedin_info — and may occasionally be returned by any other endpoint (most commonly company_domain_to_employees) if it takes longer than ~27 seconds to resolve.
401UnauthorizedMissing or invalid API key — check your Authorization header
402Insufficient creditsTop up credits or wait for next billing cycle
404Job not found or expiredOn /status/:job_id — job results expire after 10 minutes. Poll sooner next time.
422Invalid requestCheck the type value and input_data format
429Rate limit exceededImplement exponential backoff — wait 1s, 2s, 4s between retries
500Server errorRetry after 30 seconds. If persistent, contact support

Integrations

Connect LinkFinder AI to your CRM, automation tools, and data pipelines. No code required for Zapier and Make.

Zapier is the fastest path to CRM integration. One Zapier connection unlocks HubSpot, Salesforce, Pipedrive, Airtable, Google Sheets, and 6,000+ other apps — without writing custom integration code for each one.
Note for no-code users: linkedin_profile_to_linkedin_info requires polling and is harder to wire up in Zapier/Make without a native integration. For this endpoint, add a "Delay" step followed by a second HTTP GET call to the poll_url, repeated until status is "done". Every other endpoint can also occasionally fall back to this same job_id/poll shape if a lookup runs long (most commonly company_domain_to_employees on larger employee lists), so it's worth adding the same Delay + poll pattern as a fallback branch even on your "single step" Zaps.
Zapier
Coming soon
🔧
Make (Integromat)
Coming soon
🟠
HubSpot
Planned
☁️
Salesforce
Planned
🔵
Pipedrive
Planned
🌊
n8n
Planned

In the meantime, you can use the REST API directly with any HTTP action in Zapier or Make — no native integration needed.

# In Zapier: "Webhooks by Zapier" → POST action
URL:     https://api.linkfinderai.com
Method:  POST
Headers: Authorization: Bearer YOUR_API_KEY
         Content-Type: application/json
Body:    {"type": "company_name_to_website", "input_data": "{{company_name}}"}
# In Make: HTTP → Make a request module
URL:     https://api.linkfinderai.com
Method:  POST
Headers: Authorization: Bearer YOUR_API_KEY
Body:    JSON - {"type": "company_name_to_website", "input_data": "{{company}}"}
Want a native integration built faster? Email us — we prioritise integrations based on customer demand.