External Sync (BYOD - Bring Your Own Database) lets you keep a copy of your bot results in external providers, so you maintain full control over your data.

What Is External Sync?

By default, Sendbot stores all conversation results in its internal database. With External Sync, you can automatically replicate that data to:
  • Supabase - A serverless PostgreSQL database
  • Google Sheets - Google spreadsheets
  • NocoDB - An open-source Airtable-style database
  • Webhooks - Any HTTP endpoint for custom integrations

Why Use It?

Data Ownership

Your data stays in your own database, not only in Sendbot’s cloud.

Integrations

Connect directly to your CRM, ERP, or BI stack without extra middleware.

Automatic Backup

Real-time redundancy for every result.

Custom Analytics

Use SQL or BI tools to run advanced analytics on your data.

Setting Up Sync

1. Open Bot Settings

In the editor, click “Results” -> “Storage” to open the storage settings.

2. Choose a Provider

Select one of the available providers:
Requirements:
  • A Supabase project
  • An API key (anon or service_role)
  • Your project URL
  • A destination table name
Table setup:Your table should include a result_id column (text, unique) to prevent duplicates:
CREATE TABLE sendbot_results (
  id SERIAL PRIMARY KEY,
  result_id TEXT UNIQUE NOT NULL,
  answers JSONB,
  metadata JSONB,
  created_at TIMESTAMPTZ DEFAULT NOW()
);

3. Configure Column Mapping

Define how your bot variables map to destination columns:
Bot VariableDestination Column
namecustomer_name
emailcustomer_email
phonephone

4. Advanced Options

Include Metadata
boolean
default:"true"
Also syncs data such as start time, completion time, and session origin.
Allowed Domains
array
Restricts sync to sessions that originated from specific domains only.

Technical Architecture

The system uses an Outbox Pattern architecture to guarantee reliability:

Reliability Guarantees

  • Encryption at rest: Payloads are encrypted before entering the queue
  • Automatic retries: Exponential backoff on failures
  • Configurable TTL: Records expire after 72h by default (RESULTS_SYNC_OUTBOX_TTL_HOURS)
  • Idempotency: Incremental versioning prevents duplicates

Monitoring

In the “Storage” tab under Results, you can see:
  • Sync status per result
  • Recent errors and retry count
  • Last successful sync
If you see 401 or 403 errors, make sure your provider credentials are correct and still valid.

Environment Variables

For self-hosted deployments, you can configure:
VariableDescriptionDefault
RESULTS_SYNC_OUTBOX_TTL_HOURSMaximum time a record stays in the queue72

Next Steps

Credentials

Learn how to configure credentials for each provider.