ml-connector
QuickBooks DesktopStampli

QuickBooks Desktop and Stampli integration

QuickBooks Desktop handles your general ledger and vendor master. Stampli automates invoice capture, approval, and payment execution. Connecting them closes the loop between AP automation and accounting: approved invoices from Stampli flow into QuickBooks Desktop as bills, vendor master changes keep both systems aligned, and GL account mappings ensure payments land on the correct cost centers. ml-connector manages the Windows-hosted SOAP agent polling, SFTP file polling, and session token authentication required by QuickBooks Desktop.

How QuickBooks Desktop works

QuickBooks Desktop is a locally-installed Windows accounting system that exposes vendors, bills, bill payments, purchase orders, invoices, GL accounts, and journal entries through QBXML SOAP APIs. A customer-hosted QBWC agent calls a remote SOAP endpoint at a configurable interval (minimum 1 minute, typical 5-15 minutes) and supplies a session token generated by your service via SOAP authenticate() method. QuickBooks Desktop has no public webhooks, so all data discovery happens through polling queries filtered by modified date or transaction deletion markers. The product requires QuickBooks to be running and logged into a company file, and operates sequentially without parallel request support. EditSequence version counters prevent concurrent edits.

How Stampli works

Stampli is an AI-powered Accounts Payable automation platform that captures invoices, manages approvals, matches to purchase orders, and executes payments. It does not publish a public REST API; file-based integration via SFTP with CSV or XML templates is the only path available without a formal Stampli partnership agreement. Stampli exports approved invoices, vendor records, GL accounts, and accounting dimensions to a customer-provided SFTP directory on approximately 5-minute internal cycles for invoices and GL data, and 2-hour cycles for purchase orders. There are no documented public webhooks or rate limits. Duplicate detection is built into the invoice export, but third-party file-based connectors should implement their own dedup logic to avoid re-processing the same invoice across sync runs.

What moves between them

The main flow runs from Stampli into QuickBooks Desktop. Approved invoices and vendor master updates are exported by Stampli to SFTP on its internal 5-minute cycle. ml-connector polls Stampli's outbound SFTP directory on a schedule aligned with your AP cycle (typically every 15 minutes), reads the exported invoice and vendor CSV files, deduplicates based on vendor ID and invoice reference, maps Stampli GL accounts and accounting dimensions to QuickBooks Desktop account names, and creates or updates bills and vendors in QuickBooks Desktop via QBWC SOAP calls. Vendor records flow in both directions to keep the master synchronized. GL account mappings are validated against the QuickBooks Desktop instance before any bill write to prevent posting to invalid accounts. Bill payments execute in Stampli; QuickBooks Desktop records them as ReceivePayment or BillPaymentCheck entries linked to the original bill.

How ml-connector handles it

ml-connector runs as a scheduled task that manages two polling loops: one to watch Stampli's SFTP outbound directory, and one to call QuickBooks Desktop's QBWC endpoint. For Stampli, it uses SFTP credentials to connect to the customer-provided directory, reads CSV exports of invoices and vendors, applies deduplication based on invoice reference and vendor ID (since Stampli's file export includes duplicate detection but a retry on the ml-connector side could re-process), and buffers the records. For QuickBooks Desktop, it opens a new session by calling QBWC's SOAP authenticate() with a pre-agreed username and password, receives a session ticket (GUID), and uses that ticket for all subsequent QBXML calls within the session. Before writing any bill, it verifies that the vendor exists in QuickBooks Desktop (or creates it if absent) and that the mapped GL account is present; this prevents bills from posting to deleted accounts or vendors that no longer exist. The EditSequence requirement in QuickBooks Desktop means that updates to existing vendors require re-querying the current version counter before modification. QBWC's 60-second request timeout means large bill batches are paginated. SFTP and SOAP both retry on transient failures with exponential backoff, and every record in the Stampli export carries an audit entry in QuickBooks Desktop via a memo field so the original invoice reference is always traceable.

A real-world example

A mid-sized wholesale distributor runs QuickBooks Desktop for accounting and vendor management, and deployed Stampli to automate invoice receipt, approval, and payment across a networked office. Before the integration, the AP team exported approved invoices from Stampli weekly, manually created bills in QuickBooks Desktop by re-keying vendor, amount, and account information, and reconciled Stampli's payment records against QuickBooks Desktop each month. After integrating Stampli with QuickBooks Desktop through ml-connector, each approved invoice in Stampli automatically becomes a bill in QuickBooks Desktop within 15 minutes, with vendor and GL account populated correctly. The AP team no longer re-keys invoices, and month-end reconciliation takes hours instead of days because invoice approval and bill creation are synchronized.

What you can do

  • Export approved invoices and vendor records from Stampli via SFTP and create or update corresponding bills and vendors in QuickBooks Desktop.
  • Map Stampli GL accounts and cost centers to QuickBooks Desktop accounts and verify them before posting to prevent invalid account errors.
  • Manage QuickBooks Desktop SOAP session authentication via QBWC, including session token generation and lifecycle.
  • Deduplicate invoices across sync runs and validate vendor and account existence before writing bills to QuickBooks Desktop.
  • Poll Stampli and QuickBooks Desktop on configurable schedules aligned to your AP cycle, with full audit trails and transaction lineage.

Questions

How does ml-connector handle QuickBooks Desktop's requirement for a QBWC polling agent?
ml-connector sends SOAP calls to a QBWC endpoint you configure, providing a username and password. QBWC calls the SOAP authenticate() method to obtain a session ticket, and ml-connector uses that ticket for all subsequent QBXML calls in the session. The session ticket is renewed on each QBWC poll cycle. QuickBooks Desktop must be running and logged in on the customer's Windows machine for the agent to process requests.
What happens if a vendor or GL account in the Stampli export does not exist in QuickBooks Desktop?
ml-connector validates that the mapped vendor and GL account exist in QuickBooks Desktop before creating any bill. If the vendor is missing, it creates the vendor record first using the Stampli vendor master data. If the GL account does not exist in QuickBooks Desktop, the record is logged as an error and not written; an audit entry flags the account mismatch so the AP team can either add the account or remap the Stampli GL dimension.
How does Stampli's file-based integration work without a REST API?
Stampli exports approved invoices and vendor data to a customer-provided SFTP server on approximately 5-minute cycles for invoice and GL data. ml-connector polls that SFTP directory on a configurable interval (typical 15 minutes) and retrieves the CSV files. Deduplication is built into Stampli's export, but ml-connector implements additional dedup logic based on invoice reference and vendor ID to handle retries. No REST API calls or webhooks are involved; the integration is entirely file-based over SFTP.

Related integrations

Connect QuickBooks Desktop and Stampli

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

Get started