# Add a column to a table Source: https://docs.databar.ai/api-reference/endpoint/columns-create POST /v1/table/{table_uuid}/columns Create a new column on a table. Type defaults to 'text'. # Delete a column from a table Source: https://docs.databar.ai/api-reference/endpoint/columns-delete DELETE /v1/table/{table_uuid}/columns/{column_id} Delete a column from a table by its UUID. # Rename a column Source: https://docs.databar.ai/api-reference/endpoint/columns-rename PATCH /v1/table/{table_uuid}/columns/{column_id} Rename an existing column on a table. # Create a custom API connector Source: https://docs.databar.ai/api-reference/endpoint/connectors-create POST /v1/connectors/ Registers a new custom HTTP API endpoint as a connector in your workspace. Once created the connector appears as an enrichment/exporter you can use in tables. # Delete custom connector Source: https://docs.databar.ai/api-reference/endpoint/connectors-delete DELETE /v1/connectors/{connector_id} Permanently removes a custom API connector and its associated data. # Get custom connector info Source: https://docs.databar.ai/api-reference/endpoint/connectors-get GET /v1/connectors/{connector_id} Retrieve details of a specific custom API connector. # List custom API connectors Source: https://docs.databar.ai/api-reference/endpoint/connectors-list GET /v1/connectors/ Returns all custom API connectors configured in your workspace. # Update custom connector Source: https://docs.databar.ai/api-reference/endpoint/connectors-update PUT /v1/connectors/{connector_id} Replaces the configuration of an existing custom API connector. # Run bulk enrichment Source: https://docs.databar.ai/api-reference/endpoint/enrichments-bulk-run POST /v1/enrichments/{enrichment_id}/bulk-run Submits a bulk enrichment run for the specified enrichment ID. **Pricing:** for enrichments with `pricing.type == "per_parameter"`, the cost per request is `price × params[pricing.parameter]`. Check `GET /v1/enrichments/{id}` to see the pricing details. This runs an enrichment in bulk **headless** — results are returned inline. To enrich rows stored in a Databar table, see [Run table enrichment](/api-reference/endpoint/tables-run-enrichment). This endpoint is **asynchronous**. It returns a `task_id` — poll [Get task status](/api-reference/endpoint/tasks-get-status) to retrieve your results. Task data expires after **24 hours**. Results are **aligned to your inputs**: the `data` array has one element per input, in the same order you submitted them, with `null` for inputs that returned no data. So `len(data)` equals the number of inputs and `data[i]` is the result for input `i` — join results back to inputs by position. # Get a specific enrichment Source: https://docs.databar.ai/api-reference/endpoint/enrichments-get GET /v1/enrichments/{enrichment_id} Retrieve detailed information about a specific enrichment by its ID. # Get available enrichments Source: https://docs.databar.ai/api-reference/endpoint/enrichments-list GET /v1/enrichments/ Retrieves enrichments available on Databar. Use the search parameter to filter results by keyword. **Pagination:** pass `page` to receive a paginated envelope (`{items, page, limit, has_next_page, total_count}`). **⚠️ Deprecated:** calling without `page` returns a plain JSON array for backward compatibility. This form will be removed in a future version — always pass `page` for new integrations. # Get choices for a parameter Source: https://docs.databar.ai/api-reference/endpoint/enrichments-param-choices GET /v1/enrichments/{enrichment_id}/params/{param_slug}/choices Returns paginated choices for a select/mselect parameter. Use the `q` parameter to search, and `page`/`limit` for pagination. # Run single enrichment Source: https://docs.databar.ai/api-reference/endpoint/enrichments-run POST /v1/enrichments/{enrichment_id}/run Executes an enrichment task with the provided parameters. **Pricing:** for enrichments with `pricing.type == "per_parameter"`, the cost per request is `price × params[pricing.parameter]`. Check `GET /v1/enrichments/{id}` to see the pricing details. This runs an enrichment **headless** — you get results inline without storing them in a table. To run an enrichment against rows in a Databar table, see [Run table enrichment](/api-reference/endpoint/tables-run-enrichment). This endpoint is **asynchronous**. It returns a `task_id` — poll [Get task status](/api-reference/endpoint/tasks-get-status) to retrieve your results. Task data expires after **24 hours**. # Get a specific exporter Source: https://docs.databar.ai/api-reference/endpoint/exporters-get GET /v1/exporters/{exporter_id} Retrieve detailed information about a specific exporter by its ID, including its input parameters and output fields. # Get available exporters Source: https://docs.databar.ai/api-reference/endpoint/exporters-list GET /v1/exporters/ Retrieves exporters (CRM/destination integrations) available on Databar. **Pagination:** pass `page` to receive a paginated envelope (`{items, page, limit, has_next_page, total_count}`). **Deprecated:** calling without `page` returns a plain JSON array for backward compatibility. This form will be removed in a future version -- always pass `page` for new integrations. # Get a workspace flow Source: https://docs.databar.ai/api-reference/endpoint/flows-get GET /v1/flows/{flow_id} Retrieve a single flow by its numeric ID. Use the returned `inputs` array to discover the required parameter names when calling `POST /v1/flows/{flow_id}/run`. # List workspace flows Source: https://docs.databar.ai/api-reference/endpoint/flows-list GET /v1/flows/ Returns all flows defined in your workspace, ordered by most recently updated. # Run a flow Source: https://docs.databar.ai/api-reference/endpoint/flows-run POST /v1/flows/{flow_id}/run Start a flow execution and return a `task_id`. Poll `GET /v1/tasks/{task_id}` to check status and retrieve outputs. Inputs are passed as `{input_id: value}` — use `GET /v1/flows/{flow_id}` to discover the declared inputs. This endpoint is **asynchronous**. It returns a `task_id` — poll [Get task status](/api-reference/endpoint/tasks-get-status) to retrieve your results. Task data expires after **24 hours**. # Create a folder Source: https://docs.databar.ai/api-reference/endpoint/folders-create POST /v1/folders Create a new folder to organize tables. # Delete a folder Source: https://docs.databar.ai/api-reference/endpoint/folders-delete DELETE /v1/folders/{folder_id} Delete a folder. Tables in the folder are NOT deleted, they are moved to the root level. # List all folders Source: https://docs.databar.ai/api-reference/endpoint/folders-list GET /v1/folders List all folders in your workspace. # Move a table into or out of a folder Source: https://docs.databar.ai/api-reference/endpoint/folders-move-table POST /v1/folders/move-table Move a table into a folder, or remove it from its current folder. Pass `folder_id: null` (or omit it) to remove the table from any folder. # Rename a folder Source: https://docs.databar.ai/api-reference/endpoint/folders-rename PATCH /v1/folders/{folder_id} Rename an existing folder. # Delete rows from table Source: https://docs.databar.ai/api-reference/endpoint/rows-delete POST /v1/table/{table_uuid}/rows/delete Delete specific rows from a table by their UUIDs. # Get table rows Source: https://docs.databar.ai/api-reference/endpoint/rows-get GET /v1/table/{table_uuid}/rows Get rows from a table with pagination and optional filtering. **Filtering:** Use the `filter` query parameter with a JSON-encoded object. Keys are column names, values are objects with one operator. **Operators:** - `equals` — exact match - `contains` — substring match (case-insensitive) - `not_equals` — excludes exact match - `is_empty` — column value is null (pass `true`) - `is_not_empty` — column value is not null (pass `true`) Multiple column filters use AND logic. **Examples:** - `?filter={"company":{"equals":"OpenAI"}}` - `?filter={"name":{"contains":"Data"}}` - `?filter={"name":{"contains":"a"},"revenue":{"equals":"5000"}}` - `?filter={"email":{"is_not_empty":true}}` # Add rows to table Source: https://docs.databar.ai/api-reference/endpoint/rows-insert api-reference/openapi.json POST /v1/table/{table_uuid}/rows Add rows to a table in batch. Uses human-readable column names. **options.allow_new_columns** — when `true`, any column name in `fields` that doesn't exist yet will be auto-created as a text column. **options.dedupe** — when `enabled: true`, rows whose `keys` columns match an existing row are skipped (`action: skipped_duplicate`) instead of inserted. # Update rows in table by ID Source: https://docs.databar.ai/api-reference/endpoint/rows-update api-reference/openapi.json PATCH /v1/table/{table_uuid}/rows Update specific fields in multiple rows at once. Uses human-readable column names. **overwrite** controls whether existing non-empty values are replaced: - `true` (default) — always set the new value. - `false` — only fill in fields that are currently empty. If a row UUID is not found the result entry will contain `"ok": false` with an error object `{"code": "ROW_NOT_FOUND"}`. # Upsert rows by key values Source: https://docs.databar.ai/api-reference/endpoint/rows-upsert api-reference/openapi.json POST /v1/table/{table_uuid}/rows/upsert For each row, match on a single **key** column: - **0 matches** → a new row is created (`action: created`). - **1 match** → the existing row is updated (`action: updated`). - **>1 matches** → returns an `AMBIGUOUS_MATCH` error for that row. The `key` dict must contain exactly one entry `{column_name: value}`. **Upsert = update or create.** Rows are matched by the key columns you specify. If a matching row exists, it is updated; otherwise a new row is inserted. # Add enrichment to table Source: https://docs.databar.ai/api-reference/endpoint/tables-add-enrichment POST /v1/table/{table_uuid}/add-enrichment Add an enrichment to a table by its UUID. ## Mapping format The `mapping` object links enrichment parameters to table columns (or hardcoded values). Each key is an **enrichment parameter slug** (from `GET /v1/enrichments/{id}` → `params[].name`). Each value is one of: | Type | When to use | `value` field | | ----------- | -------------------------------- | ------------------------------------------- | | `"mapping"` | Read value from a column per row | Human-readable column name (e.g. `"email"`) | | `"simple"` | Same static value for every row | The literal value (e.g. `"US"`) | ```json theme={null} { "enrichment": 123, "mapping": { "email": { "type": "mapping", "value": "email" }, "country": { "type": "simple", "value": "US" } } } ``` ## After adding The response body is `{}`. To get the **table-enrichment ID** required by `POST /v1/table/{table_uuid}/run-enrichment/{id}`, call: ``` GET /v1/table/{table_uuid}/enrichments ``` and use the `id` field of the newly added entry. # Add exporter to table Source: https://docs.databar.ai/api-reference/endpoint/tables-add-exporter POST /v1/table/{table_uuid}/add-exporter Add an exporter (CRM/destination) to a table by its UUID. Use `GET /v1/exporters` to list available exporters and `GET /v1/exporters/{id}` to see required parameters. After adding, run the exporter with `POST /v1/table/{uuid}/run-enrichment/{id}`. # Add waterfall to table Source: https://docs.databar.ai/api-reference/endpoint/tables-add-waterfall POST /v1/table/{table_uuid}/add-waterfall Add a waterfall to a table by its UUID. A waterfall tries multiple data providers in sequence until one returns a result. Use `GET /v1/waterfalls` to list available waterfalls and their parameters, enrichments, and email verifiers. After adding, run the waterfall with `POST /v1/table/{uuid}/run-enrichment/{id}`. # Create a table Source: https://docs.databar.ai/api-reference/endpoint/tables-create POST /v1/table/create Create a new table in your workspace. Optionally specify a name, column names, and number of empty rows. By default the table is created with columns column1/column2/column3 and 0 rows. # Delete a table Source: https://docs.databar.ai/api-reference/endpoint/tables-delete DELETE /v1/table/{table_uuid} Permanently delete a table and all its rows by UUID. # Get table columns Source: https://docs.databar.ai/api-reference/endpoint/tables-get-columns GET /v1/table/{table_uuid}/columns Get a tables columns by its ID. # Get enrichments in table Source: https://docs.databar.ai/api-reference/endpoint/tables-get-enrichments GET /v1/table/{table_uuid}/enrichments List all enrichments configured on a table. Returns enrichment IDs, parameter mappings, and status for each enrichment attached to the specified table. # Get exporters in table Source: https://docs.databar.ai/api-reference/endpoint/tables-get-exporters GET /v1/table/{table_uuid}/exporters Get all exporters installed on a table. Use the returned `id` with `POST /v1/table/{uuid}/run-enrichment/{id}` to run. # Get waterfalls in table Source: https://docs.databar.ai/api-reference/endpoint/tables-get-waterfalls GET /v1/table/{table_uuid}/waterfalls Get all waterfalls installed on a table. Use the returned `id` with `POST /v1/table/{uuid}/run-enrichment/{id}` to run. # Get all workspace tables Source: https://docs.databar.ai/api-reference/endpoint/tables-list GET /v1/table/ Retrieves all tables currently in your workspace, including their name, created date, and identifiers. # Rename a table Source: https://docs.databar.ai/api-reference/endpoint/tables-rename PATCH /v1/table/{table_uuid} Rename a table by its UUID. # Run enrichment in table Source: https://docs.databar.ai/api-reference/endpoint/tables-run-enrichment api-reference/openapi.json POST /v1/table/{table_uuid}/run-enrichment/{enrichment_id} Run a specific enrichment or waterfall on a table. Works for both enrichments (from `POST /v1/table/{uuid}/add-enrichment`) and waterfalls (from `POST /v1/table/{uuid}/add-waterfall`). Use the `id` returned when adding. **run_strategy** controls which rows are processed: - `run_all` (default) — run on every row. - `run_empty` — only run on rows where the result is empty. **row_ids** (optional) — list of specific row UUIDs to process. When provided, only those rows are processed (subject to run_strategy). ## enrichment\_id The `enrichment_id` path parameter is the **table-enrichment ID** — the `id` returned by `GET /v1/table/{table_uuid}/enrichments`. This is **not** the same as the enrichment catalog ID. You must first add the enrichment to the table via `POST /v1/table/{table_uuid}/add-enrichment`, then retrieve the table-enrichment ID from `GET /v1/table/{table_uuid}/enrichments`. # Get task data or status Source: https://docs.databar.ai/api-reference/endpoint/tasks-get-status GET /v1/tasks/{task_id} Retrieve the data (or results) of an enrichment run by the task id. If the request is still processing, the status field will show a 'processing' status, if the request is completed, your data will be returned in the 'data' key. The task_id is provided as a response when you launch an enrichment task. # Get user info Source: https://docs.databar.ai/api-reference/endpoint/user-me GET /v1/user/me Get information about your current account. # Run bulk waterfall Source: https://docs.databar.ai/api-reference/endpoint/waterfalls-bulk-run POST /v1/waterfalls/{waterfall_identifier}/bulk-run Submits a bulk waterfall run for the specified waterfall identifier with custom enrichments. The enrichments field specifies which data providers to use for the waterfall. Please note: data is stored in our systems for 24 hours. After 24 hours, all data and requests made via enrichments and waterfalls will be removed and your request id will no longer be active. This endpoint is **asynchronous**. It returns a `task_id` — poll [Get task status](/api-reference/endpoint/tasks-get-status) to retrieve your results. Task data expires after **24 hours**. Results are **aligned to your inputs**: the `data` array has one element per input, in the same order you submitted them, with `null` for inputs that returned no data. So `len(data)` equals the number of inputs and `data[i]` is the result for input `i` — join results back to inputs by position. # Get a specific waterfall Source: https://docs.databar.ai/api-reference/endpoint/waterfalls-get GET /v1/waterfalls/{waterfall_identifier} Retrieve detailed information about a specific waterfall by its identifier. # Get available waterfalls Source: https://docs.databar.ai/api-reference/endpoint/waterfalls-list GET /v1/waterfalls/ Retrieves a list of all waterfalls available on Databar. # Run a waterfall task Source: https://docs.databar.ai/api-reference/endpoint/waterfalls-run POST /v1/waterfalls/{waterfall_identifier}/run Executes a waterfall task with the provided parameters and enrichments. The enrichments field specifies which data providers to use for the waterfall. Please note: data is stored in our systems for 24 hours. After 24 hours, all data and requests made via enrichments and waterfalls will be removed and your request id will no longer be active. This endpoint is **asynchronous**. It returns a `task_id` — poll [Get task status](/api-reference/endpoint/tasks-get-status) to retrieve your results. Task data expires after **24 hours**. # Introduction Source: https://docs.databar.ai/api-reference/introduction Databar.ai REST API reference ## Authentication Databar uses API keys to allow access to the API. Include your key in the `x-apikey` header on every request. ```bash theme={null} curl https://api.databar.ai/v1/user/me \ -H "x-apikey: YOUR_API_KEY" ``` To find your API key, head over to your [Databar workspace](https://databar.ai) and click **Integrations**. ## Base URL All API requests should be made to: ``` https://api.databar.ai ``` ## Async Pattern Some operations (bulk enrichments, waterfalls) run asynchronously. The flow is: Call a run or bulk-run endpoint. You'll receive a `task_id` in the response. Call `GET /v1/tasks/{task_id}` with the `task_id`. The `status` field will be `processing`, `completed`, or `failed`. When `status` is `completed`, the `data` field contains your results. For bulk runs, `data` is aligned to your inputs: one element per input, in the same order you submitted them, with `null` for inputs that returned no data (so `len(data)` equals the number of inputs and `data[i]` is the result for input `i`). A single (non-bulk) run returns the result object directly. Data from enrichment and waterfall tasks is stored for **24 hours**. After that, the data is permanently deleted and the task status will return `gone`. Make sure to retrieve your results promptly. ## Pagination The `GET /v1/table/{table_uuid}/rows` endpoint supports pagination: | Parameter | Default | Description | | ---------- | ------- | ---------------------------------- | | `per_page` | 1000 | Number of rows to return per page. | | `page` | 1 | Page number to retrieve. | The response includes `has_next_page` and `total_count` to help you iterate. ## Error Handling The API uses standard HTTP status codes. All error responses return a JSON body with a `detail` field describing the issue. ### Common Error Codes | Code | Meaning | When it happens | | ----- | ------------------------ | ------------------------------------------------------------------------------------------------------ | | `400` | **Bad Request** | Invalid or missing parameters in your request. The response body shows which fields failed validation. | | `403` | **Forbidden** | Your API key is missing, invalid, or doesn't have access to the requested resource. | | `404` | **Not Found** | The enrichment, waterfall, table, or task ID you referenced doesn't exist. | | `406` | **Insufficient Credits** | Your account doesn't have enough credits or your plan doesn't support this operation. | | `410` | **Gone** | The requested data has expired. Task results are deleted after 24 hours. | | `422` | **Validation Error** | The request body failed schema validation. The response includes field-level error details. | ### Error Response Formats **Parameter validation error** (400): ```json theme={null} { "detail": { "param1": ["This field is required."] } } ``` **Batch operation error** (400) — for row insert/update/upsert: ```json theme={null} { "error": "BATCH_TOO_LARGE", "max_size": 50 } ``` Batch error codes: `BATCH_TOO_LARGE`, `UNKNOWN_COLUMNS`, `INVALID_DATA`. **Insufficient credits** (406): ```json theme={null} { "detail": "Check the number of remaining credits or the tariff plan." } ``` **Schema validation error** (422): ```json theme={null} { "detail": [ { "loc": ["body", "params"], "msg": "field required", "type": "value_error.missing" } ] } ``` # CLI Reference Source: https://docs.databar.ai/cli The Databar CLI lets you run enrichments, manage tables, and automate workflows directly from your terminal or AI agent. ## Installation ```bash theme={null} pip install databar ``` After installing, the `databar` command is available in your terminal. ```bash theme={null} databar --help databar --version ``` *** ## Authentication ```bash theme={null} # Save your API key (prompted securely) databar login # Or pass it directly databar login --api-key your-key-here # Verify your key databar whoami ``` Your key is saved to `~/.databar/config` with `600` permissions (owner read-only). You can also set the `DATABAR_API_KEY` environment variable — it takes priority over the config file: ```bash theme={null} export DATABAR_API_KEY=your-key-here ``` *** ## Output formats Every command supports `--format` with three options: | Flag | Output | Best for | | ---------------- | --------------------------------- | ---------------------------- | | `--format table` | Rich terminal table (default) | Human viewing | | `--format json` | Raw JSON to stdout | Piping, scripting, AI agents | | `--format csv` | CSV to stdout or `--out file.csv` | Spreadsheets, data pipelines | ```bash theme={null} # Pipe JSON output to jq databar enrich list --format json | jq '.[].name' # Save rows to CSV databar table rows --format csv --out rows.csv ``` *** ## Enrichments ```bash List enrichments theme={null} databar enrich list databar enrich list --query "linkedin" databar enrich list --format json ``` ```bash Get enrichment details theme={null} # Shows parameters, response fields, pricing databar enrich get 123 databar enrich get 123 --format json ``` ```bash Run a single enrichment theme={null} # Submits and polls until complete databar enrich run 123 --params '{"email": "alice@example.com"}' # JSON output (pipe-friendly) databar enrich run 123 --params '{"email": "alice@example.com"}' --format json # Raw result without formatting databar enrich run 123 --params '{"email": "alice@example.com"}' --raw ``` ```bash Bulk run from CSV theme={null} # Input CSV must have column headers matching enrichment param names databar enrich bulk 123 --input leads.csv databar enrich bulk 123 --input leads.csv --format csv --out results.csv ``` ```bash Get parameter choices theme={null} # For select/multiselect parameters databar enrich choices 123 country databar enrich choices 123 country --query "united" databar enrich choices 123 country --page 2 --limit 100 ``` *** ## Waterfalls ```bash List waterfalls theme={null} databar waterfall list databar waterfall list --query "email" databar waterfall list --format json ``` ```bash Get waterfall details theme={null} databar waterfall get email_getter databar waterfall get email_getter --format json ``` ```bash Run a waterfall theme={null} # Uses all available providers by default databar waterfall run email_getter \ --params '{"linkedin_url": "https://linkedin.com/in/alice"}' # Specify providers explicitly (comma-separated IDs) databar waterfall run email_getter \ --params '{"linkedin_url": "https://linkedin.com/in/alice"}' \ --providers 10,11 # With email verification databar waterfall run email_getter \ --params '{"linkedin_url": "https://linkedin.com/in/alice"}' \ --email-verifier 99 ``` ```bash Bulk run from CSV theme={null} databar waterfall bulk email_getter --input leads.csv databar waterfall bulk email_getter --input leads.csv --out results.csv ``` *** ## Tables ```bash List and create tables theme={null} databar table list databar table list --format json # Create empty table databar table create --name "My Leads" # Create with predefined columns databar table create --name "My Leads" --columns "email,name,company,linkedin_url" ``` ```bash Inspect a table theme={null} # List columns databar table columns databar table columns --format json # Get rows databar table rows databar table rows --page 2 --per-page 500 databar table rows --format csv --out rows.csv ``` ```bash Insert rows theme={null} # From inline JSON array databar table insert \ --data '[{"email":"alice@example.com","name":"Alice"}]' # From CSV file databar table insert --input data.csv # Auto-create unknown columns databar table insert --input data.csv --allow-new-columns # With deduplication databar table insert --input data.csv --dedupe-keys email # Multiple dedupe keys databar table insert --input data.csv --dedupe-keys "email,linkedin_url" ``` ```bash Update rows theme={null} # Rows must include an "id" field (the row UUID) databar table patch \ --data '[{"id":"row-uuid","name":"Updated Name"}]' # From CSV (must have "id" column) databar table patch --input updates.csv # Only fill empty cells (don't overwrite existing values) databar table patch --input updates.csv --no-overwrite ``` ```bash Upsert rows theme={null} # Insert or update matched by key column databar table upsert --key-col email \ --data '[{"email":"alice@example.com","name":"Alice"}]' # From CSV databar table upsert --key-col email --input data.csv ``` ```bash Table enrichments theme={null} # List enrichments configured on a table databar table enrichments # Add an enrichment to a table databar table add-enrichment \ --enrichment-id 123 \ --mapping '{"email": "email_column"}' # Run an enrichment on all table rows databar table run-enrichment --enrichment-id # Run only on empty rows databar table run-enrichment --enrichment-id --run-strategy empty_only ``` *** ## Tasks For long-running operations, tasks can be checked manually or polled until completion: ```bash Check task status theme={null} databar task get databar task get --format json ``` ```bash Poll until complete theme={null} # Blocks until the task finishes or times out (~5 minutes) databar task get --poll databar task get --poll --format json ``` *** ## AI agent usage The CLI is designed to be invoked by AI agents (Claude Code, Cursor, etc.) with `--format json` for machine-readable output: ```bash theme={null} # Self-discovery — agent finds the right enrichment databar enrich list --format json | jq '.[] | select(.name | test("linkedin"; "i"))' # Get parameters for an enrichment databar enrich get 123 --format json # Run and get structured result databar enrich run 123 --params '{"email": "alice@example.com"}' --format json # Full table pipeline databar table rows --format json | jq '.[].email' ``` Exit codes follow Unix conventions — `0` on success, non-zero on error. Errors are written to stderr; data is written to stdout, so piping always works cleanly. *** ## Environment variables | Variable | Description | | ----------------- | -------------------------------------------------------------- | | `DATABAR_API_KEY` | Your Databar API key. Takes priority over `~/.databar/config`. | *** ## Source code The CLI is open source. View source, report issues, and contribute on GitHub. # Build with Databar Source: https://docs.databar.ai/developer-guides Enrich, transform, and manage your data programmatically with the Databar API, SDK, CLI, or MCP server. Databar gives you programmatic access to 160+ integrations, enrichment workflows, waterfall logic, and structured tables. Use the REST API, Python SDK, CLI, or MCP server to build data pipelines, enrich your CRM, score leads, or let AI agents handle research for you. ## Get started Pick the path that fits your stack. Each guide walks you through authentication and your first successful request. Raw HTTP with cURL, JavaScript, or any language. Start here if you want full control. Typed client with built-in polling and error handling. Install with `pip install databar`. Run enrichments and manage tables from your terminal. Great for scripting and AI agents. Connect Databar to Claude, Cursor, or other MCP-compatible AI tools. No code required. ## Core concepts **Enrichments** are the building blocks. Each enrichment connects to a data provider (LinkedIn, Clearbit, Hunter, etc.) and returns structured data for a given input. You can run enrichments individually, in bulk, or attach them to a table. [Browse enrichments](/api-reference/endpoint/enrichments-list) **Waterfalls** chain multiple providers together for the same lookup. If the first provider returns no result, the next one is tried automatically. This maximizes coverage without writing fallback logic yourself. [Browse waterfalls](/api-reference/endpoint/waterfalls-list) **Tables** are structured datasets that live in your Databar workspace. You create a table, insert rows, attach enrichments or waterfalls, and run them across all rows. Results are stored in the table and accessible via the API or the Databar UI. [Tables API](/api-reference/endpoint/tables-create) **Connectors** let you bring your own API credentials for supported providers, or define custom HTTP endpoints that Databar can call as enrichment sources. [Connectors API](/api-reference/endpoint/connectors-list) **Exporters** push data from your tables into external destinations like HubSpot, Salesforce, Google Sheets, or custom webhooks. [Browse exporters](/api-reference/endpoint/exporters-list) **Tasks** represent async operations. When you run an enrichment or waterfall, you get back a `task_id`. Poll the task endpoint to check status and retrieve results. Task data is stored for 24 hours. [Tasks API](/api-reference/endpoint/tasks-get-status) ## What you can build * **Lead enrichment pipelines** that pull company data, emails, and phone numbers for every new signup or CRM import. [Walkthrough](/guides/enrich-leads) * **Waterfall email finders** that try multiple providers until they find a verified email. [Walkthrough](/guides/waterfall-email-finder) * **Table-driven enrichment workflows** where you create a table, add rows, attach enrichments, and run everything in a few API calls. [Walkthrough](/guides/table-enrichment-pipeline) * **AI-powered research agents** that use the MCP server to discover and run enrichments with natural language. [MCP quickstart](/quickstart-mcp) ## Explore All endpoints with request and response examples. Connect Databar to Claude, Cursor, and other AI tools. Learn how Databar works from the UI perspective. # Enrich a list of leads Source: https://docs.databar.ai/guides/enrich-leads Pull company data, emails, and phone numbers for a batch of leads using the Databar API. This walkthrough shows how to take a list of leads (names + companies) and enrich them with contact information using the Databar API. ## What you will do 1. Search for an enrichment that finds emails by name and company 2. Run it in bulk for your entire list 3. Poll for results ## Prerequisites * A Databar API key ([get one here](https://databar.ai)) * A list of leads with at least a name and company ## Step 1: Find the right enrichment Search for enrichments that match your use case: ```bash theme={null} curl "https://api.databar.ai/v1/enrichments/?q=email%20finder" \ -H "x-apikey: YOUR_API_KEY" ``` Look through the results for an enrichment that accepts `name` and `company` (or similar) as input parameters. Note the `id` and check the `price` field. Use [Get enrichment details](/api-reference/endpoint/enrichments-get) to see all required and optional parameters before running. ## Step 2: Run in bulk Once you have the enrichment ID, run it against your full list: ```bash theme={null} curl -X POST "https://api.databar.ai/v1/enrichments/ENRICHMENT_ID/bulk-run" \ -H "x-apikey: YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "params": [ {"full_name": "Sarah Chen", "company": "Stripe"}, {"full_name": "James Lee", "company": "Notion"}, {"full_name": "Maria Garcia", "company": "Figma"} ] }' ``` You will receive a `task_id` in the response. ## Step 3: Poll for results Check the task status until it completes: ```bash theme={null} curl "https://api.databar.ai/v1/tasks/YOUR_TASK_ID" \ -H "x-apikey: YOUR_API_KEY" ``` When `status` is `completed`, the `data` field contains your enriched results with emails, phone numbers, LinkedIn profiles, and other fields depending on the provider. Task data is stored for **24 hours**. Make sure to retrieve and save your results before they expire. ## With the Python SDK The SDK handles polling automatically: ```python theme={null} from databar import DatabarClient client = DatabarClient() leads = [ {"full_name": "Sarah Chen", "company": "Stripe"}, {"full_name": "James Lee", "company": "Notion"}, {"full_name": "Maria Garcia", "company": "Figma"}, ] results = client.run_enrichment_bulk_sync(ENRICHMENT_ID, leads) # Results are aligned to inputs: one element per lead, in the same order, with # None for leads that returned no data (len(results) == len(leads)). for lead, result in zip(leads, results): print(lead["full_name"], "->", result) ``` ## Next steps Maximize email coverage by trying multiple providers. Store and enrich data in a Databar table for ongoing workflows. # Table enrichment pipeline Source: https://docs.databar.ai/guides/table-enrichment-pipeline Create a table, add rows, attach an enrichment, and run it across all rows with a few API calls. Tables let you store structured data in Databar and run enrichments across all rows without managing individual API calls. This is the best approach when you want persistent, viewable results that you can also access in the Databar UI. ## What you will do 1. Create a table with columns 2. Insert rows 3. Find and attach an enrichment 4. Run the enrichment on all rows 5. View results in the API or UI ## Prerequisites * A Databar API key ([get one here](https://databar.ai)) * A dataset (names, emails, domains, etc.) ## Step 1: Create a table ```bash theme={null} curl -X POST "https://api.databar.ai/v1/table/create" \ -H "x-apikey: YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "Lead Enrichment", "columns": ["name", "company", "domain"] }' ``` Save the `uuid` from the response. You will use it in every subsequent call. ## Step 2: Insert rows ```bash theme={null} curl -X POST "https://api.databar.ai/v1/table/TABLE_UUID/rows" \ -H "x-apikey: YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "rows": [ {"fields": {"name": "Sarah Chen", "company": "Stripe", "domain": "stripe.com"}}, {"fields": {"name": "James Lee", "company": "Notion", "domain": "notion.so"}}, {"fields": {"name": "Maria Garcia", "company": "Figma", "domain": "figma.com"}} ] }' ``` You can insert up to 100 rows per request. ## Step 3: Find and attach an enrichment First, find the enrichment you want: ```bash theme={null} curl "https://api.databar.ai/v1/enrichments/?q=company%20data" \ -H "x-apikey: YOUR_API_KEY" ``` Then attach it to the table with a column mapping that tells Databar which columns to use as input: ```bash theme={null} curl -X POST "https://api.databar.ai/v1/table/TABLE_UUID/add-enrichment" \ -H "x-apikey: YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "enrichment": ENRICHMENT_ID, "mapping": { "domain": { "value": "domain", "type": "mapping" } } }' ``` Each mapping key is an enrichment parameter slug. Set `type` to `"mapping"` to pull the value from a table column (use the column name or UUID as the `value`), or `"simple"` to pass a static value to every row. Save the returned `id` - this is the table-enrichment ID you will use to run it. ## Step 4: Run the enrichment ```bash theme={null} curl -X POST "https://api.databar.ai/v1/table/TABLE_UUID/run-enrichment/TABLE_ENRICHMENT_ID" \ -H "x-apikey: YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{}' ``` This runs the enrichment on all rows. Use `"run_strategy": "run_empty"` to only process rows that have not been enriched yet. ## Step 5: View results Fetch the enriched rows: ```bash theme={null} curl "https://api.databar.ai/v1/table/TABLE_UUID/rows" \ -H "x-apikey: YOUR_API_KEY" ``` Or open the table directly in the Databar UI at `https://databar.ai/table/TABLE_UUID`. ## With the Python SDK ```python theme={null} from databar import DatabarClient client = DatabarClient() # Create table and add rows table = client.create_table(name="Lead Enrichment", columns=["name", "company", "domain"]) client.create_rows(table.uuid, [ {"name": "Sarah Chen", "company": "Stripe", "domain": "stripe.com"}, {"name": "James Lee", "company": "Notion", "domain": "notion.so"}, {"name": "Maria Garcia", "company": "Figma", "domain": "figma.com"}, ]) # Attach and run enrichment te = client.add_enrichment(table.uuid, ENRICHMENT_ID, mapping={ "domain": {"value": "domain", "type": "mapping"} }) client.run_table_enrichment(table.uuid, te.id) # Fetch results rows = client.get_table_rows(table.uuid) for row in rows: print(row) ``` ## Next steps Run a quick headless enrichment without creating a table. Maximize email coverage by trying multiple providers. # Waterfall email finder Source: https://docs.databar.ai/guides/waterfall-email-finder Find verified emails by trying multiple data providers in sequence with automatic fallback. A waterfall tries multiple data providers one after another until one returns a result. This is the best way to maximize email coverage without writing fallback logic yourself. ## What you will do 1. Search for a waterfall that finds emails 2. Run it for a single contact 3. Run it in bulk for a list ## Prerequisites * A Databar API key ([get one here](https://databar.ai)) * A name and company (or domain) for the person you want to find ## Step 1: Find a waterfall Search available waterfalls: ```bash theme={null} curl "https://api.databar.ai/v1/waterfalls/?q=email" \ -H "x-apikey: YOUR_API_KEY" ``` Each waterfall lists the providers it uses and the input parameters it expects. Pick the one that matches your data. ## Step 2: Run for a single contact ```bash theme={null} curl -X POST "https://api.databar.ai/v1/waterfalls/WATERFALL_ID/run" \ -H "x-apikey: YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "params": { "full_name": "John Smith", "company": "Google" } }' ``` You will receive a `task_id`. Poll it to get results: ```bash theme={null} curl "https://api.databar.ai/v1/tasks/YOUR_TASK_ID" \ -H "x-apikey: YOUR_API_KEY" ``` The response includes which provider returned the result and whether the email was verified. ## Step 3: Run in bulk For multiple contacts, use the bulk endpoint: ```bash theme={null} curl -X POST "https://api.databar.ai/v1/waterfalls/WATERFALL_ID/bulk-run" \ -H "x-apikey: YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "params": [ {"full_name": "Sarah Chen", "company": "Stripe"}, {"full_name": "James Lee", "company": "Notion"} ] }' ``` Task data is stored for **24 hours**. Make sure to retrieve and save your results before they expire. ## With the Python SDK ```python theme={null} from databar import DatabarClient client = DatabarClient() result = client.run_waterfall_sync(WATERFALL_ID, { "full_name": "John Smith", "company": "Google" }) print(result) # Bulk people = [ {"full_name": "Sarah Chen", "company": "Stripe"}, {"full_name": "James Lee", "company": "Notion"}, ] results = client.run_waterfall_bulk_sync(WATERFALL_ID, people) # Results are aligned to inputs: one element per person, in the same order, with # None for people that returned no data (len(results) == len(people)). for person, result in zip(people, results): print(person["full_name"], "->", result) ``` ## Next steps Enrich a batch of leads with company and contact data. Store data in a table and run enrichments across all rows. # Configuration Source: https://docs.databar.ai/mcp-configuration Environment variables, safe mode, caching, and task data retention for the Databar MCP server ## Environment variables These settings apply only when you run the **local** npm or source-built server. The **hosted** server at `https://mcp.databar.ai/mcp` uses your Bearer token only; you cannot set these via env on the remote endpoint (defaults are managed by Databar). | Variable | Default | Description | | ------------------------------ | --------------------------- | ------------------------------------------------------------ | | `DATABAR_API_KEY` | *(required)* | Your Databar API key | | `DATABAR_BASE_URL` | `https://api.databar.ai/v1` | API base URL | | `CACHE_TTL_HOURS` | `24` | How long to cache results | | `MAX_POLL_ATTEMPTS` | `150` | Max polling attempts for async tasks | | `POLL_INTERVAL_MS` | `2000` | Polling interval in milliseconds | | `DATABAR_SAFE_MODE` | `true` | Check credit balance before each enrichment | | `DATABAR_MAX_COST_PER_REQUEST` | *(unset)* | Max estimated credits per request; set to enforce a hard cap | | `DATABAR_MIN_BALANCE` | `1` | Minimum balance threshold before blocking | | `DATABAR_AUDIT_LOG` | *(none)* | File path to write audit logs | | `DATABAR_MAX_RESULT_LENGTH` | `50000` | Truncate results longer than this | ## Safe mode vs unsafe mode By default, the server runs in **safe mode** — it checks your credit balance before each enrichment to prevent accidental overspending. Even in safe mode, the `DATABAR_MAX_COST_PER_REQUEST` cap is enforced if set. If you find balance checks slow down bulk operations, you can disable safe mode: ```json theme={null} { "env": { "DATABAR_API_KEY": "your-key", "DATABAR_SAFE_MODE": "false" } } ``` In unsafe mode, the server skips balance checks. You'll see a warning at startup and before bulk operations, but spending will not be blocked. The `DATABAR_MAX_COST_PER_REQUEST` cap is still enforced. ## Caching Results are cached for **24 hours** by default (controlled by `CACHE_TTL_HOURS` on local installs). Cached lookups don't consume credits. To force a fresh lookup, pass `skip_cache: true` when calling `run_enrichment`. ## Task data retention Task data is stored for **24 hours** after completion. If you need the results later, make sure to retrieve them promptly. After 24 hours, task data is permanently deleted and the status will return `gone`. # MCP Server Source: https://docs.databar.ai/mcp-server Connect AI assistants like Claude to Databar's enrichment API The Databar MCP Server implements the [Model Context Protocol](https://modelcontextprotocol.io) (MCP), allowing AI assistants like Claude, Cursor, Codex, Gemini CLI, and others to interact with Databar's API using natural language. Instead of writing API calls manually, you can say *"find the email for John Smith at Google"* and your AI assistant will automatically discover the right enrichment, run it, and return the results. **Use the [hosted MCP server](https://mcp.databar.ai/mcp)** (`https://mcp.databar.ai/mcp`). We ship new tools, fixes, and API alignment there first, so your client always talks to the current implementation without installing or upgrading anything locally. ## Quick start The MCP server URL for all clients: ``` https://mcp.databar.ai/mcp ``` The recommended way to connect Claude is through the built-in Connectors UI. This uses OAuth so you never need to copy an API key. Open Claude (web or desktop) and go to **Settings > Connectors**. Scroll to the bottom and click **Add custom connector**. * **Name:** `Databar` * **Remote MCP Server URL:** `https://mcp.databar.ai/mcp` * Leave **Advanced settings** blank. * Click **Add**. Add custom connector dialog in Claude Claude will redirect you to Databar to authenticate. Click **Authorize** to grant access to your workspace, then you will be redirected back to Claude. Databar authorization screen for Claude Ask Claude: *"What can the Databar MCP do?"* If you prefer to authenticate with an API key instead of OAuth, add this to your Claude Desktop config (`~/Library/Application Support/Claude/claude_desktop_config.json` on macOS): ```json theme={null} { "mcpServers": { "databar": { "type": "http", "url": "https://mcp.databar.ai/mcp", "headers": { "Authorization": "Bearer your-api-key-here" } } } } ``` Restart Claude after saving. Open `.cursor/mcp.json` in your project (or `~/.cursor/mcp.json` globally) and add: ```json theme={null} { "mcpServers": { "databar": { "url": "https://mcp.databar.ai/mcp", "headers": { "Authorization": "Bearer your-api-key-here" } } } } ``` To find your API key, log in to your [Databar workspace](https://databar.ai) and navigate to **Integrations**. Restart Cursor, then try: *"What can the Databar MCP do?"* The hosted server supports both **Streamable HTTP** (`POST/GET/DELETE /mcp`) for modern clients and **Legacy SSE** (`GET /sse`) for older clients. The [`databar-mcp-server`](https://www.npmjs.com/package/databar-mcp-server) **npm package often lags behind the hosted server**. Prefer **Hosted (recommended)** unless you need a **stdio**-based setup (some clients only support spawning a local process), a **custom** `DATABAR_BASE_URL`, or **environment tuning** (see [Configuration](/mcp-configuration)). **npm / npx** ```bash theme={null} npm install -g databar-mcp-server ``` Or: ```bash theme={null} npx databar-mcp-server ``` Example **Claude Desktop** config (`~/Library/Application Support/Claude/claude_desktop_config.json` on macOS): ```json theme={null} { "mcpServers": { "databar": { "command": "npx", "args": ["-y", "databar-mcp-server"], "env": { "DATABAR_API_KEY": "your-api-key-here" } } } } ``` **From source** (contributors or pinning a specific commit): ```bash theme={null} git clone https://github.com/databar-ai/databar-mcp-server.git cd databar-mcp-server npm install && npm run build ``` ```json theme={null} { "mcpServers": { "databar": { "command": "node", "args": ["/path/to/databar-mcp-server/dist/index.js"], "env": { "DATABAR_API_KEY": "your-api-key-here" } } } } ``` ## What you can do The hosted server exposes a large set of tools aligned with the public Databar REST API. The list below reflects the current surface area (tool names and behavior may expand as we deploy updates to the hosted endpoint): Search, inspect, run enrichments — single or bulk. Remote param choices and pagination-aware runs. Search and run headless waterfalls; add table waterfalls and run them with enrichments. Create, rename, or delete tables; add, rename, or delete columns; configure enrichments and exporters on a table. Insert, patch, upsert, delete, and filter rows; create and manage folders; move tables between folders. Search exporters, inspect details, attach to tables, list configured exporters, and trigger runs. Check credit balance and spending-related guardrails (safe mode, per-request cost caps). Full list of all MCP tools with descriptions. Environment variables, safe mode, caching, and task expiry. ## Example prompts Here are some things you can ask your AI assistant once the MCP server is connected: * *"Get me David Abaev's LinkedIn profile"* * *"Verify the email [david@databar.ai](mailto:david@databar.ai)"* * *"Find the email for John Smith at Google using a waterfall"* * *"Enrich these 10 domains with company data"* * *"List my tables and show the columns for the first one"* * *"Create a table called Leads with columns name, email, company and add 5 empty rows"* * *"Get rows from my Leads table where company contains 'tech'"* * *"How many credits do I have left?"* ## Links Recommended — always up to date Source, issues, and contributions Local / stdio installs only — may lag hosted # Bulk Enrichment Source: https://docs.databar.ai/mcp-skill-bulk Enrich a list of up to 100 records in a single operation with inline results ## `databar-bulk-enrichment` **Triggers when** the user provides a list of items to enrich and wants quick inline results without creating a table. ### Workflow 1. Parse the user's list (CSV, JSON, or plain text) 2. `search_enrichments` to find the right provider 3. Estimate cost: `item_count x price_per_enrichment` 4. Confirm with the user 5. `run_bulk_enrichment` (max 100 items per request) 6. Poll `get_task_status`. Results are aligned to inputs: one element per input, in the same order, with `null` for inputs that returned no data (`len(data)` == item count). Join each result back to its input by position. 7. Format results as a markdown table ### Example prompt *"Verify these emails: [alice@google.com](mailto:alice@google.com), [bob@fake.xyz](mailto:bob@fake.xyz), [carol@stripe.com](mailto:carol@stripe.com)"* Bulk enrichment supports up to 100 items per request. For larger datasets, the agent will suggest using the [table-driven approach](/mcp-skill-table) instead. # Single Enrichment Source: https://docs.databar.ai/mcp-skill-enrichment Look up a person, company, email, or phone number using the best matching enrichment ## `databar-enrichment` **Triggers when** the user asks to look up, find, or enrich a single data point — a person, company, email, phone number, or domain. ### Workflow 1. Extract the user's intent and entity type 2. `search_enrichments` to find the right provider 3. `get_enrichment_details` to check parameters, pricing, and choices for any `select`/`mselect` params 4. If a param has `choices.mode = "remote"`, call `get_param_choices` to browse valid values 5. Confirm cost with the user 6. `run_enrichment` and present results ### Example prompt *"Get me the LinkedIn profile for Sarah Chen at Stripe"* # Table-Driven Enrichment Source: https://docs.databar.ai/mcp-skill-table Create a table, insert rows, attach an enrichment, run it, and get a shareable link ## `databar-table-enrichment` **Triggers when** the user wants to enrich a dataset at scale using Databar tables — create a table, add rows, run enrichments, and get a link to view results. ### Workflow 1. Parse the user's data (CSV, JSON, or plain text) 2. `create_table` and `create_rows` (up to 100 per batch) 3. `search_enrichments` to find the right provider 4. `add_table_enrichment` with column mapping 5. `run_table_enrichment` on all rows 6. Provide a link: `https://databar.ai/table/{uuid}` ### Example prompt *"Here are 30 leads with name and company. Create a table and find their emails."* # Waterfall Enrichment Source: https://docs.databar.ai/mcp-skill-waterfall Try multiple data providers in sequence to maximize success rate ## `databar-waterfall` **Triggers when** the user wants to maximize success rate by trying multiple providers, or explicitly mentions "waterfall". ### Workflow 1. `search_waterfalls` to find available waterfalls 2. Pick the best match based on the user's goal 3. `run_waterfall` (single) or `run_bulk_waterfall` (multiple inputs) 4. Optionally chain with email verification ### Example prompt *"Find the email for David Kim at Databar using a waterfall"* # Agent Skills Source: https://docs.databar.ai/mcp-skills Pre-built workflow skills that teach AI agents how to use Databar The MCP server ships with **Agent Skills** — pre-built workflow instructions that teach AI agents how to combine Databar tools for common tasks. Skills follow the open [SKILL.md](https://agentskills.io/) standard and work across **27+ agents** including Claude, Cursor, Codex, Gemini CLI, OpenClaw, Windsurf, and GitHub Copilot. Skills work with the [hosted MCP server](https://mcp.databar.ai/mcp) (recommended). They also work with a **local** server via npm or a source build; the **npm package may lag behind hosted**, so prefer the remote URL when your client supports it. ## Available skills Look up a person, company, email, or phone number using the best matching enrichment. Create a table, insert rows, attach an enrichment, run it, and get a shareable link. Try multiple data providers in sequence to maximize success rate. Enrich a list of up to 100 records in a single operation with inline results. ## How skills work Without skills, you have to guide the AI step-by-step: "search for an enrichment, then get details, then run it..." With skills, you just say **"find the email for John Smith at Google"** and the agent knows the full workflow automatically. Skills use a three-phase loading model to stay efficient: | Phase | What loads | Token cost | | -------------- | --------------------------------------- | ------------------------ | | **Discovery** | Name and description only | \~100 tokens per skill | | **Activation** | Full instructions when the task matches | Under 5,000 tokens | | **Execution** | Agent follows the workflow | Zero additional overhead | Skills are loaded on demand — they don't consume context until the agent decides they're relevant to your request. ## Installing skills Skills are included in the `skills/` folder of the [GitHub repo](https://github.com/databar-ai/databar-mcp-server). To use them: Copy the skill folders into your Claude skills directory: ```bash theme={null} git clone https://github.com/databar-ai/databar-mcp-server.git cp -r databar-mcp-server/skills/* ~/.claude/skills/ ``` Claude will automatically discover and activate the skills when relevant. Copy the skill folders into your project's `.claude/skills/` directory (most agents that support SKILL.md use this path): ```bash theme={null} git clone https://github.com/databar-ai/databar-mcp-server.git mkdir -p .claude/skills cp -r databar-mcp-server/skills/* .claude/skills/ ``` Copy to your OpenClaw skills directory: ```bash theme={null} git clone https://github.com/databar-ai/databar-mcp-server.git cp -r databar-mcp-server/skills/* ~/.openclaw/skills/ ``` # Available Tools Source: https://docs.databar.ai/mcp-tools Complete list of MCP tools exposed by the Databar MCP server The Databar MCP server exposes the following tools. All tools are available on the [hosted server](https://mcp.databar.ai/mcp) and the local npm/source installs. Tool names and behavior may expand as we deploy updates to the hosted endpoint. The list below reflects the current surface area. ## Enrichments | Tool | Description | | ------------------------ | ---------------------------------------------------------------------------------------------- | | `search_enrichments` | Search enrichments by keyword or category (BYOK providers you have not connected are excluded) | | `get_enrichment_details` | Parameters, pricing, response fields, and inline or remote choice metadata | | `get_param_choices` | Paginated, searchable choices for remote `select` / `mselect` params | | `run_enrichment` | Run one enrichment with polling, caching, optional `pages` for paginated enrichments | | `run_bulk_enrichment` | Bulk run with optional `pages` per record for paginated enrichments | ## Waterfalls | Tool | Description | | ---------------------- | ------------------------------------------------------------------- | | `search_waterfalls` | Search waterfall definitions | | `run_waterfall` | Run a headless waterfall (optional provider IDs, email verifier) | | `run_bulk_waterfall` | Bulk headless waterfall runs | | `add_table_waterfall` | Attach a waterfall to a table with provider list and column mapping | | `get_table_waterfalls` | List all waterfalls installed on a table | ## Tables | Tool | Description | | ----------------------- | ------------------------------------------------------------------------------------------------------ | | `create_table` | Create a table (optional name, columns, empty row count) | | `list_tables` | List tables (UUID, name, timestamps) | | `rename_table` | Rename a table | | `delete_table` | Permanently delete a table | | `get_table_columns` | Column schema (names, types, internal names) | | `create_column` | Add a column | | `rename_column` | Rename a column by ID | | `delete_column` | Delete a column by ID | | `get_table_rows` | Paginated rows with structured filters (`equals`, `contains`, etc.) | | `get_table_enrichments` | List all enrichments configured on a table | | `add_table_enrichment` | Map enrichment params to columns or static values (supports `{column}` placeholders) | | `run_table_enrichment` | Run a table enrichment or table waterfall (`run_all` / `run_empty` / `run_errors`, optional `row_ids`) | ## Row operations | Tool | Description | | ------------- | -------------------------------------------------------------------------- | | `create_rows` | Insert up to 100 rows per request; optional `allow_new_columns` and dedupe | | `patch_rows` | Patch up to 100 rows by ID | | `upsert_rows` | Upsert up to 100 rows by match key | | `delete_rows` | Delete rows by ID list | ## Exporters | Tool | Description | | ---------------------- | -------------------------------------------------------------------------- | | `search_exporters` | Discover CRM / destination exporters | | `get_exporter_details` | Exporter parameters and fields | | `add_table_exporter` | Attach an exporter with mapping (optional OAuth key, custom body template) | | `get_table_exporters` | List all exporters configured on a table | | `run_table_exporter` | Trigger an exporter run (`run_all` / `run_empty` / `run_errors`) | ## Folders | Tool | Description | | ---------------------- | ---------------------------------------------------------- | | `create_folder` | Create a folder | | `list_folders` | List folders | | `rename_folder` | Rename a folder | | `delete_folder` | Delete a folder (tables inside are not deleted) | | `move_table_to_folder` | Move a table into a folder or `null` to remove from folder | ## Account | Tool | Description | | ------------------ | ------------------------------- | | `get_user_balance` | Credit balance and account info | Many tools that run enrichments, waterfalls, or exporters are subject to [spending guardrails](/mcp-configuration#safe-mode-vs-unsafe-mode) (safe mode, per-request cost caps, minimum balance thresholds). # AI prompts Source: https://docs.databar.ai/product-guide/ai-prompts Generate and reuse AI prompt templates across your workspace. AI prompts let you run custom instructions against your table data, either as standalone enrichments or as the driving logic behind the [AI Researcher](/product-guide/ai-researcher). Databar provides tools to write prompts manually, generate them automatically, and save them as reusable templates for your entire workspace. ## AI Prompt enrichments An AI Prompt enrichment runs a custom prompt on every row in your table. Reference column values using the `{` syntax so the prompt adapts to each row's data. **Example:** You have a table of company names and descriptions. Add an AI Prompt enrichment with the instruction: ``` Classify {Company Description} into one of: SaaS, Marketplace, Hardware, Services. ``` For each row, the AI reads the description and writes the classification into a new column. Click **Enrich** in the table toolbar and search for **AI Prompt**. Enter your instruction in the prompt editor. Use `{` to insert column references wherever you need row-specific data. Select which response fields to add to your table. Click **Run** to process rows. Start with a single row to validate the output. ## AI Prompt Generator Not sure how to phrase your prompt? Describe what you want in plain English and Databar will generate a well-structured prompt for you. The generator works for both AI Prompt enrichments and [AI Researcher](/product-guide/ai-researcher) agents. In the prompt editor, click **Generate prompt**. Write a short description of what you want the AI to do. For example, "Summarize each company's value proposition in one sentence." The generator produces a prompt with proper structure and column references. Edit it further if needed, then apply it to your enrichment. The prompt generator is especially helpful when you need structured output formats (lists, JSON, specific fields). It handles the formatting instructions for you. ## AI Prompt Templates Save any prompt as a **workspace-wide template** so you and your team can reuse it across tables without rewriting it each time. Templates are ideal for prompts you run regularly: lead qualification, content classification, data extraction patterns, and more. ### Saving a template After writing or generating a prompt, click **Save as template**, give it a name, and it becomes available across your entire workspace. ### Using a template When setting up an AI Prompt enrichment or AI Researcher, click **Templates** to browse your saved prompts. Select one, and the prompt editor is pre-filled with the template content. Adjust column references as needed for the current table. ## Required vs. optional column references When your prompt includes column references, each reference can be toggled between **required** and **optional**: | Setting | Behavior | | ------------ | ---------------------------------------------------------------------------------------------------- | | **Required** | If the referenced column is empty for a row, the enrichment skips that row. No credits are consumed. | | **Optional** | The enrichment runs even if the value is empty. The AI receives a blank value for that reference. | Use the toggle next to each column reference in the prompt editor to set its requirement level. Toggle showing required and optional column references in the prompt editor Leaving all references as optional may cause the AI to produce low-quality or irrelevant outputs when key data is missing. Mark the columns that are essential to your prompt as required. ## Next steps Use AI agents to visit websites and extract structured data. Learn how to add and manage enrichments on your tables. Understand how AI prompt runs are billed. # AI Researcher Source: https://docs.databar.ai/product-guide/ai-researcher Use AI agents to research and enrich your data from across the web. The AI Researcher is an AI-powered enrichment that can visit websites, extract information, and return structured data based on your prompt. Give it a list of URLs from your table and a natural-language instruction, and it will browse each site, pull out the data you asked for, and write the results back into your table. ## How it works The AI Researcher takes two inputs: 1. **A prompt**: a natural-language description of what you want to extract (e.g., "Find the pricing model and list each tier"). 2. **A column of URLs**: the websites the agent should visit. For each row, the agent opens the linked page, reads its content, and returns a structured response based on your prompt. Unlike single-page scrapers, the AI Researcher can follow internal links and synthesize information across multiple pages on the same site. ## Example use cases | Input column | Prompt | Output | | ---------------------- | --------------------------------------- | ---------------------------------------------------------- | | Company websites | "Get their pricing model" | Pricing tiers, free-trial availability, enterprise options | | LinkedIn company pages | "Find the CEO" | CEO name, role, and profile link | | Startup websites | "Check if they recently raised funding" | Yes/no flag with round size, date, and investors | | Product pages | "Summarize the key features" | Bulleted feature list per product | ## Setting up an AI Researcher enrichment Click **Enrich** in the table toolbar, then search for **AI Researcher** in the enrichment catalog or click the **AI Researcher** button directly. Describe what you want the agent to extract. Be specific. The clearer the prompt, the better the output. You can reference column values using the `{` syntax to make prompts dynamic per row. Choose which response fields to add as columns in your table. You can optionally remove the **result** and **reasoning** fields if you only need the extracted data. Hit **Run** to process your rows. Start with a single row to verify the output before running the full table. ## Customizable outputs By default, the AI Researcher returns a **result** field and a **reasoning** field that explains how the agent arrived at its answer. Both fields are now fully optional. Remove either one during setup if you only need the raw extracted data. ## Required column references When your prompt references columns with the `{` syntax, you can mark each reference as **required** or **optional**. If a required column value is empty for a given row, the enrichment skips that row entirely. This prevents unnecessary executions and avoids sending incomplete inputs to the AI model. Toggle showing required and optional column references in the prompt editor Marking references as required is especially useful when running the AI Researcher on large tables where some rows may have missing URLs or context fields. ## AI models Databar uses the latest AI models to power the AI Researcher, ensuring high-quality extraction and reliable structured outputs. Model updates are applied automatically. No configuration needed on your end. ## Tips for better results * **Be specific in your prompt.** Instead of "Get info about the company," try "Extract the founding year, headquarters city, and number of employees." * **Test on a single row first.** Verify the output format before committing to a full run. * **Use the AI Prompt Generator.** Describe what you want in plain English and let Databar generate a well-structured prompt for you. See [AI prompts](/product-guide/ai-prompts). * **Combine with other enrichments.** Use the AI Researcher to extract URLs or identifiers, then chain additional enrichments for deeper data. ## FAQ No, AI Researcher currently runs on Databar's managed AI infrastructure. You cannot bring your own API key. However, AI Researcher is priced very competitively, so the cost per run is kept low. Yes. You can choose which response fields to include as columns during setup. The default **result** and **reasoning** fields are both optional, so you can remove either one if you only need the raw extracted data. You can also shape the output format through your prompt (e.g., asking for JSON, bullet points, or specific fields). ## Next steps Generate, save, and reuse prompt templates across your workspace. Learn how enrichments work and how to manage them. Understand how tables, columns, and rows fit together. See how AI Researcher runs are billed. # Authorization & API keys Source: https://docs.databar.ai/product-guide/authorization How authentication works for data providers on Databar. Every data provider on Databar uses one of four authorization methods. The method determines whether you need to supply your own API key, whether Databar handles authentication for you, or whether no authentication is needed at all. ## No authorization required (No Auth) Some providers offer publicly accessible endpoints that don't require authentication. * No API key is needed. Just configure the enrichment and run it. * These enrichments display a **"No API key required"** badge. * Each request consumes **0 credits** and **1 action**. ## Authorization required (API key) For providers that require authentication, you supply your own API key from the provider's website. Visit the data provider's website and generate or copy your API key from their developer dashboard. When you add a key in Databar, we usually provide instructions on how to find and generate the key for that specific provider. Click the key icon on the enrichment card, then click **Authorize**. Paste your API key into the field and save. Once you add a key to a data source, it becomes available across all endpoints from that provider. You don't need to re-enter it for each enrichment. Each request made with your own API key consumes **0 credits** and **1 action**. To remove or update a key, go to the **Manage Integrations** page in your workspace settings. Once you authorize an API (whether via API key, OAuth, or the API Network), that provider becomes available across all of Databar, including the [REST API](/api-reference/introduction), [Python SDK](/python-sdk), [CLI](/cli), and [MCP Server](/mcp-server). API keys you add to Databar are completely confidential. They are encrypted at rest and never accessed, viewed, or used by the Databar team. ## Authorization via Databar (API Network) Databar partners with **100+ data providers** to offer keyless access through the API Network. You don't need to sign up with each provider or manage any API keys. Just click **Run** and Databar handles authentication on your behalf. * No setup needed for supported providers. * Each request consumes **API Network credits** based on the provider's per-row cost. * Some providers are only available on paid plans. Even for providers available through the API Network, you can add your own API key if you prefer to use your own quota or rate limits. Your key takes priority over the API Network connection when both are configured. ## OAuth Integrations like HubSpot, Salesforce, and Pipedrive use OAuth for authentication. Instead of pasting an API key, you authenticate directly on the provider's website. Click the **Authorize on \[Provider]** button on the enrichment or exporter card. You'll be redirected to the provider's login page. Sign in and grant Databar the requested permissions. After authorizing, you're redirected back to Databar. The connection is now active and ready to use. Each request made through an OAuth connection consumes **0 credits** and **1 action**. Databar currently supports one OAuth account per API integration. If you need to switch accounts, disconnect the current one from the Integrations page and re-authorize with a different account. ## Authorization at a glance | Method | API key needed? | Credit cost | Action cost | | ------------ | -------------------------- | ----------------- | ----------- | | No Auth | No | 0 | 1 | | Your API key | Yes (from provider) | 0 | 1 | | API Network | No | Per-provider rate | 0 | | OAuth | No (authorize via browser) | 0 | 1 | ## Setting a default API key If you have multiple API keys for the same provider (for example, a personal key and a team key), you can set one as the default. The default key is used automatically whenever you run an enrichment with that provider. Click the arrow next to your workspace name and select **Manage Integrations**. Find and click on the provider you want to configure. Click **Add authentication credentials** and enter your API key. Click the checkbox next to your key to set it as the default. When enabled, this key will be used for all requests to that provider. Manage Integrations page showing how to set a custom API key as the default for a provider ## Security All API keys stored on Databar are encrypted and treated as confidential. The Databar team never accesses, views, or uses your keys. You can delete any stored key at any time from the **My Connections / Integrations** page. If you have questions about data security, contact [info@databar.ai](mailto:info@databar.ai). ## Next steps Add your own REST APIs with custom authentication. Understand how credits and actions are consumed. Learn how to enrich your tables with third-party data. # Automations Source: https://docs.databar.ai/product-guide/automations Schedule and automate your enrichment runs. Automations let you run enrichments without manual intervention. Instead of clicking **Run** each time, you configure a trigger (a schedule, a data change, or a manual button) and Databar handles the rest. ## Automation modes Databar supports three automation strategies. You select one when adding or editing an enrichment under the **Update frequency** section. The default mode. Nothing runs until you manually click the **Run** button in the table toolbar. Use this when you want full control over when data is processed. The enrichment runs automatically whenever a source column changes. If a new email is added or an existing domain is modified, the enrichment fires for the affected rows. This is the best mode for live data flows where new records arrive continuously, whether via API, webhook, or manual entry. The enrichment runs at a fixed interval. Available frequencies: | Interval | Use case | | ------------------------------ | ------------------------- | | Every minute | Near-real-time monitoring | | Every 5 / 10 / 15 / 30 minutes | Frequent polling | | Hourly | Standard tracking cadence | | Daily | Daily digests and reports | | Weekly | Low-frequency updates | | Monthly | Periodic audits | This is the best mode for trackers and dashboards that need regular refreshes without external triggers. ## Setting up an automation When you add a new enrichment to your table, the setup wizard includes an **Update frequency** section. Select the mode that fits your workflow: 1. **Run on click**: no additional configuration needed. 2. **Run on update**: select the source columns that should trigger re-enrichment when they change. 3. **Run on schedule**: pick the interval from the dropdown. You can change the automation mode at any time by editing the enrichment settings. ## Run conditions with automations [Run conditions](/product-guide/run-conditions) apply to all three automation modes. Even when an enrichment is triggered automatically (by schedule or data change), each row is still evaluated against the condition before it runs. Rows that fail the condition are skipped and do not consume credits. This lets you combine powerful automations with precise targeting. For example, you can schedule an hourly run but only process rows where `{status} == "active" && {email} != ""`. ## Credit usage Automated enrichments consume credits on every run, just like manual runs. Make sure your account has sufficient credits before enabling high-frequency schedules. Monitor your balance on the [Credits and billing](/product-guide/credits-and-billing) page. ## Scheduling for data sources (query builder) If your table is powered by a data source through the query builder, you can schedule the data source itself to refresh on a recurring basis. ### Frequency options Data source schedules support: * **Weekly**, **daily**, **hourly**, or **minute intervals**: pick from the dropdown. * **Cron expressions**: for precise timing (e.g., every weekday at 9 AM UTC). ### Update rules | Rule | Behavior | | ------------------ | ------------------------------------------------------------------------------------------------ | | **Update dataset** | Replaces the existing rows with the latest results. Use when you want a current snapshot. | | **Expand dataset** | Appends new rows without removing existing ones. Use when you want to accumulate data over time. | ### Run on launch Enable **Run on launch** to execute the data source query immediately when the schedule is activated, rather than waiting for the first scheduled interval. ### Dynamic dates Data source parameters accept dynamic date values: * `now()`: the current date and time at execution. * Relative offsets like `-1 day`, `-2 days`, `-3 days`: useful for fetching recent data windows. This lets you build queries like "fetch all new leads from the last 24 hours" that stay current without manual updates. You cannot run single ad-hoc queries while a scheduler is active on the same data source. Pause the scheduler first if you need to run a one-off query. ## Next steps Learn how to add and configure enrichments. Write conditional expressions to target specific rows. Monitor credit usage and manage your plan. # Chrome extension Source: https://docs.databar.ai/product-guide/chrome-extension Collect data from any website and send it directly to Databar. The Databar Chrome Extension lets you collect structured data from any website without writing code. Open the sidebar, click on the elements you want, and export the results as a CSV or send them straight to your Databar workspace. ## How it works The extension opens as a persistent sidebar pinned to the right side of your browser. It stays visible while you browse, scroll, and interact with the page, giving you a full workspace for selecting and organizing your data. 1. Click on any element on the page to select it 2. The extension automatically detects similar elements across the page 3. Review and refine your selections in the sidebar 4. Export to CSV or send directly to Databar