---
title: "Telemetry"
description: "What anonymous usage analytics the BankSync CLI collects, what it never collects, and how to opt out."
section: "CLI"
canonical: "https://banksync.io/docs/cli/telemetry"
---

The CLI collects a small amount of anonymous usage analytics to understand which commands are used and where they fail, so the tool can be improved. It is designed to be privacy-preserving by construction: it never sees your account data or your command arguments.

## What is collected

One event is recorded per real command, with these fields:

- The resolved command name, for example `transactions list` (never the raw arguments you typed).
- Whether the command succeeded.
- How long it took, in milliseconds.
- A mapped error code class on failure, for example `conflict` or `rate_limited` (never the raw error message).
- The CLI version.
- The authentication method: `apiKey`, `oauth`, or `anonymous`.

Events are tied to a random, locally generated identifier stored at `~/.config/banksync/cli-id`. It is not linked to your identity, your key, or your workspace, and the CLI never calls identify or alias.

## What is never collected

> **No account data, no arguments:** The CLI never sends financial data, bank or account identifiers, feed or job ids, your API key, or
> the arguments you passed. The command name is the resolved id only (for example feeds sync), so
> ids on the command line are never transmitted. A built-in scanner also redacts emails, tokens, and
> keys before anything is sent.

Several commands emit no telemetry at all: `--help`, `--version`, `commands`, `schema`, `config`, and shell autocomplete. Diagnostics and logs are never sent to analytics.

## The first-run notice

The first time you run a command that emits telemetry, the CLI prints a one-time notice to stderr describing what is collected and how to opt out, then does not show it again. Because it is written to stderr, it never pollutes stdout, so the disclosure is shown on the first tracked run even when output is piped, in a machine format, or in CI.

## How to opt out

Any one of these disables telemetry completely. When disabled, no events are captured.

- Set the widely supported `DO_NOT_TRACK` variable:

```bash
export DO_NOT_TRACK=1
```

- Set the BankSync-specific variable to an off value (`0`, `false`, `off`, or `no`):

```bash
export BANKSYNC_TELEMETRY=0
```

- Turn it off persistently in your config (per profile):

```bash
banksync config set telemetry off
```

Any of these takes effect immediately on the next command. Environment variables are convenient for CI; the config setting persists across sessions on your machine.

## Environments

In local dev and staging builds the CLI uses a no-op analytics provider, so those runs never send anything regardless of settings. The opt-out is honored in every environment. Telemetry flushes with a short timeout, so it can never delay or hang your terminal.

## Next steps

- [Authentication](/docs/cli/cli-authentication): profiles and where config and credentials live.
- [Scripting and CI](/docs/cli/scripting-and-ci): disabling telemetry in automation.
- [Installation](/docs/cli/installation): install and update the CLI.
