Sample output from the Sales Growth Opportunity Audit 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
SONAR AI · BUSINESS DIAGNOSTIC · v2
Sales Growth Opportunities — August 2026
A full-spectrum audit of sales trends, pipeline, customers, inventory, and pricing — built from live NetSuite data on Aug 15, 2026. Every finding cites the exact SuiteQL query that produced it; every named record links directly into NetSuite.
The headline
The business is growing fast — revenue is up 80–120% year-over-year in recent months — but August is stalling. Month-to-date (Aug 1–15) revenue is -1.3% vs. last August, even though August 2025 was a strong month. The good news: roughly $460K+ of near-term, addressable revenue opportunity is sitting inside the account right now.
$62,878
Aug 1–15 revenue (vs $63,702 LY → -1.3%)
$129.6K
Open sales-order backlog (ship = book now)
$281K
Prior-yr revenue of 4 now-dormant accounts
$716K
First-purchase value of 37 one-time buyers
$40.9K
Cash tied up in slow-moving stock
Monthly revenue — Sep 2024 to Aug 2026(hover bars for detail; yellow = August months)
* Aug 2026 bucket ($132.6K) includes invoices forward-dated into late August — actual revenue recognized Aug 1–15 is $62.9K. The step-change in mid-2025 and the 2026 acceleration are real; the flat August pace is the anomaly.
Query used
SELECT TO_CHAR(t.trandate,'YYYY-MM') AS mth, ROUND(SUM(ABS(tl.netamount)),0) AS revenue,
COUNT(DISTINCT t.id) AS orders
FROM transaction t
JOIN transactionline tl ON tl.transaction = t.id AND tl.mainline = 'F' AND tl.taxline = 'F'
WHERE t.type IN ('CustInvc','CashSale') AND tl.subsidiary <> 4
GROUP BY TO_CHAR(t.trandate,'YYYY-MM') ORDER BY TO_CHAR(t.trandate,'YYYY-MM')
-- MTD pacing (apples-to-apples, day 1-15)
SELECT TO_CHAR(t.trandate,'YYYY') AS yr, ROUND(SUM(ABS(tl.netamount)),2) AS mtd_rev, COUNT(DISTINCT t.id) AS orders
FROM transaction t
JOIN transactionline tl ON tl.transaction = t.id AND tl.mainline = 'F' AND tl.taxline = 'F'
WHERE t.type IN ('CustInvc','CashSale') AND tl.subsidiary <> 4
AND TO_CHAR(t.trandate,'MM') = '08' AND TO_NUMBER(TO_CHAR(t.trandate,'DD')) <= 15
GROUP BY TO_CHAR(t.trandate,'YYYY') ORDER BY TO_CHAR(t.trandate,'YYYY')
Category momentum — last 13 months(revenue by product class; hover for values)
"Unclassified" is dominated by one item — SVC_Delivery Service ($688K TTM, no class, no location) — which spikes with the big wholesale invoices. Beauty is flat while its items top the co-purchase chart (see Opportunity 04). Miscellaneous only began selling in May 2026.
Query used
SELECT TO_CHAR(t.trandate,'YYYY-MM') AS mth, NVL(tl.class, 0) AS class_id, ROUND(SUM(ABS(tl.netamount)),0) AS revenue
FROM transaction t
JOIN transactionline tl ON tl.transaction = t.id AND tl.mainline = 'F' AND tl.taxline = 'F'
WHERE t.type IN ('CustInvc','CashSale') AND tl.subsidiary <> 4
AND t.trandate >= TO_DATE('2025-08-01','YYYY-MM-DD')
GROUP BY TO_CHAR(t.trandate,'YYYY-MM'), NVL(tl.class, 0)
ORDER BY TO_CHAR(t.trandate,'YYYY-MM'), NVL(tl.class, 0)
01Ship the backlog — $129.6K is already sold ACT THIS WEEK
The fastest money in this report. These orders are already won — they just haven't been approved, fulfilled, or billed. Every dollar shipped and invoiced before Aug 31 lands in this month's number.
Sales-order status
Orders
Value
Oldest
What's blocking it
Pending Fulfillment (B)
40
$73,709
May 15, 2026
Warehouse throughput — some orders 3 months old
Pending Approval (A)
13
$55,892
Aug 1, 2026
An internal signature. Approve today.
Pending Billing (F)
3
$2,937
Aug 1, 2026
Shipped, not invoiced — one click from revenue
Partially Fulfilled (E)
1
$596
Aug 11, 2026
Complete the shipment
The work list — all 13 pending-approval orders (click to open in NetSuite)
⚠ Duplicate-order alert (new finding): Design Excellence Ltd. has three pairs of identical-amount orders ($5,146.21 ×2, $3,273.99 ×2, $2,697.68 ×2), entered Aug 1 and re-entered Aug 14. Verify before approving — blind approval could double-ship ~$11.1K; alternatively, they're genuine repeat orders and worth confirming quickly. Either way, do not bulk-approve this batch.
Action: Approve the clean orders today (~$28K after setting the Design Excellence pairs aside), resolve the duplicates, invoice the 3 pending-billing orders ($2.9K), and run a fulfillment blitz on the 40-order backlog, oldest first. Realistic 2-week capture: $80–110K.
Queries used
SELECT t.status, COUNT(*) AS orders, ROUND(SUM(ABS(t.foreigntotal)),2) AS backlog_value, MIN(t.trandate) AS oldest
FROM transaction t
WHERE t.type = 'SalesOrd' AND t.status IN ('A','B','E','F')
GROUP BY t.status ORDER BY SUM(ABS(t.foreigntotal)) DESC
-- NS status letters: SalesOrd A=Pending Approval, B=Pending Fulfillment, E=Partially Fulfilled, F=Pending Billing
SELECT t.id, t.tranid, c.entityid AS customer, ROUND(ABS(t.foreigntotal),2) AS order_total, t.trandate
FROM transaction t JOIN customer c ON t.entity = c.id
WHERE t.type = 'SalesOrd' AND t.status = 'A'
ORDER BY ABS(t.foreigntotal) DESC
02Win back four dormant whales — $281K of lapsed annual revenue WIN-BACK
These customers spent heavily and then went silent. None has purchased in 6+ months. A personal call from a sales lead — not a mail blast — is warranted at these dollar values.
Pattern: growth is acquisition-driven (3 of the top 10 are brand-new) while the former #1 shrinks and one new whale already went dormant. Retention is the quiet leak.
Action: Assign each dormant account + Jones Manufacturing to a named owner this week. Global Information requires zero courtship — approving their pending order is the win-back. Recovering 25% of dormant run-rate ≈ $70K/yr; arresting the Jones decline ≈ $52K/yr.
Queries used
SELECT c.id, c.entityid, c.companyname, ROUND(SUM(ABS(tl.netamount)),2) AS prior_revenue, MAX(t.trandate) AS last_purchase
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 tl.subsidiary <> 4
GROUP BY c.id, c.entityid, c.companyname
HAVING MAX(t.trandate) < TO_DATE('2026-02-15','YYYY-MM-DD')
ORDER BY SUM(ABS(tl.netamount)) DESC FETCH FIRST 15 ROWS ONLY
SELECT c.id, c.entityid,
ROUND(SUM(CASE WHEN t.trandate >= TO_DATE('2025-08-16','YYYY-MM-DD') THEN ABS(tl.netamount) ELSE 0 END),0) AS ttm_rev,
ROUND(SUM(CASE WHEN t.trandate < TO_DATE('2025-08-16','YYYY-MM-DD') THEN ABS(tl.netamount) ELSE 0 END),0) AS prior12_rev
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 tl.subsidiary <> 4
AND t.trandate >= TO_DATE('2024-08-16','YYYY-MM-DD')
GROUP BY c.id, c.entityid
ORDER BY SUM(CASE WHEN t.trandate >= TO_DATE('2025-08-16','YYYY-MM-DD') THEN ABS(tl.netamount) ELSE 0 END) DESC
FETCH FIRST 10 ROWS ONLY
0337 one-time buyers worth $716K never came back REPEAT-PURCHASE
Thirty-seven customers made exactly one purchase — collectively $716,368 of first-order revenue — and were never sold to again. These are proven buyers with a validated need; a second-purchase campaign is the cheapest revenue you can generate.
Top 10 by first-order value (these ten = $624K, 87% of the total)
Note the overlap with Opportunity 02 — the dormant whales are the biggest one-time buyers. The single most important fix is structural: no second-order motion exists. New large accounts get invoiced once and nobody follows up.
Action: Direct outreach on the top 10 (freshest first: Greenwood, Magna Tech, Falcon); "we miss you" offer for the 27-account tail. Even 15% reactivation at half the original order size ≈ $50K+. Then make a 30-day post-first-invoice follow-up a standing sales task.
Queries used
SELECT COUNT(*) AS one_time_buyers, ROUND(SUM(rev),2) AS their_revenue
FROM (SELECT t.entity, COUNT(DISTINCT t.id) AS txns, SUM(ABS(tl.netamount)) AS rev
FROM transaction t
JOIN transactionline tl ON tl.transaction = t.id AND tl.mainline = 'F' AND tl.taxline = 'F'
WHERE t.type IN ('CustInvc','CashSale') AND tl.subsidiary <> 4
GROUP BY t.entity HAVING COUNT(DISTINCT t.id) = 1)
SELECT c.id, c.entityid, ROUND(SUM(ABS(tl.netamount)),2) AS first_order_value, MAX(t.trandate) AS purchase_date
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 tl.subsidiary <> 4
AND t.entity IN (SELECT entity FROM (SELECT t2.entity, COUNT(DISTINCT t2.id) AS txns
FROM transaction t2 WHERE t2.type IN ('CustInvc','CashSale')
GROUP BY t2.entity HAVING COUNT(DISTINCT t2.id) = 1))
GROUP BY c.id, c.entityid
ORDER BY SUM(ABS(tl.netamount)) DESC FETCH FIRST 10 ROWS ONLY
04Beauty bundles: your customers already built them for you MERCHANDISING
Co-purchase analysis of the last 12 months shows an unmistakable pattern: Beauty items are bought together constantly — yet the Beauty category's revenue is stagnant ($13.7K → $11.3K Aug-over-Aug). The demand pattern exists; it just isn't being packaged or promoted.
Item pair (bought on the same transaction)
Times together (12 mo)
Scalp Therapy Shampoo + Volumizing Shampoo
15
Rose Petal Shampoo + Scalp Therapy Shampoo
15
Rose Petal Shampoo + The Gentleman
15
Basil Lemon Hand Wash + The Gentleman
15
Scalp Therapy Shampoo + The Gentleman
15
Volumizing Shampoo + The Gentleman
14
Rose Petal Conditioner + Scalp Therapy Shampoo
13
These same items are also your fastest sellers by units (85 units/3mo each) with healthy stock (140–240 available) — you can promote them hard without stockout risk. The account already uses Kit items (22 exist), so the mechanics are proven.
Action: Create 2–3 Kit items this week (e.g., "Hair Care Duo", "Gentleman's Set") priced at a modest bundle discount, feature them at the SF/NY/Miami registers and on eCommerce. Bundles typically lift attach rate and AOV 10–25% on the category. Say the word and I'll draft the Kit records for your approval.
Query used
SELECT ia.itemid AS item_a, ib.itemid AS item_b, COUNT(DISTINCT a.transaction) AS times_together
FROM transactionline a
JOIN transactionline b ON a.transaction = b.transaction AND a.item < b.item
JOIN transaction t ON t.id = a.transaction
JOIN item ia ON ia.id = a.item JOIN item ib ON ib.id = b.item
WHERE t.type IN ('CustInvc','CashSale') AND t.trandate >= TO_DATE('2025-08-15','YYYY-MM-DD')
AND a.mainline = 'F' AND a.taxline = 'F' AND b.mainline = 'F' AND b.taxline = 'F'
AND a.item IS NOT NULL AND b.item IS NOT NULL
AND ia.itemtype IN ('InvtPart','Assembly','Kit') AND ib.itemtype IN ('InvtPart','Assembly','Kit')
GROUP BY ia.itemid, ib.itemid
ORDER BY COUNT(DISTINCT a.transaction) DESC FETCH FIRST 10 ROWS ONLY
05Turn $40.9K of dead stock into cash and traffic CLEARANCE
48 active inventory items have stock on hand but zero sales in the last 6 months — $40,855 of working capital sitting still. Mid-August is prime clearance-event season (back-to-school traffic; assumption noted in Sources).
Note the profile: much of this is components/electronics (copper, solder mask, PCB, valve parts) — likely manufacturing inputs for discontinued builds, not retail SKUs. Those may be better sold as a lot to a surplus buyer than through a store clearance; the ASUS monitor and retail-facing SKUs belong in a clearance endcap.
Action: Split the 48-item list: retail SKUs → August clearance event (drives traffic that also sees the new Beauty bundles); manufacturing components → surplus/lot sale or return-to-vendor. Target: convert $15–25K to cash this month.
Query used
SELECT COUNT(*) AS slow_items, ROUND(SUM(onhand_value),2) AS tied_up_value
FROM (SELECT i.id, SUM(iil.onhandvaluemli) AS onhand_value
FROM item i JOIN inventoryitemlocations iil ON iil.item = i.id
WHERE i.itemtype = 'InvtPart' AND NVL(i.isinactive,'F') = 'F'
GROUP BY i.id HAVING SUM(iil.quantityonhand) > 0) iv
WHERE NOT EXISTS (SELECT 1 FROM transactionline tl JOIN transaction t ON t.id = tl.transaction
WHERE tl.item = iv.id AND tl.mainline = 'F' AND t.type IN ('CustInvc','CashSale')
AND t.trandate >= TO_DATE('2026-02-15','YYYY-MM-DD'))
-- Top-items variant: same predicate, GROUP BY item, ORDER BY value DESC
06Channel fixes: copy the SF playbook to NY, arrest DC order-size erosion STRUCTURAL
Store channel — NY is the laggard
Location
TTM rev
Prior 12
Δ
SF Store (1)
$89.2K
$63.5K
+40%
Miami (12)
$411.1K
$299.5K
+37%
NY Store (3)
$53.4K
$50.9K
+4.9%
Chicago DC (8)
$0
$0
dead
Store AOV is rising overall ($495 → $861, +74% since Q1-25) — whatever SF and Miami are doing (assortment? attach-selling?), NY isn't. Chicago DC has zero revenue lines ever — confirm whether it's supply-only by design or an untapped fulfillment channel.
DC channel — order size halved
Quarter
DC AOV
Q3 2025
$8,843
Q4 2025
$5,037
Q3 2026
$4,329
Wholesale/DC revenue is still growing (+19% LA, +37% Miami) but on more, smaller orders — average DC order value has halved in a year. That's rising fulfillment cost per revenue dollar and a pricing-leverage opportunity.
Action: Introduce volume-tier pricing or minimum-order incentives (free freight over $X) on wholesale accounts. Restoring even 20% of the lost order size on DC volume is a five-figure monthly lift.
Queries used (location + AOV)
-- Location TTM vs prior-12
SELECT tl.location,
ROUND(SUM(CASE WHEN t.trandate >= TO_DATE('2025-08-16','YYYY-MM-DD') THEN ABS(tl.netamount) ELSE 0 END),2) AS ttm_rev,
ROUND(SUM(CASE WHEN t.trandate < TO_DATE('2025-08-16','YYYY-MM-DD') THEN ABS(tl.netamount) ELSE 0 END),2) AS prior12_rev
FROM transaction t
JOIN transactionline tl ON tl.transaction = t.id AND tl.mainline = 'F' AND tl.taxline = 'F'
WHERE t.type IN ('CustInvc','CashSale') AND tl.subsidiary <> 4
AND t.trandate BETWEEN TO_DATE('2024-08-16','YYYY-MM-DD') AND TO_DATE('2026-08-15','YYYY-MM-DD')
GROUP BY tl.location
ORDER BY SUM(CASE WHEN t.trandate >= TO_DATE('2025-08-16','YYYY-MM-DD') THEN ABS(tl.netamount) ELSE 0 END) DESC
-- AOV by channel by quarter
SELECT TO_CHAR(t.trandate,'YYYY') || '-Q' || TO_CHAR(t.trandate,'Q') AS qtr,
CASE WHEN tl.location IN (1,3,12) THEN 'Store' WHEN tl.location IN (5,8) THEN 'DC' ELSE 'Other' END AS channel,
COUNT(DISTINCT t.id) AS orders, ROUND(SUM(ABS(tl.netamount)),2) AS revenue,
ROUND(SUM(ABS(tl.netamount)) / COUNT(DISTINCT t.id),2) AS aov
FROM transaction t
JOIN transactionline tl ON tl.transaction = t.id AND tl.mainline = 'F' AND tl.taxline = 'F'
WHERE t.type IN ('CustInvc','CashSale') AND tl.subsidiary <> 4
AND t.trandate >= TO_DATE('2024-07-01','YYYY-MM-DD')
GROUP BY 1, 2 ORDER BY 1, 2
07Smaller signals worth knowing
Retail is quietly having its best August ever: Aug 2026 cash sales are ~$15.1K on 61 transactions — roughly 2× any prior month. Whatever in-store momentum exists, fuel it (it pairs naturally with the bundle + clearance plays above).
Quoting is nearly unused: only 10 estimates ever, 1 converted (10%); just $7.5K sits open. The estimate-to-order muscle barely exists — if the sales team quoted more, this would become a managed pipeline instead of a rounding error. (Query: status rollup on type='Estimate' + conversion via nexttransactionlink.)
$687.9K TTM of revenue is one unclassified line — "SVC_Delivery Service" — with no class and no location. It masks the true product mix in every report (including parts of this one). Classify it (or split freight-out properly) and category analytics get dramatically sharper.
No stockout emergencies: top sellers carry roughly 4–6 months of cover at current velocity (e.g., Basil Lemon Hand Wash: 85 units/3mo vs 159 available). Safe to promote aggressively.
Un-stocked matrix variants: matrix parents 1035 / 1085 / 2442SL have color variants with zero stock and zero sales history — possible missed size/color demand, but no data proves it; check with merchandising before buying.
Fulfillment blitz on 40-order backlog (oldest first)
$40–70K
Days
Booked orders
Warehouse
3
Personal win-back calls: 4 dormant whales + Jones Mfg
$10–30K
Days
Strong hooks exist
Sales leads
4
Launch 2–3 Beauty kit bundles at registers + eCom
$5–15K
Days
Demand proven
Merchandising
5
Clearance event (retail) + surplus lot sale (components)
$15–25K
1 week
Discount-dependent
Merch + purchasing
6
Second-purchase campaign to 37 one-time buyers
$10–50K
1 week
Proven buyers
Marketing
7
Wholesale volume-tier pricing (DC AOV fix)
Structural
2 weeks
Behavioral
Sales mgmt
Moves 1–2 alone can close most of the August gap: the month needs roughly $67K more than last year's pace to stay on the 2026 growth trend, and $129.6K of booked orders is waiting.
Data sources, methodology & assumptions
Sources
All figures queried live from NetSuite (account TD3016323) via SuiteQL on 2026-08-15: tables transaction, transactionline, customer, item, inventoryitemlocations, nexttransactionlink, pricing.
Research executed as three read-only investigations (trends/seasonality, pipeline/customers, inventory/pricing) plus direct verification queries; every cited query appears verbatim in the "Queries used" panels above, with copy buttons — paste into the SuiteQL Query Tool to re-run.
Record links use relative NetSuite URLs and work for any logged-in user of this account.
Definitions & assumptions
"Revenue" = posted line amounts on Invoices + Cash Sales (mainline='F' AND taxline='F', ABS(netamount)), excluding elimination subsidiary 4. Excludes Sales Orders (non-posting) except where explicitly labeled backlog.
Transaction history begins Sep 2024 — "seasonality" is therefore limited to one prior August; multi-year seasonal claims are not possible from this data.
Aug 2026 monthly total ($132.6K) includes invoices dated after Aug 15 (forward-dated); MTD pacing uses day-1-to-15 in both years for a fair comparison.
"Dormant" = no invoice/cash sale since Feb 15, 2026 (6 months). "One-time buyer" = exactly one lifetime invoice/cash-sale transaction.
The duplicate-order flag is amount+customer matching only — line-level comparison was not run. Verify on the records before canceling anything.
Slow-mover value uses NetSuite's computed on-hand value (inventoryitemlocations.onhandvaluemli), not qty × average cost.
Backlog values use header foreigntotal (includes tax/shipping), so backlog ≠ net revenue exactly.
Back-to-school seasonal timing is general retail knowledge, not account data — an external NRF source was checked but unavailable (404) at report time.
Potential-value ranges in the playbook are directional estimates from the cited base numbers, not forecasts.