Accounting

Ten orders a day is ten invoices somebody rebuilds from data that already existed

An order comes in. Somebody opens Exact Online, creates a sales invoice, copies the customer, copies the lines, checks the VAT code, saves it. Then the next one.

Every piece of information on that invoice already existed the second the customer clicked. Nothing new is being created in those four minutes — it is being re-entered, by a person, with the error rate of a person doing something repetitive at four in the afternoon.

  • REST API or a maintained connector
  • Orders, stock, customers, payment status
  • From €1,700 plus service fees
The tool

What Exact Online is, and which parts of it a webshop touches

Exact Online is a cloud accounting and ERP suite, and the market leader for SME bookkeeping in the Netherlands. It comes in tiers: Boekhouden for the books alone, Handel when you also want stock and order management, Productie for manufacturing, plus separate modules for projects and hours. Which tier you are on decides what a connection can do more than anything else, because stock and sales orders simply do not exist in the accounting-only tier.

Its API is a documented REST API with OAuth 2.0, generous by Dutch accounting-software standards, with rate limits per division and a token flow that has to be refreshed. That last detail is why Exact connections fail more often than they should: a refresh token that expires while nobody is watching stops the connection dead, silently, and the first sign is usually a month of missing invoices.

Almost everyone we build for uses it as the endpoint rather than the starting point — the webshop, the website or the field app is where the work happens, and Exact is where it has to end up so the accountant and the VAT return are right.

What goes wrong

Three things that go wrong between a webshop and Exact Online

These three come up so consistently that we now check for them in the first hour of any Exact project, before anyone has drawn a diagram.

The two turnover figures do not match, and nobody knows which is right

Your webshop says €48,200 last month. Exact says €47,615. The difference is four orders entered twice, one entered with a digit swapped, and two refunds that were processed in the shop and never in Exact. Finding out which is a day's work, and it is a day's work again next month.

What you see instead

Every order carries its shop order number into Exact as the reference, and an idempotency key means a retry can never create a second invoice. The two numbers are the same number, and when they are not, the queue tells you which order is missing and why.

You oversell, because the site's stock is yesterday's stock

Exact knows an item left the warehouse three orders ago. The webshop shows it as available, because somebody updates that number weekly, or when they remember. So it sells, and then the customer gets an email about a delay, and the review is about that email.

What you see instead

Free stock from Exact into the shop on a fixed rhythm — usually every fifteen minutes, with a buffer on fast movers. Deliberately not live per page view, so a slow Exact does not become a slow webshop.

The connection stopped in March and you found out in May

This is the specifically Exact one. An OAuth refresh token expires, or a password change invalidates it, and the connection stops without an error anyone sees. Orders keep arriving in the shop and stop arriving in Exact. Because nothing looks broken, the discovery is usually the accountant asking why turnover halved.

What you see instead

A heartbeat: the connection has to prove it is alive on a schedule, and silence is itself an alert. Failed orders wait in a queue instead of evaporating, so once the token is renewed the backlog goes through in order, nothing re-entered by hand.

The bill for doing it by hand

What re-entering orders into Exact Online actually costs

Take the arithmetic seriously for a moment. A webshop order rebuilt as a sales invoice in Exact takes between two and five minutes, depending on how many lines it has and whether the customer already exists. At twenty orders a day and three minutes each, that is an hour a day. Twenty hours a month. Two and a half working days, every month, of somebody typing things a computer already knows.

The error cost sits on top and is harder to see. In the sets we have reconciled for clients, manual order entry runs at roughly one mistake in every forty to sixty orders — a wrong VAT code, a discount on the wrong line, a quantity off by one. Most are caught. The ones that are not reach the customer as an invoice that is wrong, and a wrong invoice costs a credit note, a new invoice, a phone call and some goodwill.

And then there is the thing that never gets counted: invoices going out late. If invoicing is a task on a list rather than an automatic consequence of an order, it slips a day or two. Customers pay on their own terms from the invoice date, so every day of slippage is a day of your money sitting in somebody else's account.

  • Twenty orders a day, three minutes each: 20 hours a month of retyping.
  • Roughly one entry error per fifty orders, of which the expensive ones reach the invoice.
  • A day a month reconciling shop turnover against Exact turnover.
  • One to two days of invoicing delay, on every invoice, compounding into your cash position.
What we build

We build the thing on the other end too

With Exact Online the useful question is usually not "can it be connected" — it can — but "what should the shop look like now that it can". A shop that no longer needs manual invoicing can also stop asking customers for a purchase order number in a free-text field, and start showing their real open balance.

A connection needs two ends. Plenty of agencies will build you the API call and hand you a JSON payload; that is the easy half. The harder half is what the data lands in — a website, a webshop, a portal your customers log into, an internal tool that replaces a spreadsheet. JKC builds both ends, which is why the connections we build tend to keep working: nothing about the receiving side is a black box to us.

API integrations

The connection itself: authentication, field mapping, rate limits, retries and a queue that survives the other system being down for an hour. Built against the documented API where there is one, and against whatever the vendor really offers where there is not.

Websites

WordPress sites that read from your systems instead of repeating them by hand: a careers page fed by your HR system, a team page that follows your payroll, prices and availability that are the real ones.

Webshops

WooCommerce shops where the order is the last time anyone types it: it becomes an invoice in your accounting package, a label at your carrier, a stock mutation in your warehouse, and a line in your CRM, on its own.

Web applications

When the process does not fit any standard product: a customer portal, a quoting tool, a planning board, a dashboard that reads three systems at once. Built on your data, with your systems as the source instead of a copy of them.

What can be connected

What can be connected between Exact Online and your shop

Everything below assumes the Exact tier that actually has the feature — sales orders and stock need Handel or higher, not Boekhouden. We check which licence you are on in the first conversation, because half of the disappointing Exact projects we hear about were scoped against a tier the client did not have.

  • Orders as sales invoices or sales orders (into the tool)

    Customer, article lines, quantities, unit prices, discounts, VAT code per line, delivery and invoice address, and the shop order number as the reference so the two systems can always be reconciled. Invoice or order depending on whether you ship before you invoice.

  • Customers and contacts (both ways)

    Matched on VAT number or email, created in Exact when new, updated on either side depending on which system you decide owns the address. Not both by default: two systems that both think they own an address will overwrite each other forever.

  • Articles, prices and price lists (out of the tool)

    Article code, description, unit, sales price and any customer-specific price list, into the shop. Which side owns the product text is a decision worth making explicitly: Exact's descriptions are usually written for a warehouse, not a shopper.

  • Free stock per article and per warehouse (out of the tool)

    On a schedule, with an optional buffer so a fast mover never shows the last unit as available. Multiple warehouses can be summed or shown separately, which matters if you sell click-and-collect.

  • Payment status, refunds and credit notes (both ways)

    A Mollie or Stripe payment marked as received in Exact against the right invoice; a refund in the shop becoming a credit note rather than a mystery difference. This is the flow that keeps your aging report honest.

  • Open items into a customer portal (out of the tool)

    What a logged-in B2B customer sees of their own account: invoices, what is still open, what is overdue, and a copy of the PDF. Cuts the "can you send me that invoice again" email traffic to almost nothing.

A first Exact project is usually rows one, two and four: orders in, customers matched, stock back. The payment and portal rows are the second phase, once the first one has run quietly for a month.

How it works

How a connection gets built at JKC

The same four steps every time, whichever tool it is. Nothing here is a workshop you pay for: step one exists because scoping a connection wrong is the single most expensive thing that can happen to it.

  1. 1. We look at what is actually being retyped

    Not "which fields exist" but "which fields does somebody currently move by hand, how often, and what breaks when they get it wrong". Most projects turn out to need two or three flows, not a full two-way sync of everything. That conversation is what keeps the quote where it is.

  2. 2. We pick the route, and say why

    A maintained connector from the vendor, a platform like Make or Zapier, or a custom integration against the API. Cheapest first, not custom first: if a supported plugin does exactly what you need, that is the answer and we will tell you so. Custom is for the cases where the off-the-shelf option would need so much configuring that it becomes the fragile option.

  3. 3. We build it to survive the other system

    Every connection ships with retries, a queue and an idempotency key, so an order that arrives while the other side is down is delivered later rather than lost, and a retry does not create a second invoice. On a test environment first where the vendor offers one, so the first thing your real administration sees is a working connection.

  4. 4. We hand it over with the failure modes written down

    Which alerts you will get, what each one means, what to do about it, and who to call. Plus the credentials in your own name, in your own vault — not in ours. A connection nobody but us can maintain is a connection you do not own.

After it goes live

A connection that fails silently is worse than no connection

This is the part most quotes leave out. A connection that stops working without telling anyone is worse than manual work, because with manual work at least somebody notices when it does not get done. Every connection JKC builds is monitored, and the monitoring is not an upsell — it is in the service fee.

An alert per failed message, not a monthly report

A message that does not get through raises an alert the same hour, with the record it was about. Not a dashboard you have to remember to look at.

Replay, not re-enter

Anything that failed sits in a queue and can be sent again once the cause is fixed, in order. Nobody goes back through yesterday to find the four orders that did not land.

We watch the vendor's changes, so you do not have to

APIs get versioned, deprecated and rate-limited. When a vendor announces a change that affects your connection, adjusting to it is part of the service fee, not a new project.

What it costs

From €1,700, and the biggest variable is who built the other end

For Exact Online specifically: if you are on WooCommerce and your needs are ordinary, a maintained connector from Exact's own app centre may well be cheaper than anything we could build, and we will say so. Custom becomes the right answer when you have customer-specific pricing, multiple warehouses, or a shop we built where the mapping is already known.

A connection starts from €1,700 plus a monthly service fee, which covers the monitoring, the queue and keeping up with the vendor's API changes. Work outside a fixed scope is €95 per hour.

What moves the number is not the tool — it is how well the system on the other end is known. If JKC built your website, your webshop or your web application, we already know its data model, its edge cases and where its stock numbers really come from, and a connection into it is mostly configuration and testing. If it is a system we have never opened, we start with a short technical check of both sides and quote after that, so you are not paying hourly for us to work out the basics.

Two more things that move it, in our experience more than anything else: whether the tool has a real API or only a CSV export, and whether the sync has to go both ways. One-way is roughly half the work of two-way, because two-way means deciding, per field, which system wins when they disagree — and that decision is the expensive part, not the code.

Questions

Frequently asked questions about connecting Exact Online

Yes — Exact Online and WooCommerce is the most common pairing we build, because a large share of the shops we work on already run on WooCommerce.

It is also the pairing with the most off-the-shelf options, so this is one of the cases where we will genuinely talk you out of custom work if a supported plugin does the job. Where custom earns its keep is customer-specific pricing, multi-warehouse stock, product data that has to be enriched on the shop side, or an existing shop with fifteen plugins where a generic connector would fight three of them.

Free, 10 minutes

Not sure where the manual hours actually go?

That is what the Growth Scan is for. Ten minutes, no sales call attached: you get back where the double work sits, which connection would pay for itself first, and which one honestly would not.