ml-connector
Exact OnlineAvalara

Exact Online and Avalara integration

Exact Online runs purchasing, sales, and accounting for SMEs across Europe and the USA. Avalara calculates sales and use tax in real-time based on customer location, item type, and jurisdiction rules. Connecting the two ensures that every sales invoice in Exact Online has the correct tax calculated by Avalara before it is finalized, and the tax journal entries land in Exact Online's GL without manual re-entry. ml-connector bridges the OAuth 2.0 and Basic Auth layers, handles regional base URLs, manages webhook subscriptions, and tracks tax posting status across both systems.

How Exact Online works

Exact Online exposes accounts (suppliers and customers), sales invoices and lines, purchase orders, GL accounts, cost centers, and journal entries through a REST API with OData v3 query syntax at region-specific base URLs (Netherlands, Belgium, UK, Germany, France, Spain, USA). Authentication is OAuth 2.0 Authorization Code Grant with 10-minute access tokens and 30-day rotating refresh tokens. The platform requires app registration in the Exact Online App Center and division ID for all API calls. Exact Online supports webhooks for entity changes including sales invoices, sales orders, and GL account updates, delivering HMAC-SHA256-signed payloads with 10 retries on failure. However, webhook payloads contain only the entity key and action (create/update/delete), so full entity details must be fetched separately. No expand support ($expand) is available, requiring multiple API calls to collect related entities like line items and customer addresses.

How Avalara works

Avalara is a cloud tax compliance platform that calculates sales and use tax in real-time for transactions across jurisdictions. It exposes transactions, companies, customers, items, and tax codes through a REST API at https://rest.avatax.com/api/v2. Authentication is HTTP Basic Auth with Account ID and License Key (recommended for connectors because it does not expire on password changes) or username and password. Avalara is pull-only with no push webhooks, so integrations must poll the ListTransactionsByCompany endpoint or trigger from the ERP when a transaction posts. The platform enforces rate limits with HTTP 429 responses, has a max page size of 1000 for list endpoints, uses document code as an idempotency key, and returns synchronous calculated tax in the CreateTransaction response. Committed transactions are irreversible; adjustments must be made via void and recreate or adjust/refund operations.

What moves between them

Sales transactions flow from Exact Online to Avalara. When a sales invoice is created in Exact Online, ml-connector extracts the customer address, item codes, and line amounts, calls Avalara to calculate the correct tax based on the shipping jurisdiction, and receives the calculated tax amounts in real-time. The tax result is then posted back into Exact Online as journal entries allocated to the correct GL account and cost center, so the invoice total in Exact Online reflects the jurisdictionally correct tax without manual adjustment. Cost centers and GL accounts are mapped first to ensure every tax posting lands on a valid accounting dimension. Reconciliation runs on a schedule to catch any Exact Online invoices that were created outside normal polling windows.

How ml-connector handles it

ml-connector stores both credential sets encrypted: the Exact Online OAuth refresh token and Avalara's License Key. On the Exact Online side, it accepts the division ID and region (Netherlands, Belgium, UK, Germany, France, Spain, or USA) per customer to route API calls to the correct regional base URL. It subscribes to Exact Online webhooks for SalesInvoices and SalesInvoiceLines to receive real-time notifications when new invoices are created; each webhook payload is validated against the HMAC-SHA256 signature computed with the webhook secret. When notified of a new invoice, ml-connector fetches the full invoice details including line items and customer address (since webhook payloads contain only the entity key), then calls Avalara's CreateTransaction endpoint with the customer location, item codes, and line amounts. Avalara returns the calculated tax synchronously; ml-connector then creates a journal entry in Exact Online's GL mapped to the correct tax GL account and cost center. If Exact Online's OAuth token expires before the 10-minute lifetime, ml-connector refreshes using the 30-day rotating refresh token and retries. Avalara's rate limits return HTTP 429; ml-connector backs off and retries with exponential jitter. Address validation failures in Avalara are logged as warnings and trigger a manual review alert so tax is not posted incorrectly. Document code in Avalara acts as an idempotency key, so reusing the same code is safe if a network failure occurs between posting and reading the response.

A real-world example

A mid-sized B2B software company sells licenses and support services across the USA, UK, and Germany, with customers in multiple tax jurisdictions. The company uses Exact Online to manage invoicing and accounting, but each sales invoice required manual tax calculation and posting by the finance team, since sales tax rules differ by state and country. With Exact Online and Avalara connected, each invoice created in Exact Online is automatically sent to Avalara for real-time tax calculation based on the customer's shipping address, and the calculated tax is posted as a journal entry into Exact Online's GL immediately. The finance team no longer manually calculates or re-enters tax, invoice-to-ledger reconciliation is automatic, and compliance with regional tax rules is guaranteed by Avalara's database of jurisdictional rules.

What you can do

  • Calculate real-time sales tax for each Exact Online sales invoice based on customer address and jurisdiction using Avalara's tax database.
  • Post calculated tax amounts into Exact Online's general ledger as journal entries allocated to the correct GL accounts and cost centers.
  • Authenticate Exact Online with OAuth 2.0 (region-specific base URLs and division IDs) and Avalara with HTTP Basic Auth using License Key.
  • Receive real-time notifications of new Exact Online sales invoices via webhooks, validate HMAC-SHA256 signatures, and fetch full invoice details including line items and customer addresses.
  • Handle Avalara rate limits with exponential backoff, validate customer addresses before tax calculation, and mark irreversible transactions for audit trail.

Questions

Which direction does data move between Exact Online and Avalara?
Sales transactions flow from Exact Online to Avalara. When a sales invoice is created in Exact Online, ml-connector sends the customer address, item codes, and line amounts to Avalara, receives the calculated tax, and posts the tax as journal entries back into Exact Online's GL. Customer and item data are mapped in advance so tax always lands on valid GL accounts and cost centers.
How does ml-connector handle regional differences in Exact Online (multiple base URLs and OAuth scopes)?
Exact Online publishes different regional base URLs for Netherlands, Belgium, UK, Germany, France, Spain, and USA. ml-connector accepts the region and division ID per customer and routes all API calls to the correct regional URL. OAuth tokens are scoped to a single division, so ml-connector refreshes the token per division if a customer spans multiple divisions.
What happens if Avalara rate limits a request or an address is invalid?
When Avalara returns HTTP 429, ml-connector backs off and retries with exponential jitter. If a customer address fails Avalara's validation, ml-connector logs a warning, creates a support alert, and does not post tax to Exact Online until the address is corrected manually. Committed transactions in Avalara are irreversible, so validation happens before posting to prevent incorrect journal entries.

Related integrations

Connect Exact Online and Avalara

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

Get started