Composable enough to sit underneath a CRM.
await pipe0.pipes.run({
pipes: [
{ pipe_id: "person:workemail:waterfall@1" },
{ pipe_id: "company:overview@3" },
],
input: rows,
});Searches create records. Pipes add properties to them. Every workflow on pipe0 is those two, arranged.
Create records you do not have yet.
One query runs across multiple datasets at once instead of one provider at a time — people, companies, job posts, channel members, calendar guests.
await pipe0.search.run({
search_id: "people:profiles@3",
payload: { title: "VP of Sales", location: "DACH" },
});Add properties to records you already have.
Stack enrichments, actions and conditions into one composed call. Verification, company data, CRM writes and AI steps are all just pipes.
await pipe0.pipes.run({
pipes: [
{ pipe_id: "person:workemail:waterfall@1" },
{ pipe_id: "company:overview@3" },
],
input: rows,
});We only add providers when they contribute enrichment-coverage. Waterfalls stay short, fast, and reliable.
Bring your own keys on any plan, or use pipe0’s negotiated rates. Either way the composition, retries, and billing are one call.
CRMs, ATSs, sequencers and sales tools use the API to add Clay-like enrichment inside their own interface.
Keep records current: enrich on create, re-verify on a schedule, write back through the same call.
Resolve candidates to work emails and phone numbers, and enrich the companies behind them.
Offer waterfall enrichment as a feature of your own product, billed per result that lands.
Everything here is documented, versioned and typed.