ml-connector
OdooStampli

Odoo and Stampli integration

Odoo runs your complete ERP across accounting, purchasing, and HR. Stampli automates your accounts payable process. Connecting them keeps your vendor master, purchase orders, and invoice approvals in sync without manual data entry. Vendor changes in Odoo flow to Stampli's system, and once Stampli approves an invoice, the payment record comes back into Odoo ready for posting.

How Odoo works

Odoo exposes vendors (res.partner), purchase orders (purchase.order), invoices (account.move), GL accounts (account.account), and payments (account.payment) through XML-RPC over HTTP POST to a customer-specific Odoo Online, Odoo.sh, or self-hosted URL. Authentication uses an API key paired with a username, obtained once via an authenticate() call in XML-RPC or as a Bearer token in the JSON-2 REST API available in Odoo 19+. Odoo has no production-grade webhook system, so ml-connector polls Odoo's API using write_date filters to detect new and changed records.

How Stampli works

Stampli automates accounts payable and does not expose a public REST API; instead, it offers file-based integration through SFTP. Vendors, purchase orders, invoices, and GL accounts are ingested as CSV or XML files uploaded to a Stampli SFTP server (credentials: hostname, port, username, password). Stampli exports processed invoices and payment details back to the same SFTP server on a refresh cycle (invoices refresh every 5 minutes internally). There are no public webhooks; ml-connector must poll the SFTP outbound directory on a schedule to detect newly exported files.

What moves between them

The integration runs bidirectional on file boundaries. Vendor master records, purchase orders, and GL account mappings from Odoo are uploaded as feed files to Stampli's SFTP inbound directory on a regular schedule (typically daily). Once Stampli processes an invoice (matching to a PO, validating against GL accounts, routing through approval), it exports the invoice record and any matched purchase order detail to the outbound directory. ml-connector polls for these exports on a schedule (typically every 15 minutes), parses them, and creates or updates invoice records in Odoo's account.move and associated payment records so the finance team can proceed to posting and payment without re-keying.

How ml-connector handles it

ml-connector stores the Odoo API key encrypted and presents it on every JSON-2 or XML-RPC call. For Stampli, it holds the SFTP credentials encrypted and connects on a polling schedule. Before the first upload, ml-connector reads Odoo's current vendors, purchase orders, and GL account structure, formats them according to Stampli's CSV/XML feed templates, and uploads them to Stampli's inbound SFTP directory. On every poll cycle, it connects to the outbound directory, lists new files, downloads those not yet seen (tracking seen files by name and timestamp), parses the invoice and payment exports, maps Stampli's GL dimensions back to Odoo's GL accounts using configuration rules, and creates or updates account.move records in Odoo with line items allocated to the correct GL accounts. The integration deduplicates using Stampli's internal duplicate detection and Odoo's account.move external_id field. All uploads and downloads are logged with timestamps and record counts, and failed file parses are surfaced as errors so they can be replayed after correction.

A real-world example

A mid-sized services firm runs Odoo for accounting, purchasing, and general ledger, but manually processes vendor invoices through Stampli for approval before posting to the ledger. Every day the AP team exports invoices from Stampli, maps vendor names back to Odoo partners, types invoice numbers and amounts into Odoo, and posts to GL. Month-end close is delayed because invoice postings arrive in batches. With Odoo and Stampli connected, vendor master and PO data feed into Stampli automatically each morning, and when Stampli approves an invoice, the record and its GL allocation come back into Odoo the same day. The AP team now validates and posts in one step, and invoices are never re-keyed.

What you can do

  • Upload Odoo vendor master, purchase order, and GL account data to Stampli via SFTP feed files on a regular schedule.
  • Poll Stampli's SFTP outbound directory for processed invoices and payment exports, parsing them into Odoo account.move records with correct GL allocations.
  • Map Stampli GL dimensions and vendor references back to Odoo GL accounts and res.partner records using configuration rules.
  • Handle SFTP credential encryption, file deduplication, polling intervals, and failed-file replay without manual intervention.
  • Maintain a full audit trail of every file uploaded, downloaded, parsed, and matched to an Odoo record.

Questions

Why does this integration use SFTP files instead of a Stampli REST API?
Stampli does not publish a public REST API. File-based integration through SFTP is the only path available to third parties without a Stampli partnership agreement. ml-connector uploads vendor and PO feed files to Stampli's inbound directory and polls the outbound directory for processed invoices.
How does the integration keep vendors and POs in sync between the two systems?
ml-connector reads Odoo's vendor (res.partner) and purchase order (purchase.order) records, formats them as CSV or XML feed files according to Stampli's templates, and uploads them on a schedule (typically daily). Stampli uses these feeds as its vendor and PO reference during invoice processing, so changes in Odoo appear in Stampli within one upload cycle.
What happens when Stampli processes an invoice and exports the result?
ml-connector polls Stampli's SFTP outbound directory for new invoice export files. When found, it parses the invoice data, maps Stampli's GL dimensions to Odoo GL accounts using configuration rules, and creates or updates an account.move record in Odoo with line items allocated to the correct GL accounts. The AP team can then validate and post the invoice without re-entering data.

Related integrations

Connect Odoo and Stampli

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

Get started