Case Study

"Never formally closed" → 10-day close, across 20,000 monthly charges.

Read time: 2 minutes
Michael Pirumov
Client snapshot
Engagement
IoT hardware, multi-venue
Industry
IoT hardware (customer rentals at venues)
Scale
20+ venue locations
Payment stack
Stripe, Adyen (plus app database for tax and fees)
Monthly volume
~20,000 charges
Key outcome
10-day monthly close

The setup

An IoT hardware company operating customer-facing hardware at 20+ public venue locations. Customers pay per use through the company's own app. Revenue flows through two payment processors, and a separate app database holds tax and convenience-fee data that the payment processors don't have.

What was broken

The previous accountant had never formally closed the books. 20,000 charges a month flowed across two processors — Stripe and Adyen — with no systematic way to tie them back to specific venues. Venue identifiers often had to be inferred from the transaction description field. Tax data and convenience fees lived in the app database, not in the payment processor. There was no process to reconcile charges against deposits against venues against revenue.

What we built

  • Custom data pipeline: Stripe + Adyen → Fivetran → dbt → BigQuery → Coefficient → Google Sheets → Xero. Raw transaction data is transformed into venue-tagged summaries that import cleanly into the accounting system.
  • Cross-reference workflow: Stripe is the transaction source of truth, but the app database holds tax and convenience-fee data. Every month we cross-reference both sides so the numbers tie out.
  • Venue-level tracking: each transaction is tagged to its venue (directly where possible, by pattern-matching the description field where not), so revenue reports break out by location.
  • Full finance function: the client has no internal finance team. We operate as the back office — monthly bookkeeping plus sales tax filings and accounts payable alongside the close.

How it runs now

Every month: 20,000 charges flow through the pipeline, get reconciled against both processors, cross-referenced with the app database for tax and fees, and posted to the accounting system with venue tags. Close lands by day 10 — consistent, across a company with no internal finance team.

The outcome

  • Monthly close: from "never formally closed" to day 10.
  • ~20,000 charges reconciled per month through a custom pipeline.
  • Multi-processor reconciliation with app database cross-reference.
  • BigQuery + dbt infrastructure operating as a bookkeeping service.
  • Sales tax and AP handled alongside the monthly close.