Quick Start
Make your first API call in under 2 minutes.
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.
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.
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" }
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}` }
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.
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.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.
| Plan | Credits / month | Requests / second | Batch size |
|---|---|---|---|
| Starter | 5,000 | 5 req/s | Up to 500 URLs |
| Professional | 20,000 | 10 req/s | Up to 500 URLs |
| Enterprise | 50,000 | 20 req/s | Up to 500 URLs |
| HyperGrowth | 250,000 | 50 req/s | Up to 500 URLs |
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.
| Parameter | Type | Required | Description |
|---|---|---|---|
input_data |
string |
Required | Natural language description of your target leads |
fetch_count |
integer |
Optional | Number of profiles to return. Default: 10. Max: 100. |
curl -X POST "https://api.linkfinderai.com" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_API_KEY" \
-d '{
"type": "leads_finder_ai",
"input_data": "VP Sales at B2B SaaS startup in the United States",
"fetch_count": 10
}'
response = requests.post(
"https://api.linkfinderai.com",
headers={"Authorization": f"Bearer {API_KEY}"},
json={
"type": "leads_finder_ai",
"input_data": "VP Sales at B2B SaaS startup in the United States",
"fetch_count": 10,
}
)
leads = response.json()
for lead in leads:
print(lead["full_name"], lead["email"])
const leads = await fetch("https://api.linkfinderai.com", { method: "POST", headers: { "Authorization": `Bearer ${API_KEY}`, "Content-Type": "application/json", }, body: JSON.stringify({ type: "leads_finder_ai", input_data: "VP Sales at B2B SaaS startup in the United States", fetch_count: 10, }), }).then(r => r.json()); leads.forEach(lead => console.log(lead.full_name, lead.email));
// Returns an array of lead objects [ { "full_name": "Sarah Mitchell", "job_title": "VP of Sales", "seniority_level": "vp", "email": "[email protected]", "linkedin": "https://linkedin.com/in/sarah-mitchell-sales", "company_name": "CloudCore", "company_domain": "cloudcore.io", "company_size": "51-200", "industry": "Software", "city": "Austin", "state": "Texas", "country": "United States" }, { /* next lead... */ } ]
Company Enrichment
Look up company details from a name or domain. Each request costs 1 credit. All endpoints in this section are Sync.
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"
})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"}'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"}'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"}'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"}'| Parameter | Type | Required | Description |
|---|---|---|---|
input_data | string | Required | Company domain e.g. tesla.com |
department | string | Optional | Filter by department e.g. "marketing", "engineering" |
seniority | string | Optional | Filter by seniority e.g. "director", "manager" |
employee_count | integer | Optional | Max 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
}'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.
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" }
}
| Parameter | Type | Required | Description |
|---|---|---|---|
input_data | string | Required | Full 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" }
202 with a job_id instead — if so, follow the same polling flow described in Sync vs Async.| Parameter | Type | Required | Description |
|---|---|---|---|
input_data | string | Required | Full 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" }
202 with a job_id instead — if so, follow the same polling flow described in Sync vs Async.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"}'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"}'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"}'| Parameter | Type | Required | Description |
|---|---|---|---|
input_data | string | Required | Professional 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" }
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.
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 Code | Meaning | What to do |
|---|---|---|
| 200 | Success | Check result field — may be null if data wasn't found (still costs 1 credit) |
| 202 | Accepted — processing async | Not 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. |
| 401 | Unauthorized | Missing or invalid API key — check your Authorization header |
| 402 | Insufficient credits | Top up credits or wait for next billing cycle |
| 404 | Job not found or expired | On /status/:job_id — job results expire after 10 minutes. Poll sooner next time. |
| 422 | Invalid request | Check the type value and input_data format |
| 429 | Rate limit exceeded | Implement exponential backoff — wait 1s, 2s, 4s between retries |
| 500 | Server error | Retry 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.
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.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}}"}