Signal API Endpoint
Contact Enrichment
Signal-Powered People Data
Enrich any contact by email or LinkedIn URL. Person-level signals where they exist, plus the resolved employer on every call - the entry point to full company enrichment. 250M+ contacts.
What you get
Every contact enrichment returns the person-level signals we have for that contact plus the resolved employer profile. Person-level coverage is growing but still limited, so pair it with company enrichment on the resolved domain for the complete picture.
Contact Signals
Job Changes
Promotions, new roles, and company moves
LinkedIn Activity
Recent posts, articles, and engagement metrics
Milestones
Work anniversaries, certifications, achievements
Social Presence
Activity across professional platforms
Company Signals (via company enrich)
Hiring Activity
Velocity, department breakdown, trending titles
Product Launches
New products, features, and announcements
Financials
Funding, revenue signals, SEC filings
Leadership Changes
Executive appointments and departures
Contacts
Companies
Signal types
Example Request
One POST to /v1/contacts/enrich identifies the contact by contact_email or contact_linkedin_url (at least one is required) and optionally filters the returned signals with signal_types, detected_after, and limit.
curl -X POST \
'https://signals.autobound.ai/v1/contacts/enrich' \
-H 'X-API-KEY: your_api_key' \
-H 'Content-Type: application/json' \
-d '{
"contact_email": "jane@stripe.com",
"signal_types": ["work-milestones", "linkedin-post-contact"],
"limit": 25
}'Response
The response returns the matched contact profile, the resolved employer, any person-level signals, and a coverage envelope showing what exists for this contact before and after your filters.
{
"contact": {
"first_name": "Jane",
"last_name": "Smith",
"full_name": "Jane Smith",
"email": "jane@stripe.com",
"job_title": "VP of Sales",
"linkedin_url": "https://linkedin.com/in/jane-smith",
"city": "San Francisco",
"state": "CA",
"country": "United States"
},
"company": {
"name": "Stripe",
"domain": "stripe.com",
"linkedin_url": "https://linkedin.com/company/stripe"
},
"contact_signals": [
{
"signal_id": "sig_abc123",
"signal_type": "work-milestones",
"signal_subtype": "jobChange",
"signal_name": "",
"detected_at": "2026-06-01T08:00:00Z",
"association": "contact",
"company": { "name": "Stripe", "domain": "stripe.com" },
"data": { "summary": "Promoted to VP of Sales from Senior Director" }
}
],
"signal_summary": {
"work-milestones": 1
},
"total": 1,
"coverage": {
"total_before_filters": 3,
"total_after_filters": 1,
"signal_types_available": ["work-milestones", "linkedin-post-contact"],
"date_range": {
"earliest": "2026-02-14T09:30:00Z",
"latest": "2026-06-01T08:00:00Z"
}
}
}What to notice: person-level signal coverage is currently low, so contact_signals will be empty for many contacts today. The response still resolves the employer in company, which is the real payoff: take company.domain and call POST /v1/companies/enrich for the employer's full signal feed. That two-step pattern (contact to employer domain to company enrich) is what we recommend in production, and it's exactly what the Python and Node examples above do. To discover contacts with recent signal activity instead of enriching a known one, use POST /v1/contacts/search.
Frequently Asked Questions
What contact-level signals are available?
Contact-level signal types include work milestones and job changes (work-milestones) and LinkedIn posts by the contact (linkedin-post-contact). Coverage at the person level is currently low, so many contacts return an empty contact_signals array today. Every response includes a coverage block showing exactly what exists for that contact, and the resolved employer so you can pivot to company-level signals.
Does contact enrichment include company data?
Contact enrichment resolves the contact's employer and returns its company profile (name, domain, LinkedIn URL). For the employer's full signal feed (hiring activity, news, financials, SEC filings) call POST /v1/companies/enrich with the resolved domain. That contact-then-company two-step is the recommended pattern.
How many contacts are in the database?
The database covers 250M+ professional contacts across 50M+ companies globally. Coverage is strongest for North America and Europe, with growing coverage in APAC and LATAM.
Can I enrich by email or LinkedIn URL?
Yes, both. Pass contact_email or contact_linkedin_url to POST /v1/contacts/enrich - at least one is required. You can also filter the returned signals with signal_types and detected_after.
Enrich your first contact
Person-level signals plus full company context, in one API call.