All resources
Topics

SaaS data model: a free subscription analytics template

Accounts, MRR events, invoices, product usage and support: a free SaaS data model you can open and export as OKF.

Accounts, MRR events, invoices, product usage and support: a free SaaS data model you can open and export as OKF.

A SaaS data model is the set of tables – accounts, subscriptions, invoices, usage – and the keys that join them into something you can answer revenue questions from. Get the subscription part right and net revenue retention, the MRR waterfall, and "which usage predicts churn" are one query away. Get it wrong and every board deck becomes a reconciliation exercise.

This page gives you a free, ready-made SaaS data model you can open in your browser, edit like a diagram, and export to OKF – Google's open, portable format. No sign-up. It's one of nine in our data model template gallery; this one is built for subscription analytics.

ERD OKF Data model template gallery

What a SaaS data model is, and the three things people mean

Search "SaaS data model" and you get three different answers, because the phrase hides three jobs.

The first is the multi-tenant app schema – how you store tenants, orgs, users, and permissions so the product runs. The second is a GTM metrics framework – the conceptual volume/conversion/time metrics behind a go-to-market motion. The third, and the one analysts actually build, is the subscription-analytics model: the warehouse tables you compute MRR, churn, and retention from.

This template is that third thing. It's a dimensional model – facts surrounded by dimensions – with one design decision at its heart: subscription change is captured as events, not monthly snapshots. If the vocabulary is new, start with what data modeling is, and for the product-team case, see why every SaaS product team needs a data model.

The SaaS template, mart by mart

The template is six data marts – two dimensions and four facts – wired around subscription revenue. Here's the whole thing.

ERD OKF Data model template gallery

Entity relationship diagram of a SaaS data model: Account and User dimensions joined to Subscription Events, Invoices, Usage, and Support Tickets fact tables, centered on the MRR-movement event table.

Open the SaaS model in the canvas →

•  Account (dimension) – one row per customer account: plan, segment, region, signup date.

•  User (dimension) – one row per seat/user, joined to Account, for activation and engagement.

•  Subscription Events (fact) – the centerpiece: one row per MRR movement (new, expansion, contraction, churn, reactivation).

•  Invoices (fact) – one row per invoice/line: billed amount, period, status – the cash view next to the recognized-MRR view.

•  Usage (fact) – one row per account-day (or user-day) of product usage, the leading indicator for churn and expansion.

•  Support Tickets (fact) – one row per ticket, joined to Account, for the CSAT-vs-renewal question.

The joins make it a star: User → Account, Subscription Events → Account, Invoices → Account, Usage → Account and Usage → User, Support Tickets → Account. Every table is a reporting-ready data mart in the sense we describe in our approach to data marts.

The MRR-movement table (the centerpiece)

If you take one idea from this template, take this: model subscription change as a stream of movements, not a monthly balance.

A row in Subscription Events is a single change to recurring revenue – a new subscription, an expansion, a contraction, a churn, a reactivation – each with an account, a date, a type, and a signed MRR delta. From that one table you can reconstruct the MRR waterfall for any period (new + expansion − contraction − churn), and compute net and gross revenue retention by summing deltas per cohort.

A monthly-snapshot table can't do this cleanly – it tells you the balance changed but not why. The event grain keeps the reason, which is the whole point. This is a classic transaction-grain fact table; for the grain choices behind it, see the three types of fact tables and understanding star schema.

What this model answers

Because the events carry the reason and the dimensions carry the context, the hard SaaS questions become joins, not projects:

•  Net & gross revenue retention – sum signed MRR deltas per cohort over time.

•  The MRR waterfall – new / expansion / contraction / churn for any month or segment.

•  What usage predicts churn – Usage joined to the churn events that follow it.

•  CSAT vs. renewal – Support Tickets joined to Account against subsequent churn/expansion.

•  Quick ratio & expansion rate – straight from the movement types.

None of these need a new table. They're different paths across the same six data marts.

Analytics model vs. the multi-tenant app schema

A common first question: "where are the tenants, orgs, and permissions?" Those belong to the multi-tenant app schema that runs the product – a separate, normalized model. The analytics model sits downstream and starts at the account and the subscription event, because that's the grain reporting needs.

Aspect Multi-tenant app schema Analytics data model (this template)
Shape Normalized (tenants, orgs, roles) Dimensional star (facts + dimensions)
Tuned for App correctness, isolation, fast writes Revenue & retention questions
Subscription change Current state (a status column) MRR-movement events (the history)
Export SQL DDL OKF + diagram image

How to open and customize the template

Opening it and shaping it to your business takes about two minutes, then as long as you want to refine.

(1)  Open it. Use the link under the diagram above – loads in your browser, no sign-up.

(2)  Reshape it. Add fields (plan tier, billing interval, CAC), split usage by feature, or add a Cohorts dimension; redraw joins on the canvas.

(3)  Set grain and keys. Confirm Subscription Events is one row per movement and the keys that tie each fact to Account.

(4)  Export it. Use Export → OKF for a portable model, or grab a diagram image. Keep the OKF in git or push it into OWOX Data Marts to make it live in your warehouse.

Comparing tools while you're here? Our roundup of free database diagram design tools puts the canvas in context.

Export to OKF: a portable SaaS model

The reason this beats a static ER picture is what happens after the diagram. A drawing can't be diffed or fed to a warehouse.

This template exports to OKF (Open Knowledge Format), Google's open, markdown-based standard. Because it's plain text, you can keep the model in git, review it in a pull request, and hand it off without lock-in. New to it? See our explainer on what OKF is, then open the SaaS model and export your own.

FAQ

Frequently asked questions

What tables are in a SaaS data model?
+
Is a SaaS data model a multi-tenant app schema or an analytics model?
+
How do you model MRR movements (the MRR waterfall)?
+
What is the grain of the subscription events table?
+
How do you calculate net revenue retention from a SaaS data model?
+
What is MRR data?
+
Is the SaaS data model template free, and what can I export?
+
On this page
What users are saying

Not testimonials. Comment threads.

From people who actually use the product. Each quote is attached to a specific claim.

A1
· re: warehouse integration
KP
Katya P.
BI Manager

Finally, a tool that doesn't ask business users to learn a new dashboarding UI. Our marketing team already knows Sheets. OWOX just delivers the right data.

C3
· re: governance
MR
Marco R.
Head of Data

Joinable data marts concept was the thing that sold us. We can now use the semantic layer without building one.

E7
· re: open source
JC
James C.
Data Analyst

Self-hosted the OSS version on Digital Ocean. Zero vendor lock-in. Contributed a Shopify connector back in week two.

Google Sheets in modern analytics

Google Sheets, powered by governed data marts

Google Sheets were never designed to be a system of record. With OWOX Data Marts, Sheets becomes a trusted analysis layer — powered by governed data marts defined upstream in your warehouse.

Business teams keep the flexibility they love
Data teams retain control over logic and definitions
No more fragile joins duplicated across spreadsheets
See how it works
/* Full Width Images in RichText */