ml-connector
QuickBooks DesktopDeel

QuickBooks Desktop and Deel integration

QuickBooks Desktop runs on-premise accounting for many small to mid-sized businesses. Deel manages global contractor and employee payroll, invoicing, and compliance across 150 countries. Connecting the two keeps your accounts payable aligned with your contractor and employee records. Contractor invoices and employee reimbursements from Deel automatically post into QuickBooks Desktop as bills, allocated to the correct vendor or employee account, and changes in Deel employee status flow back to keep QB headcount in sync. ml-connector handles the SOAP complexity on the QB side and the OAuth2 and webhook verification on the Deel side.

How QuickBooks Desktop works

QuickBooks Desktop is locally-installed accounting software that exposes vendors, employees, bills, bill payments, invoices, accounts, items, and journal entries through a SOAP interface over HTTPS. A customer-hosted Web Connector agent (QBWC) polls your SOAP service on a configurable interval, typically 5 to 15 minutes, and authenticates by passing username and password to an authenticate() method on your service; your service returns a session token (GUID) for all subsequent calls in that session. Query changes using ModifiedDateRangeFilter and the TxnDeletedQueryRq request type. QuickBooks must be open and logged into the company file for QBWC to process requests. There is no webhook push from QB, and no OAuth2 registration is needed.

How Deel works

Deel exposes employee, contractor, invoice, payslip, and payroll input data through REST JSON over HTTPS at api.letsdeel.com/rest/v2 in production. Every call authenticates with a bearer token (either an Organization Token that does not expire or a Personal Token scoped to a user) and may also include OAuth2 Authorization Code Grant for user-delegated access. Deel also supports webhooks for real-time events such as contract.created, hris.employee.created, hris.employee.updated, and hris.employee.terminated, with HMAC-SHA256 signature verification. Pagination is offset-based with a default limit of 25. The API returns 429 Too Many Requests when rate limits are reached.

What moves between them

The primary flow runs from Deel into QuickBooks Desktop. New contractors on Deel create bills in QB, and contractor invoices from Deel become bill records in QB allocated to the contractor vendor account. Employee records from Deel (hires, status changes, terminations) synchronize into QB employee accounts so QB headcount matches your global payroll. Cost allocations and departments embedded in Deel records are mapped to QB account codes and classes. QB data does not flow back to Deel; this is a pull-only integration because Deel is the system of record for contractor and payroll compliance across jurisdictions.

How ml-connector handles it

ml-connector stores the QuickBooks Desktop SOAP endpoint URL per customer and the Deel API token encrypted. On the QB side, it performs the SOAP authentication handshake on each poll, receiving a session token from your authenticate() method, then issues ModifiedDateRangeFilter queries to detect changes since the last poll. It reads the current EditSequence on each vendor and employee record before updating to prevent concurrent-edit conflicts (a QB requirement). On the Deel side it accepts webhook events for contract and employee changes, verifies the HMAC-SHA256 signature against the registered webhook secret, and refreshes the bearer token if a call returns 401. Contractor invoices from Deel are mapped to QB bill line items with the department and cost center from the invoice embedded in the QB line detail. The integration tracks the QB QBXML version to match the customer's installed QB release and respects the list-entry ceiling (14500 for Pro/Premier, 100000+ for Enterprise). Because QuickBooks Desktop does not support bulk idempotency keys, ml-connector tracks which Deel records have already been sent to QB and deduplicates locally before submitting.

A real-world example

A consulting firm with 30 core staff and 15 active contractors uses QuickBooks Desktop for accounting and Deel for global contractor management and EOR in four countries. Before the integration, the finance team received contractor invoices from Deel, manually checked them against the contracts in QB, and re-entered the amounts into bills by hand, a process that introduced typos and delays. Employee cost reconciliation at month-end required exporting headcount from Deel and cross-checking it against QB payroll accounts. With QuickBooks Desktop and Deel connected, each contractor invoice appears as a bill in QB within minutes of creation, and employee hires, terminations, and status changes flow into QB automatically. The manual entry step disappears, and month-end reconciliation starts with accurate, up-to-date headcount and invoices.

What you can do

  • Sync Deel contractor invoices into QuickBooks Desktop bills, automatically allocating to the correct vendor account based on contractor records.
  • Keep QuickBooks Desktop employee accounts in sync with Deel hires, terminations, and status changes using real-time webhooks.
  • Map Deel cost centers and departments to QuickBooks Desktop account codes and classes so invoices land on the correct GL account.
  • Authenticate with QuickBooks Desktop via SOAP session tokens and with Deel via bearer token or OAuth2, with automatic token refresh and HMAC-SHA256 webhook signature verification.
  • Poll QuickBooks Desktop on a configurable schedule while accepting real-time push events from Deel, with deduplication and EditSequence conflict detection.

Questions

Which direction does data move between QuickBooks Desktop and Deel?
The primary flow is Deel into QuickBooks Desktop. Contractor invoices, employee records, and hires and terminations from Deel appear as bills and employee accounts in QB. QB data does not flow back to Deel because Deel is the system of record for contractor and employee compliance across 150+ countries. If QB is modified by a user, those changes are not overwritten by the integration.
How does the integration handle QuickBooks Desktop's requirement for EditSequence and concurrent-edit detection?
Before updating any QB vendor or employee record, ml-connector fetches the current EditSequence value (QB's version counter) and includes it in the update request. If another user in QB has modified the record since the fetch, QB rejects the request with an EditSequence mismatch error. ml-connector catches this, re-fetches the record, merges the Deel changes with QB's latest state, and retries, preventing data loss.
What happens if the QBWC polling interval is very short or Deel webhooks arrive out of order?
ml-connector deduplicates on both sides. On the QB side it tracks which Deel IDs have already been sent to QB and skips retransmission even if QBWC polls within seconds. On the Deel side it uses webhook timestamps and record IDs to detect out-of-order events and applies them in the correct sequence, discarding duplicate or stale updates, so the final state in QB is always consistent with the latest Deel record.

Related integrations

Connect QuickBooks Desktop and Deel

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

Get started