Skip to main content

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

250M+

Contacts

50M+

Companies

25+

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.

200 OK
{
  "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.

Full request/response schema →

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.