12 Months, One Spreadsheet:
Batch French Bank Statement Reconciliation
May 20, 2026. That's the electronic filing deadline for the liasse fiscale — the annual tax return package every French company running a December 31 fiscal year must submit. Behind every liasse fiscale sits at least one état de rapprochement bancaire (ERB), the bank reconciliation statement that proves the compte 512 balance on your bilan matches reality. For a company with three bank accounts across three different French banks, that means reconciling roughly 36 individual relevés bancaires — each in a different layout — before your expert-comptable can sign off.
New to extracting French bank statement data? Start with our guide to extracting French bank statements into Excel — it covers RIB/IBAN format, transaction types, and single-statement workflows. This article is about what changes when you have 12 of them across multiple banks, and a deadline.
Key Takeaways
- DSP2 bank feeds pull only 90 days of transactions — your liasse fiscale deadline needs all 12 months, and your January relevé bancaire was already a PDF long before the feed window started.
- Three French banks ship three different relevé formats and Crédit Agricole's 41 regional caisses don't even share the same layout — reconciling 36 statements is not an accounting task but a data integration problem hiding inside a ledger.
- ImageToTable.ai reads every French bank's relevé by column name instead of pixel position — define Date, Libellé, Débit, Crédit once, and all 36 PDFs merge into a single spreadsheet with an automatic audit trail.
The Year-End Bank Reconciliation (Rapprochement Bancaire) Requirement in France
Article L123-12 of the French Code de commerce does not name "bank reconciliation" explicitly. But it requires every commerçant to maintain a regular and honest accounting (comptabilité régulière et sincère), control assets and liabilities by inventory at least once every 12 months, and produce annual accounts. In practice, no expert-comptable or commissaire aux comptes (CAC) — the statutory auditor required for French companies exceeding two of three thresholds (4M€ bilan total, 8M€ chiffre d'affaires HT, 50 employés) — will certify accounts without seeing a completed état de rapprochement bancaire for every active bank account.
The Cour d'appel d'Angers, in its ruling of January 15, 2001 (n°2000/00239), classified matching (lettrage) and rapprochement bancaire as "éléments comptables de base" — basic accounting elements. The absence of a reconciliation is not a missing form; it is a gap in the internal control (contrôle interne) that a CAC is professionally obligated to flag. The Plan Comptable Général (règlement ANC n°2014-03) reinforces this by requiring justification and traceability for every accounting entry.
The ERB is not legally mandatory in a standalone sense, but the liasse fiscale submission is — and the ERB is the document that proves your compte 512 balance is correct on the bilan. May 5 (paper) or May 20 (EDI-TDFC electronic filing) is when the liasse must reach the administration fiscale for a December 31 closing. That means the reconciliation work needs to be finished weeks earlier so your accountant can incorporate it into the bilan and compte de résultat.
Why French Companies End Up with Statements Across Multiple Banks
A French SME doesn't operate like a US small business with one Chase checking account. The French banking landscape is fragmented by design: a company might hold a current account (compte courant) at BNP Paribas for domestic operations, a savings account (compte d'épargne) at Crédit Agricole for surplus cash, and a business account at Qonto or Shine for day-to-day expense management. Each of these is a separate compte 512 in the chart of accounts — and each requires its own ERB at year-end.
This multi-bank pattern is common rather than exceptional. A survey of French SME banking behavior by Tiime found that multi-banking (multi-bancarisation) is driven by practical separation of activities (operations vs. savings vs. foreign currency), access to different financial products, and sometimes the deliberate spreading of banking risk — particularly when a Bpifrance-backed financing arrangement asks the company to diversify its lenders across a banking pool (pool bancaire).
The practical result for year-end reconciliation: three banks means three separate relevés de compte each month. Crédit Agricole operates through 41 regional banks (caisses régionales), each with autonomy over statement formatting. BNP Paribas uses separate débit and crédit columns. Société Générale uses a single "Montant" column with positive and negative signs. A reconciliation spreadsheet built by copy-pasting from three different statement formats, across 12 months, is not a morning's work. It is a structural data integration problem disguised as an accounting task.
Where Bank Feeds and CSV Exports Fall Short in the French Multi-Bank Scenario
French accounting software — Sage 100, Cegid Quadra, Pennylane, EBP — has invested heavily in DSP2-based bank feed integration. The theory is clean: you authorize your software to pull transactions directly from your bank via a bank aggregator (agrégateur bancaire) like Budget Insight, Bankin', or Powens. But the theory has three gaps that open precisely during year-end closing.
First, historical data is often inaccessible. DSP2 feeds and EBICS connections typically pull the last 90 days of transactions. A year-end reconciliation covering January through December needs all 12 months. For periods outside the feed window — or for accounts at smaller French banks that don't participate in the aggregation network — the fallback is the relevé bancaire PDF downloaded from the bank's espace client, or in the case of older mutualist caisses, the paper statement that was mailed and then scanned.
Second, CSV exports from French banks are not standardized across institutions. A BNP Paribas CSV uses semicolons as separators with comma decimals; a Crédit Agricole CSV uses different column headers and date formats; a La Banque Postale CSV structures transaction descriptions differently from an LCL CSV. Downloading 12 months of CSVs from three banks means normalizing at least three different column schemas before any merge can happen. The CFONB-120 format exists as a standard, but not every bank supports it — and exporting in CFONB often requires navigating different menu paths in each bank's interface.
Third, the feed approach presumes live digital access, but French companies changing banks, closing accounts, or dealing with historical audits often only have PDFs. Article L123-22 of the Code de commerce requires businesses to retain relevés bancaires for 10 years. Those decade-old statements are PDFs (or scanned paper) at best — no DSP2 feed reaches that far back.
How Batch Extraction Reads Three French Banks Like One Format
The reason three French banks become three separate data entry projects is template dependence. A template-based OCR tool draws bounding boxes around coordinates: "Date is at (x=45, y=120) on BNP statements." Those coordinates are wrong the moment the bank updates its layout, and they are meaningless on a Crédit Agricole PDF from a different caisse régionale entirely.
ImageToTable.ai replaces coordinate templates with column-name extraction: you define the column names you want — "Date," "Libellé (Description)," "Débit," "Crédit," "Solde (Balance)" — once. The AI reads each relevé bancaire the way a person does: it identifies the date column by recognizing date patterns, locates transaction descriptions by their structural position relative to amounts, and determines whether a value belongs in débit or crédit based on the surrounding context — not by checking which pixel coordinates contain a minus sign. This is the same mechanism we cover in our guide to batch French invoice processing for year-end closing: the logic is format-agnostic, which is what makes genuine multi-source batch processing possible.
You don't configure BNP Paribas, Crédit Agricole, and Société Générale separately. You configure one set of column names, upload all 36 PDFs, and the AI applies the same extraction logic to every page. A separate two-column layout and a single "Montant" column with sign notation both produce structurally identical rows in the output.
What's happening under the hood is semantic, not positional. The AI understands that "Montant" with a negative value on a Société Générale statement is equivalent to a débit entry on a BNP Paribas statement. It doesn't need to know where on the page the amount appears. It needs to know what the amount means in the context of the transaction row. That is the difference between template OCR and vision-language-model extraction — and it's the reason the same column definition works across every French bank's relevé format without modification.
From 36 PDFs to One Reconciliation Spreadsheet: The Batch Workflow
The workflow has three steps, and the structure of the output is what matters for the ERB:
The batch process is the same extraction engine that powers our dedicated bank statement to Excel converter — used for individual relevés — scaled to handle volume. The key structural difference in batch mode is the "Source File" column, which preserves provenance across an arbitrarily large upload set.
Files are processed securely and not stored.
What the Output Looks Like for a French Accountant
The exported spreadsheet is not a raw dump. It is a structured table where each column heading is the column name you defined, and the data is standardized regardless of source format. A direct debit (prélèvement) from BNP Paribas, a transfer (virement) from Crédit Agricole, and a card payment (paiement par carte) from Société Générale all land in the same structured rows with the same columns.
The "Source File" column means the expert-comptable or CAC can trace any transaction back to the originating PDF. In a manual workflow, tracking a discrepancy to its source means opening individual PDFs one by one. In the batch output, the audit trail is built into the spreadsheet itself. For small-business owners who handle their own bookkeeping (tenue de compte) during the year and hand the file to an accountant for closing (clôture), this auditability removes the most common friction point in the handoff: "where did this number come from?"
The standardized output can be imported into practically any French accounting environment — Sage 100, Cegid Quadra, EBP Compta, Pennylane, iTool, or a custom Excel reconciliation template your cabinet d'expertise comptable already uses. For companies dealing with multiple French expense workflows, the same batch approach applies to batch French expense reports (notes de frais) — the structural challenge is identical, only the document type differs.
FAQ
Does this work with scanned paper relevés bancaires, or only digital PDFs?
It works with both. The AI processes the visual content of the page — scanned paper, PDF downloaded from an espace client, smartphone photo of a printed statement. Image quality matters: a blurry photo taken at an angle will produce less reliable extraction than a flat scan at 200+ DPI, but the system handles the same input variety French businesses actually deal with — including the quarterly paper relevés still mailed by some caisses régionales du Crédit Mutuel.
Can I extract the RIB/IBAN from each statement?
Yes. The RIB (Relevé d'Identité Bancaire) block — containing the code banque (5 digits), code guichet (5 digits), numéro de compte (11 digits), and clé RIB (2 digits) — can be extracted as a column. This is useful when consolidating statements from multiple banks: you can include the RIB as a column to identify which account each transaction belongs to, supplementing the "Source File" column with a machine-readable bank identifier.
What about French transaction types — does it distinguish prélèvement from virement from chèque?
The AI reads the transaction description (libellé) and identifies the type from the text. French bank statements typically label prélèvements with "PRLV" prefixes, virements with "VIR," chèques with check numbers, and carte bancaire transactions with the date and merchant. The inferred column mechanism lets you add a "Type d'opération" column that the AI populates by reading each libellé — no manual classification after export.
How long does it take to process 36 statements?
Upload time depends on file size, but extraction itself processes roughly one page every 5-10 seconds. A 3-page relevé takes about 15-30 seconds. For 36 statements averaging 3 pages each, processing runs in the background while the status updates in real time. The time saved over manual entry compounds with volume: a single statement page that takes roughly 3 minutes to type manually processes in 5-10 seconds, an 18x improvement on the data entry step alone. For 100+ pages across multiple banks, this is the difference between finishing the ERB in the same afternoon versus spreading it across several evenings.
Can this work alongside my existing French accounting software — Sage, Cegid, EBP?
Yes. The output is a standard Excel (XLSX) file that can be imported into any French accounting software that accepts structured data import. Sage 100, Cegid Quadra, EBP Compta, Pennylane, and iTool all support importing Excel transaction data. The column structure you define during extraction can be aligned with your software's import template, so the file drops directly into the journal de banque (bank journal) without reformatting.
The ERB is not the accounting task. The accounting task is deciding which compte de charge each prélèvement maps to, and whether that débit should hit compte 627 (services bancaires), compte 6616 (intérêts), or a fournisseur account. None of that judgment is automated. What is automated is getting the transaction data off 36 PDFs and into a spreadsheet where you can perform that judgment — without spending five hours typing numbers first.