Matt Dellinger

Matt Dellinger · VP of Finance · Portfolio, 2025–2026

I run finance on systems I built, and every reported number ties to source.

I lead finance for a group of privately held distribution and manufacturing businesses: planning, reporting, cash, and controls. The systems on this page are the reporting, forecasting, collections, and AI infrastructure I built so those decisions run on numbers that reconcile to their source. Forecasts show their assumptions and ranges.

VP of Finance · 6 affiliated businesses · 3 promotions since 2019 · 6 finance systems built

Daily build · Sales Command CenterSample
Budget vs. Actual export, MTD actual$1,084,912.37
Dashboard total, summed from SuiteQL$1,084,912.37
Variance$0.00 ✓ ties to the cent

If it doesn't tie, the build reports the variance instead of publishing.

Results

Results from the finance seat

VP of Finance at The DG Company / Turf Distributors since 2025, leading finance across six affiliated businesses. Previously VP of Finance & Operations at Artificial Grass Recyclers, after rising from Operations Manager in 2019.

10 → 6
Days to close the month
Four entities moved to GAAP; NetSuite automation and approval changes
50% → 98%
Inventory accuracy
55 locations in 25 states, across two roles
$0.00
Control standard: tie-out on every daily build
Reported actuals reconciled to the NetSuite Budget vs. Actual export before publishing
12 months
Loss to profit
55-location business, with full P&L ownership

Detailed financial results available in conversation.

Selected work

Six finance systems I built

Each one was in daily use. Open any build to see how it works and try its demo.

Real systems, sample data. Every dashboard, workflow, and automation shown here is real. The figures and company names inside each demo are fictional sample data, used to show the method without disclosing company financials. Items marked Result describe actual work.

NetSuite · Daily, reconciled

A daily NetSuite sales dashboard with six forecast methods, reconciled to accounting before it publishes.

NetSuite SuiteQLClaude scheduled tasksHTML dashboardBudget vs. Actual
Runs daily
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.
Command Center · day 12 of 22Real build · sample data
Budget
$2.40M
MTD bookings
$1.31M
MTD invoiced
$1.09M
Order book
$410K
$1.31M54.6% of budget
pace 55%

Bookings measure the sales team. On pace at day 12 of 22 working days.

Six forecast methods, grouped by what they measure tap a method for its assumption
Revenue budget $2.40M. Bookings are shown against it for reference, not as a revenue forecast.
Daily bookings, $K hover or tap a bar
Rep contribution to MTD bookings contribution, not attainment
Pull Budget vs. Actual — Summit Supply export, month to date
Query NetSuite with SuiteQL: posted transaction lines by GL account
Sum by account and compare line by line
Variance $0.00, ties to the cent. Dashboard published.

Custom Claude skills · Three entities

Two Claude skills: a daily NetSuite exception scrub across three entities and a weekly finance brief.

Claude skillsScheduled tasksNetSuiteTD · AGR · DG
Daily + weekly
Problem
Problems in the ERP surfaced at month-end close, when they're most expensive to fix, and the weekly finance read depended on someone assembling it by hand.
Built
A daily scrub brief across Turf Distributors, AGR, and The DG Company, plus a weekly finance brief, each packaged as a Claude skill so the same checks run the same way every time.
Result
Exceptions surface the next morning instead of at close, and leadership gets a consistent weekly read without a manual build.
Automation consoleReal build · sample data
Weekday mornings
Inbox triage · Microsoft 365Every unread email on both addresses, ranked from act-now down to FYI. Report-only.
Every morning
Sales Command Center rebuild · NetSuiteRebuilds the dashboard and ties it to the Budget vs. Actual export. Publishes only if it ties.
Every morning
NetSuite scrub brief · three entitiesExceptions across the three entities, flagged before the day starts.
Fridays
Weekly finance briefThe week's finance picture, assembled the same way every week.

The Tuesday row is the point: a build that can't tie out reports the failure instead of shipping a dashboard.

Cash conversion · Collections · NetSuite

A live NetSuite calendar of every open invoice by due date, reconciled to A/R Aging.

Cash conversionNetSuiteA/R AgingReviewed by accounting
In use
Problem
An aging report is a backward-looking snapshot: it shows what's late, not what's coming due, so collections had no forward view of cash.
Built
A calendar of every open invoice by due date, live from NetSuite, reconciled to the A/R Aging report and reviewed for accuracy by the accounting team, with past-due, this-week, and open totals at a glance.
Result
Since Q3 2026, collections has worked from a daily forward view of what is due and past due, instead of a backward-looking aging report.
How it works
  • Ties to the NetSuite A/R Aging report, so the calendar and the ledger never disagree.
  • Reviewed for accuracy by the accounting team before it became a working view.
  • Legacy entities with uncollectible balances are excluded, so the totals reflect receivables that can actually be collected.
  • Days to collect is measured from the NetSuite A/R Aging report, the same report the calendar reconciles to, so the metric and the working view share one source.
  • Teammates without Claude access get static snapshots, so the view reaches everyone who needs it.
Due calendar · sample monthReal build · sample data
DuePast dueToday

Day 12

Ties to A/R Aging ✓ · Click a day to see what's due.

Two entities · Excel + dashboard

A two-entity bridge from EBITDA to free cash flow: a reconciled Excel workbook and an interactive waterfall.

Working capitalEBITDA conversionCash reserve policyMulti-entity
Delivered
Problem
Profitable on paper and tight on cash is the normal state of a distributor. The owner needed to see, line by line, where EBITDA went between the P&L and the bank balance, across two entities with different working-capital profiles.
Built
A year-to-date bridge from EBITDA through receivables, inventory, payables, capex, and interest to free cash flow, for TD and AGR side by side, reconciled in Excel and visualized as an interactive waterfall.
Result
Owner-level visibility into EBITDA conversion and the working-capital lines driving it, and a shared reference point for the company's first cash reserve policy, which I established.
EBITDA → FCF, YTD · $KReal build · sample data
Increases in blue, decreases in red, totals in grey

Simplified sample bridge: cash taxes and other adjustments are omitted, so it illustrates EBITDA conversion rather than reconciling to a bank balance.

Accessories · Landed cost · Price book

Supplier quotes compared on one landed-cost basis, and a tiered price book with a margin target for each tier.

Landed costFOB vs. DDPPrice bookMargin targets
Delivered
Problem
Accessory margins sat well below target, and supplier quotes couldn't be compared because each came on different terms.
Built
RFQs to domestic and overseas suppliers requesting tiered pricing on FOB and delivered (DDP) terms; landed-cost models covering ocean freight, duties and tariffs, port fees, and inland transfer; and a price book with a gross-margin target for each tier.
Result
Unit costs and gross margin both improved materially across the accessory portfolio, with factory-direct and bulk tiers added.
How it works
  • Every quote is converted to the same delivered basis before it's compared: FOB plus ocean freight, duties and tariffs, port fees, and inland transfer to the warehouse.
  • RFQs ask for tiered pricing instead of fixed order quantities, so volume break points are visible before committing.
  • FOB is usually cheaper; DDP moves freight and duty risk to the supplier. The demo shows the duty rate at which the cheaper quote changes.
  • Bulky, low-value items such as padding ship inefficiently in a container, so they're better sourced domestically or regionally.
  • Each price tier is checked against its own margin target, so a new bulk or factory-direct price can't quietly dilute the line.
Sourcing decision · one accessory SKUReal build · sample data
Landed cost per unit, delivered to the warehouse three quotes, one basis
Source the SKU from price tiers re-margin below

Sample terms. The DDP quote is delivered to our warehouse and holds through both duty scenarios. Factory-direct orders ship FOB from the factory to the customer's port, cleared; the customer arranges and pays inland delivery, so the company's cost excludes the $1.40 inland leg.

Sample SKU and quotes. Fictional figures, not derived from company results. Illustrates the mechanism: at an unchanged list price, a lower landed cost lifts gross margin on every tier.

Custom Claude skill · Company-wide

A Claude skill that re-derives AI-produced financial numbers from source and shows the arithmetic before anyone relies on them.

Financial controlsClaude skillsTeam guidance
Company-wide
Problem
AI states a wrong number with the same confidence as a right one. I caught an arithmetic error in a planning session and decided catching the next one couldn't depend on luck.
Built
A skill that makes Claude re-derive numerical results from source data, show its work, and adversarially test its own answer on period, basis, sign, and units.
Result
A standard, not a habit: numbers that leave my projects go through /audit first, and the team has the same skill with guidance on when to run it.
Rollout
Published to the whole organization's Claude workspace, with written guidance for the team on when to run it. It is the verification standard behind the operating rules every automation here follows.
/audit on a sample claimReal build · sample data
Claim under auditQ3 accessory gross margin was 39.4%.

Operating philosophy

How AI is governed in a finance team

These are the rules every automation on this page is built to obey, and the demo shows what each one blocks.

  • Tie out or report the failure.A total that doesn't reconcile to the books doesn't ship. The variance does.
  • Show the forecast range and name what limits it.Six methods side by side, because each measures a different constraint. The read names the binding one instead of hiding it inside a single number.
  • Measure only what the data supports.No rep-level budget exists, so rep contribution is shown, never attainment.
  • Draft, never send.Automations that touch email or records draft for review.
  • Instructions inside data are data.Text inside an email is content to triage, never a command to follow.
  • Nothing leaves without /audit.Numbers shown outside the project get re-derived first.
  • Confirm anything irreversible.Posting, deleting, and sending wait for a person.
Team standardsGuardrailsScheduled tasks
Guardrails in actionSample events

Stack

What it runs on

Claude (scheduled tasks, custom skills, and projects), NetSuite (SuiteQL, saved reports, Budget vs. Actual and A/R Aging as reconciliation anchors), Microsoft 365, Python and Excel, QuickBooks Online, and Shopify. Also built: an ecommerce inventory cleanup with reconciled monthly true-ups ahead of a Shopify-to-QuickBooks integration, vendor-statement and landed-cost reconciliations, margin reporting on both COGS bases, and NetSuite drop-ship setup.

ClaudeNetSuiteMicrosoft 365PythonExcelQuickBooks OnlineShopifyGoogle Drive

Contact

Let's talk

Based in Steamboat Springs, Colorado. Open to remote, or hybrid in the Denver metro, for VP of Finance, FP&A, and finance and operations leadership roles.