ml-connector
VismaMonday.com

Visma and Monday.com integration

Visma.net ERP handles your accounting, AP, AR, purchasing, and payroll in the Nordic cloud. Monday.com organizes your team's work and workflows on custom boards. Connecting the two keeps finance data visible in your operational workflow without re-keying. Supplier invoices and purchase orders from Visma flow into Monday items so your ops team can track approval, receipt, and payment alongside other work. Customer transactions and GL entries stay synchronized so finance reporting and operational dashboards show the same picture.

How Visma works

Visma.net ERP exposes suppliers, supplier invoices, purchase orders, purchase receipts, customers, customer invoices, GL accounts, journals, employees, and other accounting entities through REST APIs, with base URL https://api.finance.visma.net and JSON payloads. Authentication uses OAuth 2.0 with client credentials grant to https://connect.visma.com/connect/token, passing ipp-company-id header on all calls. Visma supports both webhooks (one-time delivery, no automatic retry) and polling via lastModifiedDateTime on list endpoints. Webhook notifications require explicit enablement at company level. Refresh tokens are not issued to service applications, so a new token must be obtained on expiry.

How Monday.com works

Monday.com is a GraphQL-only platform where data lives in Boards containing Items (rows) with typed Columns (fields). All operations go through https://api.monday.com/v2 via POST with JSON queries and mutation strings. Authentication supports Personal API Tokens (long-lived, user-scoped, sent as raw token in Authorization header) or OAuth 2.0 authorization code flow. Monday webhooks deliver board events like create_item, change_column_value, and item_archived with challenge-based verification on registration but no HMAC by default. Finance workflows are entirely customer-configured boards and columns with no native ERP semantics. Rate limits depend on plan tier: 1,000 to 5,000 requests per minute with concurrent request caps.

What moves between them

Supplier invoices, purchase orders, and customer transactions flow from Visma into Monday.com Items on customer-configured boards. Each Visma entity (invoice, PO, transaction) maps to a new Item with its properties written to matching Monday columns. The sync runs on a schedule you define or is triggered by Visma webhooks when entities are created or modified. GL accounts and dimensions from Visma can be posted as reference data to support board filters and lookups. Customer invoices and AR aging can also flow into Monday for visibility during collections cycles.

How ml-connector handles it

ml-connector stores Visma OAuth credentials encrypted and obtains access tokens via client credentials flow, passing the required ipp-company-id header on all Visma API calls. On the Monday.com side, it uses either a Personal API Token or OAuth authorization code flow depending on your workspace setup, and sends all queries and mutations as GraphQL POST requests with JSON variables. Because Monday has no native finance objects, column names and types are customer-defined; ml-connector maps Visma fields to Monday columns by name or by order-of-appearance in each board. Visma webhooks are registered to notify ml-connector when invoices or orders change, but since webhooks have one-time delivery with no retry, ml-connector also polls Visma on a schedule for missed events. Monday.com rate limits apply per plan tier, so ml-connector batches item creations and mutations to stay within concurrent request caps and respects the 40 per-minute board mutation limit. Every Visma record carries a full audit trail in ml-connector so failed item creations can be replayed without data loss.

A real-world example

A medium-sized Nordic wholesale distributor runs Visma.net for accounting and procurement, and uses Monday.com as the hub where operations, warehouse, and finance teams coordinate incoming stock and customer orders. Before the integration, the procurement team entered supplier invoices into Monday manually from Visma after receiving them, and the finance team had to track which invoices in Visma had been received and paid by checking both systems separately. With Visma and Monday.com connected, each supplier invoice from Visma appears as an Item on the procurement board within minutes of creation, annotated with PO number, amount, and due date. The warehouse team marks receipt in Monday, and that status flows back into Visma for AP matching. Month-end reconciliation becomes a query on the Monday board showing which invoices are received, approved, and paid, instead of a manual audit across two systems.

What you can do

  • Sync Visma supplier invoices and purchase orders into Monday.com items on customer-configured boards, mapped to board columns.
  • Keep Visma GL account and dimension reference data current in Monday board lookup columns.
  • Receive Visma webhook notifications when invoices and purchase orders are created or modified, and also poll on a schedule to catch missed events.
  • Authenticate Visma with OAuth 2.0 client credentials and Monday.com with Personal API Token or OAuth, using GraphQL for all Monday operations.
  • Maintain a full audit trail and replay failed item creations in Monday if a batch mutation reaches the rate limit or times out.

Questions

How does ml-connector handle Monday.com rate limits and board mutation caps?
Monday.com enforces 1,000 to 5,000 requests per minute depending on plan tier, with a 40 per-minute cap on board mutations. ml-connector batches item creations and updates to stay within those limits, throttling requests when approaching the boundary and retrying with exponential backoff if a mutation hits the cap. Every create and update carries an audit record so failed mutations can be replayed.
How does Monday.com know which Visma fields to put in which columns if Monday has no native finance objects?
Monday boards and columns are entirely customer-configured. ml-connector matches Visma field names to Monday column names (for example, InvoiceNumber to 'Invoice ', Amount to 'Total'). If columns are auto-generated, ml-connector can map by position or by a customer-provided mapping table. Your setup wizard walks through that pairing during configuration.
Since Visma webhooks have no automatic retry, how does ml-connector ensure no invoices are missed?
Visma webhooks register in ml-connector but are one-time delivery with no retry from Visma. To guarantee no data loss, ml-connector also polls Visma on a schedule (typically every 15-30 minutes) using the lastModifiedDateTime query parameter to fetch any invoices and purchase orders changed since the last poll. A missed webhook is picked up on the next poll cycle.

Related integrations

Connect Visma and Monday.com

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

Get started