QAD and Basware integration
QAD runs manufacturing, procurement, and finance. Basware runs AP automation: it captures supplier invoices, codes them, matches them to orders and receipts, and routes them for approval. Connecting the two keeps Basware supplied with current master data from QAD and returns the approved, coded invoices to QAD accounts payable without re-keying. ml-connector moves vendors, GL accounts, cost centers, purchase orders, and goods receipts from QAD into Basware, then brings the finished invoices back the other way. It handles the different APIs on each side and runs on a schedule you control.
What moves between them
Master data flows from QAD into Basware: vendors, GL accounts, cost centers and other dimensions, purchase orders, and goods receipts are imported so Basware can code and three-way match invoices against valid references. Approved, coded invoices flow back from Basware into QAD accounts payable, mapped to the matching QAD GL accounts and cost centers, and ml-connector acknowledges each document in Basware once it is posted. Master data syncs on a schedule, while invoices move when Basware fires a webhook or, where webhooks are not enabled, on each poll. Because QAD cloud is pull-only, QAD-side reads always run on the schedule.
How ml-connector handles it
ml-connector stores both credential sets encrypted. On the Basware side it exchanges the client ID and secret for a bearer token, selects the regional base URL from the configured region, and requests a fresh token when one expires, since the client credentials flow has no refresh token. On the QAD side it accepts the full tenant URL per customer, because QAD publishes no shared base address. Master data is pushed first so every invoice posted to QAD references an account and cost center that already exists, and goods receipts move before invoices so the three-way match has receipts to compare against. ml-connector subscribes to Basware webhooks for accounting documents ready for transfer, verifies the HMAC-SHA256 signature on the raw UTF-8 body, and returns 200 to the connection test so the subscription holds; where webhooks are off it polls instead, paging with the continuation token Basware returns in the response header. It backs off on 429 and 503 responses, avoids updating the same purchase order within a few seconds to dodge record locking, and notes that Basware silently skips unchanged records on import, so a field must change to retrigger one. 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, procurement, and finance, and processes a few thousand supplier invoices a month across several plants. Before the integration, the AP team keyed invoices into Basware for coding and approval, then exported approved batches and re-entered them into QAD by hand, while separately maintaining vendor lists and the chart of accounts in two places that slowly drifted apart. With QAD and Basware connected, QAD pushes vendors, accounts, cost centers, and purchase orders into Basware so coding and matching use current data, and approved invoices post straight into QAD accounts payable. The duplicate master data upkeep and the manual invoice re-entry both go away, and three-way match runs against receipts that QAD already posted.
What you can do
- Push QAD vendors, GL accounts, and cost center dimensions into Basware so invoice coding uses current master data.
- Send QAD purchase orders and goods receipts to Basware to support three-way matching before invoices post.
- Read approved, coded invoices from Basware and post them into QAD accounts payable against the matching accounts.
- Authenticate Basware with OAuth2 client credentials and a refreshed bearer token, and QAD with its tenant-specific login.
- Receive Basware webhooks with HMAC-SHA256 verification, or poll on a schedule, with retries and a full audit trail.
Questions
- Which direction does data move between QAD and Basware?
- Master data moves from QAD into Basware, and approved invoices move from Basware back into QAD. QAD sends vendors, GL accounts, cost centers, purchase orders, and goods receipts so Basware can code and match invoices, then Basware returns the finished invoices for posting to QAD accounts payable. ml-connector acknowledges each document in Basware once it has been posted in QAD.
- Does Basware support webhooks, and what does the integration do without them?
- Yes. The Basware P2P API can push webhook notifications when an accounting document is ready for transfer, and ml-connector verifies the HMAC-SHA256 signature on the raw UTF-8 body and returns 200 to the connection test so the subscription stays active. Where webhooks are not enabled, ml-connector polls Basware instead and pages results using the continuation token Basware returns in the response header. QAD itself is always polled, because QAD cloud has no native push.
- How does the three-way match between QAD and Basware stay reliable?
- Basware matches each invoice line against the purchase order line and the goods receipt, so the receipt has to exist on the Basware side first. ml-connector pushes QAD goods receipts before invoices are returned, and posts purchase orders and master data ahead of both, so matching always has current references. Because QAD requires receipts to post before invoices, the connector orders these syncs to respect that dependency.
Related integrations
More QAD integrations
Other systems that connect to Basware
Connect QAD and Basware
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started