# Best Practices

## Recommended setup

<table data-card-size="large" data-view="cards"><thead><tr><th></th><th></th></tr></thead><tbody><tr><td><strong>Start with your core billing entities</strong></td><td>Set up Invoices, Payments, and Subscriptions first. These three entities cover the most common finance reporting needs and give you a solid foundation before adding supporting entities like Quote charges or Tenants.</td></tr><tr><td><strong>Join Invoices with Invoice items</strong></td><td>The Invoice entity gives you header-level totals, but the real insight is in Invoice items — product-level revenue breakdown. Use Coupler.io's Join transformation to connect them on Invoice ID for line-level reporting.</td></tr><tr><td><strong>Set an appropriate start date</strong></td><td>On your first run, use the date picker to set a start date that matches your reporting needs. Going back too far on Transactions or Payments can result in very large initial loads. Start with the current fiscal year and expand back if needed.</td></tr><tr><td><strong>Use Append for multi-account setups</strong></td><td>If you manage multiple Bunny, Inc. accounts, create a separate source for each account and use Coupler.io's Append transformation to combine them into one unified dataset in your destination.</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>Refresh Transactions and Payments frequently</strong></td><td>These entities change constantly. Schedule them to refresh at least daily — or more often if you're running real-time revenue dashboards. Static entities like Products and Plans only need weekly refreshes.</td></tr><tr><td><strong>Refresh Account balances often</strong></td><td>Account balances are a snapshot, not a ledger. If you're tracking balance trends over time, refresh this entity frequently and store snapshots in BigQuery or a Google Sheet with appended history.</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>Split high-volume entities into separate data flows</strong></td><td>If Transactions or Subscription charges contain years of history, pulling them in a single data flow can be slow. Split them into a separate data flow with a narrower date range and run the historical backfill once, then set a rolling schedule going forward.</td></tr><tr><td><strong>Send financial summaries to AI destinations</strong></td><td>Instead of manually reviewing exported data, send Payments or Subscription charges to Claude, ChatGPT, or Gemini. Ask the AI to summarize revenue trends, flag late payments, or identify churn risk from cancellation patterns.</td></tr></tbody></table>

## Common pitfalls

{% hint style="danger" %}
**Don't confuse Invoices with Payments or Transactions.** Invoices represent what was billed. Payments represent what was collected. Transactions are raw processing records. Mixing these up in revenue reports will lead to incorrect totals — make sure you're using the right entity for the metric you're calculating.
{% endhint %}

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

* Join Invoice items to Invoices for product-level revenue reporting
* Use a meaningful start date to limit initial data volume
* Keep Transactions and Payments in separate data flows from static catalog data (Products, Plans)
* Verify totals match Bunny, Inc. before sharing reports
  {% endcolumn %}

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

* Use Account balances as a substitute for a full transaction ledger
* Pull all 15 entities into a single data flow — it makes troubleshooting harder
* Skip the manual run before setting up a schedule
* Ignore the Tenants entity if you're on a multi-tenant setup — it's key for segmentation
  {% endcolumn %}
  {% endcolumns %}
