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).
| Method | Setup complexity | Best for | Volume |
|---|---|---|---|
| API | Low | Real-time targeting, app integrations | On-demand queries |
| Flat file | Medium | Data warehouse ingestion, bulk scoring | Daily 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:
| Strategy | Logic | Use case |
|---|---|---|
| Latest only | Keep most recent record per company + topic | Simple alerting |
| Frequency scoring | Count appearances over N days | Prioritize sustained interest |
| First-seen windowing | Suppress if seen within last 7 days | Avoid 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.
Updated 20 days ago
