ml-connector
QADStampli

QAD and Stampli integration

QAD runs manufacturing, procurement, and finance. Stampli runs accounts payable automation, invoice capture, approval workflows, and payment. Connecting the two sends supplier and GL coding data from QAD into Stampli, then returns approved bills and executed payments to QAD without re-keying. Because Stampli publishes no public API, ml-connector uses its file-based path: customer-defined CSV or XML exchanged over SFTP. The sync runs on a schedule you control, with duplicate detection on both sides.

How QAD works

QAD Adaptive ERP exposes suppliers, purchase orders, supplier invoices, GL accounts, cost centers, items, goods receipts, and AP payments 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, where QXI handles inbound documents and QXO pushes outbound events. QAD cloud has no native webhook system for connectors, so finance records are read by polling, and a three-way match means goods receipts must post before a supplier invoice will clear against its purchase order.

How Stampli works

Stampli is a closed AP automation platform accessed at app.stampli.com, and it does not publish a public REST API, OpenAPI spec, or self-serve credentials. Its own ERP connectors are proprietary and built in-house, so the only path open to an external connector is file-based: customer-defined CSV or XML templates exchanged over SFTP or manual upload, keyed to a Stampli Company ID. The exchange is bidirectional, importing vendor, GL, and PO master data into Stampli and exporting approved invoices and payment status out, on a scheduled batch rather than in real time. Stampli has no public webhooks, so new exports are detected by polling its outbound folder, and its engine includes built-in duplicate detection for invoices.

What moves between them

Reference data flows from QAD into Stampli as inbound files: suppliers, GL accounts, and cost centers are pushed so invoices can be coded and routed in Stampli's approval workflow, and open purchase orders are sent for matching. Approved supplier invoices flow the other direction, exported from Stampli as files and posted into QAD as supplier invoices with their line items, GL coding, cost center, and any PO reference. Executed payment records also flow from Stampli back into QAD AP payments, carrying amount, date, vendor, and invoice reference. GL accounts and dimensions are read-only inside Stampli, so ml-connector never writes accounts back from Stampli into QAD. Because both sides are batch and pull-only, the exchange runs on a fixed schedule.

How ml-connector handles it

ml-connector stores both credential sets encrypted: the Stampli SFTP host, username, password, and inbound and outbound paths on one side, and the QAD tenant token on the other. For QAD it accepts the full tenant instance URL per customer, since QAD publishes no shared base address, and refreshes the bearer token when a call returns 401. Suppliers and GL accounts are pushed into Stampli first, because an invoice cannot be coded in Stampli to an account or vendor that does not exist there yet. Outbound, a scheduled job connects over SSH, lists Stampli's export folder, downloads invoice and payment files the connector has not seen before, parses each against the agreed CSV or XML template, and maps it to a QAD supplier invoice or AP payment. Stampli has no public API idempotency, so ml-connector deduplicates by filename plus invoice ID and tracks processed files, and QAD's three-way match means a goods receipt must already be posted before an exported invoice will clear against its purchase order. Failed records carry a full audit trail and can be replayed. There is no Stampli sandbox, so first-run testing is coordinated against a live account.

A real-world example

A mid-sized food and beverage manufacturer with a few hundred employees runs QAD Adaptive ERP for procurement and finance and uses Stampli to capture and approve a high volume of supplier invoices across several facilities. Before the integration, AP staff exported approved bills from Stampli and keyed them into QAD by hand, re-entered payment details, and reconciled the vendor list between the two systems manually, which delayed month-end close. With QAD and Stampli connected over SFTP, supplier and GL data flows into Stampli automatically, approved invoices and executed payments post back into QAD as files, and the manual re-keying and vendor reconciliation steps are gone.

What you can do

  • Push QAD suppliers, GL accounts, and cost centers into Stampli so invoices code to valid accounts.
  • Send open QAD purchase orders into Stampli for invoice matching during approval.
  • Post approved Stampli invoices into QAD as supplier invoices with line items and GL coding.
  • Read executed Stampli payment records back into QAD AP payments with amount and invoice reference.
  • Bridge QAD tenant auth and Stampli SFTP credentials over file exchange, with dedup and a full audit trail.

Questions

Why does the integration use SFTP files instead of a Stampli API?
Stampli does not publish a public REST API, OpenAPI spec, or self-serve credentials, and its own ERP connectors are proprietary and built in-house. The only path open to an external connector without a formal partner agreement is file-based, using customer-defined CSV or XML over SFTP. ml-connector imports master data to Stampli and exports approved invoices and payments as files keyed to your Stampli Company ID.
Which direction does data move between QAD and Stampli?
Suppliers, GL accounts, cost centers, and open purchase orders move from QAD into Stampli for coding and matching. Approved invoices and executed payments move the other direction, from Stampli back into QAD as supplier invoices and AP payments. GL accounts and dimensions are read-only inside Stampli, so ml-connector does not write accounts back from Stampli into QAD.
How are new invoices detected without webhooks, and how are duplicates avoided?
Stampli has no public webhooks, so ml-connector polls its outbound SFTP folder on a schedule and picks up export files it has not processed before. It deduplicates by filename plus invoice ID and tracks handled files so the same bill is never posted to QAD twice. Stampli's own engine also includes duplicate detection for invoices as a second safeguard.

Related integrations

Connect QAD and Stampli

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

Get started