> For the complete documentation index, see [llms.txt](https://docs.coupler.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.coupler.io/sources/category/finance-and-accounting/quickbooks/best-practices.md).

# Best Practices

## Recommended setup

<table data-card-size="large" data-view="cards"><thead><tr><th></th><th></th></tr></thead><tbody><tr><td><strong>Choose the right data source</strong></td><td>Use <strong>QuickBooks</strong> (entities) when you need raw transactional data like invoices, customers, or bills. Use <strong>QuickBooks Reports</strong> when you need formatted financial summaries like P&#x26;L, Balance Sheet, or General Ledger. Many teams use both — entities for granular data and reports for high-level dashboards.</td></tr><tr><td><strong>Set the accounting method explicitly</strong></td><td>Don't rely on the QuickBooks default. Add <code>accounting_method: Accrual</code> or <code>accounting_method: Cash</code> in the Query parameters to ensure consistency. This prevents confusion when your company default changes or when different team members set up data flows.</td></tr><tr><td><strong>Use Split by for line-item data</strong></td><td>When exporting Invoices, Bills, or other entities with multiple line items, set the <strong>Split by</strong> parameter to <code>Line</code>. This gives you one row per line item — essential for product-level analysis and accurate revenue breakdowns.</td></tr><tr><td><strong>Choose Flat structure for analytics destinations</strong></td><td>For detail reports (General Ledger, Profit and Loss Detail, Transaction List), select <strong>Flat structure</strong> instead of QuickBooks-style format. Flat structure gives you one row per transaction with all fields filled — much easier to filter, pivot, and use in BI tools.</td></tr></tbody></table>

## Data refresh and scheduling

<table data-card-size="large" data-view="cards"><thead><tr><th></th><th></th></tr></thead><tbody><tr><td><strong>Daily refresh for most data</strong></td><td>Transactions in QuickBooks are typically entered during business hours, so a morning refresh captures the previous day's entries. Daily is the sweet spot for most accounting workflows.</td></tr><tr><td><strong>Hourly refresh for busy teams</strong></td><td>If multiple people are entering data throughout the day and you need near-real-time dashboards, switch to hourly refresh. This is especially useful during month-end close.</td></tr><tr><td><strong>Use date filters to limit scope</strong></td><td>Set the Where parameter to a fixed date range (e.g., <code>MetaData.CreateTime >= '2025-01-01'</code>) to pull only records from the period you need. For reports, use the Start and End date pickers to define your reporting window.</td></tr><tr><td><strong>Use incremental pulls for large datasets</strong></td><td>Avoid full historical pulls on every run. Use the Where parameter with <code>MetaData.LastUpdatedTime >= '2025-02-22'</code> (set to yesterday's date) to pull only recently modified records and append them to your destination.</td></tr></tbody></table>

## Performance optimization

<table data-card-size="large" data-view="cards"><thead><tr><th></th><th></th></tr></thead><tbody><tr><td><strong>Stay under the 400,000-cell limit</strong></td><td>If a report is too large, split it into monthly data flows instead of pulling an entire year. Reduce columns by selecting only the ones you need, and filter by class, department, or customer to narrow the dataset.</td></tr><tr><td><strong>Filter at the API level</strong></td><td>Use the Where parameter to pre-filter entity data before it reaches your destination. This is much more efficient than pulling everything and filtering downstream.</td></tr><tr><td><strong>Select specific columns for detail reports</strong></td><td>Don't include multicurrency or location-tracking columns unless you actually need them — they add to the cell count and can slow down processing.</td></tr></tbody></table>

## Dashboard accuracy

<table data-card-size="large" data-view="cards"><thead><tr><th></th><th></th></tr></thead><tbody><tr><td><strong>Keep accounting method consistent</strong></td><td>Make sure all data flows feeding the same dashboard use the same accounting method (Cash or Accrual). Mixing methods produces misleading totals. Add <code>accounting_method: Accrual</code> (or <code>Cash</code>) explicitly in Query parameters.</td></tr><tr><td><strong>Use Class and Department IDs, not names</strong></td><td>When filtering reports by class or department, use the entity IDs (numbers), not the display names. First export the Class or Department entity to get the ID-to-name mapping.</td></tr><tr><td><strong>Align report periods when combining data</strong></td><td>When combining data from multiple reports (e.g., P&#x26;L Summary + Balance Sheet), ensure the date ranges match exactly. A one-day mismatch can cause reconciliation issues.</td></tr><tr><td><strong>Budget vs. actual comparisons</strong></td><td>Combine the Budget entity (for budget figures) with the Profit and Loss Summary report (for actuals). Note that budget line items may need additional processing due to their nested format.</td></tr></tbody></table>

## Common pitfalls to avoid

{% columns %}
{% column %}
**Do**

* Set `accounting_method` explicitly in Query parameters
* Use `Active IN (false, true)` when you need inactive records
* Use `Split by = Line` for invoice line-item exports
* Choose Flat structure for BI tool destinations
* Split large reports into monthly data flows
  {% endcolumn %}

{% column %}
**Don't**

* Don't assume QuickBooks returns inactive records — it doesn't by default
* Don't expect custom QBO reports to appear in Coupler.io — only the predefined report types are available
* Don't use Display columns by Class and Month simultaneously — the API only supports one grouping dimension at a time
* Don't ignore the 400,000-cell limit — your data will be silently truncated
* Don't use OR in the Where parameter — only AND is supported
  {% endcolumn %}
  {% endcolumns %}

{% hint style="danger" %}
**Custom reports are not supported.** Coupler.io pulls from QuickBooks' predefined report types via the API. Custom reports you've created in the QuickBooks UI won't appear in the report dropdown. Instead, use the closest predefined report and apply query parameters (class, department, customer, date filters) to get equivalent results.
{% endhint %}


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.coupler.io/sources/category/finance-and-accounting/quickbooks/best-practices.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
