Clockify to QuickBooks Billable Time Aggregation (Make.com)
Automatically convert Clockify time entries into detailed QuickBooks Online Invoices using Make.com's powerful data aggregators.
Tools: Clockify → QuickBooks
Platform: Make.com
Short Answer
Users get a fully automated billing pipeline where approved Clockify hours are fetched, grouped by project using Make.com Array Aggregators, and generated as draft QuickBooks Invoices with precise line items, ensuring 100% accuracy in billable totals.
The Problem
Manual entry of time logs into QuickBooks leads to billing lag, human error, and missed revenue. While point-to-point syncs create cluttered invoices, businesses need a way to group multiple time entries into a single, professional invoice based on project completion or approval.
The Outcome
Users get a fully automated billing pipeline where approved Clockify hours are fetched, grouped by project using Make.com Array Aggregators, and generated as draft QuickBooks Invoices with precise line items, ensuring 100% accuracy in billable totals.
Step-by-Step Guide
1. **Create Scenario & Trigger**: Add the **Clockify > Watch Time Entries** module. Set the 'Limit' based on your expected volume. Connect your Clockify API Key.
2. **Apply Filter**: Add a Filter after the trigger where `Billable` is equal to `true` (boolean).
3. **Identify Customer**: Add a **QuickBooks Online > Search Customers** module. Search by `Client Name` from Clockify to retrieve the `Customer ID` required for the invoice.
4. **Add Router (Optional)**: If a customer isn't found, use a Router to create a new customer or send an error notification.
5. **Standardize Data**: Add a **Tools > Set Variable** module to format the duration. Use the formula `{{round(item.timeInterval.duration / 3600; 2)}}` to convert Clockify seconds into decimal hours.
6. **Aggregate Entries**: Add the **Array Aggregator** module. Set the 'Source Module' to your Clockify Trigger. Under 'Target Structure', select the QuickBooks Invoice 'Line Items' structure. This groups individual logs into one bundle.
7. **Map to QuickBooks**: Add the **QuickBooks Online > Create an Invoice** module. Map the `Customer ID` from Step 3. In the 'Line Items' field, toggle the 'Map' switch and drag in the array output from the Aggregator.
8. **Update Status**: Add a **Clockify > Update a Time Entry** module. Use the ID from the trigger to add a tag like 'Invoiced' or 'Synced' to prevent duplicate processing.
9. **Error Handling**: Right-click the QuickBooks module and select **Add Error Handler (Break)** to ensure that if the API is down, Make.com retries the operation instead of losing the data bundle.
Data Mapping
| Clockify Field | QuickBooks Field | Make.com Transformation/Logic |
| :--- | :--- | :--- |
| `timeInterval.duration` | `Line Item: Qty` | `{{round(item.duration / 3600; 2)}}` (Seconds to Hours) |
| `description` | `Line Item: Description` | `{{item.description}}` (Default to 'No Description' if empty) |
| `clientName` | `Customer ID` | Use **Search Customers** module to map Name to Internal ID |
| `project.name` | `Service / Product` | Use `switch()` function to map Project Names to QB Items |
| `now` | `Invoice Date` | `{{now}}` (Make.com system variable) |
| `billable` | `Filter Criteria` | Only process bundle if `true` |
Gotchas & Failure Modes
• **Rate Limiting**: Clockify and QuickBooks both have API limits. If processing >100 entries, add a **Sleep** module or set the Scenario 'Max number of cycles' to a lower value.
• **Duration Format**: Clockify exports durations in seconds (e.g., 3600). QuickBooks expects decimal hours (1.0). Use the division formula `math(/3600)` to avoid billing errors.
• **Connection Refresh**: QuickBooks OAuth tokens in Make.com may occasionally expire. Ensure 'Verify Connection' is checked in the module settings.
• **Customer Matching**: If the Clockify Client Name doesn't *exactly* match the QuickBooks Customer Display Name, the search will fail. Use the `trim()` and `lower()` functions to normalize names during the search.
Verification Checklist
- [ ] **Run Once**: Use the 'Run Once' button with a single test entry in Clockify.
- [ ] **Check Aggregator**: Verify the 'Bundles' count in the Array Aggregator to ensure multiple time entries are merging.
- [ ] **Verify Line Items**: Open the draft invoice in QuickBooks 'SandBox' or 'Production' to ensure the description and hours match Clockify exactly.
- [ ] **Check Filter**: Ensure entries marked 'Non-Billable' are successfully stopped by the filter.
- [ ] **Test Error Handler**: Deliberately disconnect the QuickBooks module to see if the Error Handler captures the failure.
Ready to Automate?
Build this automation with Make.com in minutes.