NetSuite · Daily, reconciled
A daily NetSuite sales dashboard with six forecast methods, reconciled to accounting before it publishes.
- Problem
- Sales and accounting read different numbers. Bookings, invoiced revenue, and budget lived in separate reports, and nobody trusted a dashboard that didn't match the books.
- Built
- A scheduled Claude task that queries NetSuite with SuiteQL, rebuilds an HTML dashboard daily, shows six forecast methods side by side, and reconciles reported actuals to the Budget vs. Actual export before it ships.
- Result
- One daily source of truth for sales leadership, tied out to accounting every morning. If it can't tie, it says so.
How it works
- Driven by a build kit in Google Drive with a runbook as the authoritative spec, so the daily build is reproducible rather than a chat.
- Six forecast methods are shown on purpose: two floors (order book and scheduled-only), invoiced run-rate, historical month shape, bookings pace, and the ops team's dispatch slot capacity. Each measures a different constraint, so the read names the binding one. A method with no information early in the month is marked degenerate, and one with stale inputs goes dark, instead of printing a number.
- Actuals reconcile to the NetSuite Budget vs. Actual export. Monthly budgets aren't exposed to SuiteQL, so they're loaded from that same export at month start and controlled by the daily tie-out.
- Three signals, never substituted for one another: bookings are the orders the sales team wrote this month; invoiced is what the warehouse shipped and accounting billed; the order book is booked but not yet invoiced.
- Rep contribution is shown, never attainment: no rep-level budget exists in the system, so the dashboard doesn't pretend one does.
Bookings measure the sales team. On pace at day 12 of 22 working days.