Skip to content
Finanly

Month-end close

Close the month with the AI, not after it.

Every bank line arrives drafted. You decide, one click at a time — accept, edit, split, exclude — and nothing posts without you. Undo is always one click away.

Exact → similarity → AIIdempotent export batchesEvery action audited
  • Runs on your own hardware
  • AI never writes SQL
  • Tenant isolation by Postgres RLS
  • Every irreversible action audited
  • Statements parity-gated hourly

AI Match — one transaction's life

From bank line to posted entry.

Scroll through the workflow. Sample data, real screens.

STEP 01

Drafted on arrival

The three-tier categorizer proposes a category with its evidence: an exact prior match, a similarity score, or the private model's suggestion.

STEP 02

Reviewed by a human

Accept, edit, split across lines, or exclude. Transfers are detected and matched with reason codes. Everything is reversible.

STEP 03

Posted, parity-gated

Accepted lines export as journal and payment entries with idempotency keys. Statements refresh hourly and are parity-checked against the ledger.

Smart Transfer Matcher

Queues that shrink as you work.

For review, categorized, excluded — with filters by date, account and text. The Smart Transfer Matcher pairs money moving between your own accounts, scores each candidate and explains the score with reason codes, so a transfer never lands in the P&L twice.

  • Transfer detection across every connected account
  • Scored candidates with reason codes, one-click record
  • Manual transactions when the feed is missing one
Frosted glass tile with a glowing check mark

Human in the loop

Every edit posting-ready, every edit reversible.

These are the moves a controller makes a hundred times a month. Each one is a first-class, audited action — not a spreadsheet workaround.

Split, Exclude, Undo

Split a line across accounts and cost centers, exclude what isn't the business, undo a categorization: postings are cancelled and the line returns to review.

Approvals & Export Batches

Accepted lines leave as export batches. Every item carries an idempotency key at the API, the connector and the ledger — re-runs are skipped as already done, never duplicated.

AI Vendor Enrichment

Counterparty strings like 'AMZN MKTP US*2K4' become a normalized vendor, classified into governed supplier groups by the private model.

Subscription Intelligence

Recurring business spend is detected nightly with source, frequency and stream, and projected into the ERP so renewals show up before they hit the card.

Evidence attached

The receipt lives on the line.

Attach a PDF, PNG or JPEG receipt or invoice to any transaction. Meta ad receipts and Google Workspace invoices are ingested from the mailbox every hour into outstanding purchase invoices, ready to match the card line.

  • PDF / PNG / JPEG attachments per transaction
  • Hourly receipt ingestion from email
  • Invoice match from the transaction row

Before / after

What changes on day one.

Traditional ERP / bookkeeping

  • Download CSVs, categorize in a spreadsheet, re-key into the ERP
  • Rules that silently post the wrong thing
  • No idea who changed what, or when
  • Transfers double-counted until someone notices

Finanly

  • Feeds land categorized; you review in one queue
  • Nothing posts without a human; undo is one click
  • Append-only audit of every state change
  • Transfer matcher with scores and reason codes

FAQ

Straight answers

Does the AI post anything on its own?

No. It only drafts. Posting happens when you accept, and even then through export batches you can trace item by item. The model has no path to the ledger that doesn't go through a human click.

How does AI Match actually decide?

Three tiers, in order. Tier 1 looks for an exact prior match on the same counterparty and amount pattern. Tier 2 scores similarity against everything you've already categorized. Only if both come up short is Finanly's own 8B finance model (on your hardware) asked — and it is given the chart of accounts as a tool, so it can't invent an account.

What happens when I undo a categorization?

The postings created for that line are cancelled in the ledger through the same idempotent export machinery, and the transaction returns to the review queue as unreviewed. The original action, the undo and the cancellation are all separate audit events, so the trail shows what happened and when.

What if an export runs twice — do I get duplicate journal entries?

No. Every export item carries an idempotency key that is unique in Finanly's database, sent to the connector as an Idempotency-Key header, and pre-checked against the ledger ('already reconciled'). A re-run is recorded as skipped: already done. Failed batches are retried with the same keys.

How are transfers between my own accounts handled?

Transfer detection flags candidates across every connected account; the Smart Transfer Matcher scores each pair and shows reason codes. You record the transfer in one click and it is excluded from income and expense — no more double-counted moves between checking and savings.

Can I split one bank line across several accounts or cost centers?

Yes. A split creates per-line accounts, cost centers and amounts that must sum to the original; the split posts as one batch and can be undone as one.

What about rules?

Exact and similarity matching cover most recurring lines before the model is asked, which is what rules would have done — without silently posting the wrong thing. A dedicated rules manager is on the roadmap; we don't ship it yet.

Which ledger receives the postings?

ERPNext today, via the ERPNext connector. Finanly keeps its own canonical record and append-only audit log, and posts idempotent journal and payment entries back to the ledger of record. QuickBooks Online and Xero are planned, not shipped.

Can I attach receipts and invoices?

Yes. PDF, PNG and JPEG documents attach to any transaction. Meta ad receipts and Google Workspace invoices are also ingested from email every hour into outstanding purchase invoices so the card line has something to match.

How often do bank feeds arrive?

The sync-all job runs every hour for every connector (Mercury, Plaid, Shopify payouts, PayPal, Wise, Flexport, GA4, ERPNext). Recurring-spend recompute runs nightly; Shopify disputes and inventory sync daily. You can also trigger a sync from Settings.

Who can see what I changed?

Every irreversible action — categorize, split, exclude, undo, export — writes an append-only audit event enforced by a database trigger. Nobody, including us, can edit or delete an audit row.

Does this replace my bookkeeper?

It replaces the spreadsheet round-trip. Your bookkeeper or controller still decides; they just decide from a queue that arrives drafted, with evidence, instead of from a CSV.

Close next month in days, not weeks.

Private beta. Tell us where to send your access, and which company you close first.