ml-connector
VismaZoho CRM

Visma and Zoho CRM integration

Visma.net ERP tracks your suppliers, customers, invoices, and purchase orders. Zoho CRM tracks your sales pipeline, customer relationships, and vendor records. Connecting the two keeps your ERP data aligned with your CRM, so your sales team works with current customer and invoice information, and new vendors in Zoho flow back to Visma's supplier list without re-keying. ml-connector bridges the very different OAuth flows on each side and keeps both systems in sync on a schedule you control.

How Visma works

Visma.net ERP is a cloud-based accounting and financial management platform that exposes suppliers, supplier invoices, purchase orders, customers, customer invoices, GL accounts, dimensions, and journal transactions through REST APIs at https://api.finance.visma.net. Authentication uses OAuth 2.0 client credentials grant against https://connect.visma.com/connect/token, with a required ipp-company-id header on every API call. Visma supports webhooks for one-time delivery of change events plus polling via lastModifiedDateTime query parameters on list endpoints, though webhook notifications are sent once without automatic retry if the receiver is unreachable.

How Zoho CRM works

Zoho CRM is a customer relationship management platform managing accounts, contacts, vendors, invoices, purchase orders, deals, and sales records. It exposes data through region-specific REST APIs at patterns like https://www.zohoapis.com/crm/v8 with OAuth 2.0 token-based access. Zoho CRM sends push notifications via webhooks on create, edit, and delete events, though notification channels expire after approximately 1 day and must be renewed via PATCH operations before they lapse. Access tokens expire after 1 hour and require refresh from a refresh token, and the token response includes an api_domain field that must be used as the base URL for subsequent calls.

What moves between them

Customer and vendor records flow in both directions. Visma customers create accounts in Zoho CRM, and Zoho contacts matching a Visma customer name are upserted back into Visma as customer records. Visma suppliers sync to Zoho vendors, with new Zoho vendors creating supplier records in Visma. Invoices and purchase orders flow from Visma into Zoho as linked records on customer accounts and vendor records. The integration monitors changes via Visma's lastModifiedDateTime polling and stores Zoho's expiring webhook channels, renewing them before they lapse.

How ml-connector handles it

ml-connector manages Visma's service-account OAuth flow, obtaining tokens via client_credentials grant and including the required ipp-company-id header on every API call. For Zoho, it refreshes the 1-hour access token before expiry, captures the api_domain from each token response, and routes all subsequent calls through the correct region-specific base URL. Zoho webhook channels are created and monitored for expiry, with automated renewal via PATCH at least 12 hours before lapse to prevent notification loss. Visma webhooks return single delivery without retry, so ml-connector also polls lastModifiedDateTime on key entities to catch events that webhook receivers may have missed. Vendor and customer records are matched by name with configurable fuzzy matching, and invoices and purchase orders are linked to their corresponding Zoho accounts and vendors by customer or supplier ID. Every record carries a full audit trail and can be replayed if a downstream Zoho write fails.

A real-world example

A Nordic SMB distributing industrial supplies runs Visma.net ERP for accounting and procurement and Zoho CRM to manage customer relationships and sales orders. Before the integration, the sales team manually logged new customer records from Visma into Zoho, copied invoice details from Visma emails into Zoho deals, and created duplicate vendor entries when procurement sourced from a new supplier. With Visma and Zoho connected, new customers and invoices appear in Zoho automatically, the sales team sees current invoice status without context switching, and vendors sync bidirectionally so procurement and sales work from a single source. The finance team no longer chases down duplicate customer records created by sales, and AR follows Zoho deals to their close.

What you can do

  • Sync Visma customers into Zoho accounts with bidirectional updates so new customers appear in both systems.
  • Flow Visma invoices and purchase orders into Zoho as linked records on customer accounts and vendor entries.
  • Sync Visma suppliers into Zoho vendors and create Zoho vendors in Visma to keep procurement and sales aligned.
  • Manage Visma service-account OAuth tokens with required ipp-company-id headers, Zoho region-specific API domains, and automatic refresh token lifecycle.
  • Monitor and renew Zoho webhook channels before expiry, poll Visma lastModifiedDateTime for missed events, and maintain a full audit trail on every record.

Questions

Which direction do customer and vendor records flow between Visma and Zoho CRM?
Customers and vendors flow bidirectionally. Visma customers create accounts in Zoho CRM, and Zoho contacts can be synced back to Visma. Visma suppliers sync to Zoho vendors, and new Zoho vendors create supplier records in Visma. Invoices and purchase orders flow from Visma into Zoho as linked records.
How does ml-connector handle Zoho's region-specific API domains and 1-hour token expiry?
Zoho tokens include an api_domain field in the token response that specifies the correct region-specific base URL. ml-connector captures this field and routes all subsequent API calls through the correct domain. Tokens are refreshed from the refresh token before the 1-hour expiry window so API calls do not hit 401 errors.
Visma webhooks have no automatic retry. How does ml-connector ensure no events are missed?
ml-connector combines Visma webhooks with scheduled polling on lastModifiedDateTime query parameters for key entities like suppliers, invoices, and customers. This hybrid approach catches events that webhook receivers miss and ensures eventual consistency even if a webhook delivery fails.

Related integrations

Connect Visma and Zoho CRM

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

Get started