More Core documentation
Import a bank statement
Upload an OFX, CAMT.053, MT940, or BAI2 statement, auto-match the lines to open invoices and payments, review what is left, and re-import safely without doubling up.
You can hand ERPClaw a bank statement file and it matches the lines to invoices and payments you already have on the books (the shorter overview is here). Say it the way you would out loud:
“Import my January bank statement and match it to open invoices.”
The formats you can upload
ERPClaw reads the four statement formats banks actually export.
- OFX (Open Financial Exchange), the common download from US and Canadian banks
- CAMT.053, the ISO 20022 statement most European banks issue
- MT940, the long-standing SWIFT statement format
- BAI2, the cash-management format from US corporate banking
Pick whichever your bank gives you. There is nothing extra to install for any of them, and ERPClaw detects the format on its own unless you name it.
Step 1, import the file
“Import my January bank statement for the checking account.”
Point ERPClaw at the file and name the bank account the statement belongs to. That is all it needs; the format is worked out for you unless you would rather be explicit.
The bank account is resolved by name within your company. If you name an account that does not exist, ERPClaw stops and tells you, rather than guessing a different account. It never quietly imports a statement into the wrong place. Each transaction on the statement becomes a line on the imported record, ready to match.
Step 2, auto-match to open invoices and payments
“Match those statement lines against our open invoices and payments.”
The matching engine runs your rules over the imported lines and links each one it can place to an open invoice or payment. A deposit that clears an outstanding customer invoice gets paired with that invoice; a withdrawal that settles a bill gets paired with that payment. The lines it is confident about are matched in one pass.
Teach it your patterns with match rules
Recurring lines can match themselves once you have told ERPClaw what they are.
“Anything with STRIPE in the description is a Stripe payout, map it to that account.”
A rule looks at one field on the line (the description, the counterparty name, the reference, or the amount), tests it (equals, contains, a regular expression, or an amount range), and on a hit routes the line to an account, a vendor, or a customer, or tells the engine to leave it alone. Give rules a priority to control which one wins when more than one could apply, and ask to see the rules you have whenever you want to review them.
Step 3, review the unmatched lines
The engine leaves anything it cannot place with confidence for you to look at.
“What is still unmatched on that statement?”
“That one is a payment to Acme Steel, match it to them.”
Changed your mind about a match? Clear it and the line goes back into the unmatched pile, ready to be placed somewhere else.
Re-import safety, no duplicates
Re-importing the same file is safe. Every line carries its own identifier from the bank, and any line already on the books is skipped on the way in. So if a download was interrupted, or you are not sure whether January already went through, you can run the import again without doubling up the statement.
Reconcile and close out
When the lines are matched, check where the account stands.
“How does the checking account reconcile as of the end of January?”
You can ask for the picture at any cutoff date, list the statements imported so far, open any one of them, and archive a statement you are finished with.
What is next
- Reports by department, project, or any dimension splits your P&L the way you run the business.
- Accounting basics covers the chart of accounts, journals, and how postings flow.
- Purchasing walks the purchase order, receipt, vendor invoice, and payment loop.
Reference: the actions behind this page
You never have to type these. They are what ERPClaw runs when you ask, and they are here for anyone calling the API or MCP surface directly, or reading a log.
integration-import-bank-statement --file ~/statements/checking-january.ofx --bank-account-name "Checking"
integration-auto-match-bank-statement --statement-id <id>
integration-add-bank-match-rule --name "Stripe payouts" --match-field description --match-operator contains --match-value "STRIPE" --target-action map_to_account
integration-list-bank-match-rules
integration-unmatched-bank-lines --statement-id <id>
integration-manual-match-bank-line --line-id <id> --target-action map_to_vendor --target-id <vendor-id>
integration-clear-bank-line-match --line-id <id>
integration-bank-reconciliation-summary --bank-account-name "Checking" [--as-of <date>]
integration-list-bank-statements
integration-get-bank-statement --statement-id <id>
integration-archive-bank-statement --statement-id <id>
Match-rule fields are description, counterparty_name, reference, or amount. Operators are equals, contains, regex, or amount_range written as min:max. Target actions are map_to_account, map_to_vendor, map_to_customer, or ignore. Import accepts --format (ofx, camt053, mt940, bai2) when you want to be explicit.