ml-connector
QADMicrosoft Dynamics 365 Sales

QAD and Microsoft Dynamics 365 Sales integration

QAD Adaptive ERP runs manufacturing, procurement, and order fulfillment. Microsoft Dynamics 365 Sales runs the sales pipeline through to quotes, orders, and invoices. Connecting the two means a deal closed in the CRM becomes a real production order in QAD without anyone re-typing it. ml-connector keeps customer accounts and the product catalog aligned across both systems and moves order and fulfillment data on a schedule you control. Because Dynamics 365 Sales has no general ledger or supplier records, the integration stays in the order-to-cash lane: accounts, products, orders, and invoice status.

How QAD works

QAD Adaptive ERP exposes customers, items, sales orders, purchase orders, supplier invoices, goods receipts, and GL accounts through REST business document APIs, documented in Swagger inside each customer instance. The cloud product authenticates with a JWT session or OAuth2 bearer token against a tenant-specific URL, so there is no shared hostname or public sandbox. Older on-premise sites run QAD Enterprise Edition with the QXtend SOAP framework instead. QAD cloud has no native webhook system for third-party connectors, so its records are read by polling on a schedule.

How Microsoft Dynamics 365 Sales works

Microsoft Dynamics 365 Sales is built on Microsoft Dataverse and is accessed entirely through the Dataverse Web API, an OData v4 REST surface returning JSON over standard HTTP verbs at a per-environment URL such as https://{org}.api.crm.dynamics.com/api/data/v9.2/. Authentication uses OAuth 2.0 client credentials through Microsoft Entra ID, with a tenant ID, app client ID and secret, and an Application User bound to the environment. Available entities include accounts, contacts, leads, opportunities, quotes, products, sales orders, and invoices. It supports outbound webhooks through the Dataverse event framework and delta queries through change tracking, so changes can be pushed or pulled.

What moves between them

The primary flow runs from Microsoft Dynamics 365 Sales into QAD. When an opportunity is won and an order is created, ml-connector reads the Dynamics 365 Sales sales order and its line items and creates the matching sales order in QAD against the right customer and items, so the plant can schedule and build it. QAD then sends fulfillment and invoice status back, so the Dynamics 365 Sales order and invoice reflect when QAD has shipped and billed. Customer accounts are aligned in both directions so every order references a customer that exists on both sides, and the product catalog is mapped so each line item points to a valid QAD item.

How ml-connector handles it

ml-connector stores both credential sets encrypted. For Microsoft Dynamics 365 Sales it runs the Entra ID client-credentials flow, building the OAuth scope from the customer environment URL and refreshing the bearer token before it expires around the 60-minute mark. For QAD it accepts the full tenant URL per customer, since QAD publishes no shared base address, and validates entity paths against that instance. Customer accounts and products are mapped first, so every order line references a QAD customer and item that already exists. Change detection on the Dynamics 365 Sales side uses the Dataverse delta link rather than a full re-fetch, and registered webhooks can fire on order and invoice events for near-real-time pickup; QAD cloud is pull-only, so its fulfillment status is polled on your schedule. The Dataverse service protection limits return HTTP 429 with a Retry-After header, so ml-connector respects that header and backs off, and order creates are made safe to retry by checking a natural business key before posting. Every record carries a full audit trail and can be replayed if a downstream call fails.

A real-world example

A mid-sized contract manufacturer of industrial equipment runs QAD Adaptive ERP for production and shipping and uses Microsoft Dynamics 365 Sales for its outside sales team. Before the integration, when a rep closed a deal the order details were emailed to a coordinator who re-keyed them into QAD, which delayed scheduling and introduced part-number and quantity errors that surfaced on the shop floor. Sales reps also had no view of whether an order had shipped without calling operations. With QAD and Microsoft Dynamics 365 Sales connected, a won order flows straight into QAD against mapped customers and items, and fulfillment status flows back to the deal record, so reps see shipping progress and the coordinator re-keying step is gone.

What you can do

  • Create QAD sales orders from won Microsoft Dynamics 365 Sales orders, mapped to the right customer and items.
  • Send QAD fulfillment and invoice status back to the matching Microsoft Dynamics 365 Sales order and invoice.
  • Keep customer accounts aligned between QAD and Microsoft Dynamics 365 Sales so orders reference a valid customer on both sides.
  • Map the Microsoft Dynamics 365 Sales product catalog to QAD items so every order line points to a real part number.
  • Authenticate Microsoft Dynamics 365 Sales with Entra ID client credentials and QAD with its tenant-specific token, with retries and a full audit trail.

Questions

Can this integration post accounting entries from Microsoft Dynamics 365 Sales into QAD's general ledger?
No. Microsoft Dynamics 365 Sales is a CRM and does not include general ledger accounts, accounting dimensions, or supplier records, which live in Dynamics 365 Finance or Business Central. This connector stays in the order-to-cash lane: accounts, products, sales orders, and invoice status. Posting payroll or financial journals into QAD would require a separate connector to a finance system.
Which direction does data move between QAD and Microsoft Dynamics 365 Sales?
The primary flow is from Microsoft Dynamics 365 Sales into QAD: won orders and their line items become QAD sales orders for the plant to fulfill. QAD then sends fulfillment and invoice status back to the deal record. Customer accounts and the product catalog are aligned in both directions so every order references a customer and items that exist on both sides.
How does the integration detect changes given QAD has no webhooks?
On the Microsoft Dynamics 365 Sales side, ml-connector uses Dataverse change tracking delta links to pull only changed records, and registered Dataverse webhooks can fire on order and invoice events for near-real-time pickup. QAD cloud has no native webhook system, so its fulfillment status is read by polling on a schedule you control. Dataverse rate limits return HTTP 429 with a Retry-After header, which ml-connector respects before retrying.

Related integrations

Connect QAD and Microsoft Dynamics 365 Sales

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

Get started