Quickstart
Pipe0 is a data enrichment and automation framework.
Pipe Catalog
Every enrichment, with input/output fields and pricing.
Search Catalog
Every dataset, with filters and pricing.
API Reference
Public API endpoints.
Motivation
When Ivan Zhao explains the idea behind Notion he compares it to paper:
Paper is simple enough for a 3-year-old to take out of the drawer and paint on it. Yet it's versatile enough that the bureaucracies of entire countries can run on it.
Pipe0's philosophy is similar.
You can use it as a simple API/UI/MCP to find email addresses, phone numbers, and LinkedIn data. It will only take minutes to set up and requires no coding knowledge.
Yet you can build entire experiences similar to Clay & n8n on top of it — check out the Dough example, a Clay-like table built from ~400 lines of code.
For simple use-cases the docs are overkill. Read this page then jump to the pipe or search catalog.
Enrich a record with a pipe
This request enriches one input object using the people:workemail:waterfall@1 pipe — it adds a work_email field to your record.
const result = await fetch("https://api.pipe0.com/v1/pipes/run/sync", {
method: "POST",
headers: {
"Authorization": `Bearer ${API_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
pipes: [{ pipe_id: "people:workemail:waterfall@1" }],
input: [
{
id: 1,
name: "John Doe",
company_website_url: "https://pipe0.com"
}
]
})
});Compose pipes
You can stack multiple pipes in one request to build complex workflows where pipes read each other's output.
Here's an example:
- You start with
input: [{id: "1", first_name: "John", last_name: "Doe", company_name: "Alphabet Inc."}] - Use the
name:join@1pipe to joinfirst_nameandlast_nameinto a newnamefield. - Use the
people:workemail:waterfall@1pipe to readname(output of the previous pipe) andcompany_nameand find the prospect's email address.
Search
While pipes take input objects and add fields to them, search creates a list of input objects.
This can be helpful if you're looking for people or companies based on filters.
Here's an example request that fetches a list of people people:profiles:crustdata@1 using a job-title filter.
const result = await fetch("https://api.pipe0.com/v1/search/run/sync", {
method: "POST",
headers: {
"Authorization": `Bearer ${API_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
search: {
search_id: "people:profiles:crustdata@1",
config: {
limit: 25,
filters: {
current_job_titles: ["Software Engineer"]
}
}
}
})
});