> 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/marketing/appsflyer/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>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 %}


---

# 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/marketing/appsflyer/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.
