ml-connector
Wave AccountingStampli

Wave Accounting and Stampli integration

Wave Accounting handles invoicing and bookkeeping for small businesses. Stampli automates accounts payable from invoice capture through payment. Connecting the two lets you capture vendor invoices in Stampli, approve them through workflow, and have the approved transactions post automatically into Wave's general ledger without manual re-entry. Stampli's AI speeds up invoice processing and approval, while Wave stays the source of truth for your chart of accounts and financial reporting.

How Wave Accounting works

Wave Accounting exposes customers, invoices, products, chart of accounts, transactions, and vendors through a GraphQL single-endpoint API at https://gql.waveapps.com/graphql/public. Authentication uses OAuth 2.0 Authorization Code Flow with access tokens that expire in two hours and refresh tokens requiring the offline_access scope. Wave requires that the connected business have an active Wave Pro subscription. Wave publishes webhooks for invoice.created, invoice.updated, invoice.paid, payment.created, customer.created, customer.updated, transaction.created, product.created, and product.updated events. Webhook payloads carry an HMAC-SHA256 signature in the x-wave-signature header and have a five-minute replay window. Wave retries failed webhook deliveries; return HTTP 200 to acknowledge or 500 to trigger a retry. Invoices in Wave can be created, approved, sent, or deleted, but do not support patch operations. Employees and payroll are not accessible through the GraphQL API, nor are bills, accounts payable, or purchase orders.

How Stampli works

Stampli does not publish a public REST API; file-based SFTP integration is the only path available without a formal Stampli partnership agreement. The platform automates accounts payable through invoice capture, approval workflows, PO matching, vendor management, and payment execution. Integration uses SFTP credentials (hostname, port, username, password) for authentication. Stampli exports new invoices, payments, GL accounts, vendors, and purchase orders to the SFTP directory on an internal refresh cycle of roughly five minutes for invoices and GL accounts, two hours for purchase orders. Stampli has no documented public webhooks, so integration requires polling the outbound SFTP directory on a defined interval such as every 15 minutes. Duplicate detection is built into Stampli; file-based connectors should implement their own dedup logic. There is no sandbox or test environment accessible to third parties; testing requires coordination with Stampli support on a live account. No self-serve API credential issuance exists; SFTP access requires direct coordination with Stampli.

What moves between them

Approved invoices, vendor records, and purchase orders flow from Stampli into Wave Accounting. ml-connector polls Stampli's SFTP export directory every 15 minutes for new invoice files, parses them, and creates transactions in Wave's chart of accounts mapped to the corresponding expense accounts. Vendor records and GL account dimensions are synchronized to keep vendor data and account structures aligned. Payments exported from Stampli are recorded in Wave. Payment and invoice data flows one direction only, from Stampli into Wave, since Wave serves as the source of truth for financial reporting.

How ml-connector handles it

ml-connector maintains encrypted SFTP credentials for Stampli and OAuth tokens for Wave. It polls Stampli's outbound SFTP directory on a 15-minute interval, downloads CSV or XML files containing approved invoices and payments, and deduplicates records by comparing file names and transaction identifiers against prior syncs. Each invoice is mapped to the correct GL account in Wave based on the Stampli vendor and expense category, then inserted as a transaction via the GraphQL API using Wave's OAuth token. If the token expires, ml-connector refreshes it automatically. Vendor records and GL dimensions are synced first so that every invoice lands on a valid Wave account. Stampli's export files are retained for audit purposes. ml-connector retries failed SFTP or GraphQL calls with exponential backoff, tracks all records in its audit log, and surfaces sync errors through alerts so you know immediately if a file is waiting or a batch failed. Because Wave invoices do not support patch operations, corrections are handled as delete-and-reinsert via the GraphQL mutation, with full audit visibility.

A real-world example

A small business uses Wave Accounting for invoicing and general ledger, and adds Stampli to automate vendor invoice processing. Before the integration, the accounts payable clerk captured invoices manually into Wave and reconciled vendor statements by hand, a process that consumed hours each week. With Stampli and Wave connected, vendor invoices are captured in Stampli, approved through the configured workflow, and posted automatically to Wave's GL without re-keying. The AP clerk now focuses on vendor inquiry resolution and payment strategy rather than data entry, and month-end close starts with invoices already recorded and categorized.

What you can do

  • Sync approved vendor invoices from Stampli into Wave as transactions, mapped to the correct expense accounts.
  • Keep Wave's vendor master aligned with Stampli's vendor records.
  • Automatically record Stampli payments as Wave transactions, categorized to the right GL accounts.
  • Authenticate Wave with OAuth 2.0 and Stampli with SFTP, with automatic token refresh and full encryption of credentials.
  • Poll Stampli on a 15-minute interval, deduplicate records, and maintain a complete audit trail of every invoice and payment posted.

Questions

Which direction does data move between Wave and Stampli?
Approved invoices, vendor records, and payments flow from Stampli into Wave Accounting. Wave serves as the source of truth for your general ledger and financial reporting, so ml-connector does not write changes back to Stampli. Corrections to invoices are handled as delete-and-reinsert in Wave with full audit visibility.
Does Wave require an active subscription for the integration to work?
Yes. The connected business must have an active Wave Pro subscription for API access. Wave publishes webhooks for invoice and payment events, but ml-connector uses those primarily for visibility. The main sync is triggered by the 15-minute polling interval from Stampli's SFTP export directory, so the integration does not depend on webhook delivery reliability.
How does ml-connector handle deduplication and failed syncs?
ml-connector deduplicates invoices and payments by comparing file names and transaction identifiers against prior sync records, and retries failed SFTP or GraphQL calls with exponential backoff. All records are tracked in the audit log, and sync errors surface through alerts so you are notified immediately if a batch fails or a file is waiting.

Related integrations

Connect Wave Accounting and Stampli

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

Get started