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

  1. In your Clay table, add an enrichment and choose the HTTP API integration.
  2. Configure the request:
FieldValue
MethodPOST
Endpointhttps://api.delivr.ai/api/v1/intent/lookup
Header X-Api-Keyyour dlvr_... key
Header X-Api-Secretyour secret
Header Content-Typeapplication/json
  1. Body: map your email column into the email field using Clay's column token (the /email reference 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 pull topics[0].topic_name as a "top topic" field).
  • response.topics[].score: high or medium tier 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": true in 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_url instead of email. 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/people and /api/v1/intent/companies, then feed the results into a Clay table. Free capped previews (/preview variants) let you inspect real records before importing.
  • Company-level intent: POST /api/v1/intent/company scores 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.

Did this page help you?