Same job, describe traffic. Different collection, different ownership of the rows, different depth per session.
Read these as mechanical differences, not defects. Each one decides what a report can show afterwards.
A client-side tag. In most setups a cookie or device identifier keeps a user together across hits.
A first-party request from your domain, cookie-free. Nothing is written to the visitor's device.
Reporting can apply thresholding and modelling, so a report may differ from the events you sent.
Reports read the stored events. Sampling applies to replay capture, not to page and event counts.
Raw event rows are not the primary product. Export is a separate pipeline with its own limits.
Events land in a queryable store. The same rows feed the dashboards, the SQL layer and the raw export.
Session detail arrives as aggregates, not as a timeline you can open and step through.
A session opens as a timeline, with replay and the errors that fired inside it.
Three gaps are worth naming before a migration, not after one.
If those three carry your reporting, stay where you are. A migration is worth it only when the mechanism you gain is the one you were missing.
Compare the mechanism, then decide on your own numbers.
Get Started →