QuickBooks Desktop and Marketo integration
QuickBooks Desktop tracks vendor and customer records on-premise via QBXML. Marketo manages leads and company records for B2B marketing campaigns. Connecting the two ensures your marketing database reflects the latest customer and vendor information from QuickBooks Desktop without manual export-and-import. New customers, vendors, and their contact details flow automatically into Marketo, where they can be enrolled in campaigns and tracked through the sales pipeline.
What moves between them
Customer and vendor records flow from QuickBooks Desktop into Marketo on each QBWC polling interval. The QBWC agent calls your ml-connector SOAP service every 5 to 15 minutes (customer-configurable). ml-connector returns QBXML queries for Customer and Vendor entities with ModifiedDateRangeFilter to catch only records changed since the last poll. Each Customer becomes a Marketo Lead or Company record, each Vendor becomes a Marketo Company record, and contact details (name, email, phone, address) are mapped to Marketo fields or custom objects. Deleted records are detected via TxnDeletedQueryRq and marked deleted in Marketo. Reference data flows one direction only - no writes back to QuickBooks Desktop.
How ml-connector handles it
ml-connector implements a SOAP service that QBWC calls directly. The authenticate() method validates the QBWC username and password, generates a session token (GUID), and stores it in memory for the polling cycle. On subsequent QBWC calls within that cycle, the token is validated and used as a correlation ID. ml-connector uses the session token to track which ModifiedDateRangeFilter timestamp was last used, so each poll only requests Customer and Vendor records modified since the previous cycle. QBXML responses are parsed into structured customer and vendor records. OAuth2 credentials for Marketo (Munchkin ID, Client ID, Client Secret) are stored encrypted in the database. ml-connector exchanges them for a Bearer token on the first API call and caches the token with its expiry. If a Marketo API call returns 401 Unauthorized, the cached token is discarded and a fresh one is obtained. Customer records are upserted into Marketo as Leads or Companies based on a configurable rule (e.g., all as Companies, or based on a custom field). Vendor records are upserted as Companies. Contact fields (email, phone, address) are mapped to Marketo custom object fields. Batch requests are split into groups of 300 records per request to stay within Marketo API limits. The entire job (fetch from QB, parse, upsert to Marketo) is logged with timestamps and record counts so any partial failure can be replayed manually.
A real-world example
A mid-sized B2B software distributor runs QuickBooks Desktop to manage vendor relationships and customer orders, and uses Marketo to nurture leads and manage sales campaigns. Before the integration, the marketing team manually exported the QuickBooks Desktop customer list once a month, matched it against Marketo, and added new customer names and contact email addresses by hand. This was error-prone and created a lag between a new customer being added to QuickBooks Desktop and when they could be enrolled in a welcome campaign in Marketo. With QuickBooks Desktop and Marketo connected, new customers added in QuickBooks Desktop appear in Marketo within the next polling interval (5 to 15 minutes by default), and the marketing team can immediately enroll them in nurture campaigns. Vendor contact changes in QuickBooks Desktop also flow to Marketo, so the sales team always has current vendor email addresses.
What you can do
- Sync Customer records from QuickBooks Desktop into Marketo Leads or Companies on each QBWC polling cycle.
- Sync Vendor records from QuickBooks Desktop into Marketo Companies with full contact details and address data.
- Store QuickBooks Desktop session tokens per polling cycle and track ModifiedDateRangeFilter timestamps to fetch only changed records.
- Store Marketo OAuth2 credentials encrypted and refresh the Bearer token automatically when it expires or returns 401.
- Parse QBXML responses into structured records and batch upsert to Marketo in groups of 300 to respect API rate limits.
Questions
- How does ml-connector work with the QuickBooks Desktop QBWC agent?
- ml-connector implements a SOAP service endpoint that QBWC calls on a configurable polling interval (minimum 1 minute, typical 5-15 minutes). When QBWC connects, it calls your authenticate() method with a username and password. ml-connector validates these credentials and returns a session token (GUID). QBWC then uses that token in subsequent calls to request Customer and Vendor records via QBXML queries. ml-connector tracks the ModifiedDateRangeFilter timestamp from the previous poll, so each cycle only fetches records that changed since the last sync.
- What happens if Marketo returns a 401 Unauthorized error?
- ml-connector stores your Marketo OAuth2 credentials (Munchkin ID, Client ID, Client Secret) encrypted in its database. It exchanges these credentials for a Bearer token and caches the token with its expiry time. If a Marketo API call returns 401 Unauthorized, ml-connector discards the cached token, requests a fresh one using your stored credentials, and retries the failed request. This ensures the integration continues even if a token expires during a sync cycle.
- Can I map QuickBooks Desktop customers to either Marketo Leads or Companies?
- Yes. ml-connector supports a configurable rule to decide whether each QuickBooks Desktop customer becomes a Marketo Lead or a Marketo Company. Common rules include: all customers as Companies, all as Leads, or based on a custom field in QuickBooks Desktop (for example, customers tagged as 'vendor' become Companies, and the rest become Leads). Vendors are always synced as Marketo Companies. Contact details including email, phone, and address are mapped to Marketo fields or custom objects.
Related integrations
More QuickBooks Desktop integrations
Other systems that connect to Marketo
Connect QuickBooks Desktop and Marketo
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started