Licensing, Devices, and Telemetry
Free, PRO, and Streams
Data Explorer, the SQL Console, and connection management need no account. An account is needed for your first AI question over a live database, for PRO features, and to run streams.
| Where | Free | PRO |
|---|---|---|
| Desktop and web app |
|
|
| Online viewers, VS Code and Chrome extensions |
|
|
- Every connection in a federated query counts as a source, including files and S3.
- AI questions in a chat about files or S3 are not counted. The count resets at midnight UTC and is shared by all your installs.
- A Load pass or a CDC subscription includes PRO while it is active.
PRO
PRO costs $9 per month or $89 per year. Buy it on the Pricing page and manage it on the Account page.
- One PRO licence covers 3 devices (desktop or server installs). The online viewers and the editor extensions do not use a device.
Use PRO in the desktop app
- The app already has your API key — switch back to the app after buying PRO. It re-reads your account when its window gets focus, and PRO features unlock without a restart.
- The app has no API key yet — open Account in the left sidebar, choose Enter API key under Connect your account, and paste the key from the Account page.
Use PRO in the VS Code or Chrome extension
- Copy your API key from the Account page (Copy API Key).
- In the extension, click PNG or SVG in the diagram:
- VS Code — choose Enter API key and paste it. The command Set DBConvert API key does the same from the Command Palette.
- Chrome — paste the key into the prompt. Leave it empty to remove a stored key.
Export unlocks once the extension has read your account. The online viewers on this site use your sign-in instead of a key.
Running streams
Running a stream needs an account. What a run produces depends on what the account holds when the run starts:
| Load | CDC | |
|---|---|---|
| No purchase | Every row is copied; text fields outside table keys and relationships are marked after the first 50 rows per table | 7-day trial on up to 3 tables, one stream at a time |
| Load pass — $149 once | Clean, unlimited runs for 30 days | As without a purchase |
| CDC — $99 per pipeline per month, or $990 per year | As without a purchase | One CDC stream running at a time per pipeline |
Buy both on the Pricing page.
Load pass
- A Load run started while the pass is active finishes clean, even after the pass ends.
- Buying another pass while one is active adds 30 days to its end date.
- The Account page shows when the pass ends. It is a one-time payment and nothing renews.
CDC pipelines
- A pipeline is one CDC stream running at a time, counted across all your devices. Two pipelines let two CDC streams run at once, on the same or different machines.
- Stopping a stream frees its pipeline at once. A device that stops reporting for 15 minutes no longer holds one.
- Change the number of pipelines in the billing portal from the Account page. After you cancel, running CDC streams keep going until the end of the paid period.
CDC trial
- The 7 days start at your first CDC stream, not at registration. The trial is once per account.
- A start with more than 3 tables is refused with the table count. An empty table list replicates every table in the source, and those tables count.
- The app warns at 70%, 90% and 100% of the trial. At the end, the running stream stops.
Devices
An account runs on up to 3 devices (desktop or server installs). Each PRO licence covers 3 devices. The online viewers and the editor extensions do not use a device.
How Device Binding Works
- Each device is identified by a stable
X-Install-IDheader sent with API requests. - When a new device first uses a valid API key, it is bound to your account if the device limit allows.
- A device over the limit is refused until you deactivate another one.
- Deactivated devices are rejected for stream operations until reactivated.
Managing Devices
Device management is available from the Devices section of the Account page. From there you can:
- See how many devices are in use out of your limit (e.g. "1 / 3")
- View each bound device with its label, status, and last-seen timestamp
- Rename a device for easier identification
- Deactivate a device to free up its place
- Reactivate a previously deactivated device (if the limit allows)
Required API Headers
All API-key-authenticated requests require two headers:
| Header | Purpose |
|---|---|
X-API-Key | Account authorization |
X-Install-ID | Per-device identity for the device limit |
Telemetry
DBConvert Streams collects minimal, non-PII telemetry to improve the product and enforce licensing.
What Is Collected
| Field | Description |
|---|---|
install_id | Random per-installation identifier (not personally identifiable) |
event_type | install or runtime |
deployment_type | docker, desktop, or server |
version | Streams version |
os | Operating system (linux, darwin, windows) |
arch | CPU architecture (amd64, arm64) |
distro | Linux distribution and version when available |
When Events Are Sent
- Install event — sent once during installation. No user identity is attached (anonymous).
- Runtime event — sent on first authenticated API usage. Links the install ID to your account for the device limit.
Install ID
The install ID is generated automatically on first launch. Both the API key and install ID are visible on the Account page in the app.
For Docker deployments, the install ID is set via the STREAMS_INSTALL_ID environment variable.
Stream run diagnostics
Separately from the install and runtime events above, each stream run reports its outcome so that CDC pipelines can be counted and failures can be diagnosed.
| Field | Description |
|---|---|
| Status | FINISHED, FAILED, STOPPED, or a limit-reached status |
| Data volume | Bytes transferred during the run |
| Runtime | Active runtime in seconds |
| Source and target types | Engine kind on each side (for example mysql, postgresql), not connection details |
| Stream mode | load or cdc |
| Failure message | The error text returned by the engine when a run fails |
What the failure message contains
When a run fails, the error your database or the engine returned is sent as-is, apart from the redaction below. It names the stage and object that failed — for example Error 1406 (22001): Data too long for column 'first_name' at row 1.
That means table and column names can appear in a failure message, because they are part of the error text. Row values, query results, and table contents are not sent.
Before a failure message leaves your installation it is stripped of URLs, key=value pairs that look like credentials, email addresses, and any quoted text that is not an object name, then truncated to 500 characters. A rejected row is removed while the object it was rejected by is kept: Duplicate entry 'acme-2026' for key 'orders.PRIMARY' is sent as Duplicate entry [value] for key 'orders.PRIMARY'.
What is never collected
Your table contents, query results, connection strings, and credentials are never sent. Streams reads them only to move your data between the source and target you configured.
Reporting a failed run
A failed run has a Report to Support button. It is the only way your schema reaches us, and it never runs on its own.
Pressing it opens a dialog containing the exact text that would be sent, so you can read it before deciding. That text holds the failure message, the engines on each side, how far each table got, and the CREATE TABLE definitions of the tables the run was copying. It holds no table contents and no credentials.
Nothing is stored when you send it: the report is emailed to support, answered by a person, and lives only in that mailbox.