Automated Multi-Line Invoice Generation from Google Sheets (Make.com)

Convert spreadsheet rows into consolidated QuickBooks Online invoices using Make.com’s Array Aggregator.

Tools: Google SheetsQuickBooks Online

Platform: Make.com

Short Answer

A fully automated workflow in Make.com that watches for 'Ready' status in Google Sheets, aggregates multiple line items into a single bundle, and generates a professional QuickBooks invoice with duplicate prevention and error logging.

The Problem

Manual entry of line items from spreadsheets into QuickBooks is prone to human error and time-consuming. Standard integrations often create one invoice per row, leading to fragmented billing instead of consolidated invoices for a single customer.

The Outcome

A fully automated workflow in Make.com that watches for 'Ready' status in Google Sheets, aggregates multiple line items into a single bundle, and generates a professional QuickBooks invoice with duplicate prevention and error logging.

Step-by-Step Guide

1. **Create Scenario**: Log into Make.com, click '+ Create a new scenario', and name it 'Sheets to QBO Invoice Sync'. 2. **Google Sheets Trigger**: Add the 'Watch Rows' module. Select your Spreadsheet and Sheet Name. Set 'Limit' to 10 to manage operation usage per run. 3. **Set Filter**: Click the link between the first and second module. Set the condition to `Status (Column)` 'Equal to' `Ready` to ensure only approved items process. 4. **Search Customer**: Add the QuickBooks Online 'Search for Objects' module. Select 'Customer' and search by `Email` from the sheet. This prevents duplicate profiles. 5. **Data Aggregation**: Add the 'Array Aggregator' module. Set the 'Source Module' to the Google Sheets trigger. Under 'Structure', select 'Lines' for the QuickBooks Create Invoice module. Map sheet values (Description, Amount, Qty) to the internal line item fields. 6. **Create QuickBooks Invoice**: Add the 'Create an Invoice' module. Map the `Customer ID` from the Search module and drag the 'Array' output from the Aggregator into the 'Lines' field. 7. **Error Handling**: Right-click the QuickBooks module and select 'Add error handler'. Use the 'Break' directive to store the execution for manual review if the API fails (e.g., due to a closed accounting period). 8. **Update Status**: Add a final Google Sheets 'Update a Row' module. Map the `Row ID` from the trigger and set the `Status` column to `Synced` and add the `Invoice ID` for traceability.

Data Mapping

| Google Sheets Field | Transformation / Make.com Function | QBO Field (Required) | | :--- | :--- | :--- | | `Customer Email` | `trim(A)` (Removes whitespace) | CustomerRef (Search Key) | | `Date` | `formatDate(B; "YYYY-MM-DD")` | TxnDate (Yes) | | `Line Description` | `Line Item Name` | Line.Description (Yes) | | `Amount` | `parseNumber(C)` (Ensures float) | Line.Amount (Yes) | | `Tax Code` | `ifempty(D; "NON")` | Line.SalesItemLineDetail.TaxCodeRef | | `Payment Terms` | Hardcoded: 'Net 30' | SalesTermRef |

Gotchas & Failure Modes

• **Rate Limiting**: QuickBooks Online API has a limit of 100 requests per minute. Use the 'Sleep' module if processing more than 50 rows at once. • **Formatting Errors**: QBO requires specific date formats (YYYY-MM-DD). If your sheet uses MM/DD/YYYY, use the `formatDate` function in Make.com to avoid 400 Bad Request errors. • **The Missing Customer**: If the 'Search Customer' module returns no results, the scenario will fail. Add a 'Router' to 'Create Customer' if the search result is empty. • **Aggregation Trap**: Ensure the 'Group by' field in the Array Aggregator is set to a unique ID (like Project ID or Client Email) to prevent different customers' items from merging into one invoice.

Verification Checklist

- [ ] **Run Once**: Use the 'Run Once' button and select 'Choose where to start' -> 'All' to test existing data. - [ ] **Check Execution Log**: Verify the 'Bundles' count in the Aggregator matches the rows marked 'Ready'. - [ ] **QuickBooks Sandbox**: Ensure you are testing against a QBO Sandbox environment before connecting to a live Production company. - [ ] **Data Type Check**: Open the 'In' bubble of the QBO module to confirm the 'Total Amount' is showing as a number type (blue text in Make), not a string (black text).

Ready to Automate?

Build this automation with Make.com in minutes.