QAD and Coupa integration
QAD runs manufacturing and finance. Coupa runs procurement and accounts payable. Connecting the two moves approved spend into the ledger without re-keying. Approved Coupa invoices match against QAD purchase orders and posted goods receipts, then post as QAD supplier invoices on a schedule you control, and payment status flows back to Coupa so buyers can see when each bill is settled. ml-connector handles the different APIs on each side and respects QAD's three-way match so invoices only land after receipts post.
What moves between them
The main flow runs from Coupa into QAD. ml-connector reads approved Coupa invoices, matches each one to its QAD purchase order and posted goods receipt, then creates the corresponding QAD supplier invoice. Supplier records are aligned so the same vendors exist on both sides, and purchase orders are read from Coupa for matching context. Payment status moves the other way: once QAD records an AP payment, ml-connector posts a supplier invoice payment into Coupa so buyers see the bill as paid. Reference data such as tracking categories is written into Coupa lookup values so spend codes stay consistent.
How ml-connector handles it
ml-connector stores both credential sets encrypted. On the Coupa side it runs the OAuth2 client-credentials flow against the instance token endpoint, caches the bearer token per instance and client ID with a safety buffer, and refreshes once on a 401 before retrying. Every Coupa request sends the X-Coupa-API-Version pin, and writes carry an Idempotency-Key computed once and reused across retries so a committed write dedupes instead of duplicating. On the QAD side it accepts the full tenant URL per customer, since QAD publishes no shared base address. Because QAD's supplier invoices use three-way match, ml-connector confirms the matching purchase order and goods receipt exist in QAD before creating the invoice, so a bill never posts ahead of its receipt. QAD cloud has no webhooks, so QAD reads run on a schedule; Coupa invoice, purchase-order, and payment webhook events are signed with HMAC-SHA256 and verified in constant time, and a bad or missing signature is rejected with 401 rather than acknowledged. Coupa rate limits and 5xx responses are retried with exponential backoff that honors the Retry-After header, and 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 production, inventory, and finance, and rolled out Coupa to control indirect and direct spend across several buying teams. Before the integration, AP clerks opened each approved Coupa invoice, looked up the matching purchase order and receipt in QAD by hand, then keyed the supplier invoice into QAD, and suppliers called constantly to ask whether invoices had been paid. With QAD and Coupa connected, approved invoices flow into QAD against the right purchase order and goods receipt automatically, blocked only when a receipt has not posted yet, and payment status returns to Coupa so buyers answer supplier questions without contacting finance. Month-end AP runs faster and the manual matching step is gone.
What you can do
- Read approved Coupa invoices and create QAD supplier invoices matched to the purchase order and goods receipt.
- Hold an invoice until its QAD goods receipt posts, respecting QAD three-way match so bills never post ahead of receipts.
- Post QAD AP payment status back into Coupa so buyers and suppliers see when each bill is paid.
- Keep suppliers aligned across QAD and Coupa and write tracking categories into Coupa lookup values.
- Bridge Coupa OAuth2 client credentials and QAD tenant auth, with verified webhooks, retries, and a full audit trail.
Questions
- Which direction does data move between QAD and Coupa?
- The main flow is Coupa into QAD. Approved invoices and purchase-order context move from Coupa into QAD, and suppliers are aligned on both sides. Payment status moves the other way, from QAD back into Coupa, so buyers see when a bill is settled.
- How does the integration handle QAD's three-way match?
- QAD supplier invoices require a matching purchase order and a posted goods receipt before they can be created. ml-connector confirms both exist in QAD before posting each Coupa invoice, so a bill is never created ahead of its receipt. Invoices whose receipts have not posted yet are held until the receipt lands.
- Does QAD support webhooks the way Coupa does?
- No. QAD cloud has no native webhook system for connectors, so ml-connector reads QAD records by polling on a schedule you control. Coupa does emit webhook events for invoices, purchase orders, and payments, each signed with an HMAC-SHA256 signature that ml-connector verifies in constant time, rejecting bad signatures with a 401.
Related integrations
More QAD integrations
Other systems that connect to Coupa
Connect QAD and Coupa
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started