API & CLI

The data engine, from your terminal

Everything Databar does in the UI is callable: a REST API for your product and pipelines, and a CLI and MCP server built for agents like Claude Code. Create tables, run waterfalls, export to your CRM, from code.

from databar import DatabarClient client = DatabarClient()   # reads DATABAR_API_KEY user = client.get_user()print(user.balance, "credits") # find an enrichment, then run ithits = client.list_enrichments(q="linkedin")data = client.run_enrichment_sync(    hits[0].id, {"email": "alice@example.com"})

Python SDK

One install, and the engine is importable

pip install databar gives you the SDK and the CLI in the same package. Python 3.9 and up, MIT licensed, and every call drives the same engine as the app.

→ Typed objects back, not dicts to guess at

→ Sync when you want a result, tasks when you want to poll or cancel

→ Bulk results come back aligned to your inputs: one element each, None where nothing was found

# nine providers in sequence, first hit winsresult = client.run_waterfall_sync(    "email_getter",    {"linkedin_url": "https://linkedin.com/in/alice"},) # same call across a whole listrows = client.run_enrichment_bulk_sync(123, [    {"email": "alice@example.com"},    {"email": "bob@example.com"},])

Auth that stays out of the repo

databar login saves your key to ~/.databar/config. Or set DATABAR_API_KEY, or pass it to the client. Never in the code you commit.

Waterfalls in one call

run_waterfall_sync tries providers in sequence and stops at the first hit. The fallback logic is the platform's, not yours to maintain.

Long runs are tasks

poll_task to wait, partial to collect what has already finished, cancel to stop. Finished rows keep their results.

CLI

The same engine, without leaving the terminal

The CLI ships in the same package. Every command speaks table, JSON or CSV, so it pipes into whatever you already use.

databar table create --name "Inbound" --columns "email,name"databar table insert <uuid> --input signups.csv --dedupe-keys email databar table add-enrichment <uuid> \  --enrichment-id 123 --mapping '{"email": "email"}'databar table run-enrichment <uuid> --enrichment-id <table-enrichment-id> databar table rows <uuid> --format csv --out enriched.csv

Everything is a command

enrich, waterfall, flow, table, task. List, run, inspect and cancel without opening the app.

CSV in, CSV out

Bulk runs take an input file and write an output file. No glue script in between.

Built to pipe

JSON output is one predictable envelope: ok true with data, or ok false with an error code. Easy to test, easy to chain.

The engine you're scripting

One bulk call fills 1,204 rows and syncs them back to HubSpot. Same tables, same waterfalls, same run log you already see in the app.

Accounts · CRM syncRunning
Company website
Company
Total funding
# Employees
Founder emails
stripe.com
Stripe
$9,800,000,000
10,100
2 valid emails
linear.app
Linear
$134,000,000
185
1 valid email
framer.com
Framer
$163,000,000
565
2 valid emails
notion.so
Notion
$420,000,000
1,000
1 valid email
vercel.com
Vercel
$863,000,000
875
1 valid email
airtable.com
Airtable
$1,350,000,000
700
3 valid emails
ramp.com
Ramp
$3,200,000,000
2,400
2 valid emails
Claude Code
> Enrich these 1,204 accounts and sync them to HubSpot⏺ databar · run_bulk_enrichment (1,204 rows)⎿ 388 empty fields filled⎿ Synced 1,204 records to HubSpot
StripeSynced
Company website
stripe.com
Employees
10,100
Total funding
$9,800,000,000
Founder emails
patrick@stripe.com, +1 more

How it works

From API key to enriched table in three calls

1. Create a table

Post your rows or point a source at it: CSV, webhook, or a CRM segment.

2. Attach an enrichment

Pick any of 160+ providers or a waterfall, map the input columns, and trigger the run.

3. Pull the results

Poll the task, fetch the rows, or let an exporter push them straight to your CRM.

Safe to automate

Cost preview and branching, exposed to your code

Structured in, structured out

Tables, runs, and results are JSON with stable schemas. No scraping your own dashboard.

Price checks before big runs

The same per-step cost preview the UI shows is in the API, so a script or an agent can check the bill before enriching 10,000 rows.

Run history

Every run is a record

Debug from the terminal

Status, output, duration, and cost per step, logged for every run and queryable over the API. Your agent reads the same log you do.

Run surfaces

One engine, four ways to drive it

In a table

Build it by hand, watch it fill, then hand the same table to a script. Nothing to port.

On a schedule

Point a source at a table and let it re-sync itself. Monday at 6am, with nobody touching it.

From your code

One call from your product or your pipeline, with the Python SDK, the CLI, or plain REST.

As an agent tool

65+ tools over MCP. Claude Code, Cursor and Codex run the same enrichments whenever they need data.

Build your dream workflow today

Start for free today · no credit card required

Build your dream workflow today

Start for free today · no credit card required

Build your dream workflow today

Start for free today · no credit card required