Push data from Google Sheets into QuickBooks Online, bulk invoices, journal entries, customer lists, and more. Covers CSV import, G-Accon, Zapier, and the QBO API with field requirements and duplicate prevention.
If you searched for "Google Sheets to QuickBooks," you almost certainly want to push data into QuickBooks, not pull it out. This guide covers every practical method: the built-in CSV import, add-ons with write-back, automation platforms, and the QuickBooks API for developers.
Why Push From Sheets to QuickBooks?
Accountants and operations teams use Google Sheets as a scratchpad for financial data before it needs to enter the books. Common scenarios:
Bulk invoice creation. A sales team tracks deals in Sheets. At month end, 50–200 invoices need to be created in QBO. Creating them one at a time in the QBO interface takes hours. A push integration does it in minutes.
Journal entry import. Adjusting entries, accruals, and allocations are often prepared in spreadsheets before posting. QBO supports journal entry import directly from a formatted CSV.
Customer and vendor list updates. New contacts from a CRM export or event list need to exist in QBO before you can invoice them. Bulk import from Sheets prevents manual data entry.
Expense and bill recording. Field teams log expenses in Sheets. Finance imports these into QBO as bills or expense transactions weekly.
What QBO Accepts: Import Types and Field Requirements
QuickBooks Online supports native CSV import for these record types: Customers, Vendors, Products and Services, Chart of Accounts, Invoices, and Journal Entries. Each type has strict field requirements.
Invoices: required columns:
Customer(must match an existing customer name exactly)Invoice Date(format: MM/DD/YYYY)Due DateItem(must match a Product/Service name in QBO)Item QuantityItem RateInvoice No(optional but strongly recommended for deduplication)
Journal Entries: required columns:
Journal DateJournal No(optional, auto-assigned if blank)Account(must match Chart of Accounts name exactly)DebitorCredit(not both on same line)Description
Customers: required columns:
Name(the display name in QBO)- Email, Phone, Address fields are optional but recommended
The most common import failure is a name mismatch: the CSV contains "Acme Corp" but QBO has "Acme Corporation." QBO will reject the row rather than guess.
Method 1: QuickBooks CSV Import (Manual)
This is QBO's built-in import path. It requires no third-party tools but does require you to export from Sheets and upload to QBO manually each time.
Steps for importing invoices:
- In Google Sheets, format your data with the exact column names QBO expects
- File > Download > Comma Separated Values (.csv)
- In QBO: Settings (gear icon) > Import Data > Invoices
- Upload the CSV, map columns if headers differ, review the preview
- Click Import
Formatting checklist before export:
- Dates must be in MM/DD/YYYY format (not ISO 8601)
- Currency values must be numbers only, no dollar signs, no commas
- Customer and item names must be spelled exactly as they appear in QBO
- Multi-line invoices (multiple items on one invoice) need the same Invoice No on each line row
When this works well: One-time or infrequent bulk imports, small teams, situations where someone is reviewing the data before it enters QBO anyway.
When it breaks down: You need this to happen automatically on a schedule, your team finds the export-upload cycle error-prone, or you are pushing data more than once a week.
Method 2: G-Accon Write-Back
G-Accon is a Google Sheets add-on purpose-built for QuickBooks Online. It supports both pulling QBO data into Sheets and pushing Sheets data back into QBO: making it the most direct Sheets-native option for write-back.
What G-Accon supports for write-back:
- Create and update Customers
- Create Invoices (including multi-line)
- Create Journal Entries
- Create Bills and Expenses
- Create Payments
Setup:
- Install G-Accon from the Google Workspace Marketplace
- Authenticate with your QBO company account (OAuth 2.0)
- Use the add-on sidebar to map Sheets columns to QBO fields
- Run the push manually or schedule it via the add-on's built-in scheduler
Pricing: G-Accon has a free tier with limited monthly syncs. Paid plans start around $10–$20/month.
Limitation: G-Accon is well-suited for accountants and bookkeepers who know QBO field names well. The setup assumes familiarity with QBO's data model.
Method 3: Zapier or Make.com
For teams already using automation platforms, Zapier and Make.com both offer QuickBooks Online integrations with write support.
Zapier: supported QBO actions:
- Create Customer
- Create Invoice
- Create Sales Receipt
- Find or Create Customer (useful for deduplication)
Zapier setup for invoice creation:
- Trigger: "New Row in Google Sheets" (or "New Row in Spreadsheet" using a helper column to track processed rows)
- Action: "Create Invoice in QuickBooks Online"
- Map Sheets columns to QBO fields in the Zap editor
- Add a "Find Customer" step before invoice creation to verify the customer exists
Make.com advantages: Make supports more complex multi-step flows, so you can validate data, look up existing records, create missing customers, then create the invoice: all in one scenario. This is closer to what a developer would build, but without code.
Limitation: Both platforms are row-by-row. Creating 500 invoices means 500 trigger executions, which consumes task credits quickly on paid plans.
Method 4: QuickBooks API + Apps Script
For developers or teams with a developer available, the QuickBooks Online Accounting API provides full programmatic control over every record type.
Authentication: QBO uses OAuth 2.0. You need to create a QBO Developer app at developer.intuit.com to get a client ID and secret. The OAuth flow generates access tokens that expire every hour and refresh tokens that expire every 101 days.
Apps Script approach:
function createQBOInvoice(accessToken, realmId, invoiceData) {
const url = `https://quickbooks.api.intuit.com/v3/company/${realmId}/invoice`;
const payload = {
Line: invoiceData.lines.map(line => ({
Amount: line.amount,
DetailType: 'SalesItemLineDetail',
SalesItemLineDetail: {
ItemRef: { value: line.itemId, name: line.itemName },
Qty: line.quantity,
UnitPrice: line.unitPrice
}
})),
CustomerRef: { value: invoiceData.customerId },
DueDate: invoiceData.dueDate,
DocNumber: invoiceData.invoiceNumber
};
const response = UrlFetchApp.fetch(url, {
method: 'post',
headers: {
'Authorization': `Bearer ${accessToken}`,
'Accept': 'application/json',
'Content-Type': 'application/json'
},
payload: JSON.stringify(payload)
});
return JSON.parse(response.getContentText());
}Practical complexity: You need to look up QBO internal IDs for customers and items before creating records (the API uses internal IDs, not names). This requires a query step before each insert. The OAuth token refresh flow also needs to be handled in the script.
When to choose this: Large volumes (thousands of records), complex business logic, or when you need full control over error handling and retry behavior.
Comparison Table
| Method | Setup effort | Automation | Multi-line invoices | Cost | Best for |
|---|---|---|---|---|---|
| QBO CSV Import | Low | None (manual) | Yes | Free | Infrequent bulk imports |
| G-Accon | Low–Medium | Scheduled | Yes | ~$10–20/mo | Accountants, regular syncs |
| Zapier / Make.com | Low | Trigger-based | Limited | $20–100+/mo | No-code teams |
| QBO API + Apps Script | High | Fully custom | Yes | Dev time | Developers, high volume |
| brooked.io | Low | Scheduled | Yes | Subscription | Non-technical teams, recurring syncs |
Preventing Duplicates in QBO
QBO does not automatically deduplicate imported records. Pushing the same invoice twice creates two invoices. Prevention strategies:
Use a consistent document number. Invoice numbers (DocNumber in the API, Invoice No in CSV) are unique within QBO per company. If you attempt to import an invoice with a DocNumber that already exists, QBO will reject it. Use a consistent numbering scheme based on a Sheets row ID or natural key.
Add a "Pushed" flag column in Sheets. After a successful push, write "YES" to a column in the source row. Your script or Zap only processes rows where this column is blank. This prevents re-processing on subsequent runs.
Use Zapier's "Find or Create" pattern. For customers specifically, use Zapier's "Find Customer" step first. If found, skip creation. If not found, create. This prevents duplicate customer records.
Query before inserting via the API. Before creating any record via the QBO API, run a query to check if a record with that DocNumber or name already exists. The QBO query language supports: SELECT * FROM Invoice WHERE DocNumber = '1042'.
Date Format Requirements
QuickBooks Online is particular about dates. The wrong format causes silent import failures or rejects entire rows.
- CSV import: Dates must be
MM/DD/YYYY. QBO will not accept ISO 8601 (YYYY-MM-DD) or European format (DD/MM/YYYY). - API requests: Use ISO 8601 format (
YYYY-MM-DD) in JSON payloads. - Apps Script / Zapier: Format dates explicitly before sending. In Apps Script:
Utilities.formatDate(date, 'America/New_York', 'MM/dd/yyyy'). In Zapier, use the Formatter action with "Date / Time" type.
If your Sheets dates are stored as Google Sheets date serial numbers rather than formatted strings, format them before export: in Sheets, apply a MM/DD/YYYY format to the column, then export as CSV.
Troubleshooting
"Business Validation Error: Customer not found." The customer name in your Sheets row does not exactly match a customer name in QBO. Check for trailing spaces, punctuation differences, or company suffix variations (Inc. vs Inc). Fix by standardizing names in Sheets against a customer list exported from QBO.
Invoices imported but showing $0.00 amount. The Item field does not match a Product/Service name in QBO, so QBO created the line item without a price. Check Products and Services in QBO and verify the name matches exactly, including capitalization.
"Duplicate document number" error. An invoice with that DocNumber already exists. Either update the existing invoice or use a different number. Review your deduplication logic.
G-Accon push completes but no records appear in QBO. Check the G-Accon sync log in the add-on sidebar. Rows with errors are often skipped silently. Common cause: the QBO OAuth token has expired and needs re-authorization.
Zapier Zap runs but QBO returns an error. Check the Zap's task history for the full QBO error response. QBO API errors are verbose and usually explain exactly what field failed validation.
Bottom Line
For occasional bulk imports, QBO's native CSV import requires no setup and no cost, just careful formatting. For teams that need regular automated pushes, G-Accon is the most direct Sheets-to-QBO tool. Zapier and Make.com suit no-code teams with modest volumes. The QBO API gives developers full control for complex or high-volume scenarios.
Whichever method you use, invest time in duplicate prevention and date formatting before you first run it. Silent failures and duplicate invoices are far more disruptive than a slow setup process.
Get Started With brooked.io
brooked.io connects Google Sheets to QuickBooks and dozens of other tools on a schedule, no code, no manual exports, with built-in duplicate detection and sync logging.
Connect Google Sheets to QuickBooks with brooked.io →
Related guides:
- What Happens When Your Google Sheets Data Sync Breaks
- Google Sheets to SQL Server: Push Data Into Your Database
Troubleshooting quick reference
Frequently asked questions
Can I push data into QuickBooks Desktop (not Online) from Sheets?
QuickBooks Desktop does not have a REST API. Your options are: the QB Desktop IIF import format (an older import format), third-party tools like QBD Web Connector, or migrating to QBO. The methods in this guide are specific to QuickBooks Online.
Can I update existing invoices in QBO via import, or only create new ones?
The QBO CSV import only creates new records. It cannot update existing ones. The QBO API supports updates via HTTP POST with the existing record's ID and SyncToken. G-Accon supports updates for some record types.
How many invoices can I import at once via CSV?
QBO's CSV import handles up to 1,000 rows per file. For larger imports, split the CSV into multiple files. Multi-line invoices consume multiple rows, so the practical invoice count is lower when each invoice has several line items.
Does G-Accon support multi-company QBO accounts?
G-Accon supports switching between QBO companies. Each company requires a separate authentication connection within the add-on.
Is there a free way to automate this without code?
The QBO CSV import is free and built in, but it requires manual export and upload each time. There is no scheduling. For true automation without code, G-Accon's free tier (limited monthly syncs) or brooked.io are the closest options.
Ready to connect your data to Google Sheets?
Brooked's free tier covers 100 imports per month with AI Analyst included, no credit card required.
Install Brooked free →

