Skip to content
Finanly

The model layer

The model proposes. The platform verifies.

A private model on your own hardware turns plain language into semantic plans and categorization suggestions. It never posts an entry: core-api validates every plan, the engine computes the numbers, a human approves the postings.

Runs on your hardwareFinance-tuned model in development

Plain language in

Ask like a founder. Get the finished work.

Type the request the way you would ask your controller. The model plans against your governed vocabulary; the platform computes the figures and hands back the analysis, the scenario or the commentary — with the rows behind every number. Demo data.

Why did gross margin drop in Q2 compared with Q1?
1
Understands

Reads the request as a margin bridge, Q1 → Q2

2
Works on your ledger

Pulls revenue, COGS and landed cost by product line

3
Produces

Writes the analysis with the rows behind it

Gross margin 46.1% → 41.8%Q1 vs Q2 2026 · by product line
Freight per unit+$0.42−2.6 pts
Capsules mix+9% of sales−1.1 pts
Espresso price increase+3%+0.6 pts

Most of the drop is inbound freight: two air shipments in May carried 38% of the quarter's landed cost.

figures from your governed ledger rows behind every number one tenant · on your hardware

Illustration with sample figures: the request and output shapes show what the model produces; the numbers are not a real company's.

In development · the finance-tuned model

Tuned on the work of finance, not the whole internet.

Today the gateway serves an open-weights general model, privately, on your hardware. Finanly's own finance-tuned model is in development on these four corpora and will drop into the same gateway — the plan-validate-execute contract around it does not change.

  • 01

    Ledgers & journals

    Double-entry structure, postings, periods and closing entries — the grammar of a general ledger, not generic text.

  • 02

    Chart-of-accounts vocabulary

    Account types, cost centers, supplier and customer groups, so 'freight' and 'inbound shipping' land on the same account.

  • 03

    Reconciliation patterns

    Bank-to-ledger matches, payout decomposition, internal transfers, fees and refunds — how real books actually tie out.

  • 04

    Statements & reporting

    Balance sheet, P&L, trial balance, cash flow and variance — how finance teams read, explain and present them.

What it produces

From one sentence to the work product.

Six things the model layer does today, each labelled with its key in the platform registry.

  • 01

    Analysis

    Ask why a number moved; get the measures, the drivers and the rows behind them — from a governed plan.

    ai_bi_query
  • 02

    Scenario narrative

    Run-rate, receivables and payables projected forward in plain words. A narrative over governed figures, not a certified forecasting engine.

    ai_bi_query
  • 03

    Report commentary

    Commentary around statements and saved reports drafted in your format, every figure linked to the ledger.

    bi_report_builder
  • 04

    AI Match categorization

    Three tiers: exact, then similarity against lines you approved, and the model only to disambiguate.

    auto_categorizer
  • 05

    Vendor enrichment

    Bare bank descriptors become named counterparties through self-hosted web search. The model reads snippets, not your rows.

    ai_vendor_enrichment
  • 06

    Statement & compliance narrative

    The model writes the narrative around numbers the deterministic engines already computed. It explains; it does not calculate.

    compliance_reports
124governed measures the model can plan with
65 / 86catalogued founder questions answerable today
1internal-only gateway; no public AI API

Most 'AI for finance' sends your ledger to someone else's model. Finanly does not: the model stays home.

How a request becomes an answer

Four steps. The model plans; the ledger answers.

Scroll through the pipeline. Every frame is the real shape of the data at that step.

STEP 01

1 · The request

You type in plain English on the Business Intelligence page. Suggestion chips cover the questions founders ask most; anything else is fair game.

STEP 02

2 · The model plans

The private model receives the request and the governed vocabulary — measure names, dimensions, your chart of accounts — and returns a semantic plan. Three tools stop it inventing accounts, fields or dates.

STEP 03

3 · core-api validates

Every measure, dimension and period is checked against the semantic registry: 26 cubes, 124 measures, 756 dimensions. Unknown fields fail closed. The tenant comes from your session, never from the model.

STEP 04

4 · The ledger answers

Cube executes the plan on the canonical store and returns rows, a chart and the number. Save it, schedule it every 15 minutes, or pin it to a dashboard.

AI Match

It learns from what you approve.

Categorization is three tiers, and the model is the last resort, not the first guess. Every accepted line becomes history the next two tiers match against — your ledger vocabulary, tenant by tenant.

Tier 1Exact matchconfidence 0.95 – 0.99

The normalized description matches a line you categorized before. Amount-aware: if two histories match, the closest amount wins.

Tier 2Similarityconfidence 0.75 – 0.94

Weighted token similarity against your tenant's history, with an amount tie-break when two candidates are near-equal.

Tier 3Private modelconfidence 0.75 – 0.89

Only when tiers 1–2 are unsure: the description plus the top 5 candidates go to the Finanly model to disambiguate. It picks; it does not invent accounts.

Private by architecture

Runs on your hardware. Sees one tenant.

The model is served on your own machine behind an internal-only gateway. Each call carries a short-lived token bound to one company; nothing is sent to a public AI service.

What the model sees

  • Your question, in plain English
  • The governed vocabulary: measure and dimension names, your chart of accounts, supplier groups
  • Up to 5 candidate categories from your own history (categorization only)
  • A counterparty name and public web snippets (vendor enrichment only)
  • A short-lived JWT scoped to one tenant

What it never sees

  • Raw transaction rows, balances or invoices
  • Any other company's data
  • Database credentials or SQL
  • The public internet as an inference endpoint — the model runs on your box
  • Permission to post, export or delete anything

Model card

One model, built for one job.

What serves today, what is in development, what it takes in, what it produces — and where it runs.

Glass cube with the Finanly mark sealed inside
model cardThe Finanly model layer
Serving today
An open-weights language model, hosted privately on your hardware behind the internal gateway
In development
Finanly's own finance-tuned model (ledgers, chart-of-accounts vocabulary, reconciliation patterns, statements); drops into the same gateway
Input
Natural language — ask the way you would ask your controller — plus the governed vocabulary as tools
Output
Semantic plans (validated by core-api), categorization suggestions, narrative over computed figures
Runtime
Your own hardware; internal network only
Reachability
Called by core-api with a short-lived, tenant-scoped JWT
Tools
get_chart_of_accounts · get_cube_measures · resolve_period
Web
Self-hosted search for vendor enrichment lookups — search, not inference

Compared

Cloud AI bolted on vs a model layer you control.

Typical 'AI bookkeeping' feature

  • Ledger rows sent to a public API
  • Same model, every customer's data
  • Confident answers with no plan to check
  • AI can post, pay or delete

Finanly model layer

  • Runs on your machine; internal-only gateway
  • Tenant-scoped token on every call; RLS underneath
  • Plan, rows and number returned together
  • No irreversible action without a human

FAQ

Straight answers

Which model serves production today?

An open-weights general-purpose language model, hosted privately on your own hardware behind the internal gateway. We don't name vendors in marketing; ask us and we'll tell you exactly what runs. Finanly's own finance-tuned model is in development and will replace it behind the same gateway contract.

What can I ask it for?

Anything you would ask a controller, in plain language: why a number moved, a run-rate scenario in plain words, commentary on a statement, or help categorizing the month's transactions. Answers come from governed measures; the model supplies the plan and the words.

Does anything go to a public AI service?

No. Inference runs on your hardware. The only outbound calls are connector syncs (your bank, Shopify, Flexport…) and self-hosted web searches for vendor enrichment, which carry a counterparty name, not your ledger.

How does it avoid making numbers up?

It never reads the ledger directly. It returns a semantic plan; core-api validates every measure, dimension and period against the governed model, and Cube computes the figures. Unknown fields fail closed.

What happens when the model is wrong?

For analysis, a wrong plan fails validation and you get a refusal or a governed fallback (cash, AR, AP, balance sheet, P&L) instead of a wrong number. For categorization, a suggestion is a suggestion until a human accepts it, and every acceptance is undoable.

Can one company's data reach another?

No. Every call carries a short-lived token bound to one tenant, and Postgres row-level security enforces the same boundary underneath the application.

Does it work for Personal mode?

Yes. Personal mode has its own semantic tables (15) and endpoints (personal/bi/ask), isolated by tenant and product mode.

What does 65 / 86 mean?

We keep a catalogue of 86 questions founders actually ask (cash, AR/AP, margin, inventory, growth). 65 are answerable end-to-end today through the governed layer; the remaining 21 need cube measures that are scheduled, not promised.

Put a private model next to your ledger.

Private beta. Runs on your hardware or a VPS you control.