Use Delivr Intent in Clay
Add Delivr person-level intent as an enrichment column in a Clay table: each row's email goes in, that person's intent topics come back. Clay calls our API once per row with its HTTP API integration, so there is nothing to install.
If you have not made a Delivr API call before, skim the Intent Quickstart first; this guide assumes you have a key + secret pair from the dashboard.
Set up the enrichment column
- In your Clay table, add an enrichment and choose the HTTP API integration.
- Configure the request:
| Field | Value |
|---|---|
| Method | POST |
| Endpoint | https://api.delivr.ai/api/v1/intent/lookup |
Header X-Api-Key | your dlvr_... key |
Header X-Api-Secret | your secret |
Header Content-Type | application/json |
- Body: map your email column into the
emailfield using Clay's column token (the/emailreference below stands for whatever your column is called):
{
"id": "clay-row",
"email": "/email"
}Store the key and secret in Clay's secure header fields rather than pasting them into shared table configs. Anyone with both halves can call the API as your organization.
Map the response
A matched person returns:
{
"response": {
"matched": true,
"matched_on": "email",
"topics": [
{ "topic_id": "4eyes_103456", "topic_name": "CRM Software", "score": "high", "perc_score": 87 }
]
},
"as_of": "2026-06-19"
}Useful paths to map to Clay columns:
response.matched: whether the person is in the current intent data.response.topics: the full topic array (map it whole, or use a formula column to pulltopics[0].topic_nameas a "top topic" field).response.topics[].score:highormediumtier per topic.response.topics[].perc_score: 0-99 percentile strength, for sorting or thresholds.
matched: false with empty topics is a normal outcome for a person not in the data, not an error; rows keep processing.
Filter to the topics you care about
Add topic_ids and min_score to the body to score against a shortlist instead of returning everything:
{
"email": "/email",
"topic_ids": ["4eyes_103456", "4eyes_107194"],
"min_score": "high"
}matched stays true even when the filter leaves zero topics, so you can distinguish "not in the data" from "in the data, but not researching these topics."
Costs and testing
- Billing is per matched record; unmatched rows are free. Send
"dry_run": truein the body to preview the billable count without being charged. - The intent endpoints allow 10 requests per second per organization, which Clay's per-row pacing stays under in normal use. If you plan a very large table run, see Rate Limits and Metering.
- LinkedIn URLs work as the identifier too: send
linkedin_urlinstead ofemail. A LinkedIn URL resolves across every address we hold for the person, so it can match where a single email does not.
Zapier, Make, and other webhook tools
Any automation tool with a generic HTTP or webhook action (Webhooks by Zapier, Make's HTTP module, n8n) uses the same request: POST https://api.delivr.ai/api/v1/intent/lookup with the two auth headers and a JSON body carrying email. Map response.topics from the JSON response into your downstream steps. For bulk jobs, prefer POST /api/v1/intent/batch (up to 10,000 items per call) over row-at-a-time loops.
Going beyond enrichment
- Discovery: given a topic, pull the people or companies showing intent with
POST /api/v1/intent/peopleand/api/v1/intent/companies, then feed the results into a Clay table. Free capped previews (/previewvariants) let you inspect real records before importing. - Company-level intent:
POST /api/v1/intent/companyscores a company domain the same way the person lookup scores an email. - Full field-by-field details for every endpoint are in the API Reference.
Updated about 13 hours ago
