Skip to content
Developers

The lead record, as JSON.

What lands in your CRM, warehouse or webhook when a buyer on one of our pages compares two vendors. Every field in the lead schema, the events behind it, the intent data API and the four other ways to receive it, and how to dedupe on your side.

The record

Every field, and what fills it.

Angle brackets are personal values, redacted here. The structure is identical on every lead we send.

  • stage is researching or in_market. It flips to in-market when we record an alternatives_read, comparison or pricing_view event, and for no other reason.
  • consideration_set lists the vendors on the comparison pages this person opened, by name.
  • consent holds the property, the timestamp, the exact opt-in wording, and whether your company was named when the person opted in.
  • events is everything this person did across all seven properties, oldest first.
{
  "lead_id": "nr_7f3a9c2e",
  "person": {
    "name": "<name on the lead>",
    "work_email": "<work email>",
    "linkedin_url": "<profile url>",
    "phone": "<phone, where held>",
    "role": "Controller",
    "seniority": "Manager",
    "function": "Finance"
  },
  "company": {
    "name": "Acme Manufacturing",
    "domain": "acme.example",
    "employees": "100-499",
    "revenue_band": "$100M-$499M",
    "industry": "Manufacturing",
    "region": "NAMER"
  },
  "stage": "in_market",
  "category": "ERP",
  "consideration_set": ["NetSuite", "Sage Intacct"],
  "events": [
    { "type": "newsletter_open",   "property": "financeopsclub", "at": "2026-07-09T14:02:11Z" },
    { "type": "download",          "property": "spotsaas", "asset": "2026 Finance Benchmark", "at": "2026-09-14T09:41:03Z" },
    { "type": "alternatives_read", "property": "spotsaas", "page": "/netsuite-alternatives", "at": "2026-11-08T16:20:45Z" },
    { "type": "comparison",        "property": "spotsaas", "page": "/compare/netsuite-vs-sage-intacct", "vendors": ["NetSuite", "Sage Intacct"], "at": "2026-11-12T08:15:27Z" }
  ],
  "consent": {
    "property": "spotsaas",
    "at": "2026-09-14T09:41:03Z",
    "wording": "<the opt-in text the person accepted>",
    "advertiser_named": true
  },
  "delivered_at": "2026-11-12T09:00:00Z"
}
The six events

Six event types. These three mark a buyer as in-market.

typeWhat the person didStage it sets
newsletter_openOpened one of the 20+ issuesresearching
category_readRead a guide or explainerresearching
downloadTook a benchmark, checklist or reportresearching
alternatives_readRead an "X alternatives" pagein_market
comparisonPut two vendors side by side. The event carries both vendor namesin_market
pricing_viewOpened a pricing comparisonin_market
Five ways to receive it

Five ways to receive it.

Daily file

CSV or JSON to SFTP or S3, one file a day, containing every lead since the last file.

Feed

Snowflake share or REST API, paged on delivered_at. You pull on your schedule.

Webhook

One POST per event or per lead, the moment it is recorded. This is how it reaches Clay, n8n, Make and your own agents.

CRM sync

Salesforce, HubSpot, Marketo or Eloqua, mapped to your objects, once a day.

Hashed audiences

Email-hashed lists pushed to LinkedIn, Meta, Google and your DSP, for activation programs.

Keys and matching

Keys, matching and re-delivery.

Primary key

lead_id stays the same for a person across every property and every delivery. Upsert on it.

Matching to your CRM

Match on person.work_email, lower-cased. If that misses, fall back to company.domain plus person.name.

Re-delivery

When a researching lead crosses into market we send the record again: same lead_id, new stage, new events appended. Nothing is overwritten without a trace.

Suppression

Send us your customer and competitor domains. We hold matching profiles back before delivery instead of asking you to filter them out after.

Volume

Webhooks fire once per event, so one person produces several calls over a term. Batch on lead_id if your receiver prefers one row per person.

Before you sign

Schema, webhook, dedupe, refresh and suppression.

What is the lead schema?

One JSON object per lead: lead_id, person (name, work email, LinkedIn, phone, role, seniority, function), company (name, domain, employees, revenue band, industry, region), stage, category, consideration_set, events with timestamps, consent (property, time, wording, advertiser_named) and delivered_at. The structure is identical on every lead.

How does the webhook work?

One POST per event or per lead, sent the moment it is recorded, as JSON to the HTTPS endpoint you register. It carries the full record rather than just the event, so Clay, n8n, Make or your own agents can act on it without a second call. Non-2xx responses are retried.

How should I dedupe leads?

Upsert on lead_id, which stays constant for a person across every property and delivery. To match into your CRM, use person.work_email lower-cased, then fall back to company.domain plus person.name. Webhooks fire per event, so batch on lead_id if you want one row per person.

How often is the data refreshed?

Daily files and CRM syncs run once a day and include every lead since the previous run. The REST API and Snowflake share update on the same cadence and are paged on delivered_at. Webhooks are immediate. When a researching lead crosses into market, it is re-delivered with the new stage.

How does suppression work?

Send us your customer and competitor domains, and any individual opt-outs, before delivery starts. Matching profiles are held back on our side so they never reach your CRM. Suppression lists can be updated at any point in the term, and CCPA opt-outs are honoured network-wide.

Get a sample file for your category.

Tell us the category and the stack it lands in. We send a redacted sample in this exact shape along with the program plan, the properties it runs on, and the buying model that fits.

Procurement-ready

Built for procurement, not just for marketing.

Consent on every record. Nothing your legal team has to take on faith.

GDPR readyLawful basis and consent wording on every record
CCPA / CPRAOpt-out honoured across all seven properties
CAN-SPAM & CASLEvery send from an opted-in, owned list
Consent record per leadProperty, timestamp, IP and the exact wording
Delivers into SalesforceHubSpotMarketoEloquaSnowflakeClayn8nCSV & APIIntegrate & Convertr templates