ml-connector
QuickBooks DesktopPayPal

QuickBooks Desktop and PayPal integration

QuickBooks Desktop runs your books on Windows. PayPal handles payments, invoicing, and payouts globally. Connecting the two keeps your transaction records in sync without re-keying. PayPal deposits and refunds land in QuickBooks Desktop as journal entries tied to the correct bank and revenue accounts, and invoice payments captured through PayPal automatically mark invoices as paid in your books. ml-connector handles the complexity of QBWC polling intervals, OAuth token refresh, and the translation from REST to SOAP so you can trust that your accounting records reflect what actually happened in PayPal.

How QuickBooks Desktop works

QuickBooks Desktop is a Windows-installed accounting product that exposes vendors, bills, invoices, customers, accounts, items, and employees through QBXML over SOAP. A customer-hosted Web Connector (QBWC) agent runs on the machine where QuickBooks is open and calls your remote SOAP service on a configurable polling interval (typically 5-15 minutes). Authentication is a session-token handshake where QBWC provides credentials, your service validates them and returns a GUID ticket valid for the rest of the session. Changes are detected using ModifiedDateRangeFilter queries. There are no webhooks; all communication is pull-based polling initiated by the QBWC agent.

How PayPal works

PayPal exposes orders, payments, captures, refunds, invoices, transactions, subscriptions, and payouts through REST APIs with OAuth 2.0 Client Credentials authentication. Each call includes a Bearer token obtained by submitting Base64-encoded CLIENT_ID and CLIENT_SECRET to the token endpoint; tokens are cached by default for approximately 8 hours. PayPal can also push transaction and payment events to a registered webhook endpoint via HTTPS POST, signed with RSA-SHA256 per the paypal-transmission-sig header. Key constraint: PayPal has no general ledger account object, so reconciliation is done via transaction search API limited to a rolling 31-day window.

What moves between them

The integration reads PayPal transaction and invoice data on a polling cycle aligned with your QBWC schedule and writes deposits and payments into QuickBooks Desktop. Every captured payment or invoice payment in PayPal generates a deposit journal entry in QuickBooks Desktop mapped to the correct bank account. Refunds flow the same direction as negative deposits. Reference data such as customer and product names are mapped bidirectionally so PayPal orders reference customers already set up in QuickBooks Desktop. The main flow is PayPal into QuickBooks Desktop; QuickBooks Desktop records are read for validation and to avoid duplicate entries.

How ml-connector handles it

ml-connector implements a SOAP service that QBWC polls via the Web Connector, authenticating each request with the session token flow (Authenticate with QuickBooks credentials, returning a GUID). On the PayPal side, ml-connector calls the REST API with OAuth 2.0 Bearer credentials, caching tokens and refreshing on 401 response. Each polling cycle, ml-connector reads PayPal transactions using the transaction search endpoint (subject to its 31-day window) and invoices, then queries QuickBooks Desktop for recent invoice and payment records to avoid posting duplicates. Captured payments map to Deposits in QuickBooks Desktop, with line items split across revenue and adjustment accounts based on PayPal fee handling rules. Refunds map to negative deposits. QBWC's sequential polling model and QuickBooks' requirement that the EditSequence version counter be current before modification means ml-connector must re-query QuickBooks Desktop accounts and items before posting to ensure it has the latest state. Rate limiting and timeouts are handled with exponential backoff; SOAP requests timeout at approximately 60 seconds so large queries are paginated.

A real-world example

A mid-sized online retailer processes orders through their website and accepts PayPal payments, PayPal Credit, and card payments through PayPal. Before the integration, the accounting team logged into PayPal daily, exported transaction reports, and manually entered deposits and refunds into QuickBooks Desktop, a process prone to lag and transcription errors. With QuickBooks Desktop and PayPal connected, each payment captured through PayPal posts as a deposit in the books within the next QBWC polling cycle, and refunds automatically reverse. Reconciliation is faster because the timing matches, and the risk of double-entry or missed transactions is eliminated.

What you can do

  • Post PayPal captured payments into QuickBooks Desktop as deposits, mapped to the correct bank account.
  • Sync PayPal refunds as negative deposits and reverse invoice payments automatically.
  • Match PayPal customers and invoices to existing QuickBooks Desktop records to avoid duplicates and maintain referential integrity.
  • Handle QBWC session authentication, token refresh, and polling intervals without manual intervention.
  • Retry on timeouts and rate limits, with a full audit trail on every transaction.

Questions

How does ml-connector authenticate with both QuickBooks Desktop and PayPal?
QuickBooks Desktop uses a QBWC session-token handshake: ml-connector implements a SOAP service that QBWC polls, validates the QBWC credentials, and returns a session GUID for all calls in that polling cycle. PayPal uses OAuth 2.0 Client Credentials: ml-connector submits CLIENT_ID and CLIENT_SECRET in Base64 to PayPal's token endpoint, caches the Bearer token (typically 8 hours), and refreshes on 401 responses.
Does ml-connector require QuickBooks Desktop to be running on the customer's machine?
Yes. QBWC runs locally on the same Windows machine as QuickBooks Desktop and requires QuickBooks to be open and logged into the company file in order to process requests. QuickBooks Desktop is a local application, not cloud-based, so the integration requires the customer's on-premises infrastructure.
Why does PayPal's transaction search limit affect the integration?
PayPal's transaction search endpoint is limited to a rolling 31-day window. ml-connector uses this window to fetch recent transactions to post into QuickBooks Desktop. For transaction history beyond 31 days, you must rely on PayPal's full transaction history or manual export. Each polling cycle fetches the latest 31 days to ensure no transactions are missed.

Related integrations

Connect QuickBooks Desktop and PayPal

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

Get started