Disabling n8n Telemetry and Phone-Home Traffic¶
The Problem¶
A self-hosted n8n instance chats to the outside world constantly. If you run a DNS sinkhole (Pi-hole, AdGuard Home) you will see a steady stream of lookups to n8n's own domains — often thousands per day from a single idle instance:
telemetry.n8n.io— usage/diagnostics (PostHog + RudderStack)ph.n8n.io— PostHog analytics endpointapi.n8n.io— version checks and the template gallerycdn-rs.n8n.io,api-rs.n8n.io— analytics CDN/collector
None of this is required for n8n to run. It is analytics, version-notification polling, and the workflow-template browser phoning home. You can turn all of it off with environment variables — cleaner than blocking at the DNS layer, which can leave the UI spinning on a dead endpoint.
The Fix¶
Set these in the container's environment (Docker Compose environment: block, or an .env file):
- N8N_DIAGNOSTICS_ENABLED=false # master switch — kills PostHog/RudderStack telemetry
- N8N_VERSION_NOTIFICATIONS_ENABLED=false # stops version-check polling to api.n8n.io
- N8N_TEMPLATES_ENABLED=false # disables the template gallery (also api.n8n.io)
- EXTERNAL_FRONTEND_HOOKS_URLS= # blank any external frontend hook URLs
- N8N_DIAGNOSTICS_CONFIG_FRONTEND= # blank the frontend PostHog key
- N8N_DIAGNOSTICS_CONFIG_BACKEND= # blank the backend diagnostics config
N8N_DIAGNOSTICS_ENABLED=false is the master switch and implicitly disables the frontend/backend diagnostics config too. The other lines shut the remaining chatter (version polling, templates).
Environment variables are read at process start, so a plain restart of an already-running container will not pick up new values — you must recreate it:
docker compose up -d # recreates the container with the new environment
# or, if you edited an .env file:
docker compose up -d --force-recreate
Your named data volume is untouched by a recreate — workflows, credentials, and execution history all survive.
Verifying¶
Confirm the variables are live in the running container:
docker inspect <n8n-container> --format '{{range .Config.Env}}{{println .}}{{end}}' | grep -i diagnost
Then watch your DNS sinkhole. Queries to *.n8n.io should collapse to near-zero within a minute or two. A couple of stragglers to api.n8n.io right after the recreate are normal (startup), and an open editor tab may emit a few more until you reload it — but the recurring telemetry.n8n.io beacon stops entirely.
Notes¶
- These variables are stable across n8n versions and safe to leave in place permanently.
- If you also sinkhole
*.n8n.ioat the DNS layer, do it in addition to these variables, not instead — disabling at the source means the app never waits on a blocked endpoint. - Disabling telemetry does not affect updates; you still pull new images yourself (
docker compose pull).