Exact Online and Google Sheets integration
Exact Online runs your accounting and procurement. Google Sheets is where your finance team collaborates and reports. Connecting the two keeps your sheet data live from Exact Online so finance and procurement teams have a single source of truth without manual exports or re-entry. Sales invoices, purchase invoices, purchase orders, GL accounts, and payment records flow from Exact Online into Sheets on a schedule you control, mapped to columns you define.
What moves between them
Data flows from Exact Online into Google Sheets. When an Exact Online resource such as a sales invoice, purchase invoice, or purchase order is created or updated, Exact Online sends a webhook notification to ml-connector. ml-connector receives the notification, fetches the full record from Exact Online, maps it to columns in your Google Sheet (which you define), and appends or updates rows in the sheet. GL accounts, accounts (suppliers and customers), items, and cost centers can flow as reference data to separate tabs so finance teams have the complete context for each transaction. Exact Online is the source of truth; the sheet is read from, never written back to Exact Online.
How ml-connector handles it
ml-connector stores OAuth credentials for both Exact Online and Google Sheets encrypted. It registers webhooks in Exact Online for invoices, purchase orders, accounts, and GL accounts, and on receipt of each webhook (which carries only the entity key and action), it immediately fetches the full record from Exact Online's REST API, refreshing the access token if it has passed the 10-minute lifetime. The Exact Online region (Netherlands, UK, USA, etc.) and division ID are stored per customer so the correct API base URL and division are used on every call. ml-connector writes data to Google Sheets using A1 notation or named ranges you provide, creating tabs if they do not exist. Because Exact Online webhooks contain only the key and action, and Google Sheets has no atomic write-many-rows operation, ml-connector fetches one record at a time and writes it synchronously, so throughput is bounded by Exact Online's API. Retries use exponential backoff to handle temporary Sheets API rate limits and Exact Online token refresh errors.
A real-world example
A mid-sized trading or distribution company uses Exact Online for all invoicing, purchase orders, and GL accounting across its European operations. The finance team uses a shared Google Sheet to track invoice aging, outstanding purchase orders, and monthly accruals. Previously, someone manually exported invoice and purchase order lists from Exact Online each day and pasted them into the sheet, a tedious error-prone task that lagged behind actual transactions by hours. With Exact Online and Google Sheets connected, every new sales invoice, purchase invoice, and purchase order appears in the sheet within seconds of creation in Exact Online. The aging report is always current, month-end accruals are complete and accurate, and the team spends no time on manual data entry.
What you can do
- Receive Exact Online webhooks for sales invoices, purchase invoices, purchase orders, GL accounts, and accounts, and write each record to a Google Sheet tab you define.
- Map Exact Online invoice lines to separate rows in Google Sheets, with line amounts, descriptions, and GL account codes.
- Sync purchase order line items and approval status so procurement teams track committed spend in real time.
- Handle Exact Online OAuth refresh token rotation (10-minute access tokens, 30-day refresh window) and region-specific API base URLs per customer.
- Append new records and update existing rows in Google Sheets using named ranges or A1 notation, with retries and error logging on each write.
Questions
- Why does ml-connector fetch the full record after receiving an Exact Online webhook?
- Exact Online webhook payloads contain only the entity key and action (create/update/delete), not the full record data. ml-connector immediately fetches the complete record from Exact Online's REST API so Google Sheets receives all fields needed for reporting and reconciliation.
- What happens when the Exact Online access token expires?
- Exact Online access tokens last 10 minutes. ml-connector tracks the token lifetime and refreshes it before expiry using the refresh token, so webhook processing is not interrupted. Refresh tokens rotate on each refresh and must be re-authorized at least once every 30 days or the user must re-authenticate.
- Does Google Sheets need webhooks or polling for new data?
- Google Sheets webhooks are unreliable because watch channels expire hourly and do not auto-renew. ml-connector relies on Exact Online webhooks to trigger the sync, so data appears in Sheets as soon as it is created in Exact Online. Manual polling via ml-connector configuration is also supported if webhooks are not enabled in Exact Online.
Related integrations
More Exact Online integrations
Other systems that connect to Google Sheets
Connect Exact Online and Google Sheets
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started