Analytics for Remix

Product analytics for Remix

Remix moves work to the server, which is exactly why the browser side goes unmeasured. Add page views, events, replay, and heatmaps in one place.

Why it matters

What Remix teams can finally see

Server-side work leaves no client trail

Loaders and actions run where no analytics tag can see them. Tracking in the browser records what the person did, not just what the server was asked for.

Failed submissions look like nothing

A validation error returned from an action ends the journey quietly. Replay shows the field the user could not get past and the message they were shown.

Prefetching inflates your numbers

Remix prefetches routes on hover, so server-log analytics count pages nobody opened. Client-side page views only fire when a route is actually shown.

Setup

Add PulsePanda to Remix

Put the tag in the root route's document shell, next to Meta and Links, so it loads once for the whole app.

app/root.tsx

// app/root.tsx import { Links, Meta, Outlet, Scripts } from '@remix-run/react'; export default function App() { return ( <html lang="en"> <head> <Meta /> <Links /> <script src="https://pulsepanda.dev/sdk.js" data-project="YOUR_PROJECT_ID" defer /> </head> <body> <Outlet /> <Scripts /> </body> </html> ); }

Remix navigates client-side after the first load, and the SDK follows those transitions on its own — no useEffect in each route.

Workflow

From install to insight

1

Install the snippet

Add the script once to app/root.tsx and every nested route is covered.

2

Track what matters

Call pulsepanda.track() on key actions and pulsepanda.identify() after login to connect events, sessions, and feedback to each user.

3

Act on the data

Build funnels, watch the replays behind drop-offs, read heatmaps, and collect in-product feedback — all in one workspace.

What you get

One snippet, the full picture

One snippet, the full picture
Analytics layerPage views, custom events, conversion funnels, and retention.
Behavior layerSession replay, click and scroll heatmaps, and error context.
Feedback layerIn-product surveys, feedback widgets, forms, and a feature voting board.

FAQ

Remix questions

Where exactly does the script go in Remix?

In app/root.tsx, inside the head of the document component. That file wraps every route, so one tag covers the entire app.

Does it track nested route changes?

Yes. Page views follow the URL, so a nested route that changes the address bar is recorded like any other navigation.

Can I track a form submission from an action?

Track it in the browser rather than the action: call track() when the submission succeeds, so the event stays attached to the session and its replay.

Related pages

Explore more

Add analytics to your Remix app

Install once and connect analytics, session replay, heatmaps, funnels, and feedback in minutes.

Start for free