Skip to main content
The only thing OpenClaw sends on its own is a daily update check. It asks whether a newer version exists, and the request carries nothing but the version, operating system, and CPU architecture already visible to any package registry. Everything else on this page is opt-in. Anonymous feature statistics — which channels and providers you have configured — are off by default and never turn themselves on. When you do enable them, they ride along with that same daily update check instead of adding a second request. If you turn them on: thank you. Feature statistics are the only way we learn which channels, providers, and plugins people actually use, and they decide what gets improved, what gets fixed first, and what can safely be retired. A handful of Discord anecdotes is otherwise the entire evidence base. We publish what we learn back to everyone at telemetry.openclaw.ai, so the data you contribute stays visible to you. Declining is a completely normal choice and changes nothing about how OpenClaw works for you.

Inspect what is sent

Run this command before or after changing your preference:
Add --json to get the same state and payload as one machine-readable document. The output shows whether feature statistics are enabled, why they are enabled or disabled, the request endpoint, and the last successful check. When feature statistics are enabled, it prints the exact JSON payload the next request would send. When they are disabled, it shows the update-only request and its User-Agent header instead.

Daily update check

The default request is:
The User-Agent contains the OpenClaw version, operating system, Node.js version, CPU architecture, and whether the request came from the Gateway or CLI. It has no request body, install identifier, machine identifier, or random tracking identifier. The service responds with the latest version and, optionally, a short operator-facing note. OpenClaw displays an available update and its note through the existing update notice. Unreachable services, timeouts, invalid responses, and other failed checks do not interrupt startup or normal operation. A successful response and its timestamp are cached in the existing shared state database. Startup reuses the cached result for the next 24 hours, and a running Gateway checks again during normal maintenance with a small random delay. Failed checks do not count as successful daily checks. For testing or self-hosting, set OPENCLAW_TELEMETRY_ENDPOINT to your complete replacement endpoint URL. The public server source is available at openclaw/telemetry.

Optional anonymous feature statistics

Feature statistics are off by default. Interactive setup offers a one-time opt-in with No thanks selected by default. Non-interactive and scripted installations never opt in automatically. OpenClaw records when you accepted or declined so it does not ask again. When you explicitly enable feature statistics, the same daily request becomes a POST with this complete JSON payload:
OpenClaw names only plugins and channels that are bundled with OpenClaw or already appear in its official plugin catalog. Privately developed plugins are counted but never named because a private plugin name could identify its organization. Subtract features.plugins.length from features.pluginsEnabled to find the number of unnamed private plugins. The sender and openclaw telemetry show use the same payload builder, so the JSON displayed by the CLI is the same payload the sender would use at that moment. Reports carry no identifier of any kind, which means they cannot be linked to each other. We can see that some install runs Telegram with Anthropic models; we cannot see that it is the same install as yesterday, and we cannot build a history of any single machine. That costs us retention analysis, and we consider it worth paying.

What is never collected

Neither request tier includes message content, prompts, model names, API keys, credentials, secret references, file paths, hostnames, account identifiers, user identifiers, or installation and machine identifiers. OpenClaw does not create a random UUID or other persistent request identifier, so daily requests cannot be linked through an OpenClaw-issued identifier. Anonymous feature statistics are separate from optional, operator-configured OpenTelemetry export.

Turn feature statistics on or off

Enable or disable anonymous feature statistics at any time:
You can also configure the same preference directly:
Set DO_NOT_TRACK=1 or DO_NOT_TRACK=true to force feature statistics off, even when telemetry.enabled is true. DO_NOT_TRACK does not disable the daily update check: OpenClaw sends the update-only GET request without a feature-statistics body.

Disable every automatic update request

To go fully dark, disable the existing startup update check:
This stops both tiers and every automatic update request: no update request, no feature statistics, and no update notice, even when update.auto.enabled is true. Setting OPENCLAW_NO_AUTO_UPDATE=1 also prevents automatic update requests and applies. Explicit update commands remain available when you choose to run them. See Configuration reference for the full telemetry configuration and Update configuration for the automatic update-check controls.