Integration Guide

There are two ways to consume Web Intent data: the API (simplest — returns enriched results directly) and flat file delivery (highest volume — requires joining to your existing data).

MethodSetup complexityBest forVolume
APILowReal-time targeting, app integrationsOn-demand queries
Flat fileMediumData warehouse ingestion, bulk scoringDaily full delivery

API Integration

The Buyer Intent API returns complete, enriched intent records — no joining required. Query by topic, company, contact, or any combination and get back full records with all fields populated.

Base URL: https://signals.autobound.ai Authentication: X-API-KEY header with your API key

Endpoints

EndpointMethodDescriptionCost
/v1/buyer-intent/topicsGETBrowse and search 37K+ intent topicsFree
/v1/buyer-intent/filtersGETList available filter values (seniority, industry, etc.)Free
/v1/buyer-intent/contactsPOSTFind contacts showing intent for specific topics1 credit/contact
/v1/buyer-intent/exportPOSTBulk export intent data for a topic10 credits/topic

Quick Start

Step 1 — Find relevant topics:

curl -H "x-api-key: $API_KEY" \
  "https://signals.autobound.ai/v1/buyer-intent/topics?q=kubernetes&limit=5"

Response:

{
  "topics": [
    { "id": "topic_abc123", "name": "Kubernetes", "category": "Technology", "subcategory": "Cloud Infrastructure" },
    { "id": "topic_def456", "name": "Kubernetes Security", "category": "Technology", "subcategory": "Cybersecurity" }
  ],
  "total": 14
}

Step 2 — Check available filters:

curl -H "x-api-key: $API_KEY" \
  "https://signals.autobound.ai/v1/buyer-intent/filters"

Returns available values for seniority, industry, employee_count, country, and more.

Step 3 — Get contacts showing intent:

curl -X POST \
  -H "x-api-key: $API_KEY" \
  -H "content-type: application/json" \
  "https://signals.autobound.ai/v1/buyer-intent/contacts" \
  -d '{
    "topic_ids": ["topic_abc123"],
    "filters": {
      "seniority": ["VP", "Director"],
      "employee_count": ["1001-5000"]
    },
    "limit": 25
  }'

Response:

{
  "contacts": [
    {
      "first_name": "Sarah",
      "last_name": "Chen",
      "job_title": "VP of Engineering",
      "seniority": "VP",
      "business_email": "[email protected]",
      "company_name": "Acme Corp",
      "company_domain": "acme.com",
      "industry": "Software",
      "employee_count": "1001-5000",
      "topic_name": "Kubernetes",
      "category": "Technology",
      "subcategory": "Cloud Infrastructure"
    }
  ],
  "total": 342,
  "credits_used": 25
}

Step 4 (optional) — Bulk export:

curl -X POST \
  -H "x-api-key: $API_KEY" \
  -H "content-type: application/json" \
  "https://signals.autobound.ai/v1/buyer-intent/export" \
  -d '{
    "topic_ids": ["topic_abc123", "topic_def456"],
    "filters": {
      "seniority": ["CXO", "VP", "Director"]
    }
  }'

Export returns all matching contacts for the given topics in a single response. Best for large-volume pulls into your data warehouse.

When to Use the API

  • Building real-time intent triggers in your app
  • Powering sales rep workflows (daily intent feeds per territory)
  • Small-to-medium volume queries with specific filters
  • You want enriched results without managing join logic

Full API reference, rate limits, and pagination details are in the Signal API reference.

Flat File Delivery

Flat files deliver the highest volume of intent data — daily JSONL + Parquet files dropped to your cloud storage. The tradeoff: intent records arrive as topic-level observations that you join to your own company/contact data.

Company-Level Join

Company-level intent records include company_domain. Join directly to your CRM or data warehouse on domain:

Intent file (topic_id + company_domain) → JOIN on domain → Your CRM companies
SELECT
    i.company_name,
    i.company_domain,
    i.topic_name,
    i.category,
    i.subcategory,
    c.account_owner,
    c.account_tier
FROM web_intent_company i
JOIN crm_companies c
    ON i.company_domain = c.domain
WHERE i.category = 'Technology'
    AND c.account_tier = 'enterprise';

Contact-Level Join

Contact-level intent records include a up_id (universal person identifier) and business_email. You have two join paths:

Option A:  Intent file (up_id) → JOIN on up_id → Contact DB file → full person record
Option B:  Intent file (business_email) → JOIN on email → Your CRM contacts

Option A — Join via up_id to the Contact Database:

If you receive the full contact database file (delivered separately), join on up_id to get the complete person record alongside their intent topics:

SELECT
    i.topic_name,
    i.category,
    c.first_name,
    c.last_name,
    c.business_email,
    c.job_title,
    c.seniority_level,
    c.company_name,
    c.company_domain
FROM web_intent_contact i
JOIN contact_database c
    ON i.up_id = c.up_id
WHERE i.subcategory = 'Cybersecurity'
    AND c.seniority_level IN ('VP', 'CXO', 'Director');

Option B — Join via business_email to your CRM:

If you already have contacts in your CRM, join directly on email without needing the contact database file:

SELECT
    i.topic_name,
    i.category,
    crm.contact_name,
    crm.account_name,
    crm.owner
FROM web_intent_contact i
JOIN crm_contacts crm
    ON i.business_email = crm.email
WHERE i.topic_name = 'Salesforce'
    AND crm.lead_status = 'open';

Resolution Chain (Complete)

Company-level:
  Intent file (topic_id + company_domain)
      → JOIN on company_domain
      → Your CRM companies

Contact-level:
  Intent file (topic_id + up_id + business_email)
      → JOIN on up_id → Contact DB file → full person record (name, title, phone, LinkedIn)
      → OR JOIN on business_email → Your CRM contacts (if already in your system)

Delivery Cadence

  • Frequency: Daily delivery
  • Format: Timestamped folders containing JSONL and Parquet files
  • Folder structure: YYYY-MM-DD-HH-MM-SS/ — each folder is a complete daily snapshot
  • Processing: Treat all signals in a new folder as fresh. Load the entire folder; no need to diff against prior deliveries

Deduplication

The same company + topic pair can appear on consecutive days if intent persists. This is expected behavior — it means the company is still actively consuming content on that topic.

Common deduplication strategies:

StrategyLogicUse case
Latest onlyKeep most recent record per company + topicSimple alerting
Frequency scoringCount appearances over N daysPrioritize sustained interest
First-seen windowingSuppress if seen within last 7 daysAvoid duplicate outreach triggers

Webhooks

For real-time push delivery, webhooks send intent signals to your endpoint as they're detected — no polling or file processing required.

Webhook configuration, payload format, and retry behavior are available on request. Contact your account team to enable webhook delivery for your integration.


Contact Sales →