Vercel custom metrics bill at $1.20 per million events, and the docs omit the plan gate

One metric per invocation across 1 million invocations costs $1.20. The docs page never mentions the Pro or Enterprise plan requirement.

Read time
11 min
Word count
1.8K
Sections
11
FAQs
8
Share
Vercel custom metrics billing and limits, August 2026
On this page · 11 sections
  1. What shipped
  2. The cost model, in numbers you can plan against
  3. The two caps, and what happens at the boundary
  4. Three documentation gaps to check before you ship
  5. How this compares with what you were probably using instead
  6. The other two things Vercel shipped on 20 August
  7. India-specific considerations
  8. What is still unknown
  9. FAQ
  10. How eCorpIT can help
  11. References

Summary. Vercel shipped custom metrics for Vercel Functions on 20 August 2026 at 17:00 UTC. The billing rule is one line in the docs: "Each custom metric data point counts as one Observability event. Vercel charges $1.20 per 1 million Observability events." There are two hard caps, both stated twice in Vercel's own documentation: 50 user-supplied attributes per emission, and 100 metric() calls per function invocation. A team emitting one metric on each of 1 million invocations pays $1.20 a month. A team emitting the maximum 100 pays $120 for the same traffic. The plan requirement appears only in the changelog — "available on Pro and Enterprise with Observability Plus" — and nowhere on the documentation page a developer would actually read. Two further gaps matter more than the price: custom metrics are absent from the "tracked events" list that every Vercel pricing table links to as the definition of a billable event, and no retention period for custom metrics is published anywhere.

What shipped

The API is a single function from the @vercel/functions package. Vercel's changelog entry gives the whole surface:


            import { metric } from "@vercel/functions";

metric("database.query_ms", 120, {
  table: "my-table",
  db: "my-database"
});
          

Three parameters, per the reference table: name (string, required), value (number, required, documented as "The numeric value to record (64-bit floating-point)"), and attributes (an optional Record<string, string>). There is no counter, gauge or histogram taxonomy. Vercel's framing is flat: "Each call to metric() records a data point that you can query and chart in Observability."

Once emitted, the changelog lists three consumption surfaces — a query builder, Notebooks for dashboards, and a vc metrics CLI command. Vercel attaches five metadata fields automatically: deploymentId, requestId, functionRegion, pathType and edgeNetworkRegion. The changelog describes this as adding "useful attributes like the source deployment and function region", which understates it — the docs list five, not two, and each one is a dimension you can group by without paying for an attribute slot.

The cost model, in numbers you can plan against

Emission pattern Function invocations / month Billable events Monthly cost at $1.20 / 1M
1 metric per invocation 1,000,000 1,000,000 $1.20
5 metrics per invocation 1,000,000 5,000,000 $6.00
20 metrics per invocation 1,000,000 20,000,000 $24.00
100 metrics per invocation (the cap) 1,000,000 100,000,000 $120.00
5 metrics per invocation 50,000,000 250,000,000 $300.00

Vercel's own worked example matches the first row: "emitting one custom metric during each of 1 million function invocations records 1 million Observability events." Usage is prorated within the billing cycle, and the pricing page notes Observability Plus "uses usage-based pricing with no base fee."

There is no free allowance. None of the three Vercel pricing pages we checked publishes an included quantity of Observability events. The 50,000-events and 10,000-events figures that show up in Vercel's usage documentation belong to Web Analytics and Speed Insights, which are separately billed at $0.65 per million events. Do not model Observability against them.

At these rates the absolute numbers stay small until traffic scales. The failure mode is not a single large bill; it is instrumentation that gets added inside a hot loop. Emitting inside a per-row handler rather than a per-request handler multiplies the event count by the row count, and nothing in the API signals that you have done it. The 100-per-invocation cap is the only backstop, and it caps the blast radius at 100x, not at something safe.

The two caps, and what happens at the boundary

Both limits are stated identically on the custom-metrics page and in the @vercel/functions package reference:

  • Up to 50 user-supplied attributes per emission.
  • Up to 100 metric() calls per Vercel Function invocation.

Vercel does not document what happens on the 101st call — whether it throws, drops silently, or truncates. It does document what happens to malformed names: "Metric names, attribute names, and attribute values must be non-empty and shorter than 64 bytes. They can contain ASCII letters (A-Z, a-z), digits (0-9), hyphens (-), shows (_), periods (.), and slashes (/). Unsupported characters are automatically replaced with an show (_). For example, data+summary is stored as data_summary."

That silent substitution is the trap. A metric named checkout+total and a metric named checkout_total become the same series, and no error surfaces. Anyone generating metric names from user input, tenant slugs or feature flags should sanitise before emitting rather than discover the collision in a dashboard.

What Vercel does not publish anywhere we could find: a cap on the number of distinct metric names per project or team, any label-value cardinality limit, and any ingestion rate limit. On a system billed per data point, unbounded cardinality is normally the thing a vendor governs first. Here it is simply unaddressed.

Three documentation gaps to check before you ship

The plan gate is in the changelog only. The changelog states custom metrics are "billed as observability events and available on Pro and Enterprise with Observability Plus." The custom-metrics documentation page contains no plan requirement at all — the strings Pro, Enterprise and Observability Plus do not appear on it. A developer arriving from a search result reads a pricing section that says $1.20 per million events and nothing that says their Hobby team cannot use the feature. Separately, Observability Plus is documented as unavailable during a Pro trial: "Convert to a Paid Pro plan to access it."

Custom metrics are not on the list they are billed against. Every Vercel pricing table renders the billing unit as "$1.20 per 1 million events" with the word events linking to the tracked-events anchor in the Observability docs. That anchor enumerates exactly five items: Edge Requests, Vercel Function Invocations, External API Requests, Routing Middleware Invocations and AI Gateway Requests. Custom metrics are not among them. So the page that defines what a billable event is contradicts the page that says a custom metric data point is one. In practice the custom-metrics page is newer and more specific and is almost certainly correct — but if you are writing a chargeback policy off Vercel's definitions, the definition page has not caught up.

Retention is unstated. The Observability Plus page gives 30 days for Plus data generally and "Hobby: 12 hours, Pro: 1 day, Enterprise: 3 days" for the free tier, and its limitations table has no custom-metrics row. The custom-metrics page never mentions retention. If a metric exists to support a quarterly review, that is a question to answer before the instrumentation ships, not after.

Two more signals worth naming. Custom metrics do not appear in Vercel's own Observability surface inventories — neither the "available insights" table nor the page enumerating every Observability tab lists them, even though the custom-metrics page instructs users to "select the Observability tab, then select Custom Metrics". And the CLI documentation disagrees with itself: the custom-metrics page shows vercel metrics database.duration_ms --filter "plan:pro" and instructs vercel metrics list, while the CLI reference documents an OData filter form, --filter "<dimension> eq '<value>'", and a vercel metrics schema subcommand with no list. One of those pairs is wrong; run the CLI once before writing either into a runbook.

How this compares with what you were probably using instead

Option Billing unit Published rate Cardinality governance
Vercel custom metrics Observability event per data point $1.20 per 1M events None published
Vercel Speed Insights Event $0.65 per 1M events Not applicable
Vercel Observability Plus (built-in) Event $1.20 per 1M events Not applicable

The comparison that matters is not against another Vercel line item, though. It is against shipping an OpenTelemetry exporter to a metrics backend you already run. Custom metrics win on effort — one import, one function call, no collector to operate — and they lose on portability, because the query language, the retention and the alerting all live inside Vercel. Teams already paying for a metrics platform should treat this as convenience instrumentation for function-local signals, not as a replacement for the backend that holds their SLOs. We cover the trade-off in more depth in our observability cost and OpenTelemetry migration work, and the same day-one-adoption question applies to self-hosting Next.js away from the Vercel adapter.

The other two things Vercel shipped on 20 August

The same changelog day carried "Vercel Agent is now available in Slack code channels", described as available "in public beta for Pro and Enterprise teams", and CLI management for the Vercel Container Registry through new vercel vcr commands, with Docker, Podman and Buildah supported.

The Agent item has a cost question of its own. Vercel Agent pricing states: "Vercel Agent charges the underlying provider inference rate with no markup, plus a Vercel Token Rate of $0.25 per million tokens", and that rate "applies to input, output, and cached tokens." The pricing table has one Slack row and no row for code channels, and the Slack documentation for code channels states no billing terms at all — it points readers back to the same pricing page. So a code-channel session is billed under the Slack row by omission rather than by any Vercel statement. Given that a code channel is explicitly a shared surface where "anyone in the channel can follow the work, give Agent new instructions", the question of who can spend from that budget is worth settling in your own team policy, because Vercel's documentation does not settle it. The only other free allowance Vercel publishes for Agent is 10 investigations per billing cycle with Observability Plus.

India-specific considerations

Billing is in US dollars per event, so the effective rupee cost moves with the exchange rate and there is no India-specific rate card. At $1.20 per million events, five metrics per invocation across 10 million monthly invocations is $60, roughly ₹5,200 a month at recent rates — small enough that it will not appear in a cloud-cost review and large enough to grow unnoticed. Under the Digital Personal Data Protection Act 2023, the practical constraint is what goes into the attributes object: attribute values are strings you choose, and putting an email, a phone number or a customer identifier in one turns a metrics pipeline into personal-data processing on a US-hosted platform. Metric attributes should carry categories, not identities. Where an identifier is genuinely required for debugging, keep it in a request-scoped log with its own retention, not in a metric dimension.

What is still unknown

Vercel has not published a retention period for custom metrics, a cardinality or distinct-name cap, an ingestion rate limit, or the behaviour past 100 emissions per invocation. Two of the pages documenting this feature carry a last_updated value of 20 October 2018, which makes the freshness signal on them unusable. And the CLI filter syntax is documented two incompatible ways.

FAQ

How eCorpIT can help

eCorpIT builds instrumentation and cost-control layers for teams running serverless and edge workloads, including metric taxonomy design that keeps cardinality and personal data out of dimensions. We are CMMI Level 5, MSME Certified and ISO 27001:2022 certified, and we design telemetry pipelines aligned with DPDP Act 2023 requirements. If you are deciding between platform-native metrics and a portable OpenTelemetry pipeline, our API integration and modernisation team can scope both. Reach our senior engineering team at /contact-us/.

References

  1. Custom metrics are now supported in Vercel Observability, Vercel changelog, 20 August 2026
  1. Custom Metrics, Vercel documentation
  1. Vercel Functions package API reference
  1. Observability Plus, Vercel documentation
  1. Observability overview and tracked events, Vercel documentation
  1. Vercel pricing
  1. Manage and optimize Observability usage, Vercel documentation
  1. Vercel CLI metrics command reference
  1. Vercel Agent is now available in Slack code channels, Vercel changelog, 20 August 2026
  1. Vercel Agent pricing, Vercel documentation
  1. Vercel Agent in Slack, Vercel documentation
  1. Manage Vercel Container Registry with Vercel CLI, Vercel changelog, 20 August 2026

Last updated: 21 August 2026. All prices, limits and quoted text verified against the primary Vercel pages listed above on that date.

Frequently asked

Quick answers.

01 How much do Vercel custom metrics cost?
Each custom metric data point counts as one Observability event, billed at $1.20 per 1 million events. Vercel's own example puts one metric on each of 1 million function invocations at 1 million events. There is no base fee and no published free allowance of Observability events on any Vercel pricing page.
02 Which plans can use custom metrics?
The changelog states they are available on Pro and Enterprise teams with Observability Plus. The custom-metrics documentation page states no plan requirement at all. Observability Plus is documented as unavailable during a Pro trial, so a trial team must convert to a paid Pro plan first.
03 How many metrics can one function invocation emit?
Up to 100 calls to metric() per Vercel Function invocation, and up to 50 user-supplied attributes per emission. Both limits appear on the custom-metrics page and in the @vercel/functions package reference. Vercel does not document what happens when an invocation exceeds the 100-call ceiling.
04 What characters are allowed in a metric name?
Names, attribute names and attribute values must be non-empty and shorter than 64 bytes, using ASCII letters, digits, hyphens, shows, periods and slashes. Unsupported characters are replaced with an show automatically, so data+summary is stored as data_summary with no error raised.
05 How long does Vercel keep custom metric data?
No retention period for custom metrics is published. Observability Plus documents 30 days for its data generally, and the free tier gets 12 hours on Hobby, 1 day on Pro and 3 days on Enterprise. The Observability Plus limitations table has no custom-metrics row at all.
06 Does Vercel cap metric cardinality?
No cardinality limit, distinct-metric-name cap or ingestion rate limit appears in any Vercel documentation we checked. The only published constraints are 50 attributes per emission and 100 emissions per invocation. On a service billed per data point, unbounded label cardinality is a cost risk you have to govern yourself.
07 What attributes does Vercel add automatically?
Five metadata fields are attached to every custom metric data point without being counted against your attribute budget: deploymentId, requestId, functionRegion, pathType and edgeNetworkRegion. The changelog describes this less precisely as adding attributes "like the source deployment and function region".
08 How is Vercel Agent in Slack code channels billed?
Vercel Agent charges the provider inference rate with no markup, plus a Vercel Token Rate of $0.25 per million tokens applied to input, output and cached tokens. The pricing table has a Slack row but no separate code-channel row, and the code-channel documentation states no billing terms.

About the author

Manu Shukla

Founder & Director

Founder of eCorpIT. Hands-on engineer leading senior-only delivery for AI apps, custom software, and cloud systems for global clients.

Subscribe

One engineering note a week. No fluff, no spam.

Senior-architect playbooks on AI agents, mobile apps, cloud, security, data, and marketing — delivered every Wednesday.

Past the reading

Read enough. Let's build something.

A senior architect responds in 24 working hours with scope, indicative cost, and a timeline. NDA before any technical conversation.