ml-connector
QADZoho CRM

QAD and Zoho CRM integration

QAD runs manufacturing, procurement, and finance. Zoho CRM runs the sales relationship and the customer-facing record. Connecting the two gives sales and account teams the supplier, item, and order data that lives in the ERP without a second login. QAD suppliers and items stay aligned with Zoho CRM Vendors and Products, and QAD purchase orders and supplier invoice status surface against the matching Zoho records. 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 customers, suppliers, items, purchase orders, supplier invoices, GL accounts, cost centers, 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 has no public webhook system for cloud connectors, so records are read by polling on a schedule.

How Zoho CRM works

Zoho CRM exposes Accounts, Contacts, Vendors, Products, Invoices, Purchase Orders, Sales Orders, Quotes, Leads, and Deals through its REST API v8 over JSON. Every call uses an OAuth 2.0 bearer token, and the correct API base URL comes from the api_domain returned with the token because a customer org can live on any of seven regional datacenters. Zoho also supports real push notifications through its Notifications API, where a watch channel POSTs record IDs to a registered URL, though those channels expire in about a day and must be renewed. Financial modules such as Vendors, Products, Invoices, and Purchase Orders require Zoho CRM Professional or above.

What moves between them

The primary flow runs from QAD into Zoho CRM. ml-connector reads QAD suppliers and items and maps them to Zoho CRM Vendors and Products, then brings QAD purchase orders and supplier invoice status into the matching Zoho Purchase Order and Invoice records so the sales side sees current procurement and AP. Customer and account reference data is aligned in both directions so a QAD customer matches a Zoho Account and the keys line up. Where a customer works deals in Zoho first, won Sales Orders and Accounts can flow back into QAD as customer and sales demand records. Cadence is scheduled, since QAD cloud is pull-only.

How ml-connector handles it

ml-connector stores both credential sets encrypted. On the QAD side it accepts the full tenant URL per customer, since QAD publishes no shared base address, and validates entity paths against that instance. On the Zoho side it exchanges the stored refresh token for an access token, caches it until shortly before the one-hour expiry, and always uses the api_domain from the token response so calls reach the customer's correct datacenter rather than a hardcoded host. Because QAD cloud has no webhooks, it polls QAD suppliers, items, purchase orders, and supplier invoices on a schedule. Where Zoho changes need to reach QAD, it registers a Zoho notification channel, verifies the echoed token string on each payload since there is no HMAC signature, fetches the full record by ID, and renews the channel before its roughly one-day expiry lapses. Vendors and Products are matched first so every order line references an item and supplier that already exist on both sides. Zoho rate limiting is a credit-based daily quota with a concurrency cap, so ml-connector backs off on HTTP 429 and uses the bulk and COQL APIs for large or filtered reads rather than burning credits one record at a time. Because QAD AP uses three-way match, supplier invoice status only reflects QAD once the related receipt has posted. 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 runs QAD Adaptive ERP for procurement, production, and finance, and runs Zoho CRM Professional for its sales and account management team. Before the integration, account managers had no view of supplier and purchase order status without asking the buying desk, and the same vendor and item records were kept by hand in both systems, so they drifted out of step. With QAD and Zoho CRM connected, suppliers and items stay aligned automatically, and purchase orders and supplier invoice status appear against the matching Zoho records. The sales team answers customer questions about supply and order status from Zoho, and the duplicate data entry is gone.

What you can do

  • Sync QAD suppliers and items into Zoho CRM Vendors and Products so both systems hold the same records.
  • Surface QAD purchase orders and supplier invoice status against the matching Zoho Purchase Order and Invoice records.
  • Align customer and account reference data so a QAD customer matches a Zoho Account in both directions.
  • Bridge QAD tenant login and the Zoho OAuth refresh-token flow, routing each call to the correct Zoho datacenter.
  • Poll QAD on a schedule and renew Zoho notification channels before expiry, with retries and a full audit trail on every record.

Questions

Which direction does data move between QAD and Zoho CRM?
The primary flow is QAD into Zoho CRM. Suppliers, items, purchase orders, and supplier invoice status move from QAD into the matching Zoho Vendor, Product, Purchase Order, and Invoice records, while customer and account reference data is aligned in both directions. Where a customer works deals in Zoho first, won Sales Orders and Accounts can flow back into QAD as customer and sales demand records.
How does ml-connector handle Zoho's datacenter routing and one-hour token expiry?
Zoho orgs can live on any of seven regional datacenters, so ml-connector always uses the api_domain returned with the OAuth token as the base URL rather than a hardcoded host. It exchanges the stored refresh token for an access token and caches it until shortly before the one-hour expiry, then refreshes proactively. The QAD tenant URL is configured per customer alongside it, since QAD has no shared hostname.
Does Zoho CRM support webhooks, and how does QAD's lack of them affect the sync?
Zoho supports push notifications through its Notifications API, where a watch channel POSTs record IDs to a registered URL and ml-connector fetches the full record by ID. Those channels expire in about a day, so ml-connector renews them before they lapse and verifies the echoed token string on each payload, since Zoho sends no HMAC signature. QAD cloud has no webhooks, so the QAD side is always read by polling on a schedule you control.

Related integrations

Connect QAD and Zoho CRM

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

Get started