Skip to main content
Every AgentArea installation sends anonymous usage statistics to AgentArea, and AGENTAREA_ANALYTICS_ENABLED=false stops all of it.

Synopsis

Usage analytics is not telemetry and not OpenTelemetry. OpenTelemetry traces and Prometheus metrics (AGENTAREA_OTEL_*, AGENTAREA_METRICS_*) go to your own monitoring; see observability. Usage analytics goes to AgentArea, at https://analytics.agentarea.ai, and answers product questions: how many installations reach a first successful run, which connectors fail to connect, which features are used. Three sources send it. None of them sends an event per action. The API and the worker each log one line at start while analytics is on:
The webapp reads no variable of its own. It asks the API with GET /v1/analytics, which returns {enabled, install_id, collector_url, edition}, so the backend and the UI cannot disagree. Events go to the collector without a key. Analytics never stops AgentArea. If it cannot start, for example because the database is not reachable at that moment, the process logs an error and runs with analytics off until it restarts. If the collector does not accept events, the events are dropped: the first failure is logged as a warning with its traceback, a continuing outage at most once a day with the number of events dropped, and the recovery once.

Parameters

Set it on the backend and the worker. The chart and docker-compose.yaml set both from the one value. docker-compose.dev.yaml defaults it to false, and the CI overlay docker-compose.ci.yaml sets it to false.

Identifiers

Each installation has one anonymous id, install_id: a random 32-character hex string created on first use and stored in the single-row installation table. It identifies the installation and nothing else. Where a source needs a user or workspace id, it sends hmac_sha256(install_id, id) truncated to 16 hex characters. Page views carry one as user_id, made from the signed-in person’s identity id. The value is keyed by install_id, and install_id travels with every event: the same person is countable inside one installation, but the value does not reveal the identity id and does not match the same person in another installation. Every event carries this context:

What is sent

Pulse: event installation_pulse

A catalog slug is sent only for an item of AgentArea’s own catalog: a registry whose source is https://agentarea-mcp-registry.s3.amazonaws.com/registry/ (the registries the chart, Docker Compose and agentarea-api reconcile set up) or a builtin:// registry created by a migration. A connector, skill or bundle from a registry you added, or from no registry, is sent as custom. A workspace or user is active in a window when it created a run in it. The platform workspace, which holds what the operator supplies to every workspace, is not counted. A failure reason that is not a short code is sent as other. The install_id, version and edition travel in the event context. The properties look like this:

Failure counters: event counters

Each entry is {name, labels, count}, counted since the last send. A label value that is not a short code is sent as other. One send holds at most 1,000 distinct name and label combinations; past that, a count is added to its name under the single label {"overflow": "true"}. provider of oauth_connect is one of:
  • the issuer’s host name, only when it is one of the public providers accounts.google.com, api.notion.com, auth.atlassian.com, github.com, gitlab.com, linear.app, login.microsoftonline.com, login.salesforce.com, oauth.yandex.ru, slack.com, www.canva.com, www.figma.com, and is also configured as a platform OAuth app in AGENTAREA_MCP_OAUTH_APPS
  • custom: any other authorization server, your own included, even when it is a platform OAuth app
  • unknown: the flow failed before its connection was known, such as an expired state, a sign-in the provider refused, or a workspace deleted meanwhile
The <code> of failed:<code> is one of AgentArea’s own codes (invalid_state, missing_code, workspace_gone, connection_gone, not_authorizable, dcr_failed, oauth_app_required, token_exchange_failed, no_access_token) or an error code of RFC 6749 §4.1.2.1 and §5.2 that the provider sent back (invalid_request, unauthorized_client, access_denied, unsupported_response_type, invalid_scope, server_error, temporarily_unavailable, invalid_client, invalid_grant, unsupported_grant_type). Any other error the provider sends is other. reason of run_refused is budget_cap for a workspace or agent spend cap, no_credits for a balance that ran out, policy_denied for a governance gate, and other for any other refusal, such as a model with no price. A refusal because billing could not answer is not counted.

Page views: event page_viewed

Prefetches are not counted, and the same person on the same path counts once per 30 minutes.

Never sent

  • names, emails, task text, prompts, model output, file contents
  • names of resources you create: a custom connector is sent as custom
  • ids from a registry you added, and host names of authorization servers other than the public providers listed above: both are sent as custom
  • secrets
  • URLs
The collector sees the address a request comes from, as any HTTP server does, and does not store it.

Example

Turn analytics off.
In .env:
Then recreate the containers: docker compose up -d.
Check that it is off: the start-up line above is absent from the API and worker logs, and GET /v1/analytics returns:

Collect logs and traces

Your own monitoring: JSON logs, OpenTelemetry, Prometheus

Configuration

Every environment variable and the Helm value that sets it

Deploy with Docker Compose

Run the full platform on one host

Deploy on Kubernetes with Helm

Install the agentarea Helm chart
Last modified on October 27, 2026