Sample output from the PE Investability Readiness Report prompt in the Sonar AI Prompt Library, run against a NetSuite test account. Every name and number here is test data. Back to the post · The library
Sell-Side Diligence  ·  Confidential

PE Investability Readiness Report

A buyer's-eye assessment built directly from the NetSuite general ledger — the same reconstruction a Quality of Earnings team will perform, run first and on your own terms.
Account TD3016323 (Production, OneWorld) Analysis window Q3 FY2024 – Q2 FY2026 · TTM = Jul 2025–Jun 2026 Prepared August 10, 2026 Method Read-only SuiteQL against posted GL

Overall Verdict

CONDITIONALLY INVESTABLE

The growth story is real and attractive — +29.5% Q2 year-over-year revenue with operating margin expanding from 11.0% to 16.8%, and the transaction-backed revenue base more than doubled inside the TTM. But three findings would dominate any Quality of Earnings review: 85% of GL income is booked through recurring journal entries, zero accounting periods have been closed in 25 months, and half of open receivables are aged past 90 days — including the entire relationship value of three top-10 "customers" who have never paid. Each is fixable before a process starts — and fixing them is worth real enterprise value.

57 / 100
Composite Readiness Score
2 Green · 3 Yellow · 2 Red
Re-run monthly to trend
SCORECARD

Seven-Area Diligence Summary

1 · Growth & Margins+29.5% Q2 YoY; GM ~40%; op margin 16.8% and expanding; billed base 2× inside TTMPE screen: >15% growth, stable GMGreen
2 · Revenue Mix & Channel35% of billed revenue carries no product class or location; two DCs drive 57%Norm: <5% unattributedYellow
3 · Customer Retention95.8% logo retention YoY; 64.6% of billed revenue from repeat customersNorm: >85% logo retentionGreen
4 · Customer ConcentrationTop 10 = 61.6% of billed revenue; 3 of top 10 are single-order AND unpaidComfort line: top-10 <50%Yellow
5 · Working Capital / AR$928K open AR, 50.9% past 90 days; top 3 delinquents = 62% of aged balanceNorm: <10% of AR past 90Red
6 · Earnings Quality & Close85.4% of GL income via "Beg Balance" journals; 0 of 25 periods closed or lockedNorm: JE income <5%; close by BD10Red
7 · Systems & Controls7 active Administrators; plain-text vendor credential; 209 future-dated postingsNorm: 2–3 admins, no stored secretsYellow
Composite score weights: Growth 20 · Earnings Quality 20 · Retention 15 · Working Capital 15 · Mix 10 · Concentration 10 · Systems 10. Green earns 90% of area weight, Yellow 60%, Red 20%. Score today: 57/100. Completing remediation items 1–3 alone would lift it to ≈80.
01

Growth & Margins

Green
$11.92M
TTM GL revenue (Jul '25 – Jun '26)
▲ 29.5% Q2 '26 vs Q2 '25
39.7%
Gross margin, Q2 FY2026
▲ from 34–37% range a year ago
16.8%
Operating margin, Q2 FY2026
▲ from 11.0% in Q2 FY2025
2.1×
Growth in monthly billed (transaction-backed) revenue inside TTM
$101K/mo → $208K/mo quarterly avg
Quarterly Revenue & Operating Income — trailing 8 quarters (posted GL)
0 1.2M 2.4M 3.6M Q3 '24*Q4 '24Q1 '25Q2 '25 Q3 '25Q4 '25Q1 '26Q2 '26 $0.87M$2.56M$2.65M$2.55M $2.80M$2.90M$2.91M$3.31M Revenue Operating income * partial ramp quarter
Six consecutive quarters of sequential revenue growth. Operating margin expanded in every year-over-year comparison: 9.5% → 10.2% (Q3), 7.8% → 13.3% (Q4), 8.3% → 13.3% (Q1), 11.0% → 16.8% (Q2). Gross margin stabilized ~40% in the last four quarters.
Why this matters to a buyer: growth with expanding margins is the single strongest signal in a PE screen — it implies pricing power or operating leverage rather than bought growth. And the fastest-growing component is the transaction-backed revenue (see Section 6's monthly split) — the part a QoE team will credit without argument. This is the pillar of the equity story.
02

Revenue Mix — Product & Channel

Yellow
TTM billed revenue by product class ($1.74M itemized) — click headers to sort
ClassRevenueShare %Lines
Home & Decor$623,03235.7151
(No class assigned)$613,05635.220
Apparel$341,99319.6426
Beauty$142,5168.2317
Miscellaneous$12,1750.711
TTM billed revenue by channel / location — click headers to sort
ChannelRevenueOrdersAvg ticket
LA Distribution Center$630,858100$6,309
(No location)$613,05620$30,653
Miami$364,75145$8,106
San Francisco Store$80,881441$183
New York Store$54,235335$162
Finding: the same ~20 large B2B transactions ($613K, avg ticket $30.7K — 35% of itemized billed revenue) lack both a product class and a location. A buyer's analyst will discover this in week one and ask why segment reporting can't be trusted. Backfilling dimension values on ~20 transactions is cheap; the credibility it buys is not. Classic barbell otherwise: wholesale/distribution takes few large orders; retail stores take many small tickets.
03–04

Customer Base — Retention & Concentration

Yellow
95.8%
Logo retention (69 of 72 prior-year customers repurchased)
Only 3 churned; 25 new logos added
64.6%
TTM billed revenue from repeat customers
70 repeat vs 24 one-time buyers
61.6%
Top-10 customer share of billed revenue
⚠ Above the ~50% PE comfort line
10.8%
Largest customer (Jones Manufacturing)
Below the 15–20% deal-killer zone
Top 10 customers — TTM billed revenue ($1.07M of $1.74M itemized)
Jones Manufacturing $188.6K · 14 orders Design Excellence Ltd. $129.7K · 14 orders Pineapple Republic $116.0K · 12 orders Panaderia Co. $108.5K · 11 orders Global Information $101.8K · 1 order · UNPAID 250d 🔴 Davis Supplies $97.3K · 11 orders Red Rivers Consulting $94.4K · 1 order · UNPAID 143d 🔴 Magna Tech Limited $89.3K · 1 order ⚠ Falcon Systems $78.5K · 1 order ⚠ Realpoint inc. $70.9K · 10 orders
Repeat relationshipSingle-order customerSingle-order AND invoice unpaid >90 days
Compounding finding — revenue that is neither recurring nor collected: three top-10 "customers" (Global Information, Red Rivers Consulting, and Gotter inc. at #12) placed exactly one order each, and none of them have paid — their invoices are the three largest items in the over-90-day AR bucket ($281.6K combined open). A buyer will treat that revenue as doubly impaired: non-recurring in the model and uncollectible in the working-capital peg. Resolving these three relationships — collect, convert to repeat accounts, or write off — should be treated as one workstream, not two.
The offsetting strength: among established customers the franchise is genuinely sticky — 95.8% logo retention, and the six repeat-relationship accounts in the top 10 average 12 orders each. The concentration problem is specifically a new-large-account collections problem, not a loyalty problem.
05

Working Capital — AR, AP & Inventory

Red
$928K
Open accounts receivable (39 invoices)
▼ 50.9% aged past 90 days
$473K
AR > 90 days past due (13 invoices)
Top 3 debtors = 62% of the aged balance
$181K
Open accounts payable — 99% current
AP hygiene is clean
3.4×
Inventory turns (TTM COGS ÷ $2.13M on-hand)
Adequate for retail; watch slow movers
AR aging distribution — $928,247 open
$133K$123K$59K$139K$473K — 50.9% Current1–30 days31–6061–90Over 90 days past due
Collection worklist — all 13 invoices over 90 days past due (click headers to sort)
PriorityInvoiceCustomerDue dateDays overdueOpen amountNote
P1INV790Global Information2025-12-03250$110,579Top-10 customer, only order — unpaid
P1INV782Red Rivers Consulting2026-03-20143$102,906Top-10 customer, only order — unpaid
P1INV791Mercury Co.2025-05-19448$80,079448 days — assess collectability now
P1INV789Gotter inc.2025-12-09244$68,119Top-12 customer, only order — unpaid
P2INV788Haskell Associates2025-09-29315$43,941315 days
P2INV784John G. Roche Opticians2026-04-15117$31,810
P2INV780Informics International2026-03-23140$29,239
P3INV786Ghetti Ltd2025-11-08275$2,741
P3INV792Schmidt & Sons Consulting2025-07-05401$1,770401 days — reserve candidate
P3INV785Magneto Services2026-04-21111$787
P3INV781The Abbott Inc.2026-04-26106$416
P3INV787Jasper and Associates2025-12-13240$264
P3INV793Kasson Ltd2025-04-03494$262494 days — reserve candidate
Total over 90 days$472,913
The math of this worklist: the four P1 invoices are $361.7K — 76% of the aged balance. In diligence this becomes either a dollar-for-dollar purchase-price deduction or a fight over the working-capital peg. Every dollar collected (or formally reserved under a documented policy) before a process starts is a dollar of enterprise value defended. AP, by contrast, is nearly all current — vendors are paid ahead of collections, which also drags cash conversion.
06

Earnings Quality & Close Discipline

Red
85.4%
Of TTM GL income booked via journal entries
$10.17M of $11.92M
24
Recurring "Beg Balance Entries" JEs (Sub 1 & Sub 2, monthly)
~$380–480K each, every month
0 / 25
Periods closed or locked since Jul 2024
AR, AP and GL all open in every period
209
Future-dated posted transactions (past Aug 10, 2026)
$596K magnitude
Monthly GL income — transaction-backed vs journal-booked (TTM)
0 500K 1.0M JulAugSepOct NovDecJanFeb MarAprMayJun 2025 2026 Transaction-backed (invoices + cash sales) Journal-booked ("Beg Balance Entries" + other JEs)
The two stories in one chart: the blue transaction-backed base is genuinely accelerating — quarterly average up from $101K/mo (Jul–Sep '25) to $208K/mo (Apr–Jun '26), a 2.1× increase inside twelve months. Meanwhile the hatched journal-booked income marches up a smooth ~1.2%/month ramp with no seasonality and no transaction detail behind it — a pattern a QoE analyst will flag on sight. If those journals summarize real activity from another system (POS, legacy ERP, acquired entity), attach the sub-ledger support; if not, the bankable revenue base is the blue bars.
This remains the report's most important finding. Only ~$1.74M of $11.92M TTM income traces to customer-level transactions. Six additional JEs totaling $545K are memo'd "Negative Cash Flow" and need individual explanations. Combined with zero closed periods in 25 months and 209 future-dated postings, the historical financials are, from a buyer's standpoint, editable at will. Instituting close-and-lock is the cheapest credibility upgrade available.
07

Systems & Controls Maturity

Yellow
Strengths a buyer will credit
✅ Mature, full-cycle ERP usage: ~7,900 transactions across complete order-to-cash and procure-to-pay cycles, plus light manufacturing
✅ Clean multi-entity structure: 4 subsidiaries incl. proper elimination entity, single currency
✅ Modern automation stack: Fixed Assets, SuiteTax, Electronic Bank Payments, Ship Central bundles
✅ Small local-customization footprint — most custom objects are bundle-owned, limiting technical-debt risk
✅ AI/agent tooling with a persistent audit trail (every agent mutation logged)
Gaps an IT-diligence workstream will flag
🔴 Plain-text credential stored in a custom vendor field (CUSTENTITY_PS_PASSWORD) — jumps straight into the security section of any diligence report
🟡 7 active Administrator users — broad unrestricted access dilutes segregation-of-duties answers
🟡 209 future-dated posted transactions ($596K) — symptom of missing period controls
🟡 Duplicate location names (multiple "Quarantine Area" / "Return to Vendor") — minor, but data-hygiene questions compound
PLAN

Prioritized 90-Day Remediation Plan

Document or re-source the journal-booked revenue Days 1–30

For each "Beg Balance Entries" JE, attach the sub-ledger or source-system detail that supports it — or migrate the activity to transaction-level records going forward. This single item determines whether $10.2M of revenue is bankable in a QoE.

Value at stake: credibility of 85% of the revenue base — the largest item in this plan

Institute monthly close & lock all historical periods Days 1–30

Close Jul 2024 – Jun 2026 after review, lock AR/AP/GL, adopt a standing close calendar (lock by business day 10), and resolve the 209 future-dated postings. Converts "the past can change" into "the past is signed off."

Value at stake: trust in every historical number shown to a buyer

Run the P1 collection worklist Days 1–30

Four invoices, $361.7K — 76% of the aged AR, and three of them are the unpaid single-order top-10 accounts. Collect, negotiate payment plans, or formally reserve under a documented policy. This workstream simultaneously fixes the concentration optics (item 6).

Value at stake: up to $473K defended at the purchase-price table

Fix the security findings Days 31–60

Remove the plain-text credential field (move secrets to NetSuite's credential APIs or an external vault) and cut Administrator count from 7 to 2–3 with purpose-built roles for the rest.

Value at stake: a clean IT-diligence report section

Backfill revenue dimensions Days 31–60

Assign class and location to the ~20 unattributed transactions ($613K, 35% of itemized revenue) and add validation so new transactions can't post without them.

Value at stake: trustworthy segment reporting for the CIM

De-risk customer concentration Days 61–90

After collections are resolved, run a deliberate second-order campaign on the surviving single-order top-10 accounts. Two conversions to repeat status meaningfully shifts the recurring-revenue narrative.

Value at stake: recurring-revenue multiple vs one-time revenue haircut

Stand up the monthly readiness re-run Days 61–90

Re-run this assessment monthly and trend the composite score (57 today; items 1–3 alone lift it to ≈80). Walking into management meetings with a self-audited, improving readiness score changes the negotiating posture from defensive to prepared.

Value at stake: negotiating leverage and process speed
The bottom line: the commercial engine — growth, margins, retention, and a transaction-backed revenue base doubling year-on-year — is the profile PE firms screen for. What stands between this business and "investable" is not performance but proof: transaction-level revenue support, locked periods, and collected receivables. All three are execution items, not strategy items, and all three are achievable inside 90 days.
APPENDIX

Reproducibility — the queries behind every number

Every figure in this report can be independently re-derived by running these read-only SuiteQL queries against the account. Hand this appendix to a buyer's analyst and they can verify the report in an afternoon — that reproducibility is itself a diligence asset.

A1 · Quarterly P&L by account type (Sections 1)
SELECT TO_CHAR(t.trandate,'YYYY') AS yr, TO_CHAR(t.trandate,'Q') AS qtr,
       a.accttype, ROUND(SUM(-tal.amount),2) AS amt
FROM transactionaccountingline tal
JOIN transaction t ON tal.transaction = t.id
JOIN account a ON tal.account = a.id
WHERE t.posting = 'T'
  AND t.trandate >= TO_DATE('2024-07-01','YYYY-MM-DD')
  AND t.trandate <  TO_DATE('2026-07-01','YYYY-MM-DD')
  AND a.accttype IN ('Income','OthIncome','COGS','Expense','OthExpense')
GROUP BY TO_CHAR(t.trandate,'YYYY'), TO_CHAR(t.trandate,'Q'), a.accttype
ORDER BY 1, 2, 3
A2 · Revenue mix by product class and by channel (Section 2)
SELECT COALESCE(cl.name,'(none)') AS product_class,
       ROUND(SUM(ABS(tl.netamount)),2) AS revenue, COUNT(DISTINCT t.id) AS tx_count
FROM transaction t
JOIN transactionline tl ON tl.transaction = t.id AND tl.mainline='F' AND tl.taxline='F'
LEFT JOIN classification cl ON tl.class = cl.id
WHERE t.type IN ('CustInvc','CashSale') AND t.posting='T'
  AND t.trandate >= TO_DATE('2025-07-01','YYYY-MM-DD')
  AND t.trandate <  TO_DATE('2026-07-01','YYYY-MM-DD')
  AND tl.subsidiary <> 4
GROUP BY COALESCE(cl.name,'(none)')
ORDER BY SUM(ABS(tl.netamount)) DESC
-- Channel version: replace classification join with
-- LEFT JOIN location l ON tl.location = l.id
A3 · Top customers, repeat/one-time split, YoY retention (Sections 3–4)
-- Top customers (TTM)
SELECT c.entityid, ROUND(SUM(ABS(tl.netamount)),2) AS ttm_revenue, COUNT(DISTINCT t.id) AS orders
FROM transaction t
JOIN customer c ON t.entity = c.id
JOIN transactionline tl ON tl.transaction = t.id AND tl.mainline='F' AND tl.taxline='F'
WHERE t.type IN ('CustInvc','CashSale') AND t.posting='T'
  AND t.trandate >= TO_DATE('2025-07-01','YYYY-MM-DD')
  AND t.trandate <  TO_DATE('2026-07-01','YYYY-MM-DD') AND tl.subsidiary <> 4
GROUP BY c.entityid ORDER BY 2 DESC FETCH FIRST 15 ROWS ONLY

-- Retention: FULL OUTER JOIN of DISTINCT prior-year vs current-year
-- customer sets on the same filters (69 retained / 3 churned / 25 new)
A4 · AR / AP aging buckets and collection worklist (Section 5)
SELECT CASE WHEN t.duedate >= TRUNC(SYSDATE) OR t.duedate IS NULL THEN '1_current'
            WHEN TRUNC(SYSDATE)-TRUNC(t.duedate) <= 30 THEN '2_1-30'
            WHEN TRUNC(SYSDATE)-TRUNC(t.duedate) <= 60 THEN '3_31-60'
            WHEN TRUNC(SYSDATE)-TRUNC(t.duedate) <= 90 THEN '4_61-90'
            ELSE '5_over90' END AS bucket,
       COUNT(*) AS invoices, ROUND(SUM(t.foreignamountunpaid),2) AS open_amount
FROM transaction t
WHERE t.type='CustInvc' AND t.status='A' AND t.foreignamountunpaid > 0
GROUP BY /* same CASE */ 1 ORDER BY 1
-- AP version: t.type='VendBill'
-- Worklist: add tranid, customer, duedate; filter duedate < SYSDATE-90
A5 · Income by source type + monthly journal/billed split (Section 6)
SELECT TO_CHAR(t.trandate,'YYYY-MM') AS mo,
       CASE WHEN t.type='Journal' THEN 'journal' ELSE 'billed' END AS src,
       ROUND(SUM(-tal.amount),2) AS income
FROM transactionaccountingline tal
JOIN transaction t ON tal.transaction = t.id
JOIN account a ON tal.account = a.id
WHERE t.posting='T' AND a.accttype IN ('Income','OthIncome')
  AND t.trandate >= TO_DATE('2025-07-01','YYYY-MM-DD')
  AND t.trandate <  TO_DATE('2026-07-01','YYYY-MM-DD')
GROUP BY TO_CHAR(t.trandate,'YYYY-MM'),
         CASE WHEN t.type='Journal' THEN 'journal' ELSE 'billed' END
ORDER BY 1, 2
A6 · Period lock status, future-dated postings, admin count (Sections 6–7)
-- Period locks (0 of 25 closed)
SELECT p.periodname, p.closed, p.aplocked, p.arlocked, p.alllocked
FROM accountingperiod p
WHERE p.isquarter='F' AND p.isyear='F' AND p.isadjust='F'
  AND p.startdate >= TO_DATE('2024-07-01','YYYY-MM-DD')
ORDER BY p.startdate

-- Future-dated posted transactions (209 / $596K)
SELECT COUNT(*) FROM transaction t
WHERE t.posting='T' AND t.trandate > TO_DATE('2026-08-10','YYYY-MM-DD')

-- Active Administrators (7)
SELECT COUNT(DISTINCT e.id) FROM employee e
JOIN employeerolesforsearch er ON er.entity = e.id
JOIN role r ON er.role = r.id
WHERE e.isinactive='F' AND r.name LIKE '%dministrator%'