logo-darkPipe0

Quickstart

Pipe0 is a data enrichment and automation framework.

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@1 pipe to join first_name and last_name into a new name field.
  • Use the people:workemail:waterfall@1 pipe to read name (output of the previous pipe) and company_name and find the prospect's email address.

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"]
                }
            }
        }
    })
});