Know what changed, who it hit, and what to do next.

Analytics, session replay, errors, traces, flags and revenue in one console, every row reading from one schema. Installed with one line, exportable in full, readable by your agents over MCP.

  • Free for 10,000 events a month
  • No payment method to start
  • Export everything, any time

What this page is claiming

54
feature families
1
SDK envelope
1
Postgres database
7.7 KB
script tag, gzipped
31
MCP tools
0
bytes of telemetry to us

One console. Five views of the same rows.

Visitors, funnels, errors, traces and revenue are the same table read five ways, so a number you see here can always be followed to the request that produced it.

Choose a console view
Application overviewsaaspro.dev · production · last 30 daysDemonstration data
Visitors per day
PointValue
11,488
21,402
3995
4934
51,476
61,552
71,610
81,571
91,498
101,043
11981
121,520
131,603
141,662

Visitors

26,940

+16.3%

vs previous 30 days

Pageviews per day
PointValue
13,702
23,489
32,477
42,325
53,674
63,861
74,004
83,910
93,726
102,596
112,441
123,782
133,988
144,136

Pageviews

68,318

+12.1%

vs previous 30 days

Sessions per day
PointValue
11,741
21,640
31,164
41,093
51,727
61,816
71,884
81,839
91,753
101,220
111,148
121,779
131,876
141,945

Sessions

31,486

+14.8%

vs previous 30 days

Bounce rate per day
PointValue
143.1%
242.8%
344.6%
445.1%
542.2%
641.8%
741.4%
841.9%
942.0%
1043.6%
1144.1%
1241.6%
1341.1%
1440.8%

Bounce rate

41.2%

-3.8%

vs previous 30 days

Signup funnel

4.1K

+5.8%

Viewed pricing through to first event

Last 30 days
Viewed pricing: 4,127 (100%)100%Started signup: 1,286 (31%)31%Created organization: 742 (18%)18%Sent first event: 511 (12%)12%
Signup funnel stages
StageReachedStep conversionShare of entry
Viewed pricing4,127100%100%
Started signup1,28631%31%
Created organization74258%18%
Sent first event51169%12%

Events by kind

123.7K

Every kind the ingest endpoint accepts

page: 68,318track: 24,110vital: 12,480metric: 9,420identify: 6,142error: 3,184
123.7Kevents
Events by kind by slice
SliceValueShare
page68,31855.2%
track24,11019.5%
vital12,48010.1%
metric9,4207.6%
identify6,1425.0%
error3,1842.6%

Visitors

26,940

+16.3%

vs previous 30 days

Last 30 days
05001K1.5K2K5 Aug11 Aug17 Aug22 Aug28 Aug3 Sep
Visitors per day by point
PointVisitorsPrevious 30 days
5 Aug1,1801,042
6 Aug1,2441,101
7 Aug1,3011,148
8 Aug1,096968
9 Aug842744
10 Aug796702
11 Aug1,2871,136
12 Aug1,3521,194
13 Aug1,4181,252
14 Aug1,3771,216
15 Aug1,2901,139
16 Aug921813
17 Aug868766
18 Aug1,3941,231
19 Aug1,4611,290
20 Aug1,5231,345
21 Aug1,4881,314
22 Aug1,4021,238
23 Aug995879
24 Aug934825
25 Aug1,4761,303
26 Aug1,5521,371
27 Aug1,6101,421
28 Aug1,5711,387
29 Aug1,4981,323
30 Aug1,043921
31 Aug981866
1 Sep1,5201,342
2 Sep1,6031,416
3 Sep1,6621,468

Traffic sources

24.3K

Referrers, resolved at ingest

  1. Direct9,41239%
  2. google.com6,18025%
  3. news.ycombinator.com3,86416%
  4. x.com2,2909%
  5. reddit.com1,4776%
  6. github.com1,0464%
Traffic sources by visitors
ItemVisitorsShare
Direct9,41238.8%
google.com6,18025.5%
news.ycombinator.com3,86415.9%
x.com2,2909.4%
reddit.com1,4776.1%
github.com1,0464.3%

Activation

72%

Signups this month, against the goal for each step

Installed an SDK: 82%Sent a first event: 72%Invited a teammate: 38%
  • Installed an SDK412 of 500
  • Sent a first event361 of 500
  • Invited a teammate188 of 500
Activation against goal rings
RingProgress
Installed an SDK412 of 500
Sent a first event361 of 500
Invited a teammate188 of 500

Events ingested

9,544k

+18.2%

Thousands of events a month, by the SDK that sent them

Last 12 months
05001K1.5KOct · Browser: 412kOct · Server: 128kNov · Browser: 448kNov · Server: 141kDec · Browser: 461kDec · Server: 149kJan · Browser: 502kJan · Server: 162kFeb · Browser: 538kFeb · Server: 174kMar · Browser: 571kMar · Server: 188kApr · Browser: 604kApr · Server: 199kMay · Browser: 655kMay · Server: 217kJun · Browser: 690kJun · Server: 228kJul · Browser: 724kJul · Server: 241kAug · Browser: 768kAug · Server: 258kSep · Browser: 812kSep · Server: 274kOctDecJanMarAprJunJulSep
  • Browser
  • Server
Events ingested by month by category
CategoryBrowserServer
Oct412k128k
Nov448k141k
Dec461k149k
Jan502k162k
Feb538k174k
Mar571k188k
Apr604k199k
May655k217k
Jun690k228k
Jul724k241k
Aug768k258k
Sep812k274k

Top pages

5 of 128
Top pages by pageviews, share of traffic and bounce rate
PagePageviewsShareBounce
/saaspro.dev
18,204
100% of the busiest page
32.1%
/docs/sdk/script-tagsaaspro.dev
6,338
35% of the busiest page
18.9%
/pricingsaaspro.dev
4,127
23% of the busiest page
44.7%
/docs/getting-startedsaaspro.dev
3,905
21% of the busiest page
21.4%
/featuressaaspro.dev
2,614
14% of the busiest page
36.2%
Errors, releases and on-callsaaspro.dev · production · todayDemonstration data

Crash-free sessions, web@2026.9.1

97.4%

-2.2%

vs the release before, deployed 09:00 UTC

Unresolved issues

14

+7.7%

61 people affected

p95 response time

181 ms

-3.1%

Rolling 30 days

Open issues

3 in this release
Today
Open issues by events, users and status
IssueReleaseUsersEventsStatus
TypeError: Cannot read properties of undefined (reading 'plan')app/checkout/summary.tsx in PlanSummary
web@2026.9.16184unresolved
FetchError: POST /api/billing/session returned 502lib/billing/session.ts in createSession
web@2026.9.12731investigating
ChunkLoadError: Loading chunk 42 failednext/dist/client/route-loader.js
web@2026.8.41212resolved

On call

Routed from the alert rule that fired

Today

  • Checkout 502s after web@2026.9.1

    41m

    mitigated · Ada O. · open 41m

  • Worker queue depth above 40

    2h

    acknowledged · Ravi P. · open 2h

Error budget

99.94%

Checkout availability, 30 days

99.94%Within budgetObjective 99.9%
Availability against objective
MeasureValue
Availability against objective99.94% of 100.00%
Share100%
VerdictWithin budget
Error budget left41% of the budget left
Traces and logstrace 4f1c…9a2e · 612 ms · 5 spansDemonstration data

Trace 4f1c…9a2e

612 ms

One request, correlated with the error by request id

Trace 4f1c…9a2e: 5 spans over 612 mswebGET /checkout612 mswebrender PlanSummary74 msapiPOST /api/billing/session212 msapistripe.checkout.sessions.create188 mspostgresSELECT subscriptions11 ms

p95 response time

181 ms

−3.1%

Rolling 30 days

01002003005 Aug11 Aug17 Aug22 Aug28 Aug3 Sep
p95 response time by point
Pointp95 ms
5 Aug184 ms
6 Aug179 ms
7 Aug188 ms
8 Aug176 ms
9 Aug168 ms
10 Aug165 ms
11 Aug191 ms
12 Aug186 ms
13 Aug194 ms
14 Aug205 ms
15 Aug231 ms
16 Aug212 ms
17 Aug188 ms
18 Aug183 ms
19 Aug179 ms
20 Aug176 ms
21 Aug182 ms
22 Aug188 ms
23 Aug174 ms
24 Aug169 ms
25 Aug181 ms
26 Aug186 ms
27 Aug192 ms
28 Aug187 ms
29 Aug183 ms
30 Aug172 ms
31 Aug168 ms
1 Sep179 ms
2 Sep184 ms
3 Sep181 ms

Correlated logs

Every line carries trace 4f1c…9a2e

  1. warnstripe webhook retried (2)
  2. errorbilling.session: upstream 502 after 188 ms
  3. infocheckout rendered · plan=team · flag new-checkout=on
Flags, experiments and evaluationssaaspro.dev · productionDemonstration data

new-onboarding

25% rollout

Evaluated locally from a cached ruleset

boolean
  1. 01plan is one of team, businesson
  2. 02country is DEoff
  3. 03everyone else25% rollout, hashed on distinct id
Rollout25% of eligible traffic

pricing-page-copy-v2

7.02%

12,840 exposed · 98.6% probability to beat control

  1. benefit-led7.02%
  2. control5.80%
Conversion by variant by conversion
ItemConversionShare
benefit-led7.02%54.8%
control5.80%45.2%

Evaluation gate

support-replies · 120 cases
Grader scores, baseline against candidate
GraderBaselineCandidateChange
Answer contains the policy78%91%+13
No invented order number94%97%+3
Tone matches the brand guide71%83%+12
Under 120 words99%96%-3

Gate passed

Minimum score 0.85, maximum failure rate 0.05. The candidate ships.
Revenue and retentionsaaspro.dev · EUR · last 30 daysDemonstration data

MRR (EUR)

18,420

+6.4%

vs previous 30 days

ARR (EUR)

221,040

412 active subscriptions

Net revenue churn

2.1%

-0.4%

vs previous 30 days

Monthly recurring revenue (EUR)

18,420

+6.4%

Booked from the billing connector, not estimated

05K10K15K20K5 Aug11 Aug17 Aug22 Aug28 Aug3 Sep
Monthly recurring revenue by point
PointMRR
5 Aug14.8K
6 Aug15K
7 Aug15K
8 Aug15K
9 Aug15.2K
10 Aug15.2K
11 Aug15.3K
12 Aug15.5K
13 Aug15.6K
14 Aug15.6K
15 Aug15.9K
16 Aug16K
17 Aug16K
18 Aug16.2K
19 Aug16.4K
20 Aug16.5K
21 Aug16.5K
22 Aug16.8K
23 Aug17K
24 Aug17K
25 Aug17.2K
26 Aug17.3K
27 Aug17.6K
28 Aug17.6K
29 Aug17.8K
30 Aug18K
31 Aug18K
1 Sep18.1K
2 Sep18.3K
3 Sep18.4K

Weekly retention

71%

Share of each cohort still active, by week

Week 0Week 1Week 2Week 3Week 4Week 5Aug 4Aug 11Aug 18Aug 25Sep 1Aug 4 · Week 0: 100%Aug 4 · Week 1: 61%Aug 4 · Week 2: 48%Aug 4 · Week 3: 41%Aug 4 · Week 4: 38%Aug 4 · Week 5: 36%Aug 11 · Week 0: 100%Aug 11 · Week 1: 64%Aug 11 · Week 2: 50%Aug 11 · Week 3: 44%Aug 11 · Week 4: 40%Aug 11 · Week 5: no dataAug 18 · Week 0: 100%Aug 18 · Week 1: 66%Aug 18 · Week 2: 53%Aug 18 · Week 3: 46%Aug 18 · Week 4: no dataAug 18 · Week 5: no dataAug 25 · Week 0: 100%Aug 25 · Week 1: 68%Aug 25 · Week 2: 55%Aug 25 · Week 3: no dataAug 25 · Week 4: no dataAug 25 · Week 5: no dataSep 1 · Week 0: 100%Sep 1 · Week 1: 71%Sep 1 · Week 2: no dataSep 1 · Week 3: no dataSep 1 · Week 4: no dataSep 1 · Week 5: no data
0100%
Weekly retention by cohort by row and column
Week 0Week 1Week 2Week 3Week 4Week 5
Aug 4100%61%48%41%38%36%
Aug 11100%64%50%44%40%
Aug 18100%66%53%46%
Aug 25100%68%55%
Sep 1100%71%

Why one console

Give every application you ship one console and one schema for analytics, replay, errors, traces, flags and revenue, then follow any number to the request that produced it.

Everything is connected, because everything is one table.

Trace an incident from rage click to the fix without leaving the tab. One database. No correlation to do by hand.

  1. 01 · Issue

    TypeError: Cannot read properties of undefined (reading 'plan')

    app/checkout/summary.tsx:41 in PlanSummary

    Users
    61
    Events
    84
    First seen
    web@2026.9.1 · 09:02 UTC
    Owner
    @billing-team

    Stack trace resolved from build 2026.9.1+ab41f2.

  2. 02 · Replay

    The session that hit it

    1. 0:00/pricingnavigated
    2. 0:41Start trialclicked
    3. 1:58/checkout · plan Teamnavigated
    4. 2:36Continue ×3rage click
    5. 2:37TypeError thrownerror

    3m 12s, recorded with inputs masked. Private by default.

  3. 03 · Trace

    The request behind the click

    1. GET /checkout612 ms
    2. render PlanSummary74 ms
    3. POST /api/billing/session212 ms
    4. stripe.checkout.sessions.create188 ms
    5. SELECT subscriptions11 ms

    Trace 4f1c…9a2e, correlated with the error by request id.

  4. 04 · Release

    web@2026.9.1

    Crash-free sessions fell from 99.6% to 97.4%, deployed 09:00 UTC.

    Adoption62% of sessions

    Annotated on every chart for this application.

  5. 05 · Action

    Flag new-checkout

    audit #48,211 · hash-chained · passkey verified.

One line to install. One envelope for everything.

The script tag captures pageviews, errors and vitals. React and Node add custom events, identities, metrics and the signed connector — one schema.

  1. 01Add the snippetThe script tag or the npm client starts capturing traffic on the next page load.
  2. 02Mint a keyOne public key per environment. No agent to run, no pipeline to maintain.
  3. 03Read one connected truthPageviews, errors, traces, flags and revenue arrive as rows you can join.

One envelope, ten kinds

  • page
  • track
  • identify
  • error
  • vital
  • metric
  • span
  • log
  • session
  • flag

Also WordPress, React Native, Python and an OpenTelemetry bridge. Every SDK.

Choose how to install
html
<script defer src="https://saaspro.dev/spm.js"
        data-key="spm_pub_prod_xxxxxxxx"></script>

7.7 KB gzipped. Pageviews, route changes, errors and Core Web Vitals, no dependencies.

shell
pnpm add @saaspro/react
tsx
import { SaaSProMaxProvider } from "@saaspro/react";
import { SPMPageview } from "@saaspro/react/next";

export function Providers({ children }: { children: React.ReactNode }) {
  return (
    <SaaSProMaxProvider config={{ key: process.env.NEXT_PUBLIC_SPM_KEY! }}>
      <SPMPageview />
      {children}
    </SaaSProMaxProvider>
  );
}

Initialises once on the client and stays quiet during server rendering.

shell
pnpm add @saaspro/node
ts
import { SaaSProMax } from "@saaspro/node";

const spm = new SaaSProMax({ secretKey: process.env.SPM_SECRET_KEY! });

spm.track({
  distinctId: "user_123",
  event: "subscription started",
  value: 49,
  currency: "EUR",
});

Batches, retries, and never throws into your request handler.

All three post to POST https://saaspro.dev/api/v1/ingest with the same event envelope.

Product tour

Six workspaces built to answer the questions you actually ask, all reading from one database.

  • Workspace 01

    Analytics

    11 families

    Where do visitors come from, and what do they do?

    Learn more
  • Workspace 02

    Revenue

    6 families

    Which channels and customers create value?

    Learn more
  • Workspace 03

    People and communications

    6 families

    Which accounts need attention, and how do we reach them?

    Learn more
  • Workspace 04

    Errors and metrics

    14 families

    What failed, who is affected, and what changed?

    Learn more
  • Workspace 05

    Flags and evaluations

    7 families

    Is a change safe, and is it useful?

    Learn more
  • Workspace 06

    Data and integrations

    10 families

    How do we connect, control and move our data?

    Learn more

Built for the agent doing the integration.

One permission-filtered read layer for agents and operators, over MCP.

Purpose-built MCP

SaaS Pro Max in every conversation with your agent

Questions we get asked first.

The ones that decide whether this is worth your afternoon.

Where does my data live?
On the hosted service at saaspro.dev, in a Postgres database we operate. Retention is set per application in Settings → Data, and deleting an application deletes its events.
Who owns the data?
You do. Read it back through the Management API or MCP, export people as CSV, or schedule exports to your own S3 bucket. IP addresses are HMAC-hashed at ingest and never stored raw.
Can it run without cookies?
Yes. cookieless: true writes no cookies, consent: "pending" stores nothing until you grant it, and Do Not Track is respected.
What does it cost?
Free covers 10,000 events a month on one application, with no payment method. Starter starts at $12 a month, Business at $35, priced by the events you send, and yearly is 30% off.
Is session replay private?
Inputs are masked before a frame leaves the browser, recordings are sampled per application, and every replay is scoped by the same permission that gates a person's profile.
Can I publish stats on my own site?
Yes, per report and off by default. Each share gets a URL under /s/ and an embed under /embed/. Aggregates only, and turning it off takes the URL down.

Open a workspace. Wire the SDK. Read the truth.

Sign in with Google, enrol a passkey, and send your first event in minutes.