Web analytics that tells you what broke, and why.
OnProd reads your session replays, finds what went wrong for visitors, and uses AI to explain why, with the replay moments that show it. Session replay, error tracking and analytics in one script.
Signed-out visitors who click Browse Marketplace come straight back 24% of the time, against 3% after other clicks on this page. In every replay Listings shows an empty state.
Show public listings to signed-out visitors, or tell them Listings needs them to sign in.
One script for any site that can add a tag to its head, from WordPress to single-page apps
Most analytics tools hand you charts and leave the digging to you. OnProd opens on a short list of what went wrong, how many visitors it reached and the likely cause, so you can go straight to the fix.
No searching, filtering or report building. As soon as a new error, failed request or on-screen message reaches a visitor with a replay, the AI reads the evidence and writes what happened, up to 3 likely causes and one fix, then looks again once 3 visitors have met it. It shows up at the top of your Overview and Issues pages.
Visitors who add a photo larger than 10 MB see the upload spinner stop with nothing on screen. The upload request fails with 413, and the listing is saved without its photos.
The upload server rejects files over 10 MB, and the page doesn’t handle the error.
Resize photos in the browser before upload, and show an error when an upload fails.
The number of sessions with this issue should fall.
Each cause cites the replay moments it rests on, and every citation is checked before the Insight is shown.
The AI can’t add numbers of its own, and confidence is never above medium under 10 sessions.
When the replays don’t show a cause, the issue stays visible, with a next step to find it.
Every Insight shows its exact evidence. It never contains session or user IDs, IP addresses or locations.
AI Insights start working as soon as your site has issues, and each site can turn them off. They use Claude Opus 5.5, through the Anthropic API or Amazon Bedrock.
When a session ends, its replay is read for error messages and not-found pages. Everything is grouped into issues by message, request or element, and ranked by sessions affected, severity and how recent it is.
Error banners, alerts, field errors and not-found pages, read from the replay once they’ve been on screen for half a second. Your code doesn’t need to log anything. Messages that read as normal validation, like “Invalid email or password”, go to Low signal.
JavaScript errors and unhandled rejections with their stack, and failed fetch and XMLHttpRequest calls (axios too) with method, status and timing.
Rage clicks: 3 clicks within a second in the same spot. Dead clicks: a click on a link or button after which nothing on the page changes for 3 seconds.
A visitor clicks a link, reaches the next page, and comes back or leaves the site within 10 seconds. Counted per link over 28 days of human traffic, split by signed-in and signed-out visitors.
A visitor submits a form 3 or more times without reaching another page, or submits and never leaves. A form becomes an issue once 5 or more sessions, and at least a quarter of the people submitting it, struggle.
When people land on a missing page from outside your site, the not-found issue shows where they came from: the top UTM source or referring site.
Mark an issue resolved and it comes back as Regressed, with the release it returned in. Issues of the same kind that mostly hit the same sessions are grouped into one row, so one bug isn’t three.
Replays skip the idle stretches and mark errors, failed requests, rage clicks and dead clicks on the timeline. The activity list beside the player shows every page view, click, form submit, error and on-screen message. Open a replay from an issue and it starts at the problem.
Every session is scored on signals such as a webdriver flag, a headless screen size, a crawler user agent and whether a pointer ever moved. Likely bots and bots are Filtered out of reports, and so is your own team once you list your hosts or mark staff. Each session shows its tier and the reasons, and you can change it.
Privacy rules for each region are built in, and you choose how strict they are. Turn on rules by location and visitors in the EU, UK, Switzerland and Quebec are only counted, with no replay, until they consent.
Counted only means page views and scroll depth: no replay, clicks, errors or visitor IDs, and nothing stored in the browser. Your consent banner calls grantConsent() to record in full.
Your data, and your visitors’ data, are used to run your dashboard and are never sold. Read the privacy policy.
Input values are masked before anything leaves the page. Add data-at-mask to hide an element’s text or data-at-block to leave it out. Tokens, emails and passwords in URLs are redacted in the browser too.
Visitor IP addresses are used to look up country and network. They aren’t saved with events or sessions.
The AI gets page outlines and short timelines, never session or user IDs, IP addresses or locations. Page text you haven’t masked can be included. [Cited statement: Anthropic’s and AWS Bedrock’s terms on training, with links.]
Export or delete everything tied to a signed-in user, and set how long data is kept for each site.
Location rules come from c15t’s open-source privacy rule set, checked for updates at least every six months.
Replay, issues and analytics share one set of sessions, so every chart opens the replays behind it.
No heatmaps, source-map stack traces, email or Slack alerts, native mobile SDK, or SAML single sign-on yet. [Dates or roadmap link]
No build step and no tag manager. Errors show up as issues while you’re still on the page.
Two tags in your site’s head with your project ID and ingest key, or install the npm package.
JavaScript errors and failed requests become issues as they arrive. On-screen messages are found once a session has been idle for 30 minutes. Browser-extension errors, cancelled requests and expected validation messages go to Low signal.
AI Insights explain your top issues as they appear. Mark an issue resolved; if it happens again it comes back as Regressed, with the release it returned in.
1<script src="https://app.onprod.app/sdk.js"></script>
2<script>
3 OnProd.init({
4 projectId: "[your project]",
5 endpoint: "https://app.onprod.app",
6 apiKey: "[your ingest key]",
7 release: "[your build id]", // optional
8 });
9</script>
Every plan has replay, issues, on-screen errors, analytics, privacy rules and AI Insights. Prices in Australian dollars, with no GST charged. A session is one visit; bot sessions don’t count. Try Growth free for 14 days, no card needed.
For one site getting started
A$69a month
Start free trialFor busy sites and product teams
A$249a month
Start free trialFor high-traffic sites
A$690a month
Talk to us300,000 sessions a month shared across up to 25 client sites, each with its own keys and settings. 1,500 AI Insights a month and 25 seats. Per-client logins are planned.
Yearly billing, plan limits and billing questions: compare plans.
Claude Opus 5.5 from Anthropic. You choose whether it runs through the Anthropic API or Amazon Bedrock [confirm the Bedrock model]. The AI only sees the evidence for the issue it is explaining.
The evidence for one issue: up to 5 affected sessions and up to 2 that went fine, the 30 seconds around the problem in each, an outline of the page, the device type, the browser and its major version, whether the visitor was signed in, and the issue’s counts. Never session or user IDs, IP addresses, locations, network names, full user agents or form values. Page text you haven’t masked can be included. “What the AI saw” shows the exact evidence for every Insight.
AI Insights are on for each site unless you turn them off in its settings. Every hour, the top 10 issues that reached 3 or more visitors with a replay are queued for review, and up to 3 new issues a day get a first look from the first visitors who met them: one for an error, failed request or on-screen message, two for rage clicks, dead clicks and other failed responses. Each review uses one of the AI Insights in your plan, and once the month’s are used, new reviews wait for the next billing period; first looks use at most half of them. A site also gets at most [15] a day, or [20] in the 72 hours after a new release. An issue is reviewed again if it doubles after a week, comes back after you resolve it, or reaches 3 visitors after a first look. If nobody has opened the dashboard for 7 days, the AI reviews at most one urgent issue a day.
[Confirmed statement with links to the provider terms.]
Yes. Input values are masked by default. data-at-mask replaces an element’s text with asterisks, data-at-block leaves it out (it shows as an empty box), and maskAllText: true masks all text. Masking covers text, not attributes such as title, alt or aria-label, so block elements whose attributes hold personal data.
Yes. Route changes through the History API, which React Router, Vue Router, Next.js and most routers use, are recorded as page views and in the replay.
One visit. A session ends after 30 minutes without activity. A visitor who is only counted under your privacy settings stores nothing in the browser, so each of their page loads is its own session.
Each session is scored from signals like a crawler user agent, a webdriver flag, an 800x600 headless screen, no pointer movement and a single page load with no clicks. 4 to 5 points is Likely bot, 6 or more is Bot, and both are Filtered out. Playwright, Cypress and Selenium runs are caught the same way. You can mark any session as human.
No. Your data, and your visitors’ data, are used to run your dashboard and are never sold. Read the privacy policy.
Yes. With privacy rules by location on, visitors in the EU, EEA, UK, Switzerland and Quebec are only counted, with no replay, until they consent, and in US privacy-law states a browser that sends Global Privacy Control is treated the same. Inputs are masked in the browser, IP addresses aren’t saved with events or sessions, and you can delete a user’s data or set how long data is kept. Your consent banner and privacy policy are still yours to provide. Our data processing agreement is still a draft and not in force yet; ask us for a copy.
By default your consent setup decides and everything is recorded. You can switch to counting without consent in opt-in regions (EU, UK, Switzerland, Quebec, and unknown locations, currently including all of Canada) or everywhere. Call grantConsent() from your banner, and revokeConsent() to stop and clear what the SDK stored in the browser. OnProd doesn’t provide the banner.
Yes for signed-in users: export or delete everything tied to a user ID in Settings. You can also set how many days data is kept per site. Until you set it, data is kept.
No heatmaps, no source-map stack traces, no email or Slack alerts, no native mobile SDK, and no team accounts or single sign-on yet. [Dates or roadmap link]
Add the script today. Errors and failed requests show up as issues within seconds, on-screen messages 30 minutes after a session ends, and AI Insights from an issue’s first visitor with a replay.