Visma and Asana integration
Visma powers your accounting and ERP, while Asana tracks work and projects. Connecting the two keeps financial commitments visible where your teams plan. Purchase orders and supplier invoices from Visma appear as tasks and projects in Asana with cost and vendor details in custom fields, so project managers see budget context without switching systems. ml-connector handles the authentication and field mapping so teams work in Asana while finance data stays in sync from Visma.
What moves between them
Visma source data flows into Asana. Purchase orders and supplier invoices from Visma are read by polling on a daily or weekly schedule and synced into Asana as project templates or task hierarchies. Supplier names from Visma are mapped to Asana team members where available, and invoice amounts and PO line-item costs are written into Asana custom fields so project managers and team leads see budget context. Reference data such as GL account names and cost centers from Visma are also synced to enrich Asana's custom field vocabularies. Changes are one-directional: finance records in Visma are read-only in Asana.
How ml-connector handles it
ml-connector obtains an OAuth 2.0 token from Visma Connect with client credentials and the tenant_id, then includes the ipp-company-id header on all Visma API calls. On expiry, it refreshes the token without waiting for a 401 response. It polls Visma's supplier invoice and purchase order endpoints on a schedule you control, filtering by lastModifiedDateTime to fetch only changed records. For each PO or invoice, ml-connector creates or updates an Asana task or project and populates custom fields with the vendor name, amount, due date, and line items. Vendor names are matched against Asana team members by a configurable name mapping. If Asana's webhook is enabled, ml-connector listens for task updates in Asana and can log them back to Visma as reference data. Visma webhook events are unreliable (one-time delivery with no retry), so ml-connector polls as the primary source and treats webhooks as optional signals only. Every record is tagged with a Visma SupplierInvoiceId or PurchaseOrderId in an Asana custom field for deduplication and audit.
A real-world example
A mid-sized professional services firm uses Visma for accounting and procurement and runs Asana for project delivery and resource planning. Before the integration, project managers monitored budgets in Visma and copy-pasted PO and invoice summaries into Asana tasks every week to keep teams aware of spending. Finance and operations teams used separate systems with no shared visibility. With Visma and Asana connected, each new PO and supplier invoice appears automatically in Asana's project workspace as a task with budget details in custom fields. Project managers see purchase commitments alongside task timelines, and finance can query Asana's task history to trace which projects consumed which invoices. The manual copy-paste step is gone, and PO-to-delivery tracking is now seamless.
What you can do
- Sync purchase orders and supplier invoices from Visma into Asana as projects or tasks with full financial metadata in custom fields.
- Map Visma supplier names to Asana team members and track invoice amounts, due dates, and line-item details.
- Poll Visma on a schedule you control, filtering by lastModifiedDateTime to fetch only changed records since the last run.
- Authenticate against Visma's OAuth 2.0 and tenant-based API while managing token refresh and required headers on every call.
- Maintain a full audit trail of every invoice and PO synced, with deduplication and replay capability on failure.
Questions
- Can the integration move data from Asana back into Visma?
- The primary flow is from Visma into Asana. Purchase orders and supplier invoices are read from Visma and written to Asana as tasks and projects. Asana is treated as read-mostly for reference data tracking; any writes back to Visma would require explicit configuration and are limited to non-financial metadata such as notes or tags.
- Why does ml-connector poll Visma instead of relying on webhooks?
- Visma webhooks are one-time delivery with no automatic retry, so they are unreliable as a primary source. ml-connector polls Visma using the lastModifiedDateTime query parameter on list endpoints to fetch only changed records since the last run. This ensures no purchase orders or invoices are missed.
- How does ml-connector handle Visma supplier names that do not match Asana team members?
- ml-connector uses a configurable mapping table to match Visma supplier names to Asana team members by email or name pattern. If no match is found, the supplier name is stored as a text custom field in Asana for manual review. The mapping can be updated at any time without re-syncing existing records.
Related integrations
More Visma integrations
Other systems that connect to Asana
Connect Visma and Asana
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started