Last updated · June 2026
- Production-ready APIs
- SOC 2 Type I - In Progress
- Alpha
- Clay
- RevOps
Wire DataVibe into Clay. Temporal freshness gate
Clay + LLM workflows with temporal freshness checks for M&A, funding, and job-change personalization. HTTP step, metadata contract, and curl smoke tests.
Wire DataVibe into Clay. Temporal freshness gate
Use this when Clay enriches accounts (M&A, funding, job changes), an LLM generates personalized openers, and you need a **pre-send gate** that blocks **stale congratulations** before CRM/sequencer dispatch.
LLMs lose sense of time. Middleware catches when copy cites old enrichment as recent news.
What this catches
| Clay signal | Stale copy pattern | Rule ID |
|---|---|---|
| M&A / acquisition | "Congrats on your recent acquisition of X" | source_stale_acquisition_claim |
| Funding round | "Congrats on your recent Series B" | source_stale_funding_claim |
| Job change / promotion | "Congrats on the new role as VP of Sales" | source_stale_promotion_claim |
**Complementary rules:** competitor mentions and pricing hallucinations are handled by the **base policy engine** (pricing_hallucination, competitor_mention, etc.), not this scanner.
Flow
Clay enrichment row
→ LLM step (Sonnet / GPT)
→ HTTP step: POST /v1/gate/outbound
→ branch on status (BLOCKED | QUEUED | APPROVED)
→ only approved rows write to HubSpot / Instantly / sequencerClay table columns (examples)
| Workflow | Columns | Example |
|---|---|---|
| M&A | company, acquisition_entity, acquisition_date, generated_opener | DataPipe Inc, 2024-08-15 |
| Funding | company, funding_round, funding_date, generated_opener | Series B, 2022-06-01 |
| Job change | prospect_name, new_title, start_date, generated_opener | Sarah Chen, VP Sales, 2021-09-01 |
Gate metadata contract
Pass structured source context in metadata so DataVibe can cross-check freshness:
{
"integration": "clay",
"freshness_policy_days": 180,
"source_records": [
{
"id": "acq-datapipe",
"entity": "DataPipe Inc",
"event_type": "acquisition",
"acquired_at": "2024-08-15T00:00:00Z"
},
{
"id": "fund-acme-b",
"entity": "Acme Corp",
"event_type": "funding",
"event_at": "2022-06-01T00:00:00Z",
"label": "Series B"
},
{
"id": "promo-sarah",
"entity": "Sarah Chen",
"event_type": "promotion",
"started_at": "2021-09-01T00:00:00Z",
"title": "VP of Sales"
}
]
}event_type:acquisition|funding|promotion(defaults toacquisitionif omitted, backward compatible).- Date fields:
acquired_at,funded_at,started_at, or genericevent_at. freshness_policy_daysin metadata overrides the scanner default (max 3650 days).
Apply the **clay_revops_freshness_v1** policy template in the dashboard:
**Policy Studio → Templates → Sales / GTM → Clay RevOps. Temporal freshness gate**
Alpha vs production
| Surface | `require_source` | `claim_profiles` |
|---|---|---|
/v1/alpha/scan (public demo) | false | acquisition, funding, promotion |
clay_revops_freshness_v1 template | true | acquisition, funding, promotion |
Production workspaces must pass source_records on every gated send. Alpha works without a workspace policy for demos.
HTTP step (Clay)
**URL:** https://api.datavibe.cc/v1/gate/outbound
**Headers:**
Authorization: Bearer dv_live_...Content-Type: application/json
**Body:**
{
"recipient": "{{email}}",
"subject": "{{subject}}",
"body_html": "<p>{{generated_opener}}</p>",
"body_text": "{{generated_opener}}",
"source_model": "claude-sonnet-4.6",
"metadata": {
"integration": "clay",
"freshness_policy_days": 180,
"source_records": [
{
"id": "acq-{{company_id}}",
"entity": "{{acquisition_entity}}",
"event_type": "acquisition",
"acquired_at": "{{acquisition_date_iso}}"
}
]
}
}**Branch in Clay:**
status === "BLOCKED"→ mark rowquarantined, do not sendstatus === "QUEUED"→ route to human reviewstatus === "APPROVED"→ continue to sequencer/CRM
curl smoke tests
**M&A (acquisition):**
curl -sS -X POST "https://api.datavibe.cc/v1/gate/outbound" \
-H "Authorization: Bearer $DATAVIBE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"recipient": "[email protected]",
"subject": "Quick note",
"body_html": "<p>Congrats on the recent acquisition of DataPipe Inc.</p>",
"body_text": "Congrats on the recent acquisition of DataPipe Inc.",
"source_model": "claude-sonnet-4.6",
"metadata": {
"integration": "clay",
"source_records": [{
"entity": "DataPipe Inc",
"event_type": "acquisition",
"acquired_at": "2024-08-15T00:00:00Z"
}]
}
}'Expected: status: "BLOCKED" with rule source_stale_acquisition_claim.
**Funding:**
curl -sS -X POST "https://api.datavibe.cc/v1/alpha/scan" \
-H "Content-Type: application/json" \
-d '{
"content": "Congrats on your recent Series B, exciting momentum at Acme Corp.",
"content_type": "message",
"metadata": {
"source_records": [{
"entity": "Acme Corp",
"event_type": "funding",
"event_at": "2022-06-01T00:00:00Z"
}]
}
}'Expected: verdict: "blocked" with rule source_stale_funding_claim.
Live demo (no account)
Open datavibe.cc/alpha → try **Clay M&A Personalization**, **Clay Funding Round**, or **Clay Job Change**.
Notes
- Clay should still filter enrichment input by date; DataVibe gates **what actually ships**.
/v1/checkaccepts text only, use/v1/gate/outboundfor Clay workflows that passmetadata.source_records.
Questions: [email protected]
Need help wiring your Clay table? Book an alpha setup call · [email protected]