No credit cardStart free

Connections

Connect your data sources to start syncing and querying. Use built-in connectors, connect any HTTP or GraphQL API with a JSON spec, or push data from files. PostgreSQL and MySQL also support Live mode.

Supported Sources

Custom HTTP / GraphQL

Connect any API with a declarative JSON spec - any auth type, auto-pagination, schema evolution

PostgreSQL

Connect to any PostgreSQL database - Sync or Live mode

MySQL

Connect to any MySQL or MariaDB database - Sync or Live mode

Stripe

Customers, charges, invoices, subscriptions

HubSpot

Contacts, companies, deals from your CRM

Salesforce

Accounts, contacts, opportunities, and more (Experimental)

Shopify

Orders, products, customers from your store

Google Sheets

Sync data from Google Sheets spreadsheets

Push Data (rq push)

Push JSON, JSONL, or CSV from files or stdin - one-time imports, scripts, migrations

Setup Wizard

Adding a connection follows a guided wizard:

  1. Select type - Pick your data source (Stripe, Postgres, etc.)
  2. Enter credentials - API keys, database credentials, or OAuth
  3. Choose mode - Sync or Live (Postgres and MySQL only)
  4. Test connection - Verify that credentials work before going further
  5. Discover tables - See all available tables/streams and select which ones to sync (sync mode only)
  6. Schedule - Choose sync frequency: manual, hourly, every 6h, daily, or weekly (sync mode only)
  7. First sync - Trigger the initial data sync and start querying (sync mode only)

If the connection test fails, you can fix your credentials and retry without leaving the wizard. If you cancel mid-setup, the connection is cleaned up automatically.

How Syncing Works

Click Sync on any connection to open the sync modal. You can select which tables to sync, see previous sync stats, and track progress in real time.

  1. Pick tables - Select which tables/streams to sync (or select all)
  2. Submit - The sync job runs in the background; you can close the modal
  3. Track progress - The modal shows elapsed time and auto-updates when done
  4. Review results - See per-table record counts and any errors

Syncs are asynchronous - large datasets won't block the UI. For each table, rawquery uses either a full refresh or incremental sync depending on what the source supports.

Data is stored in the open Apache Iceberg format (Parquet under the hood). This means:

  • No vendor lock-in - export your data anytime
  • Efficient columnar storage - fast queries on large datasets
  • Standard format - works with any tool that reads Iceberg or Parquet

Table Naming

Tables are namespaced by the connection name you choose. For example, if you name your Stripe connection "my_stripe", the tables will be:

text
my_stripe.customers
my_stripe.charges
my_stripe.invoices
my_stripe.subscriptions
...

After syncing, browse all your tables in the Lakehouse view -- see schemas, row counts, column types, and preview data.