ml-connector
Exact OnlineTaxJar

Exact Online and TaxJar integration

Exact Online runs your accounting and order fulfillment. TaxJar calculates the correct sales tax and reports it to state authorities. Connecting the two automates the tax calculation on every invoice, avoids manual rate lookups across multiple jurisdictions, and posts the resulting tax liability directly into your GL so your books stay accurate without re-keying.

How Exact Online works

Exact Online exposes sales invoices, sales invoice lines, GL accounts, cost centers, bank accounts, and other accounting records through a REST API with OData v3 query syntax (filter, select, orderby, top, skip). Region-specific base URLs serve Europe and North America. Authentication uses OAuth 2.0 Authorization Code Grant with access tokens valid for 10 minutes and refresh tokens valid for 30 days. Exact Online publishes webhooks for sales invoices, invoice lines, and GL accounts when they are created or updated, with HMAC-SHA256 signature verification. The webhook payload contains only the entity key and action type, so full entity data must be fetched separately via the REST API. Related entities require separate calls because expand syntax is not supported.

How TaxJar works

TaxJar exposes tax rate calculations, transaction reporting, customer exemption management, and nexus tracking through a REST API at api.taxjar.com/v2 with JSON payloads. Authentication is token-based: an API key provided in the Authorization header as a Bearer token. TaxJar does not support OAuth 2.0 and merchants generate tokens directly from their TaxJar account interface. TaxJar does not offer webhooks or push events. Integration is poll-based: POST requests to the /taxes endpoint calculate tax on an order in real-time, POST or PUT to the /transactions endpoint reports completed orders or refunds, and GET requests fetch nexus regions and rates. The sandbox environment is stateless and validates request format only without persisting data.

What moves between them

Sales invoice data flows from Exact Online into TaxJar. When a sales invoice is created or updated in Exact Online, ml-connector receives the webhook notification, fetches the full invoice and line items via the Exact Online REST API, submits each line to TaxJar's /taxes endpoint for real-time tax calculation, and records the transaction in TaxJar's /transactions endpoint. The calculated tax liability is then posted back into Exact Online's general ledger on a schedule you control, mapped to a designated GL account for sales tax payable so your accounts stay reconciled without manual entry.

How ml-connector handles it

ml-connector stores the TaxJar API token encrypted and uses it on every request in the Authorization header. For Exact Online, ml-connector stores the OAuth 2.0 client ID, client secret, and refresh token, refreshing the access token before each API call (tokens expire every 10 minutes). It receives sales invoice webhooks from Exact Online and validates the HMAC-SHA256 signature using the webhook secret. When a webhook arrives, ml-connector fetches the complete invoice and line items from Exact Online (expansion is not supported, so line items are fetched separately), calculates each line's tax via TaxJar's /taxes endpoint, and accumulates the total tax liability. It then posts the aggregate tax to TaxJar's /transactions endpoint to record the order for compliance reporting. Finally, it creates a journal entry in Exact Online's general ledger, posting the tax amount to your designated GL account for sales tax payable. If TaxJar returns rate data for a jurisdiction where no prior sync has occurred, ml-connector updates Exact Online's nexus regions. Both systems refresh credentials automatically and retry failed requests with exponential backoff. Every record carries an audit trail and can be replayed if a downstream call fails.

A real-world example

A mid-sized e-commerce and distribution company runs Exact Online for accounting and order management across three EU countries and the US. Before TaxJar integration, the finance team calculated sales tax rates manually by state and country, then entered the liability into the GL at month-end, leading to errors and delayed reconciliation. With Exact Online and TaxJar connected, each sales invoice triggers real-time tax calculation as it is created, TaxJar stores the complete transaction record for regulatory reporting, and the tax liability posts automatically to the GL. The sales tax account is always up to date, compliance reporting to tax authorities is automated, and the finance team reclaims hours spent on manual tax lookups and GL entry.

What you can do

  • Calculate real-time sales tax on each Exact Online sales invoice using TaxJar's rate engine across multiple jurisdictions.
  • Post the calculated tax liability directly into Exact Online's general ledger on your reporting schedule without manual entry.
  • Track and report completed transactions to TaxJar for state tax authority filing and nexus compliance.
  • Handle OAuth 2.0 token refresh on Exact Online and secure API token storage for TaxJar.
  • Validate webhook signatures from Exact Online and retry failed tax calculations with exponential backoff.

Questions

Which direction does data move between Exact Online and TaxJar?
Sales invoice data flows from Exact Online into TaxJar for tax calculation and transaction reporting. Calculated tax liability flows back from TaxJar into Exact Online's general ledger. Nexus and rate reference data flows from TaxJar to Exact Online to track which jurisdictions require tax registration and reporting.
How does ml-connector handle Exact Online's webhook-only entity references?
Exact Online webhooks contain only the entity key and action type, not the full record. ml-connector fetches the complete invoice and line items via separate REST API calls after receiving the webhook, since the expand syntax is not supported. Related data such as customer and cost center information are also fetched separately using individual API requests.
What happens if TaxJar rate calculation fails or a jurisdiction is new?
ml-connector retries failed tax calculations with exponential backoff. If TaxJar returns rate data for a jurisdiction where Exact Online has no prior nexus entry, ml-connector updates the nexus record in Exact Online so your compliance footprint stays current. Every calculation and retry is logged in the audit trail and can be replayed.

Related integrations

Connect Exact Online and TaxJar

Free to use. Add your credentials, ping your real systems, and see if we fit.

Get started