Beetl Docs
Connect your data

Connect your data

The source type matrix. Seven system types, generated from the code.

A Connection is a configured link to one external system. Every connection carries a system type, and the set of system types is closed. There are seven, defined in Rust as the SystemType enum in crates/beetl-types/src/lib.rs. Adding support for a new system means adding a variant to that enum and a matching variant to ConnectionDetails next to it. There is no plugin registry, and no way to define a new system type from the UI or the API.

This page is the matrix. In the real build it is generated from the enum, so it cannot drift from the code.

The seven system types

SystemTypeDisplay nameDirectionConnectorPage
PostgreSqlPostgreSQLPullRequiredPostgreSQL (written)
WebhookWebhookPushNot usedWebhook (written)
HttpFeedHTTP FeedPushNot usedHTTP feed (stub)
FileFile UploadPushNot usedFile upload (written)
Microsoft365BcMS Dynamics 365 Business CentralPullRequiredBusiness Central (stub)
SapBusinessOneSAP Business OnePullRequiredSAP Business One (stub)
ServerSentEventsServer-Sent EventsPull (subscription)RequiredServer-Sent Events (stub)

Three of these pages are written. The other four are placeholders that exist so the shape of the section is visible. Write order follows what design partners actually use, not enum order.

Push and pull

Push types give you an endpoint and a bearer token. You POST to Beetl on your own schedule, and nothing of Beetl's runs inside your network. Webhook and HttpFeed work this way. File is push too, but through the browser rather than the API.

Pull types need beetl-connector running inside your network, because Beetl's cloud has no route to your database. The connector holds an outbound connection to Beetl, receives extraction jobs over it, runs the extraction locally, and pushes the resulting Parquet back through the same ingest API the push types use. PostgreSql, Microsoft365Bc and SapBusinessOne work this way.

ServerSentEvents sits between the two. The connector opens the stream and holds it, batches events into Parquet, and pushes batches on the feed path. It is listed as pull because the connector, not the source system, drives the connection.

Three words that get confused

Connection, Integration, connector

Connection is the configured link to one external system, the thing you create in the UI. Integration is the official term for a custom connector, replacing the old UI word "connector" retired on 2026-08-11. beetl-connector is the edge binary that runs inside the customer network and executes extraction jobs. The codebase still carries all three words. These docs use them as defined here and nowhere else.

Before your first connection

Ingestion fails until a tenant has a registered object store. With none registered, every ingest returns 422 OBJECT_STORE_NOT_CONFIGURED, whatever the source type. Registration lives under Settings and is TenantAdmin-only, so a first user without that role hits a dead end. See first run.

The connections pages are not linked from navigation

/web/connections and /web/data-sets are built and they resolve, but nothing in the navigation points at them. You reach them by typing the URL, or through the Data Landscape graph's connection node. Two things exist only on the connection detail page: Reassign Connector, and the Uploaded File card with its Replace control.

Supporting pages

On this page