B2B SaaS 50 FTEs · ~$8M ARR Monthly close + recon

B2B SaaS, ~50 employees (anonymized)

Cut Series A close cycle from 11 days to 6 days — without spooking the audit committee

A first-time controller at a Series A B2B SaaS moved from spreadsheet-heavy manual close to AI-assisted reconciliation. 11-day to 6-day close, 35 hours/month reclaimed, audit committee approved.

Outcomes

  • Close cycle: 11 days → 6 days
  • Controller hours reclaimed: ~35/month, reallocated to FP&A
  • Audit committee approved the AI cutover at month 4
  • Zero policy violations in the first 3 production cycles

The controller had taken the role 8 months earlier — the company’s first dedicated finance hire after going from outsourced accounting to in-house. The shape was familiar: Series A SaaS, $8M ARR, 50 employees, NetSuite for the GL, Stripe + Mercury for the bank feeds, growing fast enough that the close cycle was becoming a bottleneck.

The starting point

11-day close was the baseline. Most of those 11 days were tying out GL/SL pairs from Stripe transactions to NetSuite revenue entries, plus AP reconciliation for the ~120 invoices/month. The controller was working close-weekends through every cycle.

The AI pilot started with “we’ll just try ChatGPT on the recon spreadsheet.” That worked for about a week — the model could propose matches reasonably well — until the audit committee asked one question: “where’s the audit trail for what the AI agreed to?”

The pilot stalled for 6 weeks while the team tried to retrofit audit logging. They eventually adopted closegate as the chokepoint + audit log + HITL inbox.

The architecture

  • Engine: closegate-engine running on a small fly.io VM, connected to NetSuite via the closegate-engine ingestion adapter for NetSuite
  • Agent: closegate-agent + Claude Sonnet 4.6 for the proposal layer
  • Workspace: closegate’s Vue UI for the HITL approval inbox
  • Materiality: $5K threshold (set conservatively for the pilot)
  • Sensitive accounts: cash, intercompany clearing, vendor bank-change events all routed to HITL regardless of materiality

What the pilot looked like

Month 1: parallel run. The agent processed last quarter’s close in shadow mode while the controller ran the live close manually. Compared outputs daily. The agent’s matching accuracy was 96% on the first pass; the team spent the month tuning thresholds.

Month 2: parallel production. The agent processed the live close in parallel with the controller’s manual work. By end of month, the controller was confirming the agent’s proposals rather than producing matches from scratch.

Month 3: AI-led close with controller verification. The controller’s role shifted from “produce the close” to “verify the close + handle exceptions.” Cycle time dropped to 8 days.

Month 4: audit committee approval. The committee reviewed:

  • Sample of 25 audit events with verbatim policy clause text
  • SOC 2 monitor JSON output from 30 nightly runs (all green)
  • The policy.yaml file with git history
  • Demo of the SoD enforcement (same-actor confirm denied with SOD_SAME_ACTOR)

Committee approved continued AI operation. Cycle time stabilized at 6 days.

What the controller said

“Before closegate, my audit committee question was ‘how do you know the AI didn’t agree to something it shouldn’t have?’ and I didn’t have an answer. Now my answer is ‘here’s the audit log; here’s the verbatim policy clause text; here’s the git history of every change to policy.yaml.’ That changed the conversation.”

“The hours reclaimed go to FP&A work — flux commentary, board-deck prep, scenario modeling. Stuff that’s actually strategic instead of mechanical tie-outs.”

The TCO check

Cost lineAnnual
fly.io VM (engine + agent + web)$480/yr
Anthropic API (Sonnet 4.6)~$8,400/yr at this volume
One-time implementation (in-house eng, ~60 hours)$12,000
Year 1 total~$21,000
Year 2+~$8,900/yr

Compared to the BlackLine quote the company had received earlier ($95K/yr for entry tier + $40K implementation), the savings paid for an FP&A hire in year 2.

What didn’t work

Three honest failures during the pilot:

  1. First materiality threshold was too tight. $1K initially. The HITL queue overflowed; the controller spent more time on approvals than she’d spent on manual close. Raised to $5K in week 3.
  2. Vendor identity normalization was weak in month 1. The team had ~12 vendor names with subtle variants (“Stripe, Inc.” vs “Stripe Inc” vs “STRIPE INC”). The agent generated duplicate-flag false positives until the team added a vendor-aliases YAML to the closegate policy library.
  3. The first cross-quarter close was rough. Year-end close has different audit pressure than month-end. The team brought the external auditor in for a walkthrough in November, before December close, rather than discovering issues in January.

What’s next

  • Adding AP 3-way match (currently in design)
  • Multi-entity support for the upcoming UK subsidiary
  • Integration with Slack notifier for the HITL approval queue

This case study is published with the design partner’s permission. Company name and revealing details anonymized at their request. Numbers cited are real.

Case study published with the design partner's permission; company name and revealing details anonymized at their request. The numbers cited are real.

Inbound

Run a pilot like this one

Two design-partner slots open this quarter. One real workflow, your real policy.yaml, monthly 30-min sync, direct line to the maintainer.