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, Disputes, Charges, Invoices, Products, Prices, Plans, Payment Intents. Supports backfill and CDC webhooks (auto-provisioning via Stripe webhook endpoints).
Close CRMClose APILeads, Opportunities, Activities (10+ sub-types), Contacts, Users, Custom Fields. Webhooks are automatically scoped to synced entities only.
ClaapClaap APIRecordings, Workspace. Supports backfill and CDC webhooks (auto-provisioning via “Create in Claap”).
CalendlyCalendly APIOrganizations, Users, Groups, Event Types, Scheduled Events, Invitees, Contacts. Real-time invitee + event-type webhooks (auto-provisioned); scheduled backfill covers the rest.
PandaDocPandaDoc APIDocuments, Templates, Contacts, Members. Document + template webhooks (CDC, auto-provisioned); scheduled backfill covers contacts and members. Documents are hydrated with full detail (fields, tokens, pricing, products, recipients) during backfill.
WiseWise APIProfiles, Balances, Balance Updates, Transfers, Recipients, Activities. CDC webhooks verified with Wise’s RSA-SHA256 public keys; auto-provisioning is not possible with personal API tokens — subscribe the Mako webhook URL manually in the Wise Developer Hub. Transfer polls only see newly created transfers; status changes arrive via webhooks.
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.