Connecting n8n to Qonto: automating bank reconciliation with AI
Published 16 August 2026 · 5 min read
Every month, the same chore: open the Qonto interface, compare bank movements against the invoices logged in accounting, and tick off matches one by one. Bank labels don't help — "VIR SEPA REF 88231-B" says nothing about the client or the invoice it corresponds to — and gaps only surface at month-end, by which point it's already late to chase an unpaid invoice. Qonto's Business API is public, documented, and reachable in a few clicks from the account settings: enough to build an n8n pipeline that pulls transactions, categorizes them with AI, and flags gaps as soon as they appear instead of waiting for the close.
Generating API credentials
No partner process is required for internal use. In the Qonto app: the settings icon (gear wheel) at the bottom of the menu, then API Key. A login and secret key are generated automatically when you click Generate; on an account protected by strong authentication, a confirmation request is sent to the linked phone. This key is available from the Basic plan onward — no need for an Enterprise plan to start automating.
Keep in mind that this login and secret key are neither your email nor your sign-in password: they're dedicated integration credentials, independently revocable via the Regenerate button if in doubt.
Authenticating n8n against the API
The Business API responds at https://thirdparty.qonto.com/v2 in production (a sandbox environment exists for testing without touching real data). Two authentication methods:
- API key — the fastest for a single organization: create a Generic Credential Type → Header Auth credential in n8n with the
Authorizationheader and the value{login}:{secret_key}(raw format, no Base64 encoding despite resembling Basic auth). Every subsequent HTTP Request node reuses this credential. - OAuth2 — relevant when building an integration meant to cover several distinct Qonto accounts, each authorizing access separately (the case of an agency automating for multiple clients, as detailed in our guide on hosting n8n for a multi-client agency).
A community node (n8n-nodes-qonto-api, installable via Community Nodes on a self-hosted instance) wraps the most common calls in a visual interface rather than raw HTTP Request calls — handy to get started, with the usual trade-off for any third-party node: maintenance depends on an outside contributor, not n8n itself.
Fetching and filtering transactions
The GET /v2/transactions endpoint returns an account's movements, with pagination and filters on status (pending, completed, declined), period (settled_at_from / settled_at_to), and the IBAN concerned for multi-account organizations. A daily Schedule Trigger that queries this endpoint for the previous day, rather than the full history every time, keeps the workflow light — the same incremental-window principle described in our guide on keeping an index up to date without reprocessing everything.
Each transaction carries a label (the raw bank label, often unreadable), an amount, a side (credit/debit), a reference when the sender entered one, and attachment_ids if a receipt has already been attached on Qonto's side.
Reconciliation: matching invoices and categorizing with AI
Reconciliation itself follows a principle already detailed in our Compare Datasets node guide: two datasets (Qonto transactions and the invoices logged in your accounting tool — see our guide on connecting Pennylane to n8n if that's your case), a matching field (amount and date within a few days), and an "unmatched" output that triggers an alert instead of sitting untouched until month-end closing.
The real friction point is that automatic amount-based matching fails as soon as the bank label contains neither the client's name nor the invoice number — common with SEPA transfers. That's where an AI node earns its keep: an AI Agent or a simple LLM call, fed the raw label and the list of pending invoices, proposes a likely match with a confidence score, auto-validated above a threshold and escalated to a human below it. This approach builds on methods already proven in research: a study by García-Méndez, Fernández-Gavilanes, Juncal-Martínez, González-Castaño, and Barba Seara, published in IEEE Access in 2020 ("Identifying Banking Transaction Descriptions via Support Vector Machine Short-Text Classification Based on a Specialized Labelled Corpus", see on Google Scholar), shows that a classifier trained on a corpus of short bank labels reaches high accuracy at extracting the actual nature of a transaction — a modern LLM, with no dedicated training, generalizes the same principle through the context supplied in the prompt.
Alerting on gaps without waiting for the close
Unmatched transactions, once identified, deserve an immediate alert rather than a spreadsheet reviewed once a month. A Slack or Send Email node wired to the reconciliation's "gap" output, carrying the amount, date, and raw label, lets accounting decide within seconds — the same pattern detailed in our guide on automated follow-ups for incomplete records, transposed from HR to banking. For ambiguous cases where the AI is uncertain, the human-approval-via-Slack pattern closes the loop: a one-click reply validates or rejects the proposed match.
Moving from polling to webhooks
Querying /v2/transactions every hour works, but burns API calls to fetch, most of the time, nothing new. Qonto's Business API offers webhooks that notify n8n in real time on every new transaction or status change: a Webhook Trigger then replaces the Schedule Trigger, and reconciliation fires the second money moves rather than at the next scheduled window. As with any internet-exposed webhook, always verify the signature of the received payload before processing it — the full method is in our n8n webhook security guide — and build in idempotency to ignore duplicate deliveries, as detailed in our dedicated guide.
Securing the API key
The Qonto secret key grants read access (and sometimes write access, depending on enabled scopes) to the company's actual financial movements: it deserves the same treatment as any sensitive credential. Store it only in an encrypted n8n credential — never in a Set node or a variable shared with other workflows — following the best practices detailed in our API credential security guide. If a leak is suspected, the Regenerate button instantly revokes the old key for every integration using it, including this workflow.
Going further
This pipeline closes the loop between the bank and accounting without manual re-entry or waiting for month-end. If your needs also include a full audit trail of every reconciliation (who validated what, when, at what confidence level), the Compliance & Audit Pack (€149) provides the Supabase logging building block, ready to run alongside these API calls. And if supplier invoices arrive by email before any processing, the Inbox AI Pack (€79) handles the initial inbox sorting. All three packs, bundled together in the Complete FlowKit Bundle (€269 instead of €347 bought separately), cover the entire financial journey, from receiving a document to bank reconciliation.
FAQ
Frequently asked questions
Do I need a specific Qonto plan to use the Business API?
No: the API key (login + secret key) is generated from the account settings, under Settings → API Key, including on the Basic plan — just click Generate and confirm via strong authentication on the phone linked to the account. No partner approval is needed for internal use like an n8n workflow.
How do I authenticate n8n against the Qonto API?
The Business API accepts two methods: a static API key (the header Authorization: {login}:{secret_key}, placed in an n8n credential of type Generic Credential Type → Header Auth) for a single-organization use case, or OAuth2 if you're building an integration meant to cover several distinct Qonto accounts, each authorizing access separately.
Can Qonto transactions be received in real time instead of polling the API?
Yes, the Business API offers webhooks that notify n8n as soon as an event happens (new transaction, status change) through a Webhook Trigger, avoiding a Schedule Trigger that re-checks the same data every hour. As with any publicly exposed webhook, verify the signature of the received payload before processing it.
How do I secure the Qonto secret key used inside an n8n workflow?
Store it exclusively in an encrypted n8n credential, never hardcoded in a Set node or an environment variable shared with other services. Limit which workflows can access it, enable execution logs to trace every call, and regenerate the key (the Regenerate button) if you suspect a leak — the old key is instantly revoked for every integration that used it.
Bundle FlowKit Complet
€269