Connect · Contact Enrichment API
Add available contact data to known professional profiles.
Submit a LinkedIn, GitHub, X, or Facebook account. Retrieve available emails and phone numbers, with a verification status for each returned contact.
{
"profile_url": "https://www.linkedin.com/in/alex-kim-example"
}
{
"request_id": "31111111-1111-4111-8111-111111111111",
"status": "completed",
"result": {
"emails": [
{
"email": "alex-kim-example@example.com",
"type": "work",
"verification": {
"status": "verified",
"checked_at": "2026-10-15T12:00:00.000Z"
}
}
],
"phones": []
}
}
Quick Facts
The contact-enrichment contract at a glance.
How It Works
From a known profile to available contact data.
Choose one supported account input, save request_id, and inspect the processing state before reading available contacts.
Contact enrichment request lifecycle
Existing results can return immediately. Otherwise, poll the saved request ID until completed or failed.
- 01SubmitOne supported account
- 02Save IDComplete or pending
- 03Poll if neededRespect wait interval
- 04Read contactsInspect verification
Result Behavior
Contact availability and verification are separate.
A completed lookup can contain verified, unverified, or no contacts. A failed lookup is a different state; inspect errors and warnings.
Available contact data is returned.
The response contains available email and phone arrays. Each accepted request reserves 15 credits.
No usable contacts were returned.
A completed result can contain empty emails and phones arrays. Charges follow the API settlement rules.
Availability, Privacy & Limits
Know what the contact result means before you use it.
Read contact types, verification states, and lookup limitations separately from your own permitted-use requirements.
Supported profile types
Accepts personal LinkedIn, GitHub, X/Twitter, and Facebook accounts through one documented input form.
Contact is not guaranteed
A valid profile input does not imply that usable contact information will be available for every person or region.
Work / personal semantics
Email type is work, personal, or unknown. Phone type is mobile, landline, or unknown. Availability varies by record.
Permissible use & rights
Review Data Trust and the applicable policies before storing or using contact information. A returned contact is not permission to use it for any purpose.
Capabilities
A contact layer for existing professional identities.
Contact Enrichment complements ProfileOut’s people-data layer; it is not positioned as a standalone prospecting application.
Profile URL enrichment
Start from a supported professional or social profile URL rather than an open-ended people-search query.
Available contact output
Read available emails and phone numbers in the completed result; either array can be empty.
No-result aware behavior
Design downstream workflows around the fact that a supported input can legitimately produce no usable contact result.
Contact-level verification
Inspect verification.status and checked_at on each contact. The public response has no confidence score.
Request-based progress
Submit one account per request and poll by request_id. The documented allowance is 100 new contact requests per hour per account.
Shared developer layer
Use Bearer authentication and the request_id, status, and result envelope. Other APIs expose their own result structures.
Integration
Send one supported profile URL.
This server-side example submits one illustrative account. Save request_id and, if pending, poll GET /v1/contact-enrichments/{request_id} at the returned interval. Stop at completed or failed.
curl --request POST 'https://api.profileout.com/v1/contact-enrichments' \
--header 'Authorization: Bearer YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{"profile_url": "https://www.linkedin.com/in/alex-kim-example"}'import requests
response = requests.post(
"https://api.profileout.com/v1/contact-enrichments",
headers={"Authorization": "Bearer YOUR_API_KEY"},
json={'profile_url': 'https://www.linkedin.com/in/alex-kim-example'},
timeout=30,
)
response.raise_for_status()
print(response.json()) # Save the ID; check processing status.const response = await fetch("https://api.profileout.com/v1/contact-enrichments", {
method: "POST",
headers: {
Authorization: "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({"profile_url": "https://www.linkedin.com/in/alex-kim-example"}),
signal: AbortSignal.timeout(30000),
});
if (!response.ok) throw new Error(`HTTP ${response.status}`);
console.log(await response.json()); // Save the ID; check status.Contact Response
Separate returned contact data from metadata semantics.
This completed response uses an illustrative email value. Check each contact’s type and verification object; returned does not automatically mean verified.
{
"request_id": "31111111-1111-4111-8111-111111111111",
"status": "completed",
"result": {
"emails": [
{
"email": "alex-kim-example@example.com",
"type": "work",
"verification": {
"status": "verified",
"checked_at": "2026-10-15T12:00:00.000Z"
}
}
],
"phones": []
}
}
Use Cases
Add a contact layer where your product already knows the person.
Contact Enrichment fits broader professional-data workflows across products, marketplaces, AI systems, internal operations, and approved outreach.
Data Enrichment
Add available contact information to professional records your application already stores or retrieves.
People-data Products & Marketplaces
Support permitted connection workflows around known member or professional profiles when contact data is available.
AI Agents & Data Products
Let downstream agents move from a known professional identity to contact-aware actions under your product’s permission rules.
Recruiting & HR Tech
Enrich known professional profiles before outreach workflows that follow the applicable product, privacy, and regional policies.
Pricing Rule
15 credits per request.
Each accepted request reserves 15 credits, then charges or releases them under the API settlement rules.
See Pricingper accepted request
- Accepted request
- 15 credits reserved
- No usable result
- API-specific settlement
- Multiple contacts
- No per-contact fee
- Request unit
- One social account
FAQ
Contact Enrichment API questions.
Which profile URLs are supported?
Personal LinkedIn, GitHub, X/Twitter, and Facebook accounts are supported. Send exactly one input form: profile_url, linkedin_id, or platform with account_id.
What contact data can the API return?
The completed result contains emails and phones arrays. Available items include their type and verification object; either or both arrays can be empty.
Are credits charged when no contact is found?
Empty contact arrays do not automatically mean 0 credits. Each accepted request reserves 15 credits and follows API settlement rules.
How is email verification represented?
Each contact has verification.status and checked_at. Status can be verified, unverified, risky, or unknown. Invalid emails are excluded from the returned email array.
Does the API return personal email addresses?
Available email contacts can be classified as work, personal, or unknown. The type does not guarantee availability for a particular record or region.
Are there regional restrictions?
The public response does not establish permission for every use or region. Review Data Trust and the applicable policies for your own application requirements.
Can I enrich multiple profiles in one request?
No. Submit one supported account per request. Arrays of profile URLs and other additional fields are not accepted.
How is Contact Enrichment different from People Data API?
People Data retrieves profile details and inferred labels. Contact Enrichment returns available email and phone contacts with per-contact verification information.
Add contact enrichment to your people-data workflow.
Start with a supported professional profile, evaluate result behavior, and integrate contact data where it fits your product and permitted use case.
