Visma and Coupa integration
Visma runs financial management and procurement in the Nordic region. Coupa runs centralized business spend management. Connecting the two keeps your supplier master data and purchase orders visible across both systems, eliminating duplicate maintenance and ensuring spend compliance against a single source of truth. ml-connector bridges the very different OAuth models and webhook requirements so your procurement process stays synchronized without manual intervention.
What moves between them
Supplier and purchase order records flow from Visma into Coupa on a schedule you control. When Visma suppliers or purchase orders are created or modified, ml-connector reads them via Visma's OAuth token, maps fields to Coupa's schema, and posts them into Coupa using its OAuth credentials. Coupa's webhook events for purchase order and supplier changes are logged in the audit trail so downstream systems can respond, and if a push to Coupa fails, the full record is held in the queue for replay.
How ml-connector handles it
ml-connector stores both OAuth credential pairs encrypted and refreshes each token when it expires or when a call returns 401. It polls Visma list endpoints with lastModifiedDateTime to pull new and changed suppliers and purchase orders, since Visma webhooks do not retry and may not fire if webhook settings are not fully enabled. Each Coupa webhook is verified against the registered HMAC-SHA256 secret before processing, and inbound webhook events are logged in the audit trail. When pushing to Coupa, ml-connector backs off on 429 rate-limit responses and retries up to 3 times with exponential backoff capped at 30 seconds. Field mappings between Visma dimensions and Coupa fields are applied consistently so purchase orders land with the correct spend category and cost allocation.
A real-world example
A Nordic manufacturing company uses Visma for accounting and procurement and is deploying Coupa for spend compliance and supplier governance across multiple locations. Before the integration, procurement teams managed purchase orders in Visma and manually entered them into Coupa for spend reporting, creating lag and duplication. Supplier master data had to be kept in sync by hand, leading to mismatched terms and payment delays. With Visma and Coupa connected, each new purchase order in Visma appears in Coupa within minutes, supplier changes are synchronized, and the spend analytics team sees a real-time view without re-keying.
What you can do
- Sync suppliers and purchase orders from Visma into Coupa on a schedule you control, with field mapping between the two systems.
- Handle OAuth 2.0 authentication for both Visma and Coupa, refreshing tokens before they expire.
- Verify Coupa webhook signatures with HMAC-SHA256 so only authentic events are processed.
- Poll Visma using lastModifiedDateTime to pull new and changed records, since Visma webhooks do not retry automatically.
- Keep a full audit trail of every record moved, with replay capability if a downstream write fails.
Questions
- Which direction does data flow between Visma and Coupa?
- The main flow is from Visma into Coupa. Supplier master records and purchase orders are synced from Visma into Coupa so that spend compliance and supplier governance are based on a single source of truth. Coupa webhook events are logged in the audit trail so other systems can respond to changes in Coupa without pushing data back to Visma.
- Why does ml-connector poll Visma instead of relying on its webhooks?
- Visma webhooks are one-time delivery with no automatic retry, and they require explicit enablement in company settings. ml-connector polls Visma list endpoints using lastModifiedDateTime to reliably pull all new and changed records since the last run, ensuring no supplier or purchase order is missed.
- How does ml-connector handle Coupa's rate limits and timeouts?
- When Coupa returns a 429 rate-limit response, ml-connector backs off and retries up to 3 times with exponential backoff capped at 30 seconds. If a webhook push exceeds the 30 second timeout or fails, the record is held in the queue for replay, so transient Coupa outages do not cause data loss.
Related integrations
More Visma integrations
Other systems that connect to Coupa
Connect Visma and Coupa
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started