ml-connector
QADSalesforce

QAD and Salesforce integration

QAD runs manufacturing, procurement, and finance. Salesforce runs the sales and customer relationship side. Connecting the two keeps account master data in agreement and moves closed sales orders from Salesforce into QAD without re-keying. Suppliers and customers in QAD line up with Salesforce Accounts, and the Orders your sales team books flow into QAD as the source records behind fulfillment. ml-connector handles the different APIs on each side and moves the data on a schedule you control.

How QAD works

QAD Adaptive ERP exposes suppliers, customers, purchase orders, supplier invoices, GL accounts, items, and goods receipts 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 Salesforce works

Salesforce exposes Accounts, Contacts, Opportunities, Orders, Products, and Leads through its REST API on the org My Domain URL, with SOQL for filtered reads and upsert by External ID for idempotent writes. Authentication is OAuth2 client credentials, which returns a Bearer token and the instance URL but no refresh token, so a fresh token is requested when the session times out. Salesforce can push real changes through Change Data Capture over the Pub/Sub API, and also offers an updated-records endpoint for a polling fallback. Invoice and Payment are standard objects only in Revenue Cloud orgs, so basic orgs do not have them.

What moves between them

Account master data is aligned in both directions. QAD suppliers and customers are written to Salesforce as Accounts, and Account changes made in Salesforce are read back into QAD, so both systems describe the same trading partners. Sales Orders move from Salesforce into QAD once they are activated, becoming the source orders that drive QAD procurement and fulfillment. Products and contacts are matched so order lines and account contacts reference records that already exist on each side. Where an org runs Revenue Cloud, Salesforce Invoices can be read for reference, but QAD remains the system of record for supplier invoices and accounts payable.

How ml-connector handles it

ml-connector stores both credential sets encrypted. On the Salesforce side it runs the OAuth client credentials flow against the org My Domain URL, takes the instance URL from the token response rather than hardcoding it, and requests a new Bearer token when a call returns 401, since the client credentials flow issues no refresh token. On the QAD side it accepts the full tenant URL per customer, because QAD publishes no shared base address, and validates entity paths against that instance. Writes into Salesforce use upsert by an External ID field keyed on the QAD record id, so the same supplier or customer is never created twice. For reads, it subscribes to Salesforce Change Data Capture over the Pub/Sub API and replays from the last replayId after a gap, falling back to a SOQL sync if the connector is offline past the 72 hour event retention window; QAD has no push, so it is polled on your schedule. Accounts and products are mapped first so every order line lands on a record that exists in QAD. Salesforce daily API limits and the OFFSET cap of 2,000 are respected by following the queryLocator for large result sets, and every record carries a full audit trail and can be replayed if a downstream call fails.

A real-world example

A mid-sized industrial equipment manufacturer runs QAD Adaptive ERP for procurement, production, and finance, and uses Salesforce as the CRM for its sales team across several regions. Before the integration, sales reps closed orders in Salesforce and an operations coordinator re-typed each one into QAD, while customer and supplier records drifted apart between the two systems and caused mismatched addresses on shipments. With QAD and Salesforce connected, activated Salesforce Orders flow into QAD as source orders, and Accounts stay aligned with QAD customers and suppliers. The re-keying step is gone, and shipments go out against the same account details both teams see.

What you can do

  • Sync QAD suppliers and customers with Salesforce Accounts so both systems describe the same trading partners.
  • Read activated Salesforce Orders into QAD as the source orders behind procurement and fulfillment.
  • Upsert Accounts by an external QAD id so suppliers and customers are never duplicated.
  • Authenticate Salesforce with the OAuth2 client credentials flow on the org My Domain URL and QAD with its tenant-specific token.
  • Capture Salesforce changes through Change Data Capture and poll QAD on your schedule, with retries and a full audit trail on every record.

Questions

Which records move between QAD and Salesforce?
Suppliers and customers are aligned with Salesforce Accounts in both directions, and activated Salesforce Orders are read into QAD as source orders. Products and contacts are matched so order lines and account contacts reference existing records on each side. QAD stays the system of record for supplier invoices and accounts payable.
How does the integration authenticate to Salesforce and to QAD?
Salesforce uses the OAuth2 client credentials flow against the org My Domain URL, which returns a Bearer token and the instance URL but no refresh token. ml-connector takes the instance URL from the token response and requests a fresh token when the session times out. QAD uses its own tenant-specific URL with a JWT or OAuth2 token, configured per customer because QAD publishes no shared base address.
Does the connector use Salesforce events or polling?
Both. It subscribes to Salesforce Change Data Capture over the Pub/Sub API for near real-time changes and replays from the last replayId after a short outage. If the connector is offline past the 72 hour event retention window it falls back to a SOQL sync, and because QAD cloud has no push system, QAD is always read by polling on your schedule.

Related integrations

Connect QAD and Salesforce

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

Get started