Use pipes to find email addresses, phone numbers, or to trigger automations like Slack messages. Pipes are composable enrichment functions.
Find a mobile phone number for any prospect using multiple data providers in a waterfall motion.
Find work email addresses from B2B profile.
Resolve a company to Crustdata's matching candidates by domain or name. Returns the full list of matches.
Find recent company news by performing a search and scrape.
Business description, industry, and financial information.
Find work email addresses in a waterfall motion.
Check if a given email address is personal or professional.
Split a full name into first and last name.
Combine the first and last names of a prospect into a full name field.
Detect sales signals — job changes, promotions, role changes, work anniversaries, graduations — from a standardized person profile inside a per-row time window.
Find one person at a company holding a given job title like "CEO" or "CFO".
Find every person at a company holding one of the given job titles, as a list. Expand it into rows to enrich each person.
Find list of recent LinkedIn posts.
Find the recent X (Twitter) posts of an account by handle.
Find person profile by their work email address.
Find a person's LinkedIn profile URL and a standardized JSON profile from their email address.
Verify email address against various factors, including syntax, domain, and server existence, to ensure it is deliverable and active.
Verify email addresses to ensure is deliverability.
Find the personal email address of a prospect by using a professional profile URL as input.
Find a mobile phone number for a prospect.
Find a developer profile URL (e.g. GitHub) for any prospect using multiple data providers in a waterfall motion.
Find a standardized JSON representation of a LinkedIn profile.
Find the URL for a prospect's LinkedIn profile from their personal or professional email address.
Find the LinkedIn profile URL by using the prospect's name as input.
All technologies and frameworks powering a given website.
Extract the company website URL from a work email address.
Funding rounds, investors, and total funding in a waterfall motion.
Find companies similar to the company you provide as input.
The ads a company is running in the LinkedIn ad library, with their creative.
The creatives a company is running in the Google Ads Transparency Center, with their variations.
The ads a company is running in the Meta Ad Library (Facebook, Instagram), with their creative.
Company data like headcount distribution, LinkedIn URLs etc. via the Crustdata API.
Company data via the Amplemarket API: headcount by department and job function, funding events, technologies, locations and LinkedIn presence. Matches on domain, LinkedIn URL, or both.
Qualify a company on whether it is hiring for a role you care about. Returns its open postings as one list, filtered by function, department, seniority and remote-only. Coverage is partial — many companies return no matching postings — so it suits qualifying rows you already have; to FIND companies hiring, start from a jobs search.
Find any company's website URL, LinkedIn profile URL, and cleaned name.
Executes configurable AI prompts with structured output fields.
Runs an AI research agent with web tools and structured output fields.
Extract nested JSON properties into new output fields.
An AI agent specialized in composing messages for modern workplace communication platforms (Slack, Teams, Discord, etc.)
An AI agent specialized in composing emails.
Replaces template tags like {{ name }} with actual values.
Join one or more fields into one field. The final result will be the first defined field. A single-source merge establishes a stable output name that additional sources can join later without consumers changing.
Strip a field value of characters not commonly found in slugs.
Transform URL input into a domain. Also tolerates bare domains and email addresses (the part after @ is used). Examples: 'https://go.com' → 'go.com'; 'jane@acme.io' → 'acme.io'.
Write the moment the pipe ran (ISO 8601, UTC) into a column — optionally offset into the future/past or truncated to a date. The building block for freshness cadences, follow-up dates, and expiry columns.
Compute a value per row with a JavaScript formula over mapped columns — cleanup, math, conditionals, date arithmetic — without an external provider.
Make a generic GET/POST/PUT/PATCH/DELETE HTTP request and capture the JSON response. Optionally validate the response against a JSON schema.
Add rows to a pipe0 sheet in a given project. config.project and config.sheet may each be a literal slug or a `{{ field_name }}` tag.
Claim an entry in a bucket (write-if-absent). Wins (is_claim_successful: true) or finds the entry already taken (no_result). Put this before a write pipe to guard against duplicates across sheets, runs, and time.
Assign the next sequence number to an entry in a counter bucket, exactly once (a re-run returns the same number). The building block for round-robin lead routing.
Look up an entry in an existing claim bucket WITHOUT writing. Present → no_result (e.g. suppressed); absent → completed. For suppression / do-not-contact / already-seen gates.
Count events per entry in an event-counter bucket: each run where the condition matches increments the entry's count; otherwise the current count is read unchanged. Outputs the running count and when it last changed.
Expand a list into sheet rows — each item is written as-is to an `expanded_value` column (objects/arrays as json).
Rotate through the rows of another sheet (e.g. a sellers roster). Each unique counter value picks the next row round-robin; the selected columns of the picked row become outputs. Re-run safe — the same counter value always picks the same row.
Look up rows in another pipe0 sheet matching a condition block (and/or over eq, neq, gt, gte, lt, lte, contains, matches). Outputs the total match count, the matching rows, and their record IDs.
Delete rows in ANOTHER pipe0 sheet matching a condition block. The replace-on-refresh building block: delete previously written downstream rows before re-appending fresh ones.
Look up rows in your own PostgreSQL database with a read-only SQL query resolved per row. Outputs the total match count and the matching rows.
Look up rows in your own Databricks SQL warehouse with a read-only SQL query resolved per row. Outputs the total match count and the matching rows.
Extract relevant content from a website using Parallel's Extract API. Returns a flat list of results — page title, publish date and the excerpts most relevant to your objective.
Fetch one web page and return its full content as clean markdown. Handles JavaScript-rendered pages and PDFs.
Check whether a contact exists in your HubSpot portal by email. Matches the primary email exactly (and optionally secondary emails); a clean miss completes with found = false.
Check whether a company exists in your HubSpot portal by domain. Domain is HubSpot's dedupe key but not unique — 0..N matches are normal; the primary match is the oldest record.
Find deals in your HubSpot portal for a company (by domain) or contact (by email) via HubSpot's association graph — deals have no natural key of their own.
Retrieve the HubSpot records associated with a source record — one level of joins across standard and custom objects (e.g. a company's deals, or a custom object linked to a company).
Check whether a person exists in your Salesforce org by email — across Contacts, Leads, and Person Accounts in one call, with deterministic precedence and converted-lead redirect. A clean miss completes with found = false.
Find accounts in your Salesforce org by company domain. Salesforce has no domain field, so the match probes exact spellings of the Website URL (never substring matching). Multiple matches are normal; a clean miss completes with count = 0.
Find opportunities in your Salesforce org for a company (by domain, via the matched account) or person (by email, via contact roles) — opportunities have no natural key of their own. A clean miss completes with count = 0.
Fetch a full Salesforce record (any standard or custom object) by its record ID — every field visible to the connected user. A deleted or missing record completes with found = false.
Read a Salesforce record's activity timeline — tasks and events (calls, emails, meetings) associated with a contact, lead, account, or opportunity. Returns the true activity count, the last-activity date, and the timeline items. An empty timeline completes with count = 0.
Check whether a person exists in your Attio workspace by email. email_addresses is Attio's unique identity attribute, so any address on a record matches exactly; a clean miss completes with found = false.
Check whether a company exists in your Attio workspace by domain. Exact domain values are unique (at most one match); root-domain matching also finds subdomain records. A clean miss completes with a count of 0.
Find deals in your Attio workspace linked to a company (by domain) or person (by email), optionally narrowed to specific stages. Deals have no natural key — matching traverses the relationship. A clean miss completes with a count of 0.
Find one record of ANY Attio object (custom objects included) by a unique attribute — the generic find-by-key. A clean miss completes with found = false.
Fetch one Attio record of any object (custom objects included) by its record ID — the full record with every attribute. A missing record completes with found = false.
Read the activity timeline of one Attio record — notes, meetings, and tasks linked to it — merged newest-first. A record with no activity completes with found count = 0.
Send an email with Resend.
Create a contact inside a Resend audience.
Add a lead to a lemlist campaign sequence, with custom variables.
Add a lead to an Amplemarket sequence, with custom dynamic fields.
Send an email with Gmail.
Create a draft email in Gmail (does not send).
Send a Slack message to a channel.
Send a Slack direct message to a workspace member.
Publish a post from your connected X (Twitter) account.
Update a HubSpot record (standard or custom object) by its record ID, mapping columns to properties. Blank values are skipped by default so un-enriched cells never erase CRM data.
Log an activity in HubSpot — a note, task, call, email, or meeting engagement — and associate it with a contact, company, deal, or custom object so it shows on the record's timeline.
Update a Salesforce record (standard or custom object) by its record ID, mapping columns to fields. Blank values are skipped so un-enriched cells never erase CRM data; the output carries the fresh post-save record.
Create-or-update (upsert) a Salesforce record anchored on an External ID field — Salesforce's native idempotent write. One matching record updates, none creates; `created` says which happened.
Log an activity in Salesforce as a Task (the native 'Log a Call' idiom — subtype call/email/task) against a contact, lead, account, or opportunity. Optionally rerun-safe via an External ID idempotency key.
Update an Attio record (standard or custom object) by its record ID, mapping columns to attributes. Blank values are skipped so un-enriched cells never erase CRM data.