ml-connector
QuickBooks DesktopFedEx

QuickBooks Desktop and FedEx integration

QuickBooks Desktop holds your sales orders, customers, and shipping records. FedEx handles the actual movement of goods and tracks packages through delivery. Connecting the two keeps your QuickBooks shipping records synchronized with FedEx tracking status and carrier events without manual re-entry. New shipments created in QuickBooks can be sent to FedEx to generate labels and arrange pickups, and tracking events can flow back into QuickBooks to close orders and trigger billing.

How QuickBooks Desktop works

QuickBooks Desktop is a locally-installed Windows accounting application that exposes customers, invoices, sales orders, accounts, items, and other transactions through a SOAP-based XML-over-HTTPS interface called QBXML. Authentication uses a session-token handshake: a customer-hosted agent (QBWC) calls your SOAP endpoint with credentials, and your service returns a session ticket that remains valid for all subsequent QBXML requests in that session. QuickBooks must be running and logged into the company file for QBWC to process requests. There are no webhooks; data changes are detected by polling with date-range filters and deletion queries on a configurable schedule, typically every 5 to 15 minutes.

How FedEx works

FedEx provides REST APIs for shipment creation, rate quoting, label generation, pickup scheduling, and package tracking. Authentication uses OAuth 2.0 Client Credentials, where your API Key and Secret are exchanged for a bearer token valid for one hour. FedEx tracks shipments and packages through Tracking Events, which can be pushed via webhooks (paid service) or polled through the free Track API that accepts up to 30 tracking numbers per request. FedEx enforces token-generation rate limits (3 tokens per second over 5 seconds triggers a 10-minute block) and API rate limits (1,400 transactions per 10 seconds per project), so token caching and retry backoff are essential.

What moves between them

Shipment data flows primarily from QuickBooks into FedEx. Invoices or sales orders marked as ready-to-ship are read from QuickBooks, transformed into FedEx shipment requests with customer addresses and line items, and sent to FedEx to generate labels and tracking numbers. Tracking events flow back from FedEx into QuickBooks on a polling schedule, updating shipment status fields and flagging orders for closure when delivery is confirmed. Reference data such as customer addresses are validated in both directions so shipping labels match the addresses stored in QuickBooks.

How ml-connector handles it

ml-connector authenticates to QuickBooks through the QBWC session-token flow: when QBWC calls your endpoint, you validate the username and password against configured credentials and return a session ticket for all subsequent QBXML requests in that session. On the FedEx side, ml-connector caches the OAuth 2.0 bearer token (valid for one hour) and refreshes it when needed, respecting FedEx token-generation rate limits by throttling requests and backing off when a 403 rate-limit response occurs. Shipment creation uses the FedEx transactionId field for client-side deduplication, since FedEx itself has no server-side idempotency guarantee. Because QuickBooks is pull-only (no webhooks), ml-connector polls both QuickBooks and FedEx on configurable schedules tied to your shipping cycle. When a shipment is created in FedEx, the tracking number and label are written back to the QuickBooks invoice or sales order via an update request that includes the current EditSequence to prevent concurrent-edit conflicts. Tracking events and shipment status changes flow back via periodic Track API queries, updating shipment fields in QuickBooks without re-touching the financial transaction itself.

A real-world example

A small-to-medium e-commerce business runs QuickBooks Desktop to manage orders, customers, and accounts payable. When an order is placed, it becomes an invoice in QuickBooks. Before the integration, the warehouse team shipped orders manually, printed labels from FedEx, noted tracking numbers in a spreadsheet, and manually updated QuickBooks at the end of the day. This created delays, duplicate shipments, and reconciliation work at month-end when QuickBooks and actual shipments disagreed. With QuickBooks and FedEx connected, orders ready to ship trigger label generation automatically, tracking numbers populate QuickBooks instantly, and customer notifications are sent with valid tracking information. The team ships faster, QuickBooks stays current, and month-end closing no longer requires chasing shipped-but-unrecorded orders.

What you can do

  • Read sales orders and invoices from QuickBooks Desktop and create shipments on FedEx with matching customer addresses and contents.
  • Generate FedEx labels and tracking numbers and write them back into QuickBooks without manual re-entry.
  • Poll FedEx tracking events and update shipment status in QuickBooks so orders reflect actual carrier progress.
  • Manage OAuth 2.0 token caching and refresh against FedEx rate limits, and handle QBXML session tokens through the QBWC handshake.
  • Detect and prevent duplicate shipment creation using FedEx transactionId and QuickBooks EditSequence version counters.

Questions

How does the integration create shipments in FedEx from QuickBooks orders?
ml-connector polls QuickBooks on your configured schedule to find invoices or sales orders marked as ready-to-ship. For each one, it extracts the customer address, line items, weights, and dimensions, then calls FedEx's Ship API to create a shipment, generate a label, and reserve a pickup or scheduling. The tracking number and label reference are written back to the QuickBooks invoice using an update request that includes the current EditSequence to avoid overwriting concurrent changes.
What happens with FedEx tracking events and do they push to QuickBooks automatically?
FedEx offers two ways to receive tracking events: paid webhooks (Advanced Integrated Visibility) for real-time push, or the free Track API for polling. ml-connector uses the Track API by default, querying FedEx on your schedule for tracking status on all active shipments, and writing shipment status updates back into QuickBooks without modifying the original invoice. If FedEx webhooks are enabled on your account, ml-connector can also accept webhook pushes to accelerate updates.
How does ml-connector handle the different authentication requirements between QuickBooks and FedEx?
QuickBooks Desktop uses a SOAP session-token handshake: when the customer's QBWC agent calls your endpoint, ml-connector validates credentials and returns a session ticket that remains valid for subsequent QBXML requests. FedEx uses OAuth 2.0 Client Credentials: ml-connector exchanges the API Key and Secret for a bearer token (cached for one hour) and refreshes it on demand. Both auth flows run in parallel for the same shipment, and ml-connector respects FedEx token-generation rate limits by caching aggressively and backing off on 403 responses.

Related integrations

Connect QuickBooks Desktop and FedEx

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

Get started