diff --git a/src/content/docs/workers/examples/analytics-engine.mdx b/src/content/docs/workers/examples/analytics-engine.mdx
new file mode 100644
index 00000000000000..a869deb11f1a24
--- /dev/null
+++ b/src/content/docs/workers/examples/analytics-engine.mdx
@@ -0,0 +1,99 @@
+---
+summary: Write custom analytics events to Workers Analytics Engine.
+pcx_content_type: example
+title: Write to Analytics Engine
+sidebar:
+ order: 1001
+description: Write custom analytics events to Workers Analytics Engine for high-cardinality, time-series data.
+---
+
+import { TypeScriptExample, WranglerConfig } from "~/components";
+
+[Workers Analytics Engine](/analytics/analytics-engine/) provides time-series analytics at scale. Use it to track custom metrics, build usage-based billing, or understand service health on a per-customer basis.
+
+Unlike logs, Analytics Engine is designed for aggregated queries over high-cardinality data. Writes are non-blocking and do not impact request latency.
+
+## Configure the binding
+
+Add an Analytics Engine dataset binding to your Wrangler configuration file. The dataset is created automatically when you first write to it.
+
+
+
+```jsonc
+{
+ "analytics_engine_datasets": [
+ {
+ "binding": "ANALYTICS",
+ "dataset": "my_dataset",
+ },
+ ],
+}
+```
+
+
+
+## Write data points
+
+
+
+```ts
+interface Env {
+ ANALYTICS: AnalyticsEngineDataset;
+}
+
+export default {
+ async fetch(request: Request, env: Env): Promise {
+ const url = new URL(request.url);
+
+ // Write a page view event
+ env.ANALYTICS.writeDataPoint({
+ blobs: [
+ url.pathname,
+ request.headers.get("cf-connecting-country") ?? "unknown",
+ ],
+ doubles: [1], // Count
+ indexes: [url.hostname], // Sampling key
+ });
+
+ // Write a response timing event
+ const start = Date.now();
+ const response = await fetch(request);
+ const duration = Date.now() - start;
+
+ env.ANALYTICS.writeDataPoint({
+ blobs: [url.pathname, response.status.toString()],
+ doubles: [duration],
+ indexes: [url.hostname],
+ });
+
+ // Writes are non-blocking - no need to await or use waitUntil()
+ return response;
+ },
+};
+```
+
+
+
+## Data point structure
+
+Each data point consists of:
+
+- **blobs** (strings) - Dimensions for grouping and filtering. Use for paths, regions, status codes, or customer IDs.
+- **doubles** (numbers) - Numeric values to record, such as counts, durations, or sizes.
+- **indexes** (strings) - A single string used as the [sampling key](/analytics/analytics-engine/sql-api/#sampling). Group related events under the same index.
+
+## Query your data
+
+Query your data using the [SQL API](/analytics/analytics-engine/sql-api/):
+
+```bash
+curl "https://api.cloudflare.com/client/v4/accounts/$CLOUDFLARE_ACCOUNT_ID/analytics_engine/sql" \
+ --header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
+ --data "SELECT blob1 AS path, SUM(_sample_interval) AS views FROM my_dataset WHERE timestamp > NOW() - INTERVAL '1' HOUR GROUP BY path ORDER BY views DESC LIMIT 10"
+```
+
+## Related resources
+
+- [Analytics Engine documentation](/analytics/analytics-engine/) - Full reference for Workers Analytics Engine.
+- [SQL API reference](/analytics/analytics-engine/sql-api/) - Query syntax and available functions.
+- [Grafana integration](/analytics/analytics-engine/grafana/) - Visualize Analytics Engine data in Grafana.
diff --git a/src/content/docs/workers/observability/logs/tail-workers.mdx b/src/content/docs/workers/observability/logs/tail-workers.mdx
index bb535177ae8acd..ff3c66c6b72eb5 100644
--- a/src/content/docs/workers/observability/logs/tail-workers.mdx
+++ b/src/content/docs/workers/observability/logs/tail-workers.mdx
@@ -108,10 +108,32 @@ Workers added to the `tail_consumers` array must have a `tail()` handler defined
:::
+## Use Analytics Engine for aggregated metrics
+
+If you need aggregated analytics rather than individual log events, consider writing to [Workers Analytics Engine](/analytics/analytics-engine/) from your Tail Worker. Analytics Engine is optimized for high-cardinality, time-series data that you can query with SQL.
+
+For example, you can use a Tail Worker to count errors by endpoint, track response times by customer, or build usage metrics, then write those aggregates to Analytics Engine for querying and visualization.
+
+```js
+export default {
+ async tail(events, env) {
+ for (const event of events) {
+ env.ANALYTICS.writeDataPoint({
+ blobs: [event.scriptName, event.outcome],
+ doubles: [1],
+ indexes: [event.event?.request?.cf?.colo ?? "unknown"],
+ });
+ }
+ },
+};
+```
+
+Refer to the [Analytics Engine documentation](/analytics/analytics-engine/) for more details on writing and querying data.
+
## Related resources
- [`tail()`](/workers/runtime-apis/handlers/tail/) Handler API docs - Learn how to set up a `tail()` handler in your Worker.
-
-* [Errors and exceptions](/workers/observability/errors/) - Review common Workers errors.
-* [Local development and testing](/workers/development-testing/) - Develop and test you Workers locally.
-* [Source maps and stack traces](/workers/observability/source-maps) - Learn how to enable source maps and generate stack traces for Workers.
+- [Analytics Engine](/analytics/analytics-engine/) - Write custom analytics from your Worker for high-cardinality, time-series queries.
+- [Errors and exceptions](/workers/observability/errors/) - Review common Workers errors.
+- [Local development and testing](/workers/development-testing/) - Develop and test you Workers locally.
+- [Source maps and stack traces](/workers/observability/source-maps) - Learn how to enable source maps and generate stack traces for Workers.
diff --git a/src/content/docs/workers/observability/metrics-and-analytics.mdx b/src/content/docs/workers/observability/metrics-and-analytics.mdx
index 4137a810ea64c2..134dd4e662fff7 100644
--- a/src/content/docs/workers/observability/metrics-and-analytics.mdx
+++ b/src/content/docs/workers/observability/metrics-and-analytics.mdx
@@ -153,3 +153,18 @@ This chart shows historical data for all Workers on a zone broken down by succes
## GraphQL
Worker metrics are powered by GraphQL. Learn more about querying our data sets in the [Querying Workers Metrics with GraphQL tutorial](/analytics/graphql-api/tutorials/querying-workers-metrics/).
+
+## Custom analytics with Analytics Engine
+
+The metrics described above provide insight into Worker performance and runtime behavior. For custom, application-specific analytics, use [Workers Analytics Engine](/analytics/analytics-engine/).
+
+Analytics Engine is useful for:
+
+- **Custom business metrics** - Track events specific to your application, such as signups, purchases, or feature usage.
+- **Per-customer analytics** - Record data with high-cardinality dimensions like customer IDs or API keys.
+- **Usage-based billing** - Count API calls, compute units, or other billable events per customer.
+- **Performance tracking** - Measure response times, cache hit rates, or error rates with custom dimensions.
+
+Writes to Analytics Engine are non-blocking and do not add latency to your Worker. Query your data using SQL through the [Analytics Engine SQL API](/analytics/analytics-engine/sql-api/) or visualize it in [Grafana](/analytics/analytics-engine/grafana/).
+
+Refer to the [Analytics Engine example](/workers/examples/analytics-engine/) to get started.