Is Mixpanel good for website analytics?
Mixpanel can measure a website, but it is built for product analytics: events tied to user profiles, studied in Insights, Funnels, Retention and Flows reports. invisit is web analytics: pages, sources, conversions and revenue for a site, without cookies and without asking visitors who they are.
Mixpanel’s own introduction rests on three concepts: events, users and properties. Its JavaScript docs have you call identify() at sign-up and log-in so events join a profile, and the platform adds cohorts, B2B group analytics, experiments, feature flags and mobile SDKs. Web analytics is one board template among many.
invisit starts from the site. It reports pages, referrers and campaigns, AI assistant referrals, crawler reads, web vitals and revenue read from your payment provider, with funnels and a step-by-step record of every visit. identify(user.id) attaches a hashed id of your own to visits, but there are no retention cohorts.
Pick by the question you ask most often. “Which signed-in users came back in week four” is a Mixpanel question. “Where did today’s signups come from, and what did they pay” is an invisit one.
How much does Mixpanel cost after the free 1M events?
Mixpanel is free up to 1M events a month, and its Growth plan charges for every event beyond that: $259 a month at 2M and $1,176 at 10M on monthly billing, as of November 2026. invisit costs $49 at 1M and $199 at 10M, so Mixpanel costs less up to roughly 1.35M events a month and invisit costs less above that.
Mixpanel counts events across all your projects: page views ($mp_web_page_view), custom events, warehouse rows, and every autocaptured click, input, submit and scroll checkpoint. Identity calls, opt-ins, replay checkpoints and profile updates are not counted, per Mixpanel’s billing docs. invisit bills page views, custom events, conversions and short-link clicks, and never bills bots, crawler reads, web vitals or engagement pings.
| Events a month | Mixpanel Growth, monthly | Mixpanel Growth, yearly (per month) | invisit, monthly |
|---|---|---|---|
| 300K | $0 | Not offered | $49 |
| 2M | $259 | $185 | $99 |
| 5M | $613 | $438 | $199 |
| 10M | $1,176 | $840 | $199 |
| 20M | $2,289 | $1,635 | Contact us |
A worked example: a SaaS with 300K page views a month pays nothing on Mixpanel and $49 on invisit, as long as Mixpanel records only page views. Mixpanel’s JavaScript install example turns autocapture on, which adds scroll checkpoints at 25, 50, 75 and 100% plus clicks. At three extra events per page view the site sends 1.2M events, and the 200K above the free million cost $56 on a monthly Growth plan at the $0.00028 overage rate. A Free plan in that month stops answering queries until you upgrade.
| On Mixpanel | Free | Growth |
|---|---|---|
| Events | 1M, then queries pause | First 1M free, up to 20M |
| Saved reports | 5 per seat | Unlimited |
| Saved cohorts | No | Unlimited |
| Alerts | No | 5 per project |
| Warehouse connectors, Query API | No | Yes |
| Group Analytics, Data Pipelines | No | Paid add-ons, +40% and +20% |
Yearly billing on Mixpanel’s pricing page saves about 29%, and above 20M events Enterprise is quoted. An invisit year costs nine months’ price, and every paid plan has every feature.
Does Mixpanel need a cookie banner?
Mixpanel’s JavaScript SDK sets a first-party cookie by default, so on EU and UK sites it usually sits behind a consent banner; Mixpanel’s privacy docs leave compliance to you as data controller and say consent is typically needed. invisit sets no cookies and stores no device identifier, which is why its analytics need no banner.
The Mixpanel cookie holds a distinct ID, super properties and the first referrer for 365 days, across subdomains. Mixpanel documents three ways to change that:
opt_out_tracking_by_default: true, thenopt_in_tracking()once a visitor accepts.persistence: 'localStorage', which Mixpanel recommends for reliability. It is still storage on the device.disable_persistence: true, which stores nothing and, in Mixpanel’s words, turns off super properties and the link from anonymous to identified users.
Mixpanel does honour Do Not Track by default. invisit leaves both Do Not Track and Global Privacy Control to you (respectGpc and respectDnt), tells visitors apart with a hash that rotates every day, never stores raw IP addresses, and offers requireConsent for a policy that wants consent anyway (privacy guide).
Where does Mixpanel store data, and can it stay in the EU?
Mixpanel stores data in the US on Google Cloud by default, and offers EU Data Residency on every plan if you choose it when you create a project. invisit stores every site’s data in Falkenstein, Germany, on Hetzner.
Mixpanel’s EU residency docs add two conditions. The SDK must send to api-eu.mixpanel.com through api_host, or events are dropped. A project created in the wrong region cannot be moved: you create a new EU project and migrate the data yourself, without help from Mixpanel.
invisit has no region to pick. Cloudflare, a US company, runs DNS and the CDN in front of it, and the DPA is at /legal/dpa.
How big is the Mixpanel JavaScript SDK?
Mixpanel’s CDN build is about 33 KB gzipped, and session replay loads a recorder of about 105 KB more. invisit’s core script is about 8.5 KB gzipped, and its heatmap, feedback and interaction modules load only when used.
| Script, measured 3 November 2026 | Gzipped |
|---|---|
Mixpanel mixpanel-2-latest.min.js (2.84.0) |
33.5 KB |
| Mixpanel session recorder, loaded when replay is on | 104.6 KB |
invisit invisit.js |
About 8.5 KB |
The install example in Mixpanel’s JavaScript docs sets record_sessions_percent: 100, so a copied snippet records every session and loads both Mixpanel files.
Mixpanel session replay and heatmaps: what each plan includes
Mixpanel includes session replay on every plan: 10K replays a month on Free and 20K on Growth, which a paid add-on raises to 500K, each kept 30 days. Its heatmaps, click maps and scroll maps are built from those recordings. invisit has heatmaps of clicks and scroll depth, overlaid on your real pages, and no session recordings.
Mixpanel’s heatmap docs say heatmaps need Session Replay on and only see recorded sessions, so a heatmap covers the share of sessions you sample. Clicks sent with record_heatmap_data are free while a recording runs, and so are page views sent during one. Clicks from autocapture are billable.
Once the free replay allowance is used, new replays cannot be viewed until you upgrade, per Mixpanel’s replay docs. If you debug by watching what one user did, Mixpanel covers it and invisit does not.
When Mixpanel is the better choice
Mixpanel is the better pick over invisit when your questions are about signed-in users inside a product, not visitors to a site. In particular:
- Retention and paths: retention reports on every plan, saved cohorts from Growth, and Flows for the routes users take.
- Apps as well as web: SDKs for iOS, Android, React Native, Flutter and Unity, with autocapture on mobile.
- Session replay, experiments and feature flags in one tool, each with a free allowance.
- B2B accounts: Group Analytics, a paid add-on, reports at company level.
- Warehouse-first teams: connectors sync from Snowflake, BigQuery, Databricks, Redshift and Postgres.
- Low volume: up to 1M events a month free, with unlimited seats. Startups under five years old with up to $8M raised can get the first year free.
- History: Mixpanel documents imports from GA4 through BigQuery and from Amplitude, with a free migration service under 15M events. invisit cannot import history.
- Enterprise controls: SAML SSO and SCIM on Growth, HIPAA tooling with a BAA on Enterprise.
Switching from Mixpanel to invisit
Moving from Mixpanel to invisit is a short code change plus a few weeks of running both. invisit cannot import Mixpanel history, so export it first.
- Export your history. Mixpanel’s Raw Event Export API returns every event as JSON lines on any plan, Free included, at up to 60 queries an hour; the Engage API returns user profiles. Mixpanel deletes events after 2 years (5 for some older projects), so export first. Export All Your Data has a script.
- Install invisit next to Mixpanel with the script tag or npm package.
- Map the calls. invisit event names use letters, digits and
_ . : -, soSigned Upbecomessigned_up, with up to 32 properties per event (events guide).
// Mixpanel
mixpanel.init('YOUR_PROJECT_TOKEN', { track_pageview: true })
mixpanel.track('Signed Up', { plan: 'pro' })
mixpanel.identify(user.id)
// invisit
import { identify, init, track } from '@invisitdev/web'
init({ site: '<site id>' })
track('signed_up', { plan: 'pro' })
identify(user.id)| Mixpanel | invisit |
|---|---|
track_pageview or autocaptured page views |
Counted by the tracker, no call needed |
mixpanel.identify(id) |
identify(id), stored hashed (identify) |
opt_out_tracking_by_default |
requireConsent, only if your policy asks for it |
| Purchase events with a price property | Connect your payment provider |
- Run both for two to four weeks and compare. Visitor counts will differ: Mixpanel counts a cookie ID that lasts up to a year, invisit a hash that rotates daily.
- Remove the Mixpanel snippet. If your consent banner existed only for Mixpanel, review whether your site still needs it.