Quick scan before the full breakdown.
Goal
Reconcile refunds end-to-end across WooCommerce, Mollie and e-Boekhouden without manual bookkeeping
Stack
n8n, WooCommerce API, Mollie API, e-Boekhouden API, Telegram, Email
Result
Standard refunds processed automatically, with duplicate protection, independent auditing and full traceability
Time saved
Removed manual reconciliation from the accounting workflow entirely
Refund reconciliation sounds simple until the same transaction has to stay consistent across three systems.
A refund starts in WooCommerce. The actual payment and payout status lives in Mollie. The accounting entries have to be created correctly in e-Boekhouden. Handled manually, every refund means multiple checks, repeated data entry, and constant attention from accounting. Partial refunds, delayed payouts, missing invoices, and duplicated operations make it worse.
I built an automated reconciliation system in n8n made of 11 connected workflows. It takes each refund through the full accounting lifecycle: retrieve the order, find the original invoice, verify the payment with Mollie, create or validate the required accounting entries, confirm the customer actually received the refund, and only then mark the case complete.
The client needed refunds to stay consistent across WooCommerce, Mollie and e-Boekhouden without someone manually checking each case.
That meant handling:
The key design principle was verification before action. Before creating any accounting mutation, the workflow checks e-Boekhouden itself to see whether that entry already exists. That makes the process safe to rerun and protects against duplicates even if a webhook fires twice or a workflow restarts.

The main workflow processes one refund at a time through a strict sequence: get the order from WooCommerce, find the invoice in e-Boekhouden, check the payment in Mollie, create the credit note, verify the refund was paid out, and close the accounting entry.
It’s built as a decision tree: every step branches depending on what the system finds. A confirmed payment continues immediately. If a payment is still pending, the case waits and retries later. An ambiguous partial refund gets routed to manual review, and a missing order or invoice stops the process and logs why.

Before creating a payment entry, credit note, or settlement entry, the workflow checks e-Boekhouden directly instead of trusting its own internal status. Each mutation gets a fingerprint built from the refund ID, invoice ID, mutation type, amount including VAT, and currency — so the same refund can pass through the processor multiple times, during retries or after an interruption, without ever creating a second entry.
Refunds are also processed sequentially, one at a time — that removes the risk of two executions racing to create the same mutation.

If Mollie hasn’t confirmed a payment or refund yet, that’s not treated as a failure. The case waits, gets rechecked after six hours, and returns to the queue automatically once the status changes.
Partial refunds get more care. When the refunded amount or VAT can’t be matched confidently to the original invoice, the workflow stops the automatic accounting step and sends the case for manual review instead of guessing. The same logic applies to hard stops: a missing WooCommerce order or accounting invoice halts processing and records the reason until someone resolves it.

The main workflow already validates every refund as it moves through the process, but I wanted a layer of control that doesn’t depend on that same process. A separate audit workflow runs every three hours, pulls the latest refunds directly from Mollie, and compares them against what the reconciliation system already knows.
This matters because if the main workflow fails before recording a refund correctly, checking only its own data would never surface the problem. The audit starts from the external payment provider instead. When something doesn’t match, the case is logged separately for investigation — the audit never touches accounting data itself, keeping verification separate from execution.

Unexpected workflow errors trigger immediate Telegram alerts with enough context to find where things broke. The WooCommerce webhook is checked independently every hour, so a broken connection between the store and the automation gets caught even when no refund is currently in flight. Every Monday, an automated report collects all unresolved cases — pending, in manual review, or errored — and sends a summary by email and Telegram.
The system connects WooCommerce, Mollie and e-Boekhouden through n8n and coordinates 11 workflows covering refund processing, chargebacks, retries, audits, monitoring and reporting.
Core components:
Every refund keeps its full operational history — statuses, external IDs, API responses, accounting mutation IDs, retry attempts, and final outcome — which makes every automated decision traceable.

Standard refunds move through the system without anyone touching them.
Outcomes:
It’s a reconciliation system built around the full lifecycle of a refund — standard cases close themselves, and human attention goes only to the cases that actually need judgment.
Three nearby case studies worth reading next.

Apr 4, 2026
A two-workflow n8n system that matches Mollie chargebacks to the correct e-Boekhouden mutations and creates the accounting entries automatically.

May 1, 2026
A three-stage n8n workflow that extracts supplier invoices from Gmail with Claude and books purchase mutations directly into e-Boekhouden.

May 1, 2026
A two-workflow n8n system that turns paid WooCommerce orders and refunds into Moneybird invoices, payments, and credit notes automatically.
If you have a manual workflow between tools, I can help map the logic, design the system, and automate it in a way your team can actually use.
Hire Me on Upwork