ml-connector
VismaAsana

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.

How Visma works

Visma.net ERP exposes suppliers, purchase orders, supplier invoices, customer records, customers invoices, GL accounts, dimensions, journal transactions, and employees through REST APIs on https://api.finance.visma.net, authenticated with OAuth 2.0 client credentials and a Visma Connect tenant token. Every call requires an ipp-company-id header. Visma supports both webhooks (one-time delivery, no automatic retry) and delta polling via lastModifiedDateTime on list endpoints. Webhook events must be enabled at the company level. Refresh tokens are not issued to service applications, so new tokens must be obtained on expiry.

How Asana works

Asana exposes tasks, projects, portfolios, users, teams, custom fields, and goals through its REST API on https://app.asana.com/api/1.0, authenticated with Bearer tokens via personal access tokens or OAuth 2.0. Asana offers at-most-once push webhooks that are auto-deleted if no 2xx response is received for 24 consecutive hours. Users are read-only via REST API. Asana has no native finance objects, so purchase orders and invoices are modeled as tasks and projects with financial metadata carried in custom fields.

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

Connect Visma and Asana

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

Get started