Columns that fetch the data you are missing
An enrichment table fills in cells as a list moves from names and domains to emails, company size and a pitch angle.
Channels
AI CRM
By team
Alternatives
Learn
Guides
Enrichment tables
Build a prospect list in a grid. Columns call an API, run a formula, ask your own model or pull from Apollo and 14 other providers, then the rows you pick become a campaign.
| Company domain | Full name | Work emailApollo | EmployeesApollo | Pitch angleUse AI | FitFormula |
|---|---|---|---|---|---|
| lumen-freight.example | Hannah Weiss | [email protected] | 184 | Hiring two SDRs, onboarding cost | Mid-market |
| brightloop.example | Rafael Costa | [email protected] | 42 | New VP Sales rebuilding outbound | SMB |
| kestrel.example | Aiko Tanaka | [email protected] | 310 | Opening a second clinic region | Mid-market |
| parcelly.example | Samir Haddad | [email protected] | 97 | Same-day delivery launch | Mid-market |
| ateliernord.example | Ingrid Solberg | [email protected] | 18 | Wholesale channel is new | SMB |
Column types
Four kinds of column fill in data for you. Each can read the others, so a chain runs on its own: find an email, then use it.
Pick a provider action, map its inputs to your columns, tick the outputs you want. Each output becomes a column.
Result in the table
Work email
Click a cell to see its provider, outcome, latency and error.
Enrichment providers
Connect a provider once from inside the table, map its inputs to your columns and tick the outputs you want.
Find work emails and phones, enrich a profile, search people.
Check an address before you send to it.
Traffic, rank, technologies and search competitors for a domain.
Apollo alone offers 15 actions, from finding a work email to enriching a company or adding a contact to an Apollo sequence. You can add several accounts per provider, one per client for example, and each column keeps its own choice. A column does not fall back to another provider: waterfall columns are not available yet.
Runs
Background runs
Work email · row 1
Work email · row 2, a flaky provider
Only the final failure shows on the cell. A bad URL, a 4xx or a missing environment variable is not retried.
Start from a list
An enrichment table fills in cells as a list moves from names and domains to emails, company size and a pitch angle.
Workbooks hold several tables, live in folders and belong to your organization.
Then send
Table to campaign
Unmapped columns are kept on the person and become merge fields.
The details
The parts that make a grid safe to run against real lists and real accounts.
Run what you choose
Skips blank inputs
Lookups across tables
Secrets stay on the server
Several accounts per provider
Cell details
Workbooks and folders
Pick the columns that matter
Export
Get started
Add rows
Add columns
Test on 10 rows
Create the campaign
FAQ
A spreadsheet-style workspace for building a prospect list before you send anything. You import or paste rows, then add columns that fetch data: enrichment providers, an AI prompt, an HTTP call or a formula. When the list looks right you create a campaign from the rows you pick.
A column that sends a prompt to a language model for every row, using values from your other columns as {{column}} tokens. You choose a use case (web research, image generation, or creating and modifying content), a model, the output fields you want, and optional examples. Each output field becomes its own column. It runs on your organization's own OpenRouter key, so AgentSDR adds no markup and you pay your model provider directly.
Fifteen: Apollo.io, Hunter, Snov.io, Findymail, FullEnrich, LeadMagic, ContactOut, RocketReach, Icypeas, Cleanlist and Lusha for emails, phones and profiles; MillionVerifier and ZeroBounce for email verification; Similarweb and Semrush for company and traffic data. You connect your own account with each, and credentials are verified with a live call and stored encrypted.
Not yet. A column uses the account you chose and does not fall back to another provider. Waterfall columns appear in the menu but are disabled today. FullEnrich runs a provider waterfall on its own side, and you can chain columns yourself by adding a second column that reads the first one's result.
Yes. The HTTP API column sends GET, POST, PUT or PATCH requests with {{column}} tokens in the URL, headers and body, and stores the whole response or a dot path into it such as data.employees. Secrets are not pasted into headers: you name a server environment variable and it is sent as a Bearer token. A 4xx response other than 429 is treated as a configuration mistake and is not retried.
Formula columns evaluate one expression per row in a QuickJS sandbox compiled to WebAssembly, with no network, filesystem or process access, a one second limit per evaluation and a memory cap. They support JavaScript, FormulaJS, lodash and moment, plus LOOKUP to read from another table.
AgentSDR is free and open source. Providers and your model charge you on your own accounts, and AgentSDR does not convert credits to money or show a per-run cost. Cells with a blank required input are skipped before they reach the provider, and Save and run 10 rows lets you test a column before running the whole table.
Clone the repo, connect the providers and models you already pay for, and build your first table. No credits to resell and no per-row pricing.