Reconciliation and accounting exports
Every day Ownrecord matches each processor's balance transactions to its payments, refunds and disputes, books processor fees and payouts, and queues what doesn't match. Accounting exports give your accountant the journal and the registers.
Reconciliation checks that what your payment processors report matches what Ownrecord recorded, and books what only the processor knows: its fees and its payouts to your bank. It works per legal entity, for every brand, in each mode. Find it in the console under entity → Reconciliation.
The daily run
Every day (and whenever you ask, with Reconcile now or POST /api/v1/reconciliation/runs), Ownrecord reads each processor connection's balance transactions since the last run and matches each one:
| Balance transaction | Matched to | Booked by reconciliation |
|---|---|---|
| Charge | the payment with the processor's charge ID | the processor fee: Dr processor_fees / Cr processor_clearing |
| Refund | the refund with the processor's refund ID | a fee, if the processor charged one (the refund itself is already booked) |
| Dispute | the dispute with the processor's dispute ID | its fee, unless the chargeback already booked it |
| Fee | nothing to match (a fee of its own) | the fee |
| Payout | the payout | Dr bank / Cr processor_clearing, once per payout |
Each fee and payout is booked once, however often a run reads the same balance transaction, and a payout is booked once whether the daily run or the processor's payout.paid webhook sees it first. A payout that comes back (payout.failed) is reversed once. Amounts are exact, in each balance transaction's currency.
The queue
What reconciliation can't match goes to the queue with the reason, and the connection's RECON_UNMATCHED alert is raised (once while the connection has open items; a run that queues new items counts another occurrence):
- a charge, refund or dispute no record of the connection has (made in the processor's dashboard, or its webhook is late: the next run checks again and matches it when it appears);
- a refund that isn't confirmed yet, a dispute whose chargeback isn't booked yet (an inquiry books nothing until funds are withdrawn);
- an amount or currency that differs (a processor currency conversion is booked by a person, never guessed), a dispute fee that differs from the one booked;
- adjustments and other movements Ownrecord can't attribute.
Work the queue in the console or with reconciliation.items.resolve and reconciliation.items.ignore: resolve an item with a note saying how it's accounted for (book a correction with a ledger adjustment first), or ignore it when nothing needs doing. Neither posts anything. When a connection has no open items left, its alert is resolved.
Bank statements
An imported bank statement serves two purposes. First, as before, a transfer that names an open invoice and pays its amount due marks it paid. Then every incoming line that paid no invoice is checked against the entity's payouts not yet confirmed: the same amount and currency, and either the payout's ID in the reference or a booking date within two days before the payout and seven days after its arrival. A match confirms the payout (the payout is already booked; the line posts nothing). Lines still unmatched join the reconciliation queue as bank items. Pick the payout a line confirms when several fit, or resolve or ignore the line with a note; the line follows in its statement.
Accounting exports
An accounting export covers one legal entity, every brand, one mode, and calendar days in the entity's time zone (at most 366). Request one under entity → Exports or with POST /api/v1/exports; it's built in the background and its files download from the console for 30 days:
- Journal: one row per ledger entry of every posted transaction effective in the period, with the date, transaction, brand, Ownrecord account, your general-ledger account, debit or credit (exact decimals) and currency, and what the transaction links to (payment, invoice and credit note numbers, refund, dispute). Each transaction balances per currency, and all periods together add up to the trial balance.
- Invoice register: every invoice issued in the period: number, dates, customer, totals, tax regimes, status.
- Credit-note register: every credit note issued in the period, with its original invoice and refund.
The general-ledger mapping (entity → Exports, or exports.gl_mapping.set) maps Ownrecord accounts to your chart of accounts. A rule names an account kind (tax_payable, revenue, processor_fees, …), an account code, or a code prefix ending in * (tax_payable:EU_OSS_UNION:*); the exact code wins, then the longest prefix, then the kind. Accounts no rule maps are exported with an empty general-ledger column and listed in the export's summary.
Who can do what
Members who can read the entity's ledger (ledger:read) see reconciliation and exports. Finance, owners and admins (ledger:write) run reconciliation, resolve and ignore items, request exports and change the mapping. Brand-scoped members never see an entity's ledger.