Exact Online and Coupa integration
Exact Online runs your ERP, purchasing, and general ledger across Europe and North America. Coupa runs your procurement and spend management. Connecting the two keeps your purchase orders and invoices synchronized without re-entry. When a purchase order or supplier invoice is created or updated in Exact Online, it flows into Coupa under the same supplier and amounts, so your procurement and financial records stay in agreement.
What moves between them
Purchase orders and supplier invoices flow from Exact Online into Coupa. When a purchase order is created or updated in Exact Online, ml-connector detects it via webhook, fetches the full record and its line items from Exact Online, maps the supplier to the correct Coupa supplier account, and creates or updates the matching purchase order in Coupa. The same applies to supplier invoices. Cost centers and GL account codes from Exact Online can be attached as custom fields or references in Coupa for downstream reconciliation. Reference data such as supplier accounts are synchronized in both directions to keep supplier lists aligned.
How ml-connector handles it
ml-connector stores both OAuth2 credential sets encrypted and refreshes tokens on demand when a call returns 401. On the Exact Online side, it accepts the region-specific base URL and division ID (retrieved from the /api/v1/current/Me endpoint) and receives webhook push notifications for purchase orders and invoices from the Exact Online App Center. The webhook signature is validated using HMAC-SHA256 and the webhook secret from the App Center. When a webhook arrives, ml-connector fetches the full entity and related line items from Exact Online's REST API using OData filters (since $expand is not supported), then maps the supplier account (Accounts with IsSupplier=true) to the corresponding Coupa supplier by name or code. The mapped purchase order or invoice is then written to Coupa via its REST API. Because Exact Online division IDs can change and refresh tokens rotate, ml-connector caches the division ID per customer and refreshes the Exact Online token before the 30-day expiry window. Coupa rate limits are respected with exponential backoff on 429 responses. Every record carries a full audit trail and the raw webhook payloads are stored for replay if a downstream Coupa write fails.
A real-world example
A mid-sized distribution company uses Exact Online in the Netherlands for ERP and purchasing, and Coupa in the corporate procurement office for vendor management and spend analysis across three countries. Before integration, the purchasing team created purchase orders in Exact Online, then the Coupa team manually re-entered them to track spend against contracts and vendor budgets. This created a delay of one to two days between order creation and spend visibility, and occasional mismatches in supplier names or purchase order amounts caused disputes during invoice reconciliation. With Exact Online and Coupa connected, purchase orders and invoices flow automatically the moment they are created in Exact Online, Coupa's spend analytics reflect real purchasing activity with no lag, and the purchasing and procurement teams operate from a single source of truth.
What you can do
- Sync purchase orders and invoice lines from Exact Online into Coupa automatically when they are created or updated.
- Map suppliers from Exact Online's Accounts entities to Coupa suppliers by name or code to ensure consistency across systems.
- Receive Exact Online webhook push notifications for changes and fetch full entity details on demand using OData filters.
- Authenticate Exact Online with OAuth2 Authorization Code Grant and respect the 10-minute access token and 30-day refresh token lifecycle.
- Handle region-specific Exact Online base URLs and division IDs, with full audit trail and replay capability on every record.
Questions
- Which direction does data move between Exact Online and Coupa?
- The main flow is from Exact Online into Coupa. Purchase orders and supplier invoices created or updated in Exact Online are automatically synced into Coupa. Supplier reference data can be synchronized in both directions to keep supplier lists aligned, but financial records do not flow back to Exact Online from Coupa.
- How does ml-connector handle Exact Online's regional URLs and division IDs?
- ml-connector accepts the region-specific base URL for the customer's Exact Online instance (Netherlands, Belgium, UK, Germany, France, Spain, or USA). The division ID is retrieved once from the /api/v1/current/Me endpoint and cached per customer, since all API calls require it. If the division ID changes, ml-connector detects it on the next token refresh and updates the cache.
- Does the integration rely on Exact Online webhooks or does it poll?
- The integration uses Exact Online's webhook push model for real-time notification when purchase orders and invoices are created or updated. Webhook signatures are validated with HMAC-SHA256 using the webhook secret from the Exact Online App Center. When a webhook arrives, ml-connector fetches the full entity and line items from Exact Online's REST API and writes them to Coupa.
Related integrations
More Exact Online integrations
Other systems that connect to Coupa
Connect Exact Online and Coupa
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started