# 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 a focused date range</strong></td><td>Use the start date picker to limit your initial pull to the last 30–90 days. Square accounts with years of order history can be slow to load in full — start focused, then expand once your data flow is working correctly.</td></tr><tr><td><strong>Join Orders and Payments for revenue reconciliation</strong></td><td>Orders contain line item detail; Payments contain the actual transaction amounts and methods. Use the Join transformation on order_id to build a complete sales picture in one table rather than switching between two sheets.</td></tr><tr><td><strong>Use location_id as your primary grouping field</strong></td><td>Almost every Square entity includes location_id. Add it to your reports from day one so you can slice revenue, labor costs, and inventory by store without needing to restructure your data later.</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>Match refresh frequency to entity type</strong></td><td>Transactional entities like Orders, Payments, and Shifts change frequently — schedule these hourly or daily. Catalog entities like Items and Categories rarely change, so daily or weekly is plenty.</td></tr><tr><td><strong>Run labor and payroll data flows before pay periods close</strong></td><td>Shift and wage data is most useful when pulled before payroll is processed. Schedule Shifts and Team member wages data flows to run the day before your payroll cutoff.</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 you have years of order history, pulling Orders, Payments, and Refunds in a single flow can be slow. Put each entity in its own data flow with an appropriate start date to keep run times fast.</td></tr><tr><td><strong>Enable deleted objects only when you need them</strong></td><td>Enabling "Include deleted objects" increases the payload size for catalog entities. Only turn this on for historical audits — leave it off for standard reporting to keep your data clean and your runs faster.</td></tr></tbody></table>

## Common pitfalls

{% hint style="danger" %}
**Monetary values are in cents.** Every amount field in Square (total\_money, amount\_money, etc.) is returned in the smallest currency unit. Always divide by 100 to get dollar values in your reports — forgetting this will make your revenue figures look 100x larger than they are.
{% endhint %}

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

* Divide amount fields by 100 to convert cents to dollars
* Use a separate connection for each Square account if you run multiple businesses
* Join Shifts with Team member wages to calculate actual labor cost — don't rely on Shifts alone
* Verify your start date covers the period you need before running a large historical pull
  {% endcolumn %}

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

* Pull all entities in one data flow if your Square account has high transaction volume
* Assume the Order total equals the Payment amount — tips, partial payments, and split tenders can cause differences
* Use the Loyalties entity alone for customer analysis — join it with Customers to get identifiable profiles
* Leave "Include deleted objects" enabled by default if you only need active catalog data
  {% endcolumn %}
  {% endcolumns %}
