Month-End Close
We build AI engines that take over the repetitive work of finance teams — close, reconciliation, partnership tax — and return it drafted, tied out, and cited to source. Independent verification checks every run. Your people approve every output.
Watch this first
Just over a minute on why we build finance engines — and what stays human.
time python -m close_engine)Flagship engines
Working systems, not proposals — the same architecture runs publicly on GitHub against fictional data. What each takes in, what it does, and what your team keeps control of.
The full portfolio
Every engine is public, runnable, and tested — the same control pattern in each: computed work, cited evidence, independent validation, and a human verdict at the end.

Read-only workbook review: formula integrity, lineage, PASS / REVIEW / FAIL verdicts — with a byte-identical guarantee that it never modifies what it inspects.
python run.py
Multi-year tax pools and adjusted cost basis carried forward by rule — foreign exchange per layer, every figure traceable to source.
python -m surplus_engine --start 2021 --end 2024
Separation of duties for AI work: independent reviewer roles plus a deterministic auditor. Disagreement stops the line — no consensus, no sign-off.
python -m triangulate
Institutional knowledge as a citation-governed base: every answer quotes its source verbatim with a timestamp — no source, no answer.
python -m brain_engine ask "..."
A living map of your finance operation: entities, bank accounts, systems, and canonical sources of truth — with stale copies flagged.
python generate.py
The cash manager's monthly double-check: bank-to-GL reconciliation, outstanding/stale checks, wire dual-approval, register continuity, and concentration sweeps — five read-only controls, every one human-gated.
python -m cash_engine --demo
The payables cycle proved rather than assumed: posting integrity, the payment release gate, approver routing with duties segregated, information reporting, and commitment hygiene — thirty read-only controls that flag exceptions and never post or pay.
python -m ap_engine ./samples
The construction loan draw proved before it reaches the lender: the reconciliation identity, the form tied to its own working papers, contingency held to percent complete, cutoff, and supporting documentation — thirty-four read-only controls that flag exceptions and never bill or fund.
python -m draw_engine ./samples
A buyer’s upgrade money is a liability until the unit closes — and the same figure has to move in four schedules at once. Deferred revenue released only on close of escrow, the closing entry balanced, sales tax held as a liability, four-way agreement — twenty read-only controls that flag exceptions and never post.
python -m upgrade_engine ./samples
A warranty policy is bought once and drawn down for years in amounts too small to attract review — so the failure is the running total, not any one claim. A coverage limit re-derived from construction cost, cumulative claims held inside a finite pool, every claim tested against its quarter, the policy period and close of escrow — twenty-two read-only controls that flag exceptions and never file or pay.
python -m warranty_engine ./samples
A development group is a tree of entities, and cash moving between them lands two entries on two sets of books — so the break lives between them and only surfaces at consolidation. Every due-from reconciled to the due-to that faces it, each closing rolled forward from the ledger, funding traced to the protocol-correct entity — twenty-three read-only controls that flag exceptions and never fund or sweep.
python -m intercompany_engine ./samples
A parent parcel is platted into lots that close one at a time, while the tax roll keeps billing the account it always has — so the bill is genuine and increasingly for somebody else’s house. Each jurisdiction’s own statutory calendar, the assessment and the charge that follows it, ownership through every closing, and the accrual behind it — twenty-six read-only controls that flag exceptions and never pay or file.
python -m proptax_engine ./samples
A developer posts surety to pull permits and record plats, and some bonds are collateralised with its own cash — so the quiet failure is cash that never comes back. Each bond’s lifecycle, the collateral behind it, premium earned to the day, and aggregate exposure against the facility — twenty-nine read-only controls that flag exceptions and never release or pay.
python -m bond_engine ./samples
A developer buys a programme, not a policy per project, and one premium has to become a number on each project’s job cost that sums back to what was paid. Every share re-derived from its declared basis to the cent, the builder’s-risk term and value, and the carrier audit true-up returned to the projects that bore the deposit — twenty-four read-only controls that flag exceptions and never pay.
python -m insurance_engine ./samples
A developer requires its consultants and subcontractors to carry insurance per contract — so the exposure is a certificate that lapsed or came in a limit short, invisible until a claim lands on cover nobody had. Coverage types and limits held against the requirement matrix, additional-insured and waiver-of-subrogation endorsements, no uninsured day between certificates, nothing expired — twenty-two read-only controls that flag exceptions and never pay or bind.
python -m coi_engine ./samples
Company-card spending proved rather than trusted: every charge carries a receipt and a business purpose, the report reconciles to the bank statement to the cent, the coding is valid, nothing is a duplicate, and the approver is not the cardholder — twenty-three read-only controls that flag exceptions and never post.
python -m expense_engine ./samples
Employee labor charged to a project only through an advance authorization: noticed ahead, on a real cost code, budget-confirmed, the monthly charge re-derived to the cent, nothing charged before the start date, cumulative labor held inside the budget, and each monthly invoice footing to its charges — twenty-six read-only controls that flag exceptions and never bill.
python -m labor_engine ./samples
Every progress payment covered by a lien waiver through its paid-through date, conditional waivers converting to unconditional once the payment clears, lower-tier subs and suppliers waived, and the unwaived exposure re-derived per project — the difference between a project a title company will close over and one it will not. Twenty-five read-only controls that flag exceptions and never pay or release.
python -m lien_engine ./samples
A real-estate partnership pays its investors and sponsor through a waterfall — a chain of dependent steps where a mis-compounded month of preferred return or a tier paid out of order travels silently to the bottom line. Every distributed dollar rebuilt from the executed operating agreement and the contribution history: preferred-return accrual, capital-account roll-forward, hurdle-IRR tiers, and the promote split, each recomputed to the cent and tied back to the stated IRR and equity multiple — thirty read-only controls that flag exceptions and never pay or file.
python -m waterfall_engine ./samples
A quarterly project proforma is internally consistent the day a formula last recalculated, and it drifts when cells are overtyped or tabs are rolled forward without their precedents — the error-check tab still shows zeros because the zeros were typed. Sources tied to uses, hard plus soft to total cost, net profit re-derived from revenue and cost, the waterfall’s distributed profit to the budgeted split, every margin and variance rebuilt from the base ledger, and each active project’s report proved filed on time — twenty-six read-only controls that flag exceptions and never post.
python -m proforma_engine ./samples
A developer managing projects across several jurisdictions owes a gross-receipts or excise tax in each — a state B&O tax, a city excise, a territorial general-excise tax — each with its own rate, cadence, deductions and due dates, and each rate can change mid-year. Every worksheet’s tax re-derived from the general-ledger revenue pull times the classification rate actually in force, tied to the filed number, deductions and thresholds checked, and the filing calendar proved complete, timely and approved — twenty-seven read-only controls that flag exceptions and never file.
python -m grt_engine ./samples
A filing calendar is a matrix of dates that was correct the day someone typed it, and it goes wrong in ways nobody watches until a notice arrives — a due date a day off, a deadline that quietly passed, a row marked filed with no voucher behind it. Every entity and jurisdiction proved obligation by obligation to have filed or validly extended before its statutory due date, each fixed-amount voucher paid to the exact statutory amount, and the register tied to the filed evidence with nothing missing and nothing orphaned — twenty-two read-only controls that flag exceptions and never file.
python -m filing_engine ./samples
The §45L homebuilder credit is a per-unit credit: a fixed statutory amount for each newly built dwelling sold, but only for a unit that closed inside the fiscal-year window and holds an energy certificate from a certified rater. Every claimed unit re-derived from its close-of-escrow date, its RESNET/HERS certification and the dated per-unit amount, checked for out-of-period and duplicate claims, then rolled up per project, region and fiscal year with the net benefit and partner split tied across every artifact — twenty-six read-only controls that flag exceptions and never file.
python -m energy_engine ./samples
A note’s stated interest is right the day it’s drawn and drifts as balances amortize, rates step and prepayments land. Every accrual re-derived as balance times rate times days, each period’s ending balance rolled into the next, and the maturity, rate-step, prepayment and subordination gates enforced — with the reciprocal receivable, payable and interest journal tied back to the schedule. Twenty-eight read-only controls that flag exceptions and never post or file.
python -m interest_engine ./samples
A developer’s monthly upcoming-financings report is a schedule of moving milestones, and it goes wrong quietly — a variance typed instead of computed, a prior-month figure that no longer ties, a baseline overwritten. Every milestone variance re-derived as Current minus Prior, each Prior tied to last month’s Current, the original baseline held frozen, the playbook proved complete and every Gantt bar seated in its closing month. Twenty-one read-only controls that flag exceptions and never post or fund.
python -m financing_engine ./samples
An outbound payment is only as safe as the gates in front of it. Every wire, ACH and book transfer proved to carry two distinct authorized signers within their limits, a beneficiary on an approved template or cleared by callback, a routing number that resolves to the named bank, and a funded source account — before a dollar leaves. Twenty-three read-only controls that flag exceptions and never release or pay.
python -m wire_engine ./samples
The benefit money a payroll register withholds has to arrive somewhere — a recordkeeper, a custodian, the ledger, the bank — intact and on time. Every 401(k), HSA and FSA deduction proved to reach the provider, the ledger liability and cash to the cent, the employer match and statutory limits recomputed, and each deposit checked against its DOL deadline. Twenty-nine read-only controls that flag exceptions and never post or pay.
python -m benefit_engine ./samples
Withholding on a cross-border payment turns on the payee’s status and the paper behind it, and the rate is where it breaks. Every FDAP withholding rate recomputed from FATCA status, portfolio-interest exemption, a treaty reduction gated on a valid W-8, then the statutory default — with the tax withheld, the deposits and the Form 1042 all tied back to the 1042-S slips. Twenty-eight read-only controls that flag exceptions and never file or remit.
python -m withholding_engine ./samples
A home-sale closing package has to agree with itself — the settlement statement, the closing entry, the revenue line, the loan release and the cost-of-sale relief all describing one transaction. Every closed home’s figures recomputed from the base facts and proforma rates, the closing entry proved to balance, and the rollup’s closed count, net-to-seller total and per-unit tie-out rebuilt from the units beneath. Twenty-five read-only controls that flag exceptions and never post or record.
python -m closing_engine ./samples
An entity’s good standing is a matrix of small obligations across every state it’s registered in, and any one lapsing is a lien or a lost deal waiting to happen. Every entity proved, state by state, to have filed its annual report on time, paid the flat franchise tax, held an ACTIVE Secretary-of-State status and a current registered agent and license — with the compliance rollup rebuilt from the underlying records. Twenty-six read-only controls that flag exceptions and never file or renew.
python -m standing_engine ./samples
A subcontract only moves on approved paper, and every billed figure has to trace back to it. The schedule of values proved to foot, only approved change orders allowed to move the revised contract, each pay-application column re-derived, retention and tax recomputed, the commitment rolled forward, and the conditional release tied to the certified payment due. Twenty-nine read-only controls that flag exceptions and never pay or release.
python -m sov_engine ./samples
Equity-method accounting is a chain of dependent figures, and a pickup struck off the wrong ownership or an elimination that doesn’t fully extinguish carrying value travels straight into consolidated equity. Every pickup re-derived as ownership times the investee’s result, the investment roll-forward and preferred-return accrual recomputed, each intercompany elimination paired to net to zero, and the whole tied to the trial balance. Twenty-five read-only controls that flag exceptions and never post or eliminate.
python -m pickup_engine ./samples
Depreciation and prepaid amortization are pure arithmetic on cost, life and a service window — which is exactly why a hand-kept register drifts from the ledger it’s meant to feed. Every fixed-asset depreciation and prepaid amortization figure re-derived from cost, useful life and in-service window, both roll-forwards rebuilt, and the register totals tied to the GL control accounts and the posted recurring entry. Thirty read-only controls that flag exceptions and never post.
python -m depreciation_engine ./samples
Earnest money sits in trust before a home closes, and three parties each keep a record of it — the deposit ledger, the escrow agent’s statement and the construction loan. Every unit’s deposit tied three ways to zero variance, cancellations split correctly between forfeited and refunded, and the reconciliation summary recomputed from the units beneath. Twenty-seven read-only controls that flag exceptions and never move or release.
python -m deposit_engine ./samples
Capital gets committed on a Spending Request, and the discipline is entirely in the sequence — the right approval before the dollar, the phase gates in order, the standards recomputed. Every request proved to fire its dollar triggers only after approval, clear its five phase gates in sequence, and carry a contingency floor, fee, total and gate summary that each re-derive and tie. Twenty-nine read-only controls that flag exceptions and never approve or commit.
python -m spending_engine ./samples
Interest tied to production has to be capitalized into project basis, not deducted, and the avoided-cost calculation is a grid: every active project across every quarter, rebuilt each tax year, with a comparison tab that is supposed to tie to last year’s file. Every project row footed across its quarters, total interest proved to equal capitalized plus deducted with nothing leaking, every project on the trial balance present in the schedule, and the year-over-year comparison tied rather than typed. Nineteen read-only controls that flag exceptions and never file.
python -m capitalize_engine ./samples
A combined return starts with a list of entities, and the roster changes every year as affiliates are formed, merged and dissolved. The current group proved to equal the prior-year members plus additions less removals, every affiliate registered, the entities deliberately excluded enumerated rather than merely absent, group revenue tied to the consolidated tax trial balance, the receipts factor bounded and recomputed, and the tax re-derived as margin times apportionment times rate. Twenty-one read-only controls that flag exceptions and never file.
python -m franchise_engine ./samples
A term sheet is a handful of equalities that nobody recomputes while the deal is moving: the maximum loan is the advance rate times the cost basis, the all-in rate is the greater of index plus spread or the floor, each fee is a rate on a base that is not always the same base, and maturity is the base term plus the extensions actually exercised. Every one re-derived before close, over-advances flagged, fees checked against the correct base, and the portfolio rollup footed. Twenty-one read-only controls that flag exceptions and never fund.
python -m sizing_engine ./samples
A for-sale housing project runs on one weekly workbook, and the commission log drifts from the matrix the moment a price changes after the offer. Revenue per square foot recomputed from price and plan size, net proceeds proved as price less concession less closing costs, total commission struck on the actual sales price, every agent split added back to exactly that commission, each sold unit reconciled one-for-one to the closings tab, and the date sequence held in order. Twenty-one read-only controls that flag exceptions and never pay.
python -m sales_engine ./samples
A holding entity pushes its overhead out across a dozen operating entities every month, and the allocation stops adding up the moment a driver count changes or an entity is added to the schedule but not to the percentages. Driver shares proved to total exactly one hundred percent, allocated dollars proved to total exactly the pool with the residual cent landing deterministically, the resulting journal entry balanced and netted to zero at consolidation, and the postage allocation reconciled to the meter-reading delta. Twenty-two read-only controls that flag exceptions and never post.
python -m gaalloc_engine ./samples
A check that never cleared is a stale payable until the dormancy period runs, and then it is unclaimed property that belongs to the state. The outstanding set rebuilt from cleared amounts and cleared dates rather than trusting the column that says outstanding, every item aged from check date to the as-of date, the total tied to the outstanding-checks line on the bank reconciliation, voided and stop-paid items proved absent from the outstanding population, and stale-dating separated from dormancy so the follow-up list is not confused with the escheatment list. Twenty read-only controls that flag exceptions and never void or reissue.
python -m checkage_engine ./samples
A variance column is the most-read number in a project report and the one nobody re-adds. Cost to Complete struck as Total Budget less Cost to Date rather than maintained beside it, net revenue and profit and margin on cost re-derived from their own inputs, every variance cell proved equal to the difference of the two columns it sits between in cents and in basis points alike, both comparative columns proved to foot inside themselves so a variance is never measured against a column that never added up, and the Business Plan column proved against the version each project was actually approved under. Twenty-two read-only controls that flag exceptions and never re-forecast.
python -m variance_engine ./samples
Adequate is a comparison, and it gets stored as a label. Both contingency rollforwards re-derived from the period before them, the allocated-this-period total footed to the draw detail it summarises rather than maintained beside it, every bucket reconciled to the contingency line the project budget funded, each draw walked against the balance earlier draws actually left rather than against the opening balance, and the word adequate rebuilt from the balance remaining against the projected potential use so a label carried forward cannot outlive the period it stopped being true. Twenty-two read-only controls that flag exceptions and never post or approve a draw.
python -m contingency_engine ./samples
Once a year the group rebuilds a payee population it never maintained, and a payee who should have been reported and was not leaves nothing behind to notice. Every box amount footed back to the entity's own payment lines rather than re-keyed from a summary, a form proved to exist exactly where the box threshold met at the cent obliges one, the same test run in reverse so a form issued to a payee who was not reportable is caught too, withheld tax obliging a form the threshold alone would not have, backup withholding recomputed at the statutory rate in both directions, and every transmittal recounted from the forms behind it. Twenty-two read-only controls that flag exceptions and never issue or file.
python -m inforeturn_engine ./samplesEvery failure mode of an annual roll-forward shares one property: the workpaper still balances. A column populated from the extract's monthly-activity column foots to zero exactly the way a real one does, so the footing check passes while the column carries movement instead of balances. Every cell re-derived from the balance column located by its declared role rather than its position, completeness swept in both directions so a balance riding a dropped chart equivalence cannot vanish silently, each dual-chart row summed through the equivalence map, the eliminations range proved to reach the columns added this year, and every figure linked to a backup row that agrees with it. Twenty-four read-only controls that flag exceptions and never populate or file.
python -m rollforward_engine ./samplesA package that foots, balances and reads plausibly can still be wrong, because the arithmetic that would expose the error is the arithmetic that produced the figure. Every balance agreed to the ledger by account number rather than row position, so a trial balance pasted beside an extract in a different sort order is caught and named as a positional paste. A credit intercompany balance reclassified rather than netted against assets. Every member column footed, cross-footed and rolled forward, with the Total column proved to sum the row it sits on. The job cost bridge closed exactly, with no tolerance, and any difference carried without being disclosed failing on its own account. Contributions agreed per member to the executed equity draw schedule the partner also holds. Each caption tested against its schedule's type, the cover held consistent with the notes, and the reviewer's own tie-out rows kept out of the released print area. Twenty-five read-only controls, and one open exception holds the package. No materiality gate.
python -m investor_engine ./samplesNobody rolls a workpaper package; somebody opens last year's file, saves it under a new name and edits it — and every failure mode that follows shares one property: the package still foots. This engine builds the new year instead, from a locked ledger extract and the signed prior year. Every prior-year layer carried up byte-equal and compared byte-equal, so history cannot quietly acquire a new value because a sort was applied or a formula was left live in a frozen row. Every rolling caption advanced by exactly one year and checked arithmetically, so a current-year column is never reconciled against a prior-year heading. Each current-year contribution and distribution derived as the movement in its own account rather than typed, so an inception-to-date balance cannot be restated as this year's activity and still agree with the total footed from it. The member allocation splits carried down in integer basis points, the new member-capital and earnings-and-profits year blocks appended, and the evidence tab constructed with its citation block and a subtotal that has to close on zero. Every constructed cell named in a build register beside the derivation that produced it, and anything touched outside that register caught against the image taken before the build ran. Twenty-four controls then prove what it built. No materiality gate.
python -m workpaper_engine samples --build outOnce a year the general-liability carrier audits the policy: what did the covered work actually cost? The honest answer lives in fixed-width job-cost prints, and the traditional workpaper is somebody re-keying them — checked by the person who typed it, against the file they typed. This engine reads the print instead and keeps the one safeguard a re-key destroys: the report’s own printed totals. Every parsed job must tie its printed total to the cent, over the union of jobs parsed and jobs printed, or the engine refuses to produce a workpaper at all — the refusal names each failing job and its cent delta. What survives is cut to the policy window, inclusive on both boundary dates, cross-referenced against the certificate-of-insurance listing, and triaged line by line under a fixed precedence — journal entries that never had a vendor, clearing accounts in both their costumes, wrap-enrolled vendors, materials-only and professional exemptions, coverage current at the window end, and the remainder marked for chase. Byte-stable JSON and Markdown out; integer cents throughout; no tolerance parameter to widen.
python -m premaudit_engine --seed 7The portfolio grows by one pattern: find the recurring work, build the engine, attach the evidence, keep the human gate.
Tell us what to build nextInside the close engine
The month-end close isn't a single script — it's a library of recurring workpapers, each with its own arithmetic. The close engine drafts or validates every one under the same rule: recompute it independently, tie it to the ledger, and refuse to post anything a person hasn't approved.
Controls enforced
Auto Verification System
Each engine watches its own output, corrects routine drift from source data, re-verifies every correction against an independent recomputation, and escalates the judgment calls to a person. Nothing self-certifies.
When the independent check confirms the work, it posts with a written audit trail.
A mis-keyed cell or dropped intercompany leg is corrected, then re-verified before it counts.
What the loop cannot prove is quarantined and flagged — never rubber-stamped.
You set the policy: full autonomy in approved environments, or a human sign-off on every post — the controls and audit trail are identical either way. Live today on five engines; every loop writes its own run report, with sample reports committed on GitHub.
The engineering is public
The entire engine portfolio is on GitHub — code, tests, controls, and documentation. Your technical reviewers can judge the work before you spend anything.
A curated suite gates CI; an opt-in sweep asserts arithmetic invariants across ~1.65M generated cases. A separate 57-test site-tooling suite guards the public datasheets and is excluded from the 504,712 engine total. The tiers are documented, not blended into one inflated number. See the per-engine breakdown →
Every public example runs on invented data. Client information never appears in public code — backed by a deny-list confidentiality linter in the test suite.
Engineers can inspect the repository, open it in Codespaces, and run any engine in minutes.
Worldwide · every scale
The same engines run for a two-person family office and a multi-entity corporate close. What changes is scope — never rigor.
Close, recon, tax, and cash controls under your month. No rip-and-replace — your ledger stays the system of record.
Every account and entity tied out; K-1s that trace to the agreement. Discretion by design — fewer hands on the data, full evidence of who approved what.
We come to you — on site or remote — and train your team or your family to run and challenge the engines. Runbooks included.
One conversation. We tell you plainly what an engine can take over — and what it can’t.
Your data, in a sandbox, while your team watches the checks fire. Nothing touches your systems of record.
Your people review and sign. We hand over the capability and train the team that owns it.
Start the conversation
One conversation. You describe the work that consumes your team's — or your family's — month; we tell you plainly what an engine can take over, what it can't, and what a scoped first phase would cost.
No software purchase · fixed-scope pricing after observation · your people keep approval authority
Free consultation
Pick a time straight from my live calendar — a Google Meet video link lands in your inbox the moment you book. Prefer a phone call? Just note it when you book.
Video by Google Meet · times shown in your timezone
Free consultation
Tell us a little about the work that consumes your team's month. We'll reply personally within one business day — what an engine can take over, what it can't, and what a scoped first phase would cost.