Accounting

AFAS holds the real data. Your website is running on a copy of it that nobody updates

Somebody changes an address in AFAS. Three weeks later the invoice still goes to the old one, because the customer portal on the website was never told. A new colleague starts, and is on the team page the day somebody remembers to add them by hand. A vacancy gets filled, and stays live on the careers page for another two months.

None of that is an AFAS problem. AFAS is right. Everything around it is running on a copy that goes stale the moment nobody is watching it.

  • GetConnectors, App Connector or the REST API
  • One-way or two-way, per field
  • From €1,700 plus service fees
The tool

What AFAS is, and which part of it we usually connect

AFAS is a Dutch all-in-one business software suite. AFAS Profit is the core: financial administration, HR, payroll, projects, CRM and order processing in one database, on one set of master records. InSite is the internal portal your own people log into, OutSite the external one, and AFAS Connect is the vendor's own marketplace of ready-made connections.

It is used mostly by organisations from roughly fifty employees upwards — installers, wholesalers, construction firms, care organisations, accountancy practices, staffing agencies — where the appeal is exactly that HR and finance sit on the same records. Because everything is in one place, AFAS tends to become the system of record for the whole company, which is why the website next to it so often ends up as the only thing running on stale data.

In practice we get asked for one of four things: employee and vacancy data out of AFAS into a website, orders and customers out of a webshop into Profit, project or hour registration data into a customer portal, or CRM records kept level with a marketing tool. Rarely all four at once, and never "everything, both ways" — that is a project that costs five times as much and answers a question nobody actually asked.

What goes wrong

Three things that go wrong on sites next to an AFAS environment

Not hypotheticals. These are the three we walk into most often when we are asked to look at an existing site with AFAS behind it.

The careers page is a museum

Vacancies live in AFAS the moment a manager opens one, and on the website the moment somebody in marketing has time. So the site shows roles that were filled in July, misses the one that opened this morning, and a candidate who applies to a closed vacancy gets an awkward email. Worse, the recruiter cannot tell whether a quiet week means no interest or a vacancy that never went up.

What you see instead

A vacancy opened in AFAS is on the careers page within minutes, with the right location and hours, and disappears from it the moment it is filled. Applications land back in AFAS Recruitment as candidates, with their CV attached.

Orders get re-keyed into Profit, and the totals drift

A webshop order arrives, and somebody in the back office opens Profit and rebuilds it: customer, article codes, quantities, VAT code, discount. Thirty orders a day is most of a morning, and the errors are not random — they cluster on the fiddly bits. A discount applied to the wrong line, a VAT code that defaults, an article code that got a digit swapped. Those errors reach the invoice, and the customer finds them before you do.

What you see instead

The order is the last time anyone types it. It becomes a sales order or invoice in Profit with the customer matched on their debtor number, the article codes as they are in AFAS, and the VAT code AFAS itself decides — not the one somebody picked from a dropdown at half past four.

Everyone builds their own copy of the truth

Because getting a number out of AFAS takes a request to the one person who knows Profit, everybody else builds a workaround: a shared sheet of customer contacts, a Word file of price agreements, a WhatsApp group for stock questions. Each one is a small, sensible act, and together they are four versions of the same data, none of which is AFAS, all of which somebody trusts.

What you see instead

A portal or an internal tool that reads AFAS live, with the fields people actually need and nothing else. Nobody has to learn Profit to look up a price agreement, and nobody has a reason to keep a private copy of it.

The bill for doing it by hand

What the manual route between AFAS and your website costs you

The honest answer is that most of it does not show up as a cost anywhere, which is exactly why it lasts for years. Nobody bills for retyping. It shows up as a back office that is always slightly behind, a marketing team that cannot trust the site, and a finance team that spends the last three days of the month reconciling things that should never have diverged.

When we do measure it with a client, the number is usually somewhere between four and twelve hours a week across two or three people — not one person full-time, which would have been noticed and fixed, but a slice of several people's weeks that nobody owns. At an internal cost of even €40 an hour that is €800 to €2,400 a month, spent on moving data that both systems already have.

  • The invoice with the old address, found by the customer, credited and reissued: about 40 minutes each time, plus the phone call.
  • The candidate who applied to a vacancy that closed in July, and the reply somebody has to write.
  • The month-end reconciliation between webshop turnover and Profit turnover, because a handful of orders were entered twice or not at all.
  • The stock number on the site that was right this morning, and the customer service conversation that follows when it was not.
What we build

We build the thing on the other end too

With AFAS this matters more than average: the connection is rarely the deliverable. What a client actually wants is a careers page, a customer portal or a webshop that behaves as though AFAS were behind it — and that is a website project with a connection inside it, not the other way round.

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 AFAS and your site, field by field

AFAS is unusually good about this: GetConnectors and UpdateConnectors are configured inside Profit, so what a connection is allowed to read and write is a decision your own AFAS administrator makes and can see. The arrow says which way the data moves.

  • Employees: name, role, start date, location, photo (out of the tool)

    Onto a team page or an internal directory. HR updates AFAS once and the site follows. Left employees drop off automatically, which is the half people forget to ask for.

  • Vacancies out, applications back in (both ways)

    Vacancies from AFAS Recruitment onto the careers page with title, hours, location, salary range and the full text; applications from the form back into AFAS as a candidate with the CV as an attachment. Also feeds Google for Jobs structured data, so the vacancy is eligible for the jobs carousel without a second CMS.

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

    Customer matched on debtor number where they exist and created where they do not, article codes as AFAS knows them, quantities, discount lines, VAT code and payment reference. Via an UpdateConnector, so AFAS validates the order rather than accepting whatever we send.

  • Articles, prices and price agreements per customer (out of the tool)

    Into a webshop or a B2B portal, including customer-specific pricing — which is the reason most AFAS users cannot use a standard webshop: the price depends on who is logged in, and that lives in Profit.

  • Stock and availability per article (out of the tool)

    Free stock, or free stock minus a buffer, on a schedule you set. Usually not live per page view: a fifteen-minute refresh is honest enough for a website and does not put your webshop's uptime at the mercy of your ERP's.

  • Projects, hours and open items into a customer portal (out of the tool)

    What a client is allowed to see of their own file: project status, hours booked, invoices sent and still open. This is where AFAS OutSite is often the wrong answer and a portal we build is the right one — not because OutSite is bad, but because it looks like AFAS and not like your brand.

  • CRM records and marketing contacts (both ways)

    Organisations and contacts kept level between AFAS CRM and a marketing tool such as HubSpot or Mailchimp, with a rule per field about which system wins. Consent stays where it was given, which matters for more than tidiness.

Which of these you need is the first conversation, not the last: most AFAS projects we finish use two or three of these rows, and the ones that tried to use all seven took twice as long for no extra benefit.

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 AFAS specifically: the technical route matters less than who administers your Profit environment. If your AFAS partner will set up the GetConnectors and the App Connector token, a first connection is usually a two to three week project. If that access has to be arranged first, the waiting is the schedule, not the building.

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 AFAS

Whichever is more reliable for your case, and we say which and why before you sign anything. If AFAS Connect already lists a maintained connector that does exactly what you need, that is the cheaper and safer answer and we will tell you so — you get a vendor-supported connection instead of one we have to keep alive.

For anything with a shape of its own — customer-specific pricing in a webshop, a portal, a vacancy feed with your own fields — we build against the App Connector with GetConnectors for reading and UpdateConnectors for writing. That is AFAS's own supported route, configured inside Profit, so your administrator can see and revoke exactly what we are allowed to touch.

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.