Exact Online – Connection Guide

Service ID: exact-online

Exact Cloud business software offers accounting and industry software in the cloud for SME's on desktop, laptop, tablet and mobile apps.

Exact Online — Balance Sheet & Profit and Loss configuration

This guide explains the optional Balance-Sheet and Profit-and-Loss configuration on an Exact Online (NL) connection: why it exists, how it behaves out of the box, when you need to touch it, and how to look up the exact values to enter from your own Exact administration.


1. The problem it solves

A Balance Sheet and a Profit & Loss are just your General Ledger accounts grouped into sections (Assets / Liabilities / Equity, and Income / Cost of Goods Sold / Expenses / Other income / Other expenses).

In Exact Online, that grouping comes from a classification scheme: every GL account is mapped to a classification, and each classification rolls up to a first-level heading such as Vaste activa, Eigen vermogen, Kortlopende schulden, Financiële baten en lasten, Belastingen, etc. The first-level heading is what decides the section.

The catch: schemes differ per administration. Most Dutch administrations use the standard RGS scheme, whose first-level headings are well known — so the integration ships with built-in defaults and needs no configuration for them. But some administrations use a custom scheme with different first-level names. When that happens, the integration can't recognise the headings, and accounts can land in the wrong section (or fall back to a less reliable heuristic).

This configuration is the escape hatch: you tell the integration the first-level classification titles your administration uses, and it classifies accordingly.

You only need this if your administration is not using the default Exact Online values. If your reports already look correct, leave every field empty.


2. How it works with the defaults

For each account, the integration finds its top-level classification heading and matches that heading (case- and accent-insensitive; a heading matches if it contains one of the titles) against these built-in Dutch defaults:

Balance Sheet

SectionDefault first-level titles
Assetsvaste activa, vlottende activa, liquide middelen, voorraden, effecten, onderhanden projecten in opdracht van derden
Liabilitieslanglopende schulden, kortlopende schulden, voorzieningen, achtergestelde leningen
Equityeigen vermogen

Profit & Loss

SectionDefault first-level titles
Incomenetto-omzet, omzet
Cost of Goods Soldkostprijs van de omzet, inkoopwaarde van de omzet, kostprijs
Expensessom der bedrijfskosten, bedrijfskosten, personeelskosten, afschrijvingen, lonen en salarissen, overige bedrijfskosten
Other incomefinanciële baten, buitengewone baten, aandeel in het resultaat, (combined "…baten en lasten" groups)
Other expensesbelastingen, vennootschapsbelasting, financiële lasten, buitengewone lasten, (combined "…baten en lasten" groups)

Two important behaviours:

  • Combined result groups (financial / exceptional / participations). A single first-level heading like Financiële baten en lasten contains both income (interest received) and costs (interest paid). Such a heading is listed under both Other income and Other expenses, and each account under it is routed by the sign of its balance: a credit balance → Other income, a debit balance → Other expenses. This is why interest income and interest expense correctly split, instead of both landing in operating expenses.
  • Operating detail (Income vs COGS vs Expenses). Some schemes don't separate revenue, cost of sales and operating costs at the first level (they sit under a single EBITDA-style subtotal). When a heading isn't recognised as non-operating, the split falls back to the Dutch account-number range (8xxxx = revenue, 7xxxx = cost of sales, 4xxxx/6xxxx = operating costs). Nothing is ever dropped — anything still unresolved goes to Uncategorized.

3. When and how to configure

Configure only if the defaults don't match your scheme (sections look wrong or empty). Enter the first-level titles as they appear in your Exact administration, separated by commas. Each field is independent — override only the ones that differ; the rest keep using the defaults.

Balance-Sheet configuration

  • Assets Titles — your first-level Asset headings.
  • Liabilities Titles — your first-level Liability headings.
  • Equity Titles — your first-level Equity headings.

Profit-and-Loss configuration

  • Income Titles — operating revenue headings.
  • Cost of Goods Sold Titles — cost-of-sales headings.
  • Expenses Titles — operating-expense headings.
  • Other Income Titles — non-operating income (financial / exceptional / participations).
  • Other Expenses Titles — non-operating expense headings, including taxes.

Tip for combined groups: if a first-level heading holds both income and costs (e.g. Financiële baten en lasten, Buitengewone baten en lasten), enter it under both Other Income and Other Expenses — the integration then splits each account by its balance sign. If a heading is one direction only (e.g. Belastingen), enter it under a single field.


4. How to look up your first-level titles (via the Apideck Proxy)

Your first-level classification headings live in Exact's GLClassifications table. You can read them through the Apideck Proxy (any HTTP client works). You need three request headers besides auth: x-apideck-consumer-id, x-apideck-app-id, and x-apideck-service-id: exact-online, plus an x-apideck-downstream-url pointing at the Exact endpoint. Always send Accept: application/json (otherwise Exact replies in XML).

The Exact URL contains your division id — the same value stored on the connection as systemDivisionId (visible in the connection settings / GET /vault/connections/accounting/exact-online). It also contains {tld}: replace it with your administration's region top-level domain (for example nl, be, de, fr, es, com), matching the domain of your Exact Online login.

Step 1 — find your main GL scheme id

curl 'https://unify.apideck.com/proxy' \
  -H 'Authorization: Bearer <APIDECK_API_KEY>' \
  -H 'x-apideck-app-id: <APIDECK_APP_ID>' \
  -H 'x-apideck-consumer-id: <CONSUMER_ID>' \
  -H 'x-apideck-service-id: exact-online' \
  -H 'Accept: application/json' \
  -H "x-apideck-downstream-url: https://start.exactonline.{tld}/api/v1/<DIVISION>/financial/GLSchemes"

In the response, take the scheme where "Main": 1 and copy its ID (a GUID).

Step 2 — list the classifications for that scheme

curl 'https://unify.apideck.com/proxy' \
  -H 'Authorization: Bearer <APIDECK_API_KEY>' \
  -H 'x-apideck-app-id: <APIDECK_APP_ID>' \
  -H 'x-apideck-consumer-id: <CONSUMER_ID>' \
  -H 'x-apideck-service-id: exact-online' \
  -H 'Accept: application/json' \
  -H "x-apideck-downstream-url: https://start.exactonline.{tld}/api/v1/<DIVISION>/financial/GLClassifications?\$filter=TaxonomyNamespace eq guid'<SCHEME_ID>'&\$select=Code,Description,Parent,PeriodType"

Step 3 — pick the first-level headings

In the response (d.results):

  1. Find the two root rows — the ones with Parent: null. One has PeriodType: "instant" and a description like Balance Sheet; the other has PeriodType: "duration" and a description like Profit and loss. Note their IDs.
  2. The first-level headings are the rows whose Parent equals a root ID. Their Description values are exactly what you paste into the configuration:
    • Rows under the instant (Balance Sheet) root → sort into Assets / Liabilities / Equity Titles by meaning (activa → Assets, eigen vermogen → Equity, schulden / leningen / voorzieningen → Liabilities).
    • Rows under the duration (Profit & Loss) root → sort into the P&L fields (financial / exceptional / participations → Other Income and Other Expenses; belastingen → Other Expenses; operating headings → Income / COGS / Expenses if your scheme separates them).

Only the first-level (direct children of the root) headings matter — the integration walks every account up to its first-level heading automatically. You don't need the deeper sub-levels.

Worked example

For a scheme whose Balance Sheet root has children VASTE ACTIVA, VLOTTENDE ACTIVA, EIGEN VERMOGEN, LANGLOPENDE SCHULDEN, KORTLOPENDE SCHULDEN, VOORZIENINGEN, and P&L root children EBITDA, FINANCIELE OPBRENGSTEN EN KOSTEN, BELASTINGEN, BUITENGEWONE OPBRENGSTEN EN KOSTEN:

  • Assets Titles: Vaste activa, Vlottende activa
  • Liabilities Titles: Langlopende schulden, Kortlopende schulden, Voorzieningen
  • Equity Titles: Eigen vermogen
  • Other Income Titles: Financiele opbrengsten en kosten, Buitengewone opbrengsten en kosten
  • Other Expenses Titles: Belastingen, Financiele opbrengsten en kosten, Buitengewone opbrengsten en kosten
  • (Income / COGS / Expenses left empty — this scheme groups operating under EBITDA, so the account-number range handles the split automatically.)

These headings already match the built-in defaults, so in this particular case no configuration is required — it's shown only to illustrate the mapping.


5. What if I misconfigure or leave it blank?

  • Blank: the RGS defaults are used. Correct for standard Dutch administrations.
  • A heading not recognised (blank or wrong): those accounts fall back to the account-number range (P&L) or to Exact's account type (Balance Sheet). The report still balances and nothing is dropped, but a section total may be off — which is exactly what configuring the titles fixes.