ml-connector
Microsoft Dynamics GPAsana

Microsoft Dynamics GP and Asana integration

Microsoft Dynamics GP runs financials, purchasing, and payables on a customer's own SQL Server. Asana runs the day-to-day work, where teams track and approve requests as tasks. Connecting the two turns GP purchase orders and payables invoices into Asana tasks that a finance team can review, comment on, and approve, with the GP document number, vendor, and amount carried in Asana custom fields. Asana has no native invoice or PO object, so it serves as the review and approval layer while the financial records stay in GP. ml-connector handles the very different access methods on each side and moves the data on a schedule you control.

How Microsoft Dynamics GP works

Microsoft Dynamics GP is on-premises, so there is no shared cloud endpoint. Each customer exposes their own server through the SBA REST interface (GP 2015 and later) or the older SOAP Web Services, both authenticated with a Windows domain account mapped to a GP user, not an API key or OAuth token. GP exposes vendors, purchase orders, payables invoices, payments, GL accounts, and journal entries, where the company name in the URL is the SQL database name. GP has no webhooks or event stream, so records are read by polling list endpoints filtered by modified date.

How Asana works

Asana is a cloud platform that exposes tasks, projects, portfolios, users, teams, goals, and custom fields through a REST API at https://app.asana.com/api/1.0, authenticated with a Personal Access Token or an OAuth2 bearer token. It has no native invoice, purchase order, payment, or GL account objects, so financial values such as a PO number or amount are carried in customer-defined custom fields on tasks. By default responses return only sparse objects, so the connector requests extra fields explicitly. Asana can push task and project events to a registered endpoint, signed with HMAC-SHA256 using a secret from the registration handshake.

What moves between them

The main flow runs from Microsoft Dynamics GP into Asana. ml-connector polls GP for new and changed purchase orders and payables invoices and creates or updates a matching Asana task inside a procurement project, writing the GP document number, vendor, amount, and due date into mapped Asana custom fields. When an Asana task is completed or its approval status changes, that event arrives by webhook and ml-connector records the review outcome, then polls GP to confirm the document's current posting status. Reference data such as the vendor list and GL cost codes is read from GP so the Asana custom fields show valid values. Asana cannot write financial entries, so ml-connector never posts invoices or GL transactions back into GP from a task.

How ml-connector handles it

ml-connector stores both credential sets encrypted. On the Asana side it sends the Personal Access Token or OAuth2 bearer token on every call and registers a webhook on the procurement project, completing the X-Hook-Secret handshake and verifying the HMAC-SHA256 signature on each incoming event. On the GP side it accepts the full SBA or SOAP endpoint URL per customer along with the Windows domain, username, password, and SQL company database name, since GP has no shared host, and many customers must open a firewall port or run a local agent first. Because GP cannot push events, it polls purchase orders and payables invoices by modified date on a schedule, while Asana changes arrive by webhook. GP document numbers map to a text custom field and vendor and amount map to their own custom fields, resolved by custom field GID rather than name. Asana auto-deletes a webhook after 24 hours of failed delivery, so the connector re-registers it when a check finds it missing. Asana returns HTTP 429 with a Retry-After header at its per-token rate limit, GP write operations only succeed on unposted documents, and every record carries a full audit trail and can be replayed if a downstream call fails.

A real-world example

A regional construction firm with about 150 employees runs Microsoft Dynamics GP for purchasing and payables and already manages field and office work in Asana. Before the integration, project managers learned about new purchase orders by email and tracked approvals in a spreadsheet, so invoices sat unreviewed and month-end close stalled while finance chased sign-offs. With Microsoft Dynamics GP and Asana connected, every new PO and payables invoice appears as an Asana task in the procurement project with the vendor, amount, and due date in custom fields, the right manager is assigned, and completing the task signals that the document was reviewed. Approvals happen where the team already works and finance can see at a glance which documents are cleared.

What you can do

  • Create an Asana task for each new Microsoft Dynamics GP purchase order and payables invoice inside a procurement project.
  • Carry the GP document number, vendor, amount, and due date in mapped Asana custom fields resolved by GID.
  • Read Asana task completion and approval status back so finance knows which GP documents were reviewed.
  • Bridge Asana bearer token auth and the on-premises GP Windows domain login, with the SQL company database name per customer.
  • Poll GP by modified date and receive Asana changes by signed webhook, with retries and a full audit trail on every record.

Questions

Which direction does data move between Microsoft Dynamics GP and Asana?
The main flow is GP into Asana. Purchase orders and payables invoices are read from GP and turned into Asana tasks with custom fields, and Asana task completion or approval status is read back as a review signal. Asana has no native finance objects, so ml-connector does not post invoices or GL entries back into GP from a task.
Can Asana hold the financial details of a GP purchase order or invoice?
Not in native fields, because Asana has no invoice, PO, or GL account object. ml-connector writes the GP document number, vendor, and amount into customer-defined Asana custom fields on the task, and resolves those fields by their GID so a rename in Asana does not break the mapping.
How does the integration handle the fact that Dynamics GP has no webhooks?
GP has no event stream, so ml-connector polls the GP purchase order and payables invoice list endpoints filtered by modified date on a schedule you set. Asana changes are the opposite: they arrive by signed webhook, and because Asana auto-deletes a webhook after 24 hours of failed delivery, the connector checks for it and re-registers when needed.

Related integrations

Connect Microsoft Dynamics GP and Asana

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

Get started