More FeaturesAccounting ledger

More Features

Accounting ledger

A double-entry ledger per business, posted automatically from your invoices, payments and expenses, with locked periods and standard accounting reports.

Coming June to July 2027

This feature ships in June to July 2027. This page describes how it will work; details can change before release.

The accounting ledger keeps proper double-entry books for each business, right next to your invoices. It is for small businesses that do not use QuickBooks or Xero: your invoices, payments, credit notes, refunds, late fees and expenses post journal entries automatically, you or your accountant add manual entries when needed, and you get a trial balance, profit and loss, balance sheet and general ledger whenever you want them. Posted entries can never be edited or deleted, so the books stay auditable.

How it works

Chart of accounts

When you turn the ledger on for a business, it gets a chart of accounts from a country template, which you can then edit. The generic small-business template comes first; templates for Pakistan, the UK, India and the EU follow, each checked by an accountant before release.

Some accounts have a role in automatic posting, for example accounts receivable, revenue, tax payable, bank, payment-provider clearing, payment-provider fees, client credit and late-fee income. Every template includes them, so automatic entries always have somewhere to go.

Automatic journal entries

Your everyday work posts to the ledger for you:

What happensWhat is posted
An invoice is issuedAccounts receivable, revenue and tax payable
A payment arrivesBank or payment-provider clearing, and accounts receivable
A credit note is issuedA balanced entry for the credited amount
A refund is madeA balanced entry for the refund
A late fee is appliedA balanced entry for the fee
An expense is recordedA balanced entry for the expense
A payment provider takes a fee (Stripe)The fee as an expense

Each source event posts once: if the same event is processed twice, no duplicate entry is created.

Manual journal entries

A member with the ledger.journal permission can post manual entries, for example opening balances or an adjustment from your accountant. Every entry must balance: total debits must equal total credits, or the entry is rejected.

Append-only books

Posted entries are never edited or deleted, by anyone. To correct a mistake, post a reversing entry, which cancels the original, and then post the correct entry. The original and its reversal both stay in the books, so anyone can see what changed and when.

An entry can be reversed only once.

Locked periods

When a month is closed, lock the period. Nothing can post into a locked period: not a manual entry, not an automatic entry, not a reversal. Periods never overlap. Unlocking a period is treated as a destructive action and needs confirmation.

Currencies

Ledger lines are kept in the business's base currency. For a document in another currency, the line also keeps the original amount and currency with the exchange rate frozen on that document, so the books match your invoices exactly.

Set up and use the ledger in the web app

1

Open Ledger

Ledger is in the app sidebar. Turn it on for the business you have selected.

2

Apply a chart of accounts

Choose the template for your country, or the generic one. Then rename, add or archive accounts to fit your business.

3

Let entries post

From now on, your invoices, payments, credit notes, refunds, late fees and expenses post entries automatically.

4

Add manual entries when needed

Enter the date, a description and the lines. The entry is saved only if debits equal credits.

5

Lock closed periods

After a month is reviewed, lock it so nothing can change its figures.

6

Run reports

Open trial balance, profit and loss, balance sheet or general ledger, on cash or accrual basis, and export to CSV or PDF.

Bank reconciliation

Import a bank statement as CSV or OFX and match each line to a payment, an expense or a journal entry. Lines show as unmatched, matched or ignored, so you can see at a glance what still needs attention. The same statement line is never imported twice for a bank account. Live bank feeds are not offered.

Reports

ReportReport name
Trial balancetrial-balance
Profit and lossprofit-and-loss
Balance sheetbalance-sheet
General ledgergeneral-ledger

Each report runs on cash or accrual basis for a date range, and exports to CSV or PDF. The trial balance always balances.

The ledger produces reports your accountant can use. It does not prepare or file tax returns for any country.

Through the API and MCP

curl -X POST "https://api.freeinvoiceautomation.com/v1/journal-entries" \
  -H "Authorization: Bearer $FIA_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: je-opening-balance-2027" \
  -d '{
    "business_id": "0193f2a1-7c4e-7b9a-9f10-3c2d1e0a4b51",
    "entry_date": "2027-06-01",
    "description": "Opening bank balance",
    "lines": [
      { "ledger_account_id": "0193f3a0-1b2c-7d3e-8f4a-5b6c7d8e9f01", "debit_minor": "500000", "credit_minor": "0", "currency": "USD" },
      { "ledger_account_id": "0193f3a0-1b2c-7d3e-8f4a-5b6c7d8e9f02", "debit_minor": "0", "credit_minor": "500000", "currency": "USD" }
    ]
  }'

Every line has exactly one side: a debit or a credit, never both. Ledger report queries take basis=cash|accrual, from, to and format=json|csv|pdf.

Reversing an entry and unlocking a period need "confirm": true. Over MCP, get_ledger_report gives your assistant read-only access to the four reports ("What was my profit in the first half of 2027?"). Webhooks send journal_entry.posted and accounting_period.locked.

Ledger, QuickBooks and Xero

If your accountant already keeps your books in QuickBooks Online or Xero, use the sync instead; you do not need this ledger. The two can also run side by side.

Errors

CodeWhen
journal_unbalancedDebits do not equal credits.
period_lockedThe entry date falls in a locked period.
entry_already_reversedThe entry was reversed before.
confirmation_requiredA reversal or unlock without "confirm": true. The response includes the preview.
validation_failedA line with both or neither side, an unknown account, or a bad date.
permission_deniedYour role lacks the key for the action.

Permissions

ActionPermission keyDefault roles
View accounts, entries, periods, reports and bank linesledger.viewOwner, Admin, Accountant
Post and reverse manual journal entriesledger.journalOwner, Admin
Edit the chart of accounts, lock and unlock periods, import and match bank statementsledger.manageOwner, Admin

The Accountant role is view-only in the ledger: it can read everything and run reports, but not post. See Roles and permissions.