Home/Integrations/QuickBooks Online
QuickBooks Online and Google Sheets integration
QuickBooks is where your books should live, and a sheet is often where the day-to-day work happens. I connect the two so open invoices and payments come into Sheets for reporting and follow-ups, and so finished jobs or orders in a sheet can become QuickBooks invoices without retyping them.
Connect QuickBooks Online to my sheetWhat it can do
Common QuickBooks Online jobs I set up. Yours will match how you use QuickBooks Online today.
Open invoices report
Every open invoice pulled into a sheet each morning with customer, amount, due date and days overdue.
Invoices from rows
Mark a job or order Ready to Bill and the script creates the invoice in QuickBooks with the right customer, items and amounts.
Payment status back to the sheet
When an invoice is paid in QuickBooks, the matching row in your sheet updates with the date and amount.
Overdue reminders
Customers past a set number of days get a reminder email from your Gmail, with the invoice details.
Customer list sync
New customers in the sheet created in QuickBooks, so the two lists stay matched.
Custom reports
Revenue by job type, crew, location or month, combining QuickBooks numbers with fields that only exist in your sheet.
How it's built
QuickBooks Online requires OAuth2. I register an app in Intuit's developer portal and use the open-source apps-script-oauth2 library to handle sign-in. You authorize it once with your QuickBooks login, and the script stores the tokens in its properties.
QuickBooks access tokens expire after about an hour, and refresh tokens are replaced over time, so the script refreshes them automatically and saves the new ones each time. If authorization ever lapses, for example after a password change or a long gap, the script emails you a link to reconnect instead of failing quietly.
Reads use QuickBooks' query endpoint to fetch invoices, payments or customers changed since the last run, on a time-driven trigger. Writes, like creating an invoice, are single API calls, and the script saves the QuickBooks ID on the row so it never creates the same invoice twice.
Good to know
- This is for QuickBooks Online. QuickBooks Desktop doesn't have the same web API and would need a different approach.
- Every so often QuickBooks may ask you to reconnect the app. When it does, the script tells you and it takes about a minute.
- I don't change your chart of accounts or post journal entries. Accounting decisions stay with you and your bookkeeper.
- Intuit's developer program has its own terms for apps, and I'll walk you through what's needed for a private app used only by your company.
QuickBooks Online questions
Does my bookkeeper need to do anything?
Usually not. It helps to agree which side owns which data, for example that invoices are always created from the sheet and never by hand, so nothing gets doubled.
Will it mess up my books?
I test against a QuickBooks sandbox company first. Once it's live, the script only does the specific things we agreed on, like creating invoices or reading payments.
Can it pull my profit and loss report?
Yes. QuickBooks' reports API can return reports like profit and loss for a date range, which the script can write into a sheet on a schedule.
What if I switch to a different accounting system later?
Your sheet keeps all its data. Only the connection part would need rewriting for the new system's API.
Tell me what your sheet needs to do
A few sentences is enough to start. I'll reply with questions, then a plan and a fixed quote.