The best Vercel Web Analytics alternative depends on which limit you hit: Cloudflare Web Analytics for free page views and Core Web Vitals on any host, Umami for custom events and funnels on a free plan that allows commercial sites, and Plausible for EU data in a dashboard as plain as Vercel’s. All eight tools below run on any host and go into a Next.js App Router with one script tag or one package, while Vercel Web Analytics only collects on Vercel deployments.
The short answer by reason, as of November 2026:
- Free page views and Core Web Vitals on any host: Cloudflare Web Analytics.
- Custom events and funnels for a commercial site, without paying: Umami Cloud, free to 100K events.
- EU data and the plainest dashboard: Plausible.
- Many client sites at one flat price: Fathom.
- Web vitals, funnels and every visit in one dashboard, kept forever: invisit, the tool we build.
- Product analytics with feature flags and session replay: PostHog, free to 1M events.
- Open source with session replay and error tracking: Rybbit.
- Free at any volume, or you buy Google Ads: Google Analytics 4, behind a cookie banner in the EU and UK.
We checked every price and limit below on the vendors’ own pages and docs on November 3, 2026, type-checked the TypeScript in this post against the current packages, and measured each tracker the same way:
curl -s https://nextjs.org/_vercel/insights/script.js | gzip -9 | wc -cWhy do people look for Vercel Analytics alternatives?
People leave Vercel Web Analytics over six documented limits: it only runs on Vercel, the free plan rules out commercial sites, history is a 1 to 24 month window, events are thin, web vitals are a separate product, and the data is processed in the US. From Vercel’s own pages as of November 2026:
- It only works on Vercel. Collection runs through routes Vercel adds to a deployment,
/_vercel/insights/*and a unique path per project, so a site that moves to another host stops collecting (quickstart). - The free plan is non-commercial. Hobby includes 50,000 events a month, but Vercel’s fair use guidelines restrict it to non-commercial personal use and count ads, selling a product or service, affiliate sites and paid client work as commercial. Pro costs $20 a month per deploying seat, plus $3 per 100K events (pricing).
- History is a window: 1 month of reports on Hobby, 12 on Pro and 24 with the Web Analytics Plus add-on at $10 a month.
- Events are thin. Custom events need Pro and carry 2 properties, or 8 with Plus, with names, keys and values up to 255 characters and no nested objects (custom events). There is no funnel report and no view of a single visit, and UTM breakdowns need Plus (using Web Analytics).
- Web vitals are a second product. Speed Insights has its own package, and its free tier shows only the Real Experience Score, for 10,000 events per team over 30 days. LCP, INP, CLS, FCP and TTFB need Speed Insights Plus at $10 per project a month plus $0.65 per 10,000 events (Speed Insights pricing).
- The data is processed in the US. Vercel’s Data Processing Addendum names the United States as its primary processing location.
Two things Vercel gets right set the bar for a replacement. It sets no cookies, telling visitors apart with a hash of the request that resets daily, and its script measured 2,043 bytes gzipped.
Stay on Vercel Web Analytics if your site is commercial, already on Vercel Pro, and traffic counts with a few events are all you read. It is one toggle and one <Analytics /> component on a bill you already pay, and up to about 6M events a month it costs about the same as or less than the paid tools below (full price comparison).
What to look for in a Vercel Analytics alternative
A good Vercel Analytics alternative keeps the zero-setup feel and fixes the limit that pushed you. Beyond the events, history, vitals and data location in the table below, three points separate the field for Next.js sites:
- Setup. One package or one
<Script>in the root layout, with App Router navigations counted as page views and nousePathname()effect to write. Every tool here does that on its own except two: Fathom’s guide tracks route changes in a client component you write, and GA4 relies on an enhanced measurement setting for browser-history page views. - Cookies. Vercel sets none, and neither do Cloudflare, Umami, Plausible, Fathom, invisit or Rybbit. PostHog and Google Analytics 4 set cookies by default, which in the EU and UK means a consent banner (what the law says).
- Your own domain. Vercel serves its tracker from your domain, yet EasyPrivacy blocks the default
/_vercel/insights/script.jspath anyway (our blocklist test). Plausible, Umami, Rybbit, PostHog and invisit document how to serve their tracker from a neutral path on your domain, throughvercel.jsonrewrites, Next.js rewrites or a proxy file.
Vercel Analytics alternatives compared
The eight alternatives with Vercel Web Analytics as the reference row, as of November 3, 2026:
| Tool | Next.js setup | Free plan | Custom events | Funnels | Web vitals | Data kept | EU data | 1M a month |
|---|---|---|---|---|---|---|---|---|
| Vercel Web Analytics | <Analytics /> from @vercel/analytics/next |
50K events, non-commercial | Pro only: 2 properties, 8 with Plus | No | Separate Speed Insights | 1, 12 or 24 months | No, US | $30 |
| Cloudflare Web Analytics | One <Script> |
No traffic cap | None | No | LCP, INP, CLS | 6 months | No EU-only option | Free |
| Umami Cloud | One <Script> |
100K events, 1 site | Every plan; properties bill as events | Every plan | Five, opt-in | 6 months to 5 years | EU or US region | $20 |
| Plausible | @plausible-analytics/tracker |
No, 30-day trial | Every plan; properties on Business | Business | No | While subscribed | Yes, Germany | $69 to $139 |
| Fathom | fathom-client plus a route tracker |
No, 7-day trial | A name and a value, no properties | No | No | While subscribed | No, stored in the US | $60 |
| invisit | @invisitdev/web |
20K events, 4 sites | Every plan, 32 properties | Every plan | Five, on by default, not billed | Forever | Yes, Germany | $49 |
| PostHog | posthog-js in instrumentation-client.ts |
1M events | Every plan | Every plan | Four, opt-in, billed | 1 year free, 7 years paid | EU or US region | Free |
| Rybbit | One <Script> |
No, 7-day trial | Every plan | Every plan | Yes, billed as events | 3 or 5 years | Yes, Germany, Finland | $69 to $139 |
| Google Analytics 4 | @next/third-parties |
Free at any volume | 25 parameters | Explorations | Only if you send them | Explorations 2 or 14 months | No | Free |
Prices are monthly in each vendor’s own unit, from its cheapest plan to its most complete self-serve plan. Vercel’s includes the $20 Pro platform fee and assumes the $20 usage credit that comes with it goes to analytics. PostHog sends at least two events per page view, so its free 1M events cover about 500,000 page views.
Each entry also prices one reference site: a commercial Next.js app with 300,000 page views and 50,000 custom events a month. On Vercel Pro that is 350,000 events, or $10.50 of usage, which the $20 credit covers if hosting leaves room; with Plus the bill is $30 a month.
1. Cloudflare Web Analytics: best free replacement for page views and Core Web Vitals
Cloudflare Web Analytics is the nearest thing to Vercel’s toggle that works on any host: free with no traffic cap, no cookies, and Core Web Vitals in the same dashboard as page views. It needs a Cloudflare account and one script tag, and your DNS can stay where it is.
Cloudflare beats Vercel on price and vitals: commercial sites are free at any volume (overview), and LCP, INP and CLS come with the traffic, filterable by URL, browser, country and element (Core Web Vitals), which on Vercel takes Speed Insights Plus.
Cloudflare’s limits, from its FAQ: no custom events, no UTM reports, six months of data with only the last 7 days unsampled, and no unique visitors. The beacon measured 10,267 bytes gzipped, five times Vercel’s, ad blockers block it, and Web Analytics sits outside Cloudflare’s EU Customer Metadata Boundary.
In Next.js, add the beacon with next/script in the root layout; App Router navigations are tracked automatically (SPAs). The one-click setup needs the site proxied through Cloudflare, which Vercel recommends against, so use the manual snippet. There is no track() to map, so the reference site’s 50,000 custom events simply stop, and the rest is free.
Choose Cloudflare Web Analytics for a blog, docs site or side project where page views, referrers and speed are all you read, especially one leaving Vercel Hobby because it started to earn money.
2. Umami: best free plan with custom events and funnels
Umami Cloud’s free Hobby plan gives a commercial site what Vercel keeps behind Pro: custom events with properties, funnels and goals, up to 100,000 events a month on one site. Umami is also MIT-licensed open source, with an official guide to running Umami on Vercel on a Postgres database from the Vercel Marketplace.
Umami beats Vercel on depth for the money: funnels, sessions and retention on every plan, Core Web Vitals (LCP, INP, CLS, FCP and TTFB) with data-performance="true" on the script tag (performance), and an EU or US region chosen at signup (FAQ). Its script measured 3,922 bytes gzipped, about twice Vercel’s.
Umami’s limits: each stored event property bills as one more event, so umami.track('signup', { plan: 'pro' }) uses two (pricing). Hobby keeps 6 months for one site with no teammates; Pro is $20 a month for 1M events, 20 sites and 2 years. Names stop at 50 characters (events), and the visitor hash salt rotates monthly by default (metric definitions). Self-hosting it on Vercel Hobby falls under the same non-commercial rule as any other deployment.
In Next.js, Umami is one <Script> with data-website-id in the root layout, and it follows client-side navigation itself (SPA guide). track(name, data) becomes umami.track(name, data), and Umami Cloud imports CSV history by request from Pro (import). With two properties per event, the reference site sends about 450,000 Umami events: Pro at $20 a month.
Choose Umami for a commercial site that needs events and funnels for free, or open source you can deploy next to your app. See Umami vs invisit.
3. Plausible: best for EU data and a dashboard as plain as Vercel’s
Plausible reads most like Vercel Web Analytics, one page of top pages, sources, countries and devices, with the data stored in Germany by an EU company. It is also the one tool here where you can load your Vercel history into the new dashboard yourself.
Plausible beats Vercel on history and data location: data kept while you subscribe, on Hetzner in Falkenstein with EU-owned providers only (EU hosting), plus email and Slack reports and Search Console data. Its CSV import takes any tool’s data in Plausible’s format, every column optional, so daily page views and visitors from Vercel’s API can become an imported_visitors file covering the days before your first Plausible visitor.
Plausible’s limits: no free plan, only a 30-day trial. Custom properties (up to 30 per event), funnels and the Stats API need Business (custom properties). Starter covers one site, and there are no web vitals and no view of a single visit.
In Next.js, the official @plausible-analytics/tracker package starts with init() in a client component and tracks App Router navigations itself. One catch: init() throws if it runs twice, and React Strict Mode runs effects twice in development, so guard it:
'use client'
import { useEffect } from 'react'
import { init } from '@plausible-analytics/tracker'
let started = false
export function Plausible() {
useEffect(() => {
// init() throws on a second call, and Strict Mode runs effects twice in development.
if (started) return
started = true
init({ domain: 'example.com' })
}, [])
return null
}Render <Plausible /> once in app/layout.tsx; outbound links and file downloads stay off until you pass them to init() (npm package). track('Signup', { location: 'footer' }) becomes track('Signup', { props: { location: 'footer' } }), shown once you add it as a goal (custom events). The reference site costs $49 a month on Starter, or $99 on Business with properties and funnels.
Choose Plausible when EU storage and a simple dashboard matter more than event depth. See Plausible vs invisit.
4. Fathom: best for agencies moving client sites off Vercel
Fathom suits an agency: every plan includes at least 50 sites, each client gets a share link with an optional password and expiry, and weekly or monthly email reports go out on their own. Vercel counts paid client work as commercial, so client sites on Hobby need a new home anyway. Fathom’s script is as small as Vercel’s: 2,096 bytes gzipped against 2,043.
Fathom beats Vercel on price simplicity: one plan with every feature from $15 a month for 100,000 pageviews, 50 more sites for $10 a month (sites), full history while you subscribe, and Google Analytics 4 import.
Fathom’s limits: an event carries a name and an optional value, with no properties at all (events), fewer than Vercel’s 2. There are no funnels and no web vitals, one login per account (shared dashboards), and analytics are stored in the US (data isolation). Custom domains ended in March 2023, and the 7-day trial needs a card.
In Next.js, Fathom’s guide uses the community fathom-client package and a client component that calls trackPageview() whenever usePathname() or useSearchParams() changes: the most code of any tool here. track('Purchase', { price: 49.99 }) becomes trackEvent('Purchase', { _value: 4999 }), in cents, and other properties are dropped. The reference site costs $45 a month on the 500,000 tier.
Choose Fathom for many small client sites with reports to send. See Fathom vs invisit.
5. invisit: best for web vitals, funnels and every visit in one dashboard
invisit, the tool we build, puts what Vercel spreads across plans and products into one dashboard: web vitals from real visitors, funnels, custom events with up to 32 properties, and each visit step by step, kept forever on every plan, free included.
invisit beats Vercel on depth per plan: the five vitals are recorded by default and never billed, funnels take 2 to 8 steps from pages or events (funnels), and identify(user.id) attaches a hash of your own user id. Heatmaps, referrals from 19 AI assistants and payments from Stripe, Paddle and four more providers sit beside traffic. Data is stored in Falkenstein, Germany, and the free plan allows commercial sites: 20,000 events a month, 4 sites, unlimited team members.
invisit’s limits: no self-hosting, and no session recordings, retention cohorts, A/B tests or feature flags, so a Vercel Flags variant split has no equivalent. Revenue is charted beside traffic, not attributed to sources or campaigns. The core script is about 8.5 KB gzipped, about four times Vercel’s, and invisit imports no history, so your Vercel export stays your archive. Cloudflare, a US company, sits in front for DNS and CDN, and crawler reads need @invisitdev/server on your server, where Vercel’s AI Traffic tab needs no code.
In Next.js, @invisitdev/web starts from a client component in the root layout (frameworks), and @invisitdev/server in proxy.ts serves it from /_i on your domain (proxy); our Next.js guide covers signups, payments and funnels end to end.
track(name, props) keeps Vercel’s shape, with names of 1 to 64 characters from A-Z a-z 0-9 _ . : -, and calls from @vercel/analytics/server move to server-side events. The reference site needs the 1M plan at $49 a month; automatic outbound-link and download events count toward it.
Choose invisit when you want vitals, funnels and visit timelines without stitching products together, and data that never ages out. See Vercel Web Analytics vs invisit.
6. PostHog: best for product analytics with flags, experiments and replay
PostHog is the alternative for a product team: funnels, retention, session replay, feature flags, A/B tests and surveys on one event stream, free up to 1 million events a month. If you split analytics by Vercel Flags today, PostHog’s own flags and experiments cover both jobs.
PostHog beats Vercel on depth for nothing: web vitals (LCP, INP, CLS and FCP) once enabled (web vitals), an EU Cloud in Frankfurt (data storage), a free managed reverse proxy, unlimited team members, and 1 year of data free or 7 years on paid plans.
PostHog’s limits: posthog-js sets a first-party cookie for 365 days and uses localStorage by default, and cookieless mode is opt-in, in code and in project settings (persistence). Without it, EU and UK visitors need a banner. The script measured 118,629 bytes gzipped, about 58 times Vercel’s. Every page view costs at least two events, and autocaptured clicks and web vitals are billed as events too.
In Next.js, PostHog initializes posthog-js in instrumentation-client.ts, or npx @posthog/wizard writes the setup (Next.js docs). track(name, data) becomes posthog.capture(name, props), and PostHog imports history from Mixpanel and Amplitude, not Vercel (migrate). The reference site sends about 650,000 events before autocaptured clicks, inside the free 1M; 1M page views, about 2M events, cost about $50 a month.
Choose PostHog when analytics is one part of a product toolkit. See PostHog vs invisit.
7. Rybbit: best open-source pick with session replay and error tracking
Rybbit is cookieless, AGPL-3.0 open source and self-hostable with Docker, and its cheapest plan, Standard, includes funnels, journeys, retention, user profiles, error tracking and web vitals, with session replay on Pro (pricing).
Rybbit beats Vercel on product depth from $19 a month, with 3 years of data on Standard and 5 on Pro, hosting on Hetzner in Germany and Finland (subprocessors), and feature flags of its own.
Rybbit’s limits: no free plan, only a 7-day trial. Rybbit bills page views, custom events, web vitals, outbound clicks and autocaptured clicks, copies and form events, and an organization over its limit stops collecting until the next month or an upgrade (billing). The visitor ID is a hash of IP address and user agent that persists across days unless you turn on User ID Salting (site settings), and identify() keeps the user id in localStorage. The script measured 11,763 bytes gzipped, nearly six times Vercel’s.
In Next.js, Rybbit is one <Script> with ?siteId= in its URL, and client-side navigation is tracked automatically (Next.js guide). track(name, data) becomes window.rybbit.event(name, props), a flat object of at most 2,048 characters as JSON (events), and Rybbit imports history from Plausible, Umami and Simple Analytics, not Vercel. The reference site costs $49 a month on Standard at 500,000 events, or $69 once billed vitals and autocaptured clicks push it past that.
Choose Rybbit for replays and error tracking next to cookieless traffic, hosted or on your own server.
8. Google Analytics 4: best free option at any volume, or with Google Ads
Google Analytics 4 is free at any volume and goes far deeper than Vercel, with explorations, funnels, cohorts, audiences and Google Ads conversions. The price is cookies: GA4 sets _ga cookies for two years (cookie usage), so EU and UK visitors need a consent banner that Vercel’s cookieless setup never asked for.
GA4 beats Vercel on depth for nothing: Google Ads and Search Console links, BigQuery export, an AI Assistant channel since May 2026, and up to 25 parameters per event (limits).
GA4’s limits: gtag.js measured 155,001 bytes gzipped, about 76 times Vercel’s. Explorations keep event-level data for 2 or 14 months (data retention), event names stop at 40 characters and parameter values at 100, there is no EU storage option, and web vitals appear only if you send them as events.
In Next.js, @next/third-parties/google adds <GoogleAnalytics gaId="G-XYZ" /> to the root layout and sendGAEvent() for events, though Next.js still calls the library experimental (Next.js docs). track('Signup', { location: 'footer' }) becomes sendGAEvent('event', 'sign_up', { location: 'footer' }), GA4 imports no history, and the reference site is free.
Choose GA4 when you buy Google Ads or need its depth for free, and already run a consent banner. See GA4 vs invisit.
How do you replace Vercel’s track() calls?
Replace track() from @vercel/analytics with the new tool’s call, rename events to its rules, and keep properties within its limit. Most tools take the same name-plus-object shape; what changes is how many properties survive and what a name may contain. As of November 2026:
| Tool | Instead of track('Signup', { plan: 'pro' }) |
Properties per event | Names |
|---|---|---|---|
| Vercel Web Analytics | track() from @vercel/analytics |
2 on Pro, 8 with Plus | Up to 255 characters |
| Cloudflare | No custom events | None | None |
| Umami | umami.track('signup', { plan: 'pro' }) |
No documented cap; each bills as an event | Up to 50 characters |
| Plausible | track('Signup', { props: { plan: 'pro' } }) |
Up to 30, Business plan | Shown once added as a goal |
| Fathom | trackEvent('Signup'), with { _value } in cents |
None | No documented limit |
| invisit | track('signup', { plan: 'pro' }) |
Up to 32 | 1 to 64 characters, A-Z a-z 0-9 _ . : - |
| PostHog | posthog.capture('signup', { plan: 'pro' }) |
No documented cap | No documented limit |
| Rybbit | window.rybbit.event('signup', { plan: 'pro' }) |
Flat object up to 2,048 characters as JSON | Up to 256 characters |
| Google Analytics 4 | sendGAEvent('event', 'sign_up', { plan: 'pro' }) |
25 parameters, values up to 100 characters | Up to 40 characters |
Vercel’s third track() argument, flags, has no equivalent outside PostHog and Rybbit, which run feature flags of their own; elsewhere, send the variant as a property.
While both tools run, send every event through one function, so switching Vercel off is a one-line change:
import { track as vercelTrack } from '@vercel/analytics'
import { track as newTrack } from '@invisitdev/web' // or your new tool's call
type Props = Record<string, string | number | boolean | null>
// Vercel takes any name up to 255 characters; most tools want short snake_case names.
const rename = (name: string) =>
name
.trim()
.toLowerCase()
.replace(/[^a-z0-9]+/g, '_')
.replace(/^_+|_+$/g, '')
// Components call this while both tools run. When Vercel is switched off,
// delete the vercelTrack line and the @vercel/analytics package.
export function track(name: string, props?: Props) {
vercelTrack(name, props)
newTrack(rename(name), props)
}Swap the second import for your new tool’s call, such as umami.track or posthog.capture, or wrap the properties in { props } for Plausible. Server-side calls from @vercel/analytics/server move to the new tool’s server API, such as @invisitdev/server or Plausible’s Events API.
When should you stay on Vercel Web Analytics?
Stay when your site is commercial, already on Vercel Pro, and none of the limits above has cost you anything. Four things have no exact match in the alternatives:
- One toggle, one bill and no new vendor. Events cost $3 per 100K, so a Pro team pays about the same as or less than most paid tools here up to about 6M events a month.
- Vercel Flags annotates page views and events with flag values, in beta.
- The AI Traffic tab in Vercel Observability counts AI crawler and assistant fetches at the edge, with no code.
- The smallest tracker in this list: 2,043 bytes gzipped.
If web vitals are your only gap, keep Vercel for traffic and add Cloudflare Web Analytics for free Core Web Vitals instead of paying for Speed Insights Plus.
How do you switch from Vercel Web Analytics without losing data?
Export first, run the new tool next to Vercel for two to four weeks, then remove <Analytics /> and disable Web Analytics in the project so events stop being billed. Vercel documents no raw export of past events, so what you export now is all you keep. Plausible’s CSV import, and Umami Cloud’s import service on Pro, are the only ways here to load it into a new dashboard.
- Export while your reporting window lasts. Each dashboard panel exports up to 250 rows as CSV (export). The Web Analytics API returns aggregated page views and visitors, grouped by up to two dimensions, for any range inside your plan’s window (reference):
# Monthly page views and visitors for the last 12 months, the Pro window.
curl --get "https://api.vercel.com/v1/query/web-analytics/visits/aggregate" \
-H "Authorization: Bearer $VERCEL_TOKEN" \
--data-urlencode "teamId=$VERCEL_TEAM_ID" \
--data-urlencode "projectId=$VERCEL_PROJECT_ID" \
--data-urlencode "since=2025-11-04" \
--data-urlencode "until=2026-11-03" \
--data-urlencode "by=month" \
--data-urlencode "limit=100" \
-o vercel-months.json
# The 100 most viewed paths over the same window.
curl --get "https://api.vercel.com/v1/query/web-analytics/visits/aggregate" \
-H "Authorization: Bearer $VERCEL_TOKEN" \
--data-urlencode "teamId=$VERCEL_TEAM_ID" \
--data-urlencode "projectId=$VERCEL_PROJECT_ID" \
--data-urlencode "since=2025-11-04" \
--data-urlencode "until=2026-11-03" \
--data-urlencode "by=requestPath" \
--data-urlencode "limit=100" \
-o vercel-paths.jsonGrouped queries return at most 100 rows and fold the rest into Others, so query one month at a time with by=day when you need daily rows. Swap by for referrerHostname, country or utmCampaign, and query events/aggregate with by=eventData/plan for custom events. For Plausible, turn each month’s daily rows into its import format:
jq -r '"date,visitors,pageviews", (.data[] | "\(.timestamp[0:10]),\(.visitors),\(.pageviews)")' \
vercel-days-2026-10.json > imported_visitors_20261001_20261031.csv- Add a Drain only if you want raw events during the overlap. Drains stream page views and custom events to your own endpoint from the day you create one, on Pro or Enterprise at $0.50 per GB, so they cannot recover the past.
- Install the new tool next to
<Analytics />; both run on the same pages. Point preview deployments at a second site, since Vercel sets each variable per environment (environment variables). - Route every
track()call through one function, as above, and rebuild each event as a goal or conversion in the new tool. - Compare the two for two to four weeks on page views per path, not visitors. Each tool counts visitors its own way (Vercel and invisit with a daily hash, Umami with a monthly salt, Cloudflare not at all), ad blockers block different paths, and bot filters differ.
- Remove
<Analytics />and@vercel/analytics, then choose Disable Web Analytics from the menu on the project’s Analytics page, so events stop being collected and billed (disabling). If the new tool records web vitals, remove<SpeedInsights />too and choose Turn off Speed Insights Plus on the Speed Insights page (Speed Insights).
Checklist before you turn off Vercel Web Analytics
- Monthly totals, top paths, referrers and custom events are exported from the API or as CSV.
- Daily rows are in Plausible’s CSV format, if Plausible is the destination.
- The new tool runs next to
<Analytics />, with previews reporting to a separate site. - Every
track()call goes through one function, with names and property counts inside the new tool’s limits. - Both tools have run side by side for two to four weeks.
- Web vitals have a new home before
<SpeedInsights />goes. -
@vercel/analyticsis removed, and Disable Web Analytics is chosen in every project that used it.
