auto-pulled per source from platform APIs · refreshed hourly
Total Spend
$0
all platforms
Qualified Calls
—
5 closer teams · Auto-QA verified
Closing %
—
deals / qualified calls
CPQC
—
spend / qualified calls
CPA
—
spend / deals
ROAS
—
revenue / spend
Sources
Source
Spend
Deals
Avg Tax Debt
PIF
PS
PN
Revenue
CPA
ROAS
Rangeor pick:→
Revenue per Agent
Loading…
Company revenue (ADServe excluded, net of refunds — same figure as the hero card) credited to each settlement officer / closer for the selected window.
Staffing & Capacity — Hire · Hold · Cut
Per-Deal Economics — Cost vs Lifetime Return
scale by ROI, not CPA
The whole question in three numbers, per deal: ① what it COST to acquire, ② what it's EARNED so far, ③ what it'll earn over its LIFETIME → the Lifetime ROI. If the ROI is strong, the CPA doesn't matter — we keep buying. (Recent months' ② and ③ are still maturing — see the % under each month.)
Revenue Month
Dealstotal TIs
① Cost / DealCPA · what we paid
② Revenue Collected / Dealso far · climbing
③ Lifetime Value / Dealprojected total
Lifetime ROI③ ÷ ① · the verdict
Pace to Beat Last Month
Company floor revenue, net of refunds, ADServe excluded
—
—
projected end of month
Month-by-Month: Where Each Month's Revenue Came From
Each row = the TIs we generated that month, tracked by Case ID. What they COST (Ad Spend → CPA per deal) vs what we EXTRACTED from them (LTV = every dollar those deals ever pay, ADServe excluded, net of refunds) → the RETURN (Cohort ROAS = LTV ÷ Spend). The middle columns just break that down. The blue/green split = revenue collected THIS month: blue from deals sold this month, green recurring from prior months — sums to Total Revenue (Without ADServe), company-only.
LIFETIME = tracks the cohort over time — recent months understate (still maturing)THIS MONTH = locked to that calendar month~% mature (under each month) = how much of that cohort's lifetime revenue has landed; LIFETIME columns climb until ~9 monthsSame-Month revenueRecurring revenue
Total Revenue (Without ADServe)THIS MONTH · CASH IN
Total Revenue (With ADServe)THIS MONTH · CASH IN
From Same-Month Deals
Recurring From Previous Months
Cohort ROAS LTV ÷ SpendLIFETIME · THE ANSWER
Contracted signed feesLIFETIME · CEILING
% CollectedLIFETIME
Projected Contracted × RLIFETIME · PROJECTED
Projected ROASLIFETIME · FORWARD
ROI With ADServeTHIS MONTH · CASH
ROI Without ADServeTHIS MONTH · CASH
Scale Score spend more?
Investigations
Resolutions
Same-Mo Total
Recurring Inv
Recurring Reso
Recurring Total
v5.89.2
v5.89.2 — Column reorder is now drag-and-drop: grab the ⠿ handle and drop a column anywhere (the ▲▼ arrows still work for fine moves). Much faster than clicking arrows to move a column across the table. v5.89.1 — Columns dropdown now also REORDERS: ▲▼ arrows next to each column set the order (first→last), persisted; Reset restores defaults. The 6 same-month/recurring columns move as one block; Revenue Month stays pinned first. v5.89.0 — Month-by-Month table: new "⚙ Columns" dropdown to show/hide any column (persisted across reloads); replaces the single PS/PN toggle, which is migrated in. Column reorder is the next step. v5.88.6 — Reverted the v5.88.5 global zoom (0.8) back to 100% — it made the dashboard hard to read. v5.88.5 — Collapsed the on-page changelog (it was rendering the full version history as a wall of text at the bottom of the page) down to just the version number; full history kept in a hidden element so nothing is lost. Also added a global zoom (0.8) so more of the dashboard fits on one screen. v5.88.4 — Sources table Spend column is now penny-exact ($XXX,XXX.XX) — both the per-source rows and the Total — so it reconciles to each ad platform's UI (Google Ads, Meta, TikTok, Taboola) to the cent. v5.88.3 — Sources table column reorder: Spend now sits right after the Source name (before Deals), so the row reads Source → Spend → Deals → … → CPA → ROAS. Applies to both the By-Campaign and Sources views and the Total row. v5.88.2 — REVENUE headline is now penny-exact ($X,XXX,XXX.XX): the value, the ADServe/total sub-line, and the weekday-rate breakdown all show cents so it reconciles to the SOComm total. (EOM forecast stays whole — it's a projection, not a reconciled figure.) v5.88.1 — Trends table: the Source column is now frozen (sticky-left) so it stays visible when scrolling the day/month columns horizontally. v5.88.0 — Trends now has a granularity selector (Daily / Monthly / 6 Months / 1 Year) — trend ANY metric (CPA, ROAS, Deals, Avg Debt, PIF%, Revenue) per source at any resolution, same green/red heatmap. Daily uses its own window chips (This Month / 30d / 60d / 90d) and scrolls horizontally. Daily CPA & ROAS per source are powered by a NEW daily per-source spend feed (Google campaign-split-by-day → ad_spend_daily_source, refreshed hourly + nightly, reconciled to the monthly m_ doc to the dollar). Daily PIF% = cumulative paid-in-full to date (same-day cash is ~always 0, so a same-day rate would read 0%). v5.87.0 — Forecast + headline now speak the same business-day language. The Revenue Forecast card splits "days remaining" into biz vs weekend days and adds an "at this month's biz-day pace" cross-check (weekday-rate × remaining weekdays + weekend-rate × weekend days) so it reconciles with the headline instead of reading low next to it. The headline's $/biz-day is now a TRUE weekday rate — weekday cash only (weekends stay in the TOTAL but not the per-weekday velocity); it was folding weekend cash in, which inflated the rate. All three reads of the month (headline pace, biz-day pace, DoW forecast) now land within ~3% of each other, all a few points under May's record. v5.86.0 — Revenue freshness chip now flags RED if the latest SOComm export is more than 14h old during business hours (Mon–Fri, 8 AM–7 PM) — it was a flat 30h, which let a 15h-stale feed sit un-flagged on a Friday morning and read as "stuck". Off-hours/weekends keep the looser 30h guard so it doesn't nag overnight. Hover the Revenue chip when red for the data age + a "drop a fresh export" reminder. v5.85.0 — Toggle on the Month-by-Month table to collapse the Paid Something + Paid Nothing columns (keeps Paid In Full). Checkbox in the legend bar; preference remembered across reloads (localStorage). v5.84.0 — Avg Debt (Resolved) is now the tax debt AT the resolution sale (POINT-IN-TIME), not the current value. Per CMO: it's what the debt was when we sold the resolution. Computed from the IRS Logics CaseActivity "Tax Liability changed to X" history, anchored to the "Zapier Resolution Sold" date — reverting any later correction (e.g. case 102019: sold Nov-2024 at $50k, corrected to $42,764 in Oct-2025 → the column shows $50k). Source: cohort_resolved_debt/current ← cohort-resolved-debt-precompute.mjs. v5.83.0 — New column: Avg Tax Debt (Resolved) — the average IRS debt of the deals that converted to a resolution, next to Resolution Rate. Confirms the quality signal: resolvers carry meaningfully more debt than the cohort overall (e.g. Oct 2024 $34.7k resolved vs $27.2k all; sub-line shows the % delta). Same source as Avg Tax Debt: MySQL deals.Amount_Owed (2024-10+) + IRS Logics CaseInfo.TaxLiability (2023-2024, re-pulled). Small-sample guarded (≥10 resolvers). v5.82.0 — The LAST two columns for 2023–2024: Paid In Full and TI Sold→Reso Opp %. Paid In Full (+ Paid Something/Nothing, now all coherent) from IRS Logics SUCCESS payments per TI Log case vs the Investigation invoice fee — same method as 2025+ (PIF ~16–25%, PS ~59–71%). Reso Opp % (same-month) from MySQL caseStatusTimeline "Ready To Present" events joined to the TI Log cases — same source the live metric uses (~4–13% same-month). The 2023–24 cohort table now matches the 2026 rows column-for-column (only Jun 2023 stays sparse — PARTIAL). Sources: cohort_pif/current ← cohort-pif-precompute.mjs · resoOppSame in cohort_ltv. v5.81.0 — Avg Tax Debt + Contracted / % Collected / Projected / Projected ROAS for 2023–2024, pulled from IRS Logics per TI Log case (23,100 API calls): CaseInfo.TaxLiability → Avg Tax Debt, Billing/CaseInvoice → Contracted (company, excl AdServe), joined to cleared revenue. Avg debt runs ~$23k–$35k; ~40–53% collected (matching the ~50% mature rate). Avg Tax Debt falls back to this pre-Oct-2024 (MySQL debt_summary wins where present); Contracted/Projected fall back pre-2025. Jun 2023 skipped (PARTIAL). Source: cohort_irslogics/current ← cohort-irslogics-precompute.mjs (nightly). v5.80.1 — HOTFIX: v5.80.0's Scale Score still read pm.pif directly when pmTotal>0, but pre-2025 now sets pmTotal from cohort_ltv with pm undefined → render threw "cannot read pif", blanking the board. Guarded the pm reference. v5.80.0 — More 2023–2024 cohort columns from the TI Log × all-time revenue: Paid Something, Paid Nothing, Resolution Rate, and Avg Reso Fee now populate for Jul 2023–Dec 2024 (mature cohorts run ~35–44% resolution rate, ~$3.0k–5.3k avg reso fee). Paid Something/Nothing = cohort cases that paid any / no all-time company revenue; Resolution Rate + Avg Reso Fee = cases with a resolution-type payment and their reso revenue. Paid In Full stays blank pre-2025 (needs per-case fee data); Avg Tax Debt + Contracted/Projected coming next from IRS Logics. v5.79.0 — Real LTV + Cohort ROAS for 2023–2024. Joined the CMO's TI Log (11,550 investigations sold Jun 2023–Dec 2024, by Case ID) to all-time company revenue → per-cohort lifetime value, filling the previously-blank LTV and Cohort ROAS columns. The mature 2023–24 cohorts run ~5–6x Cohort ROAS (LTV ÷ ad spend). June 2023 is skipped — the log starts 6/20 so it only covers 22% of the month (PARTIAL), which would understate ROAS. ~37–42% of cases have no revenue on file (didn't convert), so LTV is a realized floor. Sources: ti_log_sold/current ← ti-log-ingest.mjs · cohort_ltv/current ← cohort-ltv-precompute.mjs (TI Log × revenue). v5.78.2 — Filled the Jan–Apr 2025 gap in Qualified Calls / Cost-per-Call / Closing %: live call-counts only begin May 2025, and the tracker fallback was bounded to pre-2025, so those four months showed blanks. Loosened the rule — the Trend Tracker now fills ANY funnel cell the live feed is missing (deals still stay live for 2025+). v5.78.1 — Reverted the v5.77.2 column reorder: the Month-by-Month columns are back in their ORIGINAL order (Revenue Month · Ad Spend · Qualified Calls · Cost/Call · Closing % · Deals (TI) · Reso Opp % · Resolution Sold · CPA · Avg Debt · PIF/PS/PN · Revenue Per TI · … · Total Revenue · blue/green split · … · Scale Score). The reorder only existed to hide the pre-2025 blanks; now that the Trend Tracker backfill (v5.78.0) fills those leading columns back to 2023, the familiar order is restored AND fully populated. v5.78.0 — Pre-2025 history filled from the CMO's manual "Trend Tracker". The Month-by-Month funnel columns (Deals · Ad Spend · Qualified Calls · Cost/Call · Closing % · CPA · Resolutions) were blank before 2025 because ad spend (Jan 2025+), call counts (mid-2025+) and the deals/debt table (Oct 2024+) don't reach back. The tracker does — funnel to 2023, spend to 2022 — and (verified) its Investigations count is MORE complete than the live feed, which undercounts ~3% and is empty Jan–May 2023. Per CMO decision the tracker is the deal + funnel source for pre-2025; live stays authoritative 2025+. Cost/Call, Closing %, CPA are DERIVED from the tracker's deals/spend/calls so they reproduce its numbers exactly. Revenue still comes from the live system. Source: funnel_history/current ← ad-intel funnel-history-ingest.mjs (re-run on a fresh tracker export). v5.77.2 — Month-by-Month columns reordered so the data that goes back to 2023 LEADS: Deals (TI), Total Revenue, the same-month vs recurring split, Revenue Per TI, Resolution Sold, LTV — then the spend-derived / recent-only columns (Ad Spend, CPA, Cost/Call, Closing %, Avg Tax Debt, PIF) follow on the right. Old rows no longer open onto a wall of blanks; nothing was removed, just resequenced. The pre-2025 blanks are real data gaps, not a display bug: ad spend only exists from Jan 2025 and the deals/debt table starts Oct 2024 (verified — no debt source reaches 2023; Avg Tax Debt precompute pinned to its true Oct-2024 floor so it never ages off). v5.77.1 — Wider tables: inside the tabbed layout the content container kept the global 1200px max-width + auto-centering, so on wide monitors it floated in the middle, leaving a big gap between the left nav and the table. Now the container fills the space next to the sidebar (max-width removed, flush-left), so the Month-by-Month and Per-Deal tables get the full width. v5.77.0 — Left-nav tabs: the page is split into Dashboard (headline → forecast → ad spend → sources), Staffing & Capacity, Per-Deal Economics, and Month-by-Month Revenue. Each is its own page; hard refresh always lands on Dashboard. All sections still render on load (just hidden until selected), so nothing slows down. v5.76.1 — fix: cohort window boundary was off by one (May 2025 fell in a gap between the precompute and the live window). Now contiguous — every month from Jan 2023 to now. v5.76.0 — Month-by-Month cohort table now shows back to January 2023 BY DEFAULT, fast: deals + revenue + same/recurring split for older months come from the nightly `cohort_history` precompute (verified to match the live computation to the penny), so no slow client load and no button. CPA / Avg Debt / LTV / Cohort ROAS stay blank before 2025 (no ad-spend / precompute data that far back). Per-Deal Economics table stays at 13 months. (Replaces the v5.75 on-demand "Extend to 2023" button.) on demand, loads deals + revenue back to Jan 2023 (rolling 13-month window otherwise, kept fast by default). CPA / Cohort ROAS stay blank before 2025 — ad-spend data only exists from Jan 2025; deal+LTV columns populate from 2023 (investigations_sold + revenue). v5.74.0 — Staffing panel now leads with the ANSWER: a hero banner stating the action + how many + how soon (e.g. "HIRE ~8 · start now · ~4/month after"), computed in the precompute (net seats to clear the peak-drop, grossed up for ramp wash-out + throttled demand). The capacity wall, deals/agent dial, and per-agent table collapse under a "show the evidence" toggle so the read is clean. v5.73.0 — Staffing & Capacity panel: Hire/Hold/Cut decision lights from MySQL (Processed_call + deals → staffing_capacity/current, nightly). Shows TIs/agent/day vs the 3 target, the capacity wall (drop rate rises with call load while agents-live max out + peak concurrency + live-vs-callback), the deals/agent stop-hiring dial, the 3-TI/day lead gap, and per-agent production with non-producer flags. Fully guarded render (can't break the board). v5.72.0 — Demand Gen on the board: "IRS Fresh Start Google - DG" gets its own pinned Sources row + spend bucket ("FSR - Demand Gen - TI (rebuilt)" 23881397484, landing /google-gettaxreliefnow/, phone 888-800-9013, queue 1_FSI_Google_DG — forms AND calls attribute distinctly; "Google Form - DG" no longer folds into plain Google). v5.71.1 — HOTFIX: v5.71.0's dead-collection removal missed one reference to the removed `call` variable in loadAll's partial-load check — ReferenceError after data load, dashboard never rendered (caught by CMO 2026-06-12 08:20, prod down ~14h). v5.71.0 — Label-truth batch: cohort Ad Spend tooltip no longer claims "Manual entry" (auto, hourly) · static header says "refreshed hourly" not "nightly" · hardcoded "~52%" collection rate and "$259→$641" narrative removed from tooltips (live rate is computed nightly) · Daily CPA date picker no longer hides pre-Mar-9 data (fixed 2026-03-03 start) · Calls freshness chip no longer cries wolf every afternoon (staleness measured from end of synced day) · dead call_counts_daily collection no longer downloaded on every page load. (v5.70.0 one projection per metric.)