Comparative financial analysis · NetSuite TD3016323
Revenue, expense, and profitability comparison for the quarter ended June 2026 against the same quarter of 2025, with drivers traced to accounts, products, and customers.
Comparing: the quarter April to June 2026 with the same quarter of 2025, consolidated across the three operating subsidiaries, elimination entity excluded. Revenue rose +20.5% to $3,130,018. Gross margin held at 39.2%, down 0.4 points. Operating expenses rose only +4.5%, so operating income increased +57.8% to $454,480 and operating margin expanded 3.4 points to 14.5%. The story of the quarter is operating leverage: the cost base barely moved while revenue grew a fifth.
One qualification governs how the revenue figure should be read. 84% of recognized income in the current quarter, and 88% in the prior, was posted by journal entry rather than by invoices or cash sales. The revenue traceable to billing documents was $508,809 against $317,443, a +60.3% increase, which is stronger growth than the headline but on a much smaller base. Both views are shown below. The driver analysis is built on billing documents, because journal-posted revenue carries no item, customer, or quantity to analyze.
| Metric | Q2 2026 | Q2 2025 | Change | Change % | Driver |
|---|---|---|---|---|---|
| Revenue | $3,130,018 | $2,597,443 | $532,575 | +20.5% | Product revenue account (+$503K); 84% of income is journal-posted, see integrity check |
| Cost of goods sold | $1,902,665 | $1,569,759 | $332,906 | +21.2% | Purchases (+$253K) and cost of sales (+$51K), in line with revenue |
| Gross profit | $1,227,353 | $1,027,684 | $199,669 | +19.4% | Gross margin 39.2% vs 39.6%, -0.4 pt |
| Operating expenses | $772,873 | $739,636 | $33,236 | +4.5% | Salaries (+$25.7K, +10.8%), advertising (+$8.2K, +15.0%); all else flat or lower |
| Operating income | $454,480 | $288,048 | $166,432 | +57.8% | Operating margin 14.5% vs 11.1%, +3.4 pts |
| Net income | $448,254 | $281,625 | $166,630 | +59.2% | Other expense flat at $6K |
Income postings by source transaction type. The journal series moved from $2.28M to $2.62M, a +15.0% step that accounts for 64% of the total revenue increase. Whether that series represents real activity is a question for the controller, and it is flagged for human review; this analysis takes the ledger as posted.
| Revenue walk | Amount | |
|---|---|---|
| Q2 2025 revenue | $2,597,443 | |
| + Journal-posted income | $341,208 | |
| + Invoice revenue | $189,101 | |
| + Cash sale revenue | $2,265 | |
| = Q2 2026 revenue | $3,130,018 |
The growth in billed revenue came from two places. Home and Decor nearly doubled on volume: 436 units against 267, led by the Contour Rhapsody Breeze mattress line, where every size sold 23 or 24 units against 10 a year earlier. Delivery service revenue more than doubled, 29 engagements against 8, which follows the furniture volume. Apparel revenue grew 9% on flat units, so that gain is price or mix. Beauty was flat in both revenue and units.
| Class | Q2 2025 | Q2 2026 | Change | Change % | Units, prior | Units, current | Units % |
|---|---|---|---|---|---|---|---|
| Home & Decor | $108,372 | $200,520 | $92,149 | +85.0% | 267 | 436 | +63.3% |
| Delivery Service (no class) | $74,217 | $158,214 | $83,997 | +113.2% | 8 | 29 | +262.5% |
| Apparel | $93,809 | $102,102 | $8,293 | +8.8% | 862 | 864 | +0.2% |
| Miscellaneous | $0 | $5,125 | $5,125 | n/a | 0 | 37 | new |
| Beauty | $39,596 | $39,436 | -$160 | -0.4% | 1,488 | 1,453 | -2.4% |
Based on: volume effect = change in units x prior average unit revenue; price effect = change in average unit revenue x current units. Mix within a class is included in the price effect.
| Class | Revenue change | Volume effect | Price and mix effect |
|---|---|---|---|
| Home & Decor | $92,149 | $68,595 | $23,554 |
| Delivery Service | $83,997 | $194,820 | -$110,823 |
| Apparel | $8,293 | $218 | $8,076 |
| Beauty | -$160 | -$931 | $771 |
Ten customers invoiced in the current quarter had no invoices in the prior quarter, and four prior-quarter customers had none in the current. Existing customers grew 23%. The largest lost account, Mercury Co. at $80,079, also carries an $80,079 open receivable that is 460 days past due, so the loss and the collection problem are the same account. The largest new account, Falcon Systems at $86,007, has not yet paid any of it. Both are flagged for human review.
| Group | Customers | Q2 2025 | Q2 2026 | Change |
|---|---|---|---|---|
| New customers | 10 | $0 | $230,044 | $230,044 |
| Lost customers | 4 | $80,660 | $0 | -$80,660 |
| Existing customers | 39 | $239,608 | $294,847 | $55,239 |
| Customer | Q2 2025 | Q2 2026 | Change | Status |
|---|---|---|---|---|
| Falcon | $0 | $86,007 | $86,007 | New |
| Mercury Co. | $80,079 | $0 | -$80,079 | Lost |
| Blockster | $0 | $54,336 | $54,336 | New |
| John G. Roche Opticians | $0 | $31,810 | $31,810 | New |
| Greenwood Consulting | $0 | $26,275 | $26,275 | New |
| Heidelberg Haus | $0 | $22,474 | $22,474 | New |
| Pineapple Republic | $25,128 | $44,698 | $19,570 | Existing |
| Design | $33,201 | $43,467 | $10,266 | Existing |
Cost of goods sold rose +21.2%, a point faster than revenue, which is the whole of the 0.4-point gross margin decline. Operating expenses rose $33,236 on a base of $739,636. Two accounts explain the increase and everything else was flat or slightly lower: salaries and wages, up $25,744 or 10.8%, and advertising, up $8,189 or 15.0%. Twenty-two general and administrative accounts each declined by roughly 2%, a pattern regular enough to suggest a uniform adjustment rather than twenty-two separate decisions.
| Account | Name | Type | Q2 2025 | Q2 2026 | Change | Change % |
|---|---|---|---|---|---|---|
| 4210 | Revenue - Products | Income | $2,413,594 | $2,916,909 | $503,315 | +20.9% |
| 5310 | Purchases | COGS | $1,285,521 | $1,538,634 | $253,113 | +19.7% |
| 5340 | Cost of Sales | COGS | $141,894 | $193,036 | $51,141 | +36.0% |
| 5360 | 3rd Party Contracting | COGS | $142,344 | $170,996 | $28,651 | +20.1% |
| 4310 | Revenue - Services | Income | $182,400 | $209,697 | $27,297 | +15.0% |
| 6210 | Salaries & Wages | Expense | $237,500 | $263,244 | $25,744 | +10.8% |
| 6060 | Advertising | Expense | $54,720 | $62,909 | $8,189 | +15.0% |
| 6610 | Rent Expense | Expense | $36,300 | $39,930 | $3,630 | +10.0% |
| 6230 | Payroll Expenses | Expense | $25,093 | $27,644 | $2,551 | +10.2% |
| 4450 | Freight Revenue | Income | $1,449 | $3,412 | $1,963 | +135.5% |
Gross margin: 39.6% to 39.2%, immaterial under the 1-point threshold. Operating margin: 11.1% to 14.5%, material at 3.4 points. The expansion is arithmetic: gross profit grew $199,669 and operating expenses grew $33,236, so 83% of the incremental gross profit reached operating income. On the billing-document view alone, the same conclusion holds with more force: billed revenue grew 60% and operating expenses grew 4.5%.
| Driver | Direction | Evidence | Recurring or one-time | Controllable |
|---|---|---|---|---|
| Journal-posted income series | +$341K | Journal entries to revenue accounts in both quarters | Recurring by pattern; nature requires review | Accounting policy |
| Furniture volume (Home and Decor) | +$92K | Units +63%, Contour Rhapsody Breeze line 23 vs 10 per size | Recurring if demand holds | Sales and inventory |
| Delivery service engagements | +$84K | 29 vs 8 engagements | Follows furniture volume | Operations |
| New customers | +$230K | 10 accounts with no prior-quarter invoicing; largest is unpaid | Unknown until collected | Credit |
| Lost customers | -$81K | 4 accounts; Mercury Co. is 460 days past due | One-time | Collections |
| Salaries and advertising | -$34K | Only two operating accounts that rose | Recurring | Management |
| ID | Type | Name | Handle | Scope | Used for | Complete |
|---|---|---|---|---|---|---|
| DL-001 | SuiteQL | P&L by account | transactionaccountingline join account, accountingperiod | Posting periods Apr-Jun 2026 and Apr-Jun 2025, subsidiaries 1-3 | Comparison summary, expense variances | Yes |
| DL-002 | SuiteQL | Income by source type | same, grouped by transaction type | Same | Integrity check, revenue walk | Yes |
| DL-003 | SuiteQL | Revenue by item | transaction (CustInvc, CashSale) join transactionline, item | Transaction dates in both quarters | Class, unit, price and volume analysis | Yes |
| DL-004 | SuiteQL | Revenue by customer | transaction (CustInvc) | Same | Customer movement | Yes |
Adaptations from the prompt's templates: amounts come from transactionaccountingline rather than transactionline.amount, so that they match the posted ledger; periods are selected by posting period for the P&L and by transaction date for the item and customer detail; the elimination subsidiary is excluded through the line-level subsidiary, because transaction.subsidiary is not exposed to SuiteQL; item class comes from the transaction line rather than the item record, which is unclassified for most items in this account.
SELECT a.acctnumber, a.fullname, a.accttype,
SUM(CASE WHEN ap.startdate >= DATE '2026-04-01' AND ap.enddate <= DATE '2026-06-30' THEN -tal.amount ELSE 0 END) AS cur_amt,
SUM(CASE WHEN ap.startdate >= DATE '2025-04-01' AND ap.enddate <= DATE '2025-06-30' THEN -tal.amount ELSE 0 END) AS prior_amt
FROM transactionaccountingline tal
JOIN transaction t ON t.id = tal.transaction
JOIN transactionline tl ON tl.transaction = tal.transaction AND tl.id = tal.transactionline
JOIN account a ON a.id = tal.account
JOIN accountingperiod ap ON ap.id = t.postingperiod
WHERE tal.posting = 'T' AND a.accttype IN ('Income','COGS','Expense','OthIncome','OthExpense') AND tl.subsidiary <> 4
AND (both period windows)
GROUP BY a.acctnumber, a.fullname, a.accttype
-- same query grouped by t.type, restricted to accttype = 'Income' (DL-002)
SELECT tl.item, BUILTIN.DF(tl.item), i.itemtype, BUILTIN.DF(tl.class),
SUM(CASE WHEN current quarter THEN -tl.quantity END), SUM(CASE WHEN prior quarter THEN -tl.quantity END),
SUM(CASE WHEN current quarter THEN -tl.netamount END), SUM(CASE WHEN prior quarter THEN -tl.netamount END)
FROM transaction t JOIN transactionline tl ON tl.transaction = t.id JOIN item i ON i.id = tl.item
WHERE t.type IN ('CustInvc','CashSale') AND t.posting = 'T' AND tl.mainline = 'F' AND tl.taxline = 'F' AND tl.subsidiary <> 4
GROUP BY tl.item, BUILTIN.DF(tl.item), i.itemtype, BUILTIN.DF(tl.class)
SELECT t.entity, BUILTIN.DF(t.entity), SUM(current quarter foreigntotal), SUM(prior quarter foreigntotal)
FROM transaction t WHERE t.type = 'CustInvc' AND t.posting = 'T' GROUP BY t.entity, BUILTIN.DF(t.entity)| Assumption | Category | Rationale | Sensitivity | Impact if wrong |
|---|---|---|---|---|
| Both quarters are 91 days and fully posted | Data | Apr-Jun in both years; no periods are locked in this account | High | All comparisons |
| Ledger amounts as posted are the basis, including journals | Business logic | The P&L is what the books say | High | Headline growth rate; billing-document view provided as the alternative |
| Elimination subsidiary excluded | Method | Intercompany eliminations distort operating comparison | Low | Totals |
| Materiality: revenue >10%, expenses >15% or $50K, margin >3 pts | Method | Prompt thresholds | Low | Which variances are called material |
| Test | Objective | Result |
|---|---|---|
| G1-001 | Period totals reconcile | Pass income by account ({money(inc[0])}) equals income by source type ({money(sum(s['cur_income'] for s in src.values()))}) |
| G1-002 | Periods comparable | Pass 91 days each |
| G1-003 | Data complete | Pass 57 accounts with activity; no unposted transactions in either window |
| G2-001 | Variance arithmetic | Pass computed in code; summary rows foot |
| G2-002 | Percentage calculation | Pass change / prior |
Confidence: 95% in the period figures as posted; 80% in the driver attribution for billed revenue (price and volume effects are computed per class and include mix); the journal series is reported, not explained, and its characterization requires human review.