# 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 timezones exactly</strong></td><td>Set the timezone in your Coupler.io data flow to match the timezone in AppsFlyer's App Settings. Even a one-hour difference will shift installs and events across day boundaries, breaking daily totals.</td></tr><tr><td><strong>Use one data flow per app</strong></td><td>If you manage multiple apps, create separate data flows for each App ID. Mixing apps in one flow isn't supported and makes it harder to isolate performance issues.</td></tr><tr><td><strong>Start with aggregated reports for dashboards</strong></td><td>Daily, Partners, and Geo reports are smaller and faster to sync than raw event data. Use these for ongoing dashboards and reserve raw installs/events for deeper analysis.</td></tr><tr><td><strong>Combine organic and paid data with Append</strong></td><td>Add both Installs and Organic installs as sources in one data flow and use the Append transformation to get a unified acquisition view without managing separate sheets.</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>Don't pull more than 90 days of raw data at once</strong></td><td>AppsFlyer limits raw reports (installs, events, uninstalls) to 90 days of history. Set your start date close to the current date and rely on incremental refreshes to build up historical coverage over time.</td></tr><tr><td><strong>Stagger schedules across data flows</strong></td><td>If you have multiple AppsFlyer data flows for the same app, offset their schedules by at least 15 minutes to avoid hitting AppsFlyer's API rate limits simultaneously.</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>Use Partners reports instead of raw events for channel analysis</strong></td><td>Partners reports give you aggregated install and event counts by media source without the row volume of raw data — much faster to load and easier to work with in Sheets or Looker Studio.</td></tr><tr><td><strong>Send raw events to BigQuery, not Sheets</strong></td><td>Raw in-app event data can grow into hundreds of thousands of rows quickly. BigQuery handles this scale much better than Google Sheets or Excel.</td></tr></tbody></table>

## Common pitfalls

{% hint style="danger" %}
Do not use the same AppsFlyer API token across multiple team members' Coupler.io accounts. If the token is regenerated by any user, all connected data flows will break simultaneously.
{% endhint %}

{% columns %}
{% column %}

#### Do

* Use the timezone from AppsFlyer App Settings, not your local timezone
* Pull retargeting entities only if you have active retargeting campaigns
* Use Append to merge organic, paid, and retargeting installs into one unified report
* Test with a short date range first to confirm the entity returns data before widening the window
  {% endcolumn %}

{% column %}

#### Don't

* Set a start date older than 90 days for raw reports — it will return empty or partial data
* Run daily reports and raw event reports on the same schedule without staggering
* Assume empty retargeting reports mean an error — they may simply reflect no retargeting activity
* Mix multiple App IDs in a single data flow configuration
  {% endcolumn %}
  {% endcolumns %}
