Pulse records the 14 seconds before every error: clicks, network calls, console output, redux state. Open the session, scrub the timeline, ship the fix in one sitting.
Sessions, breadcrumbs, errors, performance, and the network waterfall — all stitched to the same timeline. No tab-hopping.
Stacked by issue, colored by severity. Hover any cell for the impacted session count and top-3 user agents.
Sourcemaps uploaded at build time, with retention until you delete the release.
// CheckoutConfirm.tsx · line 142 async function handleRefund(orderId) { const client = useStripeClient(); → await client.refund(orderId); // undefined here toast("Refund queued"); }
console.log, console.warn, console.error, with the originating React component.
We cluster by stack frame, browser, and user cohort so the same bug doesn't page you twice.
Rules: spike rate, new-in-release, customer-tier impact, and a regex on the error message. Send to Slack on noisy, PagerDuty on revenue-impacting.
Replays are stitched to errors, breadcrumbs, network calls, and your Redux/Zustand state. You can scrub to any tick and see what the DOM, the network, and the store all looked like together.
Sessions include errors, breadcrumbs, console, network, performance, and the replay video. No tiered features hiding behind add-ons.
For one-person projects and side hustles.
For teams chasing real customer impact.
For regulated industries and 500-engineer orgs.
"MTTR went from 4 hours to 14 minutes. The replay tells me what the user did before I ask them, and our support load on bug-reports dropped 38%."
"We replaced two error trackers and a session-replay vendor with Pulse. SDK is 9.2KB, doesn't move our LCP, and the masking story is the cleanest I've seen."
"The issue grouping just works. 12,408 errors landed last week and they collapsed into 38 tickets, with a clear top-1 that we fixed in two hours."
Have a privacy question we haven't covered? Email [email protected] and we'll write back within a working day.
Three layers. (1) Inputs with type="password", autocomplete="cc-*", and any element tagged data-private are replaced with grey blocks before they leave the browser. (2) Heuristic regexes for emails, IPs, and 16-digit numbers run in the SDK. (3) A server-side scan re-checks every event against a customizable allow-list before persistence.
Solo: 30 days. Team: 90 days. Org: configurable up to 14 months. Replays are stored as JSON event streams, not video — about 18KB per session second on a typical SPA. You can pin specific sessions to "permanent" if they're attached to a customer report.
Yes — @pulse-io/react-native records component tree snapshots, gestures, and network calls. We currently support RN 0.72+ on iOS 15+ and Android 9+. Replay rendering happens server-side because RN doesn't ship a browser DOM; the result plays back as an interactive timeline rather than pixel-for-pixel video.
The base SDK is 9.2 KB gzipped and loads after the page is interactive. Replay capture is a 14 KB chunk fetched lazily after first input or after 8 seconds, whichever comes first. We have a strict zero-blocking-resource policy: nothing we ship can show up on your LCP critical path.
On the Team plan you can stream events to a customer-owned S3 bucket via signed PUTs. On Org you can configure us to write directly and never persist on our side. Schemas are stable and documented at pulse.io/docs/export.
5,000 sessions a month, forever free. Add the SDK and the first replay lands in your inbox within a minute.