ml-connector
QuickBooks DesktopStedi

QuickBooks Desktop and Stedi integration

QuickBooks Desktop is the accounting system at your premises; Stedi connects you to your trading partners via EDI. Together they let inbound purchase orders and invoices from suppliers flow directly from Stedi into QuickBooks without re-keying. New vendor records and line-item bills post with the correct GL codes and amounts. Outbound shipment notices from QuickBooks can be translated to ASN 856 and sent back through Stedi to your partners.

How QuickBooks Desktop works

QuickBooks Desktop exposes vendors, bills, purchase orders, invoices, accounts, items, and employees through QBXML over SOAP. The customer runs a locally-installed Windows agent (QBWC) that polls your web service on a configurable interval. Authentication is a session token handshake: QBWC provides credentials, your service returns a GUID session ticket. QuickBooks must be running and logged into the company file for QBWC to process requests. There are no webhooks. Modify operations require the current EditSequence (version counter) to prevent concurrent-edit conflicts. Large queries must be paginated due to a 60-second timeout.

How Stedi works

Stedi is a cloud EDI platform that translates JSON to X12 EDI files and routes them to trading partners via SFTP, FTPS, or AS2. Inbound EDI files are parsed into JSON and pushed as webhooks (transaction.processed.v2 events) to your endpoint. Outbound records are written via REST with an API key in the Authorization header. Idempotency-Key header is required for deduplication on outbound writes. Webhooks must respond within 5 seconds, so async processing is required. Stedi itself is not a system of record; it is a translation and routing platform.

What moves between them

Inbound EDI purchase orders (850), invoices (810), and ASN (856) flow from Stedi as JSON webhooks. ml-connector maps the Stedi partner ID to the matching QuickBooks vendor, creates or updates the vendor if needed, and writes the bill or purchase order through QBWC. Outbound shipment notices (856) are read from QuickBooks on a schedule, translated to Stedi transaction format, and sent to the partner via SFTP or AS2. Deduplication uses Stedi's eventId and the bill reference number in QuickBooks.

How ml-connector handles it

ml-connector listens for Stedi webhooks (transaction.processed.v2) on a dedicated endpoint and immediately acknowledges within 5 seconds. The webhook payload contains the parsed EDI line items and trading partner ID. ml-connector looks up the partner in a Stedi Partnership mapping, translates it to the QuickBooks vendor ID, and queues the bill for processing. On a background schedule, ml-connector authenticates to QBWC by calling the SOAP authenticate() method with stored credentials, receives a session token, and sends a BillAddRq request for each queued bill. If the bill amount or line items conflict with an existing bill (detected by reference number), the operation is skipped. If QBWC returns an EditSequence conflict, ml-connector re-queries the bill, merges the update, and retries. SOAP timeouts trigger exponential backoff with jitter. Outbound shipments are polled from QuickBooks, formatted to Stedi transaction JSON, and posted to Stedi with an Idempotency-Key. All transactions log to an audit trail keyed by Stedi eventId and QuickBooks txnID.

A real-world example

A mid-market distributor receives purchase orders and invoices from 30+ suppliers via EDI. Before integration, a data-entry clerk downloaded each supplier's transactions from Stedi, extracted vendor and line-item data into a spreadsheet, and manually re-entered them into QuickBooks. Month-end was chaotic because accounts payable could not reconcile the invoice register to Stedi without a manual recount. With Stedi and QuickBooks connected through ml-connector, purchase orders and invoices from suppliers arrive as EDI, are parsed by Stedi, and drop directly into QuickBooks as bills against the correct vendors and GL expense accounts. The AP team now reconciles in minutes, and the data-entry step is gone.

What you can do

  • Accept inbound EDI purchase orders (850), invoices (810), and ASN (856) from Stedi as JSON webhooks and create matching bills in QuickBooks.
  • Map Stedi trading partner IDs to QuickBooks vendors, creating vendor records when needed.
  • Handle QBWC session token authentication and detect EditSequence version conflicts on bill updates.
  • Poll outbound shipment notices from QuickBooks and translate them to EDI ASN (856) for routing back through Stedi to suppliers.
  • Deduplicate inbound transactions using Stedi eventId and bill reference numbers, with full audit trail for every record.

Questions

How do EDI orders from Stedi actually get into QuickBooks?
Stedi parses inbound EDI files and pushes the parsed JSON as webhooks. ml-connector receives the webhook, extracts the vendor and line items, authenticates to your local QBWC agent using the session token handshake, and writes the bill as QBXML. The QBWC agent on your Windows machine processes the request and posts the bill to QuickBooks.
Does ml-connector handle vendor matching between Stedi and QuickBooks?
Yes. ml-connector maps Stedi Partnership IDs (which identify trading partners) to QuickBooks vendor IDs. If a vendor does not yet exist in QuickBooks, ml-connector can create it with the partner name and basic contact info. The mapping is configured in the connection settings.
What happens if a bill is sent to QuickBooks twice?
ml-connector deduplicates using Stedi's eventId and the bill reference number stored in QuickBooks. If the same EDI invoice is received twice, the second attempt is skipped. If a bill must be corrected, it is handled as a separate transaction with a new reference number.

Related integrations

Connect QuickBooks Desktop and Stedi

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

Get started