ml-connector
VismaDeel

Visma and Deel integration

Visma handles your accounting, purchasing, and financial control. Deel manages your global workforce and contractor payments. Connecting them keeps payroll costs allocated to the right cost centers in Visma, and contractor invoices flow straight into accounts payable without re-keying. Employee allocations from Deel populate your labor cost journals in Visma's general ledger, and your payroll and invoicing operations stay in sync across both systems.

How Visma works

Visma.net ERP is a cloud-based Nordic accounting and ERP platform that exposes suppliers, invoices, customers, accounts, cost centers, employees, timecards, journals, and budgets through REST APIs. Authentication uses OAuth 2.0 via Visma Connect with a client_credentials grant and requires tenant_id and ipp-company-id headers on every call. Visma supports both webhooks and polling, though webhooks are delivered once without automatic retry if the receiver is unavailable. Delta pulls use the lastModifiedDateTime query parameter on list endpoints, and PUT operations require ETag headers for optimistic locking.

How Deel works

Deel is a global workforce platform covering employer-of-record, contractor management, payroll, and HRIS across 150 countries. It exposes contracts, employees, invoices, worker-invoices, payslips, and payroll-input endpoints through a REST API. Authentication uses organization tokens or OAuth 2.0 bearer tokens, with OAuth access tokens expiring after 30 days and refresh tokens after 90 days. Deel also supports real-time webhooks with HMAC-SHA256 signature verification for events such as contract creation, employee changes, and terminations.

What moves between them

The main flow moves from Deel into Visma. After each payroll run, ml-connector reads Deel's payslips and payroll inputs to calculate employee cost allocations, then posts those labor costs into Visma's general ledger mapped to cost centers and GL accounts. Contractor invoices from Deel flow into Visma as accounts payable records. Employee and contractor data syncs bidirectionally so workforce changes in Deel update the employee roster in Visma, and cost center mappings ensure payroll allocations land on valid Visma dimensions.

How ml-connector handles it

ml-connector stores both credential sets encrypted and refreshes Deel's OAuth tokens before expiry to prevent mid-request failures. On the Visma side, it manages both tenant_id and ipp-company-id headers on every call, since Visma requires company-level scope for webhook enablement. Because Deel's payroll events arrive via webhook, ml-connector registers a listener and also polls Deel on a regular cadence tied to your pay schedule to catch any events that were lost if the webhook receiver was unavailable. Contractor invoices and employee cost allocations map to Visma GL accounts and cost centers configured per customer, and optimistic locking via ETags prevents simultaneous updates from causing conflicts. ml-connector retries on 429 rate-limit responses with exponential backoff and maintains a full audit trail of every record movement so failed postings can be replayed.

A real-world example

A mid-sized Nordic manufacturing firm runs Visma.net ERP for accounting and payroll, and uses Deel as a global EOR and contractor platform for engineers hired across several countries. Before the integration, the finance team received Deel invoices and payroll reports via email each month, manually exported contractor payment data, and re-entered labor cost allocations into Visma by hand. Payroll variance analysis was slow because employee costs in Deel and the general ledger in Visma frequently diverged. After connecting Deel and Visma through ml-connector, contractor invoices and payroll costs flow automatically into Visma on each pay run, allocated to the right cost centers and GL accounts. Month-end close is faster, and the finance team can focus on analysis instead of data entry.

What you can do

  • Post Deel payroll costs and employee allocations into Visma general ledger accounts mapped to cost centers.
  • Sync contractor invoices from Deel into Visma accounts payable.
  • Keep employee roster and cost center mappings aligned between Deel and Visma.
  • Manage Deel OAuth token refresh and Visma tenant and company scope on every request.
  • Poll Deel payroll on a schedule and replay failed postings via a complete audit trail.

Questions

Which direction does data move between Visma and Deel?
The main flow is Deel to Visma. Payroll costs, employee allocations, and contractor invoices move from Deel into Visma's general ledger and accounts payable. Employee and cost center reference data is synced bidirectionally so workforce changes in Deel update the Visma roster, and cost center dimensions are kept aligned in both systems.
How does ml-connector handle Deel's OAuth token expiry and Visma's company scope requirements?
ml-connector refreshes Deel's OAuth tokens before they expire at the 30-day mark so requests never fail mid-flight. For Visma, it manages both the tenant_id in the token request and the ipp-company-id header on every API call, since Visma scopes webhook enablement and entity access at the company level.
Deel sends webhooks for payroll events, but what if the receiver is down?
Deel webhooks are sent once without automatic retry if the endpoint is unavailable, so ml-connector also polls Deel on a regular payroll-aligned schedule to catch any missed events. Both webhook and polling results are reconciled in a single audit trail, and any posting that fails can be replayed without duplicate entries.

Related integrations

Connect Visma and Deel

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

Get started