Connect Fortnox to WooCommerce — order and invoice without lifting a finger
A connection between WooCommerce and Fortnox means that every order in the online store automatically becomes a customer and invoice data in your accounting. You no longer key in orders by hand, articles and stock stay in sync, and VAT lands in the right account. WooCommerce runs in your own WordPress, so the integration builds on the store's REST API and webhooks.
Quick overview
In short: An integration between WooCommerce and Fortnox automatically creates a customer, order and invoice data in your accounting when something is sold in the online store — plus a sync of articles, stock, payment status and VAT, so no one has to enter orders manually.
How to get started:
- Map the flow: what should happen when an order is placed, paid, shipped and returned respectively?
- Connect WooCommerce (REST API + webhooks) to the Fortnox API and map articles, payment methods and VAT rates.
- Run test orders with Klarna/Swish/Stripe, reconcile against the accounts and then put the flow into production.
GDPR: orders contain personal data (name, address, email) — sign a data processing agreement, minimise what is synced and preferably run the intermediate layer in the EU or Sweden.
What does a connection between WooCommerce and Fortnox mean?
The connection means that your WooCommerce online store and your Fortnox accounting system share data automatically. When a customer buys something, the customer and a set of invoice data (or an invoice) are created in Fortnox without anyone copying the order by hand. The same information — articles, prices, VAT and payment — moves from the store to the accounting on its own.
WooCommerce is a plugin for WordPress that you host yourself, unlike a cloud platform such as Shopify. That gives you full control, but it also means the integration happens via the store's own REST API and webhooks. Fortnox, in turn, has an open API for customers, articles, orders and invoices. An intermediate layer links the two — either a ready-made connector or your own flow in a tool such as n8n or Make.
The order flow — from checkout to booked invoice
The core of the connection is the order flow. When an order goes through in WooCommerce, the store sends a webhook, and the intermediate layer creates the right records in Fortnox. A typical flow looks like this:
- The customer completes the purchase in WooCommerce → an order is created with an order status.
- A webhook is sent to the intermediate layer, which looks up or creates the customer in Fortnox.
- The order lines are matched against articles in Fortnox and a set of invoice data is created.
- When the order is marked as paid, the right payment status and account are set in the accounting.
The point is that a sales event in the store triggers the right accounting entry automatically. You decide yourself whether each order should become a finished invoice straight away, or just invoice data that someone approves before it is booked. This is the same principle as in our pillar guide on system integration — you connect what you already have instead of switching systems.
Article and stock sync
For the invoice lines to come out right, the articles in WooCommerce and Fortnox must hang together. This is usually done via the article number (SKU) as the key, so that a product in the store points to the right article in the accounting. Without that mapping, you get the wrong account, the wrong VAT or duplicates in the article register.
Stock levels can be synced in both directions depending on where you want the "truth". Common setups:
- Articles matched on SKU between WooCommerce and Fortnox.
- New products in the store created as articles in Fortnox automatically.
- Stock level updated when an order is drawn down or a delivery is registered.
- Prices and descriptions kept consistent so the invoice reflects the store.
Decide in advance which system owns the stock level. Letting both store and accounting write to the same balance in an uncontrolled way is the most common source of incorrect stock.
Payment status, VAT and reconciliation
An order isn't finished until the payment has been handled. WooCommerce often works with payment solutions such as Klarna, Swish and Stripe, and each payment method needs to land correctly in the accounting. The connection maps the payment method to an account and sets the invoice as paid when the payment is confirmed — otherwise it stays unpaid and can be followed up.
VAT is the detail that most often causes trouble, especially with sales to other EU countries or outside the EU. VAT rates in WooCommerce must correspond to the right VAT code and account in Fortnox.
| Payment method | How it is confirmed | Things to consider in Fortnox |
|---|---|---|
| Klarna | Callback when payment is approved; payout in bulk later | Distinguish paid order from paid-out sum; fees booked separately |
| Swish | Immediate confirmation on completed payment | Simple reconciliation; match against the right cash account |
| Stripe | Webhook on successful payment; fee deducted at payout | Book gross amount and fee separately for correct VAT |
Reconcile regularly: the number of orders in the store should correspond to the number of invoice records in Fortnox, and the incoming payments should be matchable against the invoices. A good flow logs every order so you can trace an individual transaction all the way through.
Returns and credit notes
Returns must be handled just as automatically as purchases, otherwise the accounts don't add up. When an order is fully or partly credited in WooCommerce (a refund), a credit note should be created in Fortnox for the corresponding amount, with the right VAT reversed. Partial returns require that only the returned lines are credited.
- Refund in WooCommerce → credit note in Fortnox with the same article lines.
- Partial refund → credit only the returned articles, not the whole order.
- Stock level adjusted back when the item is returned.
- Refunded VAT reversed to the right account.
By linking returns to the accounting, you avoid manual credit notes and the risk that a refund is booked wrong or forgotten.
Building the connection and keeping the data secure
Simple needs can be covered by a ready-made connector, but many Swedish stores have rules that don't fit a standard module: particular accounts, mixed VAT rates, or flows where orders should be approved before they are booked. Then you build your own flow that listens to WooCommerce webhooks and calls the Fortnox API with your own logic. That gives control and makes the flow easy to extend — the same idea as when you set out to automate the business at large.
Because an order contains personal data, GDPR applies. Map what actually needs to be synced, sign data processing agreements with providers and avoid sending more data than necessary. An intermediate layer that can run in the EU or be self-hosted in Sweden means the customer data stays where you want it. Want us to look at your particular systems? Get in touch and we'll go through the flow together.
Want to see how this looks in practice? Explore our solutions, see case studies and platforms we've built, or get three free suggestions.