Contact
StandardQuickBooksRefId__ctextPrimary_Billing_Contact__ccheckbox
The data model behind the sync — generated straight from the managed package metadata. Salesforce CRM on top, QuickBooks mirrors beneath it, transaction documents in the middle with their line items hanging off master-detail spines, reference books at the base — and the plumbing kept deliberately link-free at the bottom. Expand any object to see every field it ships with.
QuickBooksRefId__ctextPrimary_Billing_Contact__ccheckboxQuickBooks_Taxable__ccheckboxQuickBooksRefId__ctextQBO_Sync_Status__ctext · formulaLast_Synced__cdatetimeQuickbooks_Card_Id__ctextAccount_Number__cencryptedTokenization_Status__cpicklistQuickBooksRefId__cext idSyncToken__ctextDisplay_Name__ctextId__cext idBalance__cnumberVendor1099__ccheckboxQBO_RefId__ctextSubTotal__cΣ roll-upStatus__cpicklistInvoice_Id__ctextSubTotal__cΣ roll-upAmount_Paid__ccurrencyPayment_Status__ctextQBO_Ref_Id__ctextSub_Total__cΣ roll-upPayment_Method__ctextQuickBook_RefId__cext idStatus__cpicklistTotal_Amount__cnumberAmount__ccurrency · formulaRate__ccurrencyQuantity__cnumberQBO_Line_Id__cext idAmount__ccurrency · formulaAmount__ccurrencyStatus__cpicklistAmount__ccurrency · formulaQuantity__cnumberType__cpicklistAmount__cnumberAccountType__cpicklistFullyQualifiedName__ctextTotal_Tax_Value__cΣ roll-upTax_Value__cnumberId__cext idEntity__cmultipicklistValue__ctextLabel__ctext · formulaOAuth access + refresh tokens, realm id, and a mirror of QBO company preferences.
The switchboard: endpoints + every feature toggle (product sync, sales receipts, custom fields…).
Package-shipped defaults: client id/secret, auth + callback URLs. (v1 __mdt kept but deprecated.)
One checkbox per attribute — field-by-field control over what syncs on a customer.
One checkbox per trigger — the kill-switch for automation.
Correlation id, direction, payloads, stack trace, duration — record ids stored as text so logging can never block a transaction.
Fired when opportunity products change; decouples CRM edits from sync work.
Streams product lines onto a draft invoice asynchronously.
None of this structure is accidental — each pattern answers a specific constraint of syncing two systems that both think they own the data.
Every QuickBooks entity gets its own __c mirror object instead of being crammed into Account or Opportunity. Standard CRM objects stay clean (Account gets zero packaged fields), and each mirror carries a QuickBooksRefId__c external id plus SyncToken__c — the pair that makes every sync an idempotent upsert instead of a duplicate factory.
All five line-item objects, payments, and tax rates hang on master-detail. That's what buys the SubTotal__c roll-up summaries (the total is computed by the platform, never drift-prone Apex math) and cascade delete — an orphaned invoice line is structurally impossible.
Documents reference customers, tax codes, and products through plain lookups. Deactivating a QBO class or deleting a product must never take three years of invoices down with it — so ownership is reserved for lines, and reference is kept loose everywhere else.
Every document carries a Parent_Object__c + Parent_Record_Id__ctext pair instead of a polymorphic lookup. That's what lets an invoice be spawned from an Opportunity, a Work Order, or any custom object — in any subscriber org — without the package declaring a hard dependency on objects that may not exist there.
QuickBooks nests things: sub-customers billed with parents, sub-classes, sub-accounts in the chart of accounts. Each mirror gets a self-lookup (Parent_Customer__c, Parent_Class__c, ParentRef__c) so the tree survives the trip — and Parent_Invoice__c chains recurring invoices to their template the same way.
Tokens, config, logs, and events hold no foreign keys at all. Log__c stores related ids as text so a failed sync can be logged even when the record it references is gone; custom settings and metadata sit outside the transaction graph entirely; platform events decouple CRM edits from callout work. The plumbing can never deadlock the money.
Unify your QuickBooks experience directly from your Opportunities in Salesforce.