GTM commercial due diligence tests whether a SaaS company’s revenue claims survive the systems underneath them. Check four areas: data integrity (does CRM ARR tie to billing), pipeline quality (coverage, aging, stage conversion), attribution (can sourced pipeline be proven) and retention (cohort GRR and NRR). Flag any number that can’t be rebuilt from raw records.
Illustrative read-out, not a client
Quality of earnings checks the financials. Commercial diligence checks the market. GTM systems diligence checks whether the funnel, pipeline and retention numbers in the CIM come out of the systems the way management says they do.
| Workstream | Core question | Main sources | Typical output | What it misses |
|---|---|---|---|---|
| Financial QoE | Are revenue and EBITDA real and recurring? | GL, billing, contracts, bank data | Adjusted EBITDA, revenue quality | Whether the pipeline that produces future revenue is real |
| Commercial due diligence | Is the market attractive and is the company winning in it? | Customer interviews, market data, win/loss | Market sizing, competitive position | Whether the internal funnel data supports the growth plan |
| GTM systems diligence | Can the funnel, pipeline and retention numbers be rebuilt from raw records? | CRM, marketing automation, billing, CS platform exports | Rebuilt KPIs, red flags, cost to fix | Market dynamics; it complements the other two |
| Check | How to test it | Healthy | Red flag |
|---|---|---|---|
| CRM ARR ties to billing | Join CRM accounts to billing customers; compare ARR per customer and in total | Within 1% | Gap over 5%, or no shared customer ID |
| ARR definition is consistent | Compare the CIM’s ARR definition to how the dashboard calculates it (one-time fees, usage, multi-year) | Written definition, applied in system | Definition differs between CIM and dashboard |
| Duplicate accounts | Fuzzy-match account names and domains | Under 5% | Over 15% |
| Required fields populated | Share of open opps with amount, close date, stage, product and owner | 95%+ | Under 80% |
| Field history retained | Check field history tracking on stage, amount and close date | Tracked for 24+ months | No history; stages can’t be reconstructed |
| Customer status matches reality | Accounts marked “customer” vs. active subscriptions in billing | Within 2% | Over 10% mismatch |
| Integrations documented | List of connected apps, API users and sync rules | Documented with owners | Unknown API users writing to core objects |
| Reporting is system-generated | Ask how the board deck is built | Dashboards, no manual edits | Spreadsheet assembly with manual overrides |
| Check | How to test it | Healthy | Red flag |
|---|---|---|---|
| Pipeline coverage | Qualified pipeline closing next quarter ÷ next-quarter plan | 3x or more | Under 2x |
| Past-due close dates | Share of open opps with a close date in the past | Under 10% | Over 25% |
| Pipeline aging | Open opps older than 2x the median won cycle | Under 15% of value | Over 35% of value |
| Stage conversion is stable | Stage-to-stage conversion by quarter, last 8 quarters | Swings under 5 pts | Swings over 15 pts or stages redefined |
| Win rate | Won ÷ (won + lost) on qualified opps, trailing 4 quarters | 20%+ | Under 12%, or lost deals never closed out |
| End-of-quarter pull-in | Share of quarter’s bookings closed in the final two weeks, plus discount depth on those deals | Under 40% | Over 60% with deeper discounts |
| Forecast accuracy | Week-6 commit vs. actual bookings, last 4 quarters | Within 10% | Missed by 20%+ in 2 of 4 quarters |
| Concentration | Top 10 opps as a share of next-quarter pipeline | Under 30% | Over 50% |
| Check | How to test it | Healthy | Red flag |
|---|---|---|---|
| Source captured on won deals | Share of closed-won with an original source that isn’t blank, Direct or Other | 80%+ | Under 50% |
| Source can’t be overwritten | Check whether original source is locked or overwritten by later touches | Locked at create | Overwritten by sync or imports |
| Lifecycle timestamps | Lead, MQL, SQL and opp dates stamped on the record | Stamped and complete | No timestamps; conversion can’t be rebuilt |
| Channel mix is real | Rebuild pipeline by channel from records; compare with the CIM | Within 10% of claim | Claimed channel mix can’t be reproduced |
| CAC by channel | Spend by channel ÷ new customers by channel, same period | Computable and stable | Only blended CAC available |
| Speed to lead | Median time from demo request to first human touch | Under 1 hour | Over 24 hours, or not measurable |
| Database health | Email bounce rate and share of contacts with no activity in 12 months | Bounce under 2% | Bounce over 5%; mostly dormant |
| Deliverability | SPF, DKIM and DMARC records; spam complaint rate | All three set; complaints under 0.1% | DMARC missing; complaints over 0.3% |
| Check | How to test it | Healthy | Red flag |
|---|---|---|---|
| Gross revenue retention | Rebuild by annual cohort from billing, not from the CS dashboard | 90%+ | Under 85% |
| Net revenue retention | Same cohorts, including expansion | 110%+ | Under 100%, or rebuilt NRR 5+ pts below claim |
| Logo churn | Customers lost ÷ starting customers, trailing 12 months | Under 10% | Over 20% |
| Churn reasons captured | Share of churned accounts with a reason code from a fixed list | 90%+ | Under 50%, or free text only |
| Renewal visibility | Renewals in the next 180 days with an owner and a renewal opp | 95%+ | Renewals tracked only in billing |
| Expansion is repeatable | Expansion ARR by type (seats, upsell, price) and by rep or CSM | Broad-based | Over 50% from 5 accounts or one price increase |
| Revenue concentration | Top 10 customers as a share of ARR | Under 25% | Over 40% |
| Health signals in CRM | Usage, support and engagement data available on the account | Health score in use | No usage data visible to sales or CS |
Not every red flag is a deal issue. Sort each one into a bucket: price it, structure it, or fix it in the first 100 days.
Fixes in the third bucket map straight onto the GTM 100-day plan. To trace any single number end to end, use the KPI Walkback Framework.
Mark at least five checks to see a read-out.
Weights: data integrity 30%, pipeline 25%, attribution 15%, retention 30%. Pass = full credit, Watch = half, Fail or unmarked = none. Unmarked checks are listed as unverified. JayOh guidance, not an audit opinion.
Ask for raw exports, not dashboards. Every KPI on this page can be rebuilt from these twelve files.
With exports in hand, a focused GTM systems review takes about two weeks: one week to rebuild the numbers, one to test them and write the read-out.
| Days | Work | Output |
|---|---|---|
| 1–2 | Data request, read-only access, interviews with RevOps, sales and marketing leads on how numbers are produced | Data inventory and definition gaps |
| 3–5 | Rebuild ARR and the customer crosswalk; rebuild cohorts for GRR and NRR from billing | Reconciled ARR and retention |
| 6–8 | Pipeline tests: coverage, aging, past-due, stage conversion, forecast accuracy, pull-in | Pipeline quality scorecard |
| 9–10 | Attribution and demand tests: source capture, lifecycle timestamps, channel mix, CAC, deliverability | Demand engine findings |
| 11–12 | Systems review: CRM, MAP, CPQ/billing, integrations and stack cost | Stack risk and cost-to-fix estimate |
| 13–14 | Red-flag triage (price it / structure it / fix it) and read-out to the deal team | Diligence memo and draft 100-day GTM plan |
Buy-side, we rebuild the numbers and price the fixes. Sell-side, our diligence-readiness package cleans ARR reporting, reconciles cohorts and documents the systems so they hold up in the data room.
We engineer growth systems. JayOh builds the RevOps architecture, GTM execution and data infrastructure that turn messy revenue operations into predictable pipeline for B2B SaaS and PE-backed teams.