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 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.

GET /signals?type=web_intent&topic_name=Kubernetes&employee_count=1001-5000
→ Returns enriched company + contact records with intent data attached

Authentication, endpoints, filtering, and pagination are documented in the Signal API reference.

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

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 →