Visma and Salesforce integration
Visma runs finance and accounting across the Nordic region. Salesforce manages your customer relationships and sales pipeline. Connecting them keeps your customer master data aligned and your revenue pipeline visible to finance. New customers added in Visma sync to Salesforce Accounts, while Opportunities in Salesforce flow back to Visma for project revenue tracking and dimension allocation. ml-connector bridges their different OAuth flows and syncs on both a schedule and real-time events.
What moves between them
Customers and custom Fields in Visma sync to Salesforce Accounts and Contacts, either on a daily schedule or immediately when Salesforce detects a change via Change Data Capture. Salesforce Opportunities flow back to Visma for project revenue accounting, mapped to Visma project dimensions and accounts so finance can allocate revenue correctly. Account hierarchies and customer classifications in Visma are stored in Salesforce custom fields for filtering and reporting. Master data such as product lines and business units aligns in both directions so customer segmentation remains consistent.
How ml-connector handles it
ml-connector stores both credential sets encrypted: Visma's client_id and client_secret for the OAuth token endpoint, and Salesforce's Consumer Key and Secret. When requesting a Visma token, it includes the required ipp-company-id header on all subsequent API calls. On the Salesforce side, it obtains a client credentials access token that expires after the org's configured timeout, and it refreshes that token before expiry to avoid failures mid-flow. For real-time sync, ml-connector subscribes to Salesforce Change Data Capture on Account and Contact objects; when Salesforce delivers an event, the record is fetched and pushed to Visma using the customer entity. For Opportunities, ml-connector polls Salesforce at a configurable cadence (daily or hourly), maps each Opportunity to a Visma project dimension and revenue account, and posts a journal entry in Visma's general ledger. Rate limits are tracked and respected on both sides: Visma test clients are capped at 500 calls per hour per company, while Salesforce rate limits depend on org license type. Every transaction carries a full audit trail, and failed records are queued for replay when downstream systems recover.
A real-world example
A mid-market Nordic software vendor runs Visma for accounting and has recently deployed Salesforce for sales and customer management across three market regions. Before the integration, the sales team maintained customer records in Salesforce while finance entered customer master data in Visma separately, leading to duplicate data entry and weekly reconciliation of customer name and address changes. Revenue recognition required the finance team to manually query Salesforce Opportunities each quarter, map them to Visma projects and dimensions, and post the appropriate accruals to the general ledger. With Visma and Salesforce connected, new Accounts created in Salesforce automatically appear in Visma, customer changes sync both ways, and Opportunities flow to Visma at month-end for automated revenue accrual posting. The manual handoff between teams is eliminated, and finance has real-time visibility into the sales pipeline via Visma dimension reporting.
What you can do
- Sync Visma Customers to Salesforce Accounts and Contacts, keeping customer master data aligned across both systems.
- Map Visma Dimensions and product classifications to Salesforce custom fields so sales teams can segment and report by Visma structure.
- Pull Salesforce Opportunities back to Visma, post revenue accruals to project accounts, and allocate to the correct Visma dimensions.
- Authenticate Visma with OAuth 2.0 and the required ipp-company-id header, and Salesforce with client credentials; refresh tokens before expiry to prevent outages.
- Listen to Salesforce Change Data Capture events on Accounts and Contacts for real-time sync, and poll Visma delta endpoints on a schedule for customer master data changes.
Questions
- Which direction does data move between Visma and Salesforce?
- Customers and master data from Visma sync to Salesforce Accounts and Contacts on a schedule or in real time via Salesforce Change Data Capture. Salesforce Opportunities flow the opposite direction, mapped to Visma project dimensions and accounts for revenue recognition. Customer classifications and Dimensions flow in both directions to keep segmentation consistent.
- How does ml-connector handle Visma's ipp-company-id header and Salesforce's changing session tokens?
- ml-connector includes the ipp-company-id header on every Visma API call so that the request routes to the correct accounting entity. For Salesforce, it obtains a client credentials token, tracks its expiry, and refreshes the token before it expires so that in-flight API calls do not fail. Both credentials are stored encrypted in the connector's database.
- Does the integration support real-time sync or does it require polling?
- The integration supports both. Salesforce Change Data Capture delivers real-time push events when Accounts and Contacts are created or updated, so ml-connector can sync those changes immediately. For Visma, which offers webhooks without automatic retry, ml-connector combines webhook notification with scheduled polling using the lastModifiedDateTime parameter to ensure no changes are missed even if a webhook fails.
Related integrations
More Visma integrations
Other systems that connect to Salesforce
Connect Visma and Salesforce
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started