All posts
Field notes

How to provide easy access to live QuickBooks data in Salesforce

salesforcequickbooksaccountinginvoiceserpbillingchild-gridintegrationrevops
Give revenue, finance, and account teams instant visibility into QuickBooks customer accounts, open invoices, and payment histories directly on Salesforce Accounts without data duplication or ERP license overhead.

Sales, account management, and customer success teams constantly need financial context.

When an account executive prepares for an annual contract renewal, or an account manager reviews customer health before an executive briefing, they need immediate answers:

  • Does this customer have overdue invoices or an outstanding balance?
  • Has their latest invoice been marked as paid by the accounting team?
  • What services, retainers, or subscription tiers are they actively billed for in QuickBooks?
  • What is their total historical spend across previous quarters?

In most organizations, finding those answers means juggling browser tabs, pinging the finance department for ad-hoc ledger lookups, or purchasing expensive QuickBooks Online seats for team members who only need occasional read-only visibility.

Even worse, attempts to synchronize QuickBooks data into custom Salesforce objects usually create fragile batch pipelines, data drift, storage bloat, and security concerns around storing accounting databases in CRM storage.

This walkthrough demonstrates how to use AppColab Grid to connect Salesforce directly to QuickBooks Online in real time: providing complete visibility into QuickBooks records—both company-wide and scoped to individual Account record pages—without duplicating a single invoice or payment in Salesforce storage.

Who this is for: Salesforce administrators, RevOps leaders, billing analysts, and account executives who need real-time QuickBooks invoice, payment, and customer visibility directly beside CRM records without purchasing extra QuickBooks licenses or duplicating financial tables into Salesforce.

Need help or have questions? Check out the complete QuickBooks Grid Integration guide for detailed Named Credential setup and JSON configuration options.


The customer billing scenario

Consider an account manager reviewing an enterprise customer like Edge Communications (or United Oil & Gas Corp.) directly inside Salesforce:

Document / Invoice Line Items & Description Total Amount Balance Due Status Issue Date
INV-2026-001 Cloud Integration Architecture & Setup $5,000.00 $0.00 Paid in Full Sep 01, 2026
INV-2026-002 Monthly Enterprise Grid Retainer $1,200.00 $1,200.00 Open Sep 15, 2026
INV-2026-003 Custom Data Provider Tuning & Training $850.00 $850.00 Open Sep 20, 2026
PMT-148 Wire Transfer Payment for INV-2026-001 $5,000.00 — Applied Sep 10, 2026

Rather than switching to QuickBooks or waiting on an email from accounting, the account team sees this live financial ledger directly within the Edge Communications Account page in Salesforce.

[Top]


Step 1: Connect Salesforce to QuickBooks

Salesforce connects securely to QuickBooks Online through native Named Credentials and an Auth. Provider using your Intuit Client ID and Client Secret.

Configure the permanent connection by following the QuickBooks authentication setup guide:

  1. Auth. Provider: Create QuickBooks_OAuth (OpenID Connect) with your Intuit Client ID, Client Secret, and scope com.intuit.quickbooks.accounting.
  2. Redirect URI: Add the Salesforce Callback URL to your Intuit App Dashboard settings.
  3. External & Named Credential: Configure QuickBooks with OAuth 2.0 (Browser Flow) and link it to your Auth Provider.
  4. One-Time Consent: Click Authenticate once on the principal to link your company. From then on, Salesforce automatically refreshes tokens in the background with zero manual maintenance.
  5. Principal Access: Grant user access via your Integration_Admin permission set.

This connection is permanent and shared across all QuickBooks Grid Definitions. Users granted access can view and query live accounting data without needing individual QuickBooks logins.

[Top]


Step 2: Get all QuickBooks entities to work in Account context

AppColab Grid allows you to scope any QuickBooks financial entity to the current Salesforce Account record.

When a user opens an Account, the grid dynamically resolves the Account’s identifier (such as QuickBooks_Customer_Id__c or standard AccountNumber), queries QuickBooks using Intuit SQL dialect, and renders only the transactions belonging to that specific client.

Here is how to configure each QuickBooks entity in Account context:

1. Customer Invoices (invoices)

Displays all open, paid, and past-due invoices for the current customer:

{
  "realmId": "YOUR_COMPANY_ID",
  "resource": "invoices",
  "parentMatchColumn": "CustomerRef",
  "parentMatchField": "QuickBooks_Customer_Id__c"
}
  • Columns displayed: Invoice Number (DocNumber), Customer Name, Transaction Date, Due Date, Total Amount, Balance Due, Print Status.
  • Match logic: Resolves the Account’s QuickBooks_Customer_Id__c and queries QuickBooks: SELECT * FROM Invoice WHERE CustomerRef = '<Id>'.

2. Filter for Open or Overdue Invoices Only

Combine parent matching with custom QuickBooks SQL predicates:

{
  "realmId": "YOUR_COMPANY_ID",
  "resource": "invoices",
  "parentMatchColumn": "CustomerRef",
  "parentMatchField": "QuickBooks_Customer_Id__c",
  "where": "Balance > '0'"
}
  • AppColab Grid merges the parent match predicate with your where clause using AND, instantly isolating outstanding balances.

3. Payment History & Receipts (payments)

Surfaces historical customer payments, check numbers, and applied amounts:

{
  "realmId": "YOUR_COMPANY_ID",
  "resource": "payments",
  "parentMatchColumn": "CustomerRef",
  "parentMatchField": "QuickBooks_Customer_Id__c"
}
  • Columns displayed: Payment ID, Payment Date, Total Amount Received, Unapplied Amount, Payment Method, Customer Reference.

4. Quotes & Estimates (estimates)

Gives sales teams visibility into outstanding proposals generated in QuickBooks:

{
  "realmId": "YOUR_COMPANY_ID",
  "resource": "estimates",
  "parentMatchColumn": "CustomerRef",
  "parentMatchField": "QuickBooks_Customer_Id__c"
}
  • Columns displayed: Estimate Number, Customer, Date, Expiration Date, Total Amount, Transaction Status (Accepted, Pending, Closed).

5. Vendor Bills on Accounts (bills)

When managing suppliers, vendors, or partner accounts in Salesforce:

{
  "realmId": "YOUR_COMPANY_ID",
  "resource": "bills",
  "parentMatchColumn": "VendorRef",
  "parentMatchField": "QuickBooks_Vendor_Id__c"
}
  • Columns displayed: Bill Number, Vendor Name, Bill Date, Due Date, Total Amount, Balance Due.

Parent Matching Tip:

  • Standard Field Option (parentMatchField: "AccountNumber"): If you prefer not to add custom fields to your Account object, store your QuickBooks customer number in standard AccountNumber.
  • Custom Field Option (parentMatchField: "QuickBooks_Customer_Id__c"): Recommended for enterprise teams maintaining dedicated external system IDs.
  • Graceful Fallback: If an Account record has no QuickBooks ID populated, the grid automatically displays 0 rows without throwing errors.

[Top]


Step 3: Company-wide financial portfolios (Standalone Grids)

In addition to child grids on Account record pages, you can configure high-level operational ledgers across your entire QuickBooks organization by omitting the parent matching properties.

A. Centralized Accounts Receivable Ledger

{
  "realmId": "YOUR_COMPANY_ID",
  "resource": "invoices"
}

Place this grid on a Salesforce Home Page or Finance App Page to give billing coordinators and leadership a searchable, server-paginated ledger of all company invoices with quick CSV export.

B. Complete Customer Directory & Balances

{
  "realmId": "YOUR_COMPANY_ID",
  "resource": "customers"
}

Gives RevOps and Credit Management teams a comprehensive directory of every customer account in QuickBooks, displaying billing contacts, phone numbers, active flags, and current total outstanding balances.

C. Accounts Payable & Vendor Liabilities

{
  "realmId": "YOUR_COMPANY_ID",
  "resource": "bills"
}

Enables procurement and operations teams to review upcoming vendor obligations, bill dates, and payment liabilities without leaving Salesforce.

[Top]


Step 4: Embed on the Account Lightning Record Page

Once your Grid Definitions are created in the AppColab Grid tab:

  1. Open any Account in Salesforce (such as Edge Communications).
  2. Click the gear icon ⚙️ → Edit Page.
  3. In the center layout, add a new tab labeled QuickBooks Billing.
  4. Inside the tab:
    • Drag an AppColab Grid component and select Grid Definition: Account Invoices (QuickBooks).
    • Optionally drag a second AppColab Grid component below it (or into sub-tabs) and select: Account Payments (QuickBooks).
  5. Click Save and Activate.

When users navigate between Accounts, AppColab Grid dynamically queries QuickBooks and renders only that specific customer’s invoices and payment history!

[Top]


A five-minute live demonstration

Once configured, this quick walkthrough showcases the power of the integration:

  1. Open Edge Communications in Salesforce and click the QuickBooks Billing tab to display their $5,000.00 paid invoice and their open $1,200.00 and $850.00 invoices.
  2. Open United Oil & Gas Corp. to show their $14,500.00 enterprise license and $6,200.00 automation invoice.
  3. In QuickBooks Online, generate a new invoice or receive a payment against an open balance.
  4. Return to Salesforce, click Refresh on the grid, and watch the updated transaction appear instantly—with zero synchronization delay.
  5. In the grid’s search bar, type INV-2026 or a specific item description to observe instant server-side filtering across the ledger.
  6. Click Export to CSV to immediately download the filtered ledger for financial review.

That demonstration establishes four key points: data is real-time, zero CRM storage is consumed, Account context scopes the records cleanly, and account executives gain immediate financial context without leaving Salesforce.

[Top]


What to consider before using this pattern

  • Account Matching Strategy: Matching by Customer ID (CustomerRef) ensures 100% precision. Store the QuickBooks Customer ID in QuickBooks_Customer_Id__c or standard AccountNumber on your Account records.
  • Permanent OAuth 2.0 Background Refreshes: By connecting via an Auth. Provider and OAuth 2.0 Named Credential, Salesforce securely holds the refresh token and automatically refreshes short-lived Intuit access tokens in the background. Teams never have to manually generate or copy-paste API tokens.
  • Server-Side Pagination Performance: The QuickBooks provider uses Intuit SQL pagination (STARTPOSITION and MAXRESULTS), querying only the records requested for the active page (up to 1,000 rows/page). It effortlessly handles companies with thousands of invoices without hitting Salesforce governor limits.
  • Security & Credential Principal Access: Grant External Credential principal access only to user profiles or permission sets (such as Integration_Admin) that require visibility into financial ledgers.
  • Sandbox vs. Production URLs: When developing in sandbox environments, ensure your Named Credential points to https://sandbox-quickbooks.api.intuit.com. Production environments use https://quickbooks.api.intuit.com.

[Top]


Bring the QuickBooks ledger to your CRM

AppColab Grid eliminates the barrier between your accounting software and your CRM, giving customer-facing teams the financial intelligence they need while preserving strict accounting controls.

Start with standalone invoice and customer grids to validate your connection. Then add Account-scoped child grids to bring real-time financial context to every client interaction.

Install AppColab Grid from Salesforce AppExchange, and review the QuickBooks Grid Integration guide to connect your workspace.

[Top]

Field notes

Want more like this?

We publish field notes from real client engagements — Salesforce, AWS, AI and modern web. Browse the rest, or talk to a real human about the problem you're trying to ship.

Comments

  • No comments yet. Be the first to share your thoughts.

Sign in to join the conversation.