# Best Practices

## Recommended setup

<table data-card-size="large" data-view="cards"><thead><tr><th></th><th></th></tr></thead><tbody><tr><td><strong>Match dimensions to your reporting hierarchy</strong></td><td>Adjust supports full campaign hierarchy: network → campaign → adgroup → creative. Only go as deep as you actually use — adding creative-level dimensions to a high-level report inflates row counts without adding useful signal.</td></tr><tr><td><strong>Use additional metrics for custom events</strong></td><td>If you've set up app-specific events in Adjust (like "level_complete" or "subscription_start"), add them in the Additional metrics field. These won't appear in the standard metric picker but are fully supported by the API.</td></tr><tr><td><strong>Separate cohort and non-cohort reports</strong></td><td>Cohort metrics measure a user group's behavior over time from their install date, while standard metrics reflect activity in the report period. Mixing them in one report often produces confusing results — create separate data flows for each use case.</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>Account for attribution windows</strong></td><td>Adjust attribution windows can be up to 7 days (or longer for view-through). Data for recent dates may still be incomplete. Include a few days of overlap in your start date to catch late-attributed installs on subsequent refreshes.</td></tr><tr><td><strong>Append historical data, don't re-pull everything</strong></td><td>Once data older than your attribution window is settled, it won't change. Use Coupler.io's Append transformation to add new date ranges on top of existing data rather than re-exporting your full history each run.</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>Limit dimension combinations for large date ranges</strong></td><td>Adding 4–5 dimensions to a 90-day report across many networks can generate thousands of rows and slow down the API response. For long-range historical pulls, use fewer dimensions or split into multiple data flows by time period.</td></tr><tr><td><strong>Use country_code instead of country for joins</strong></td><td>If you're joining Adjust data with other sources (like ad spend from Facebook or Google), use `country_code` rather than `country` as the join key — standardized ISO codes are far more reliable than country name strings across platforms.</td></tr></tbody></table>

## Common pitfalls

{% hint style="danger" %}
Don't mix `revenue` and `all_revenue` in the same analysis without understanding the difference. `revenue` covers IAP only; `all_revenue` adds ad revenue on top. Using both in a single report without labeling them clearly leads to double-counting errors in dashboards.
{% endhint %}

{% columns %}
{% column %}

#### Do

* Select only the dimensions relevant to your analysis
* Use `network_cost_diff` to monitor discrepancies between Adjust and network reporting
* Create separate data flows for campaign-level and creative-level reporting
* Use `country_code` as a join key when combining with other data sources
  {% endcolumn %}

{% column %}

#### Don't

* Mix cohort and non-cohort metrics in the same report
* Pull full historical data on every refresh — use Append for incremental updates
* Forget that `paid_installs` excludes organic — use `installs` if you need the full picture
* Run multiple large Adjust data flows simultaneously — you may hit rate limits
  {% endcolumn %}
  {% endcolumns %}
