Skip to content

SaaS Sync (Connectors)

Connectors pull data from external services and sync it into your connected databases. This lets you query third-party data with SQL alongside your own data.

ConnectorSourceEntities
StripeStripe APICustomers, Subscriptions, Charges, Invoices, Products, Plans
Close CRMClose APILeads, Opportunities, Activities (10+ sub-types), Contacts, Users, Custom Fields. Webhooks are automatically scoped to synced entities only.
PostHogPostHog HogQLDynamic — each configured HogQL query becomes an entity
GraphQLAny GraphQL APIDynamic — each configured query becomes an entity
BigQueryGoogle BigQueryDynamic — each configured query becomes an entity
RESTAny REST APIConfigurable endpoints
  1. Configure — Add a connector with API credentials and select which entities to sync
  2. Map — Choose a destination database and table naming convention
  3. Sync — Connectors fetch data in chunks with cursor-based pagination
  4. Resume — If a sync fails, it resumes from the last saved cursor (idempotent upserts)

See the Building Connectors guide for implementing new data sources.

Each connector extends BaseConnector and implements:

class MyConnector extends BaseConnector {
// Declare available entities and their BigQuery layout hints
getEntityMetadata(): EntityMetadata[];
// Fetch a chunk of data with resumable state (cursor-based)
fetchEntityChunk(options: ResumableFetchOptions): Promise<FetchState>;
// Test connectivity
testConnection(): Promise<ConnectionTestResult>;
// Validate configuration
validateConfig(): { valid: boolean; errors: string[] };
}

Connectors are configured per-workspace through the UI or API. Credentials are encrypted at rest using the ENCRYPTION_KEY environment variable.