# Best Practices

## Recommended setup

<table data-card-size="large" data-view="cards"><thead><tr><th></th><th></th></tr></thead><tbody><tr><td><strong>Use an account-level API key</strong></td><td>If you manage multiple clients or want access to suppression lists and admin data, use an account-level key. Client-level keys are scoped and will silently exclude data from other clients.</td></tr><tr><td><strong>Set a start date for large accounts</strong></td><td>If you have years of campaign history, set a start date in the data flow to limit how much data is pulled on the first run. This keeps the initial sync fast and avoids timeouts.</td></tr><tr><td><strong>Add multiple entities to one data flow</strong></td><td>Rather than creating separate data flows for Sent campaigns, Subscriber lists, and People, add them all as sources in a single data flow. Use the Join or Append transformation to combine them for richer reporting.</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>Wait before snapshotting campaign metrics</strong></td><td>Open and click data continues to update for 24–48 hours after a campaign is sent. Schedule your data flow to run at least a day after typical send times to capture more stable metrics.</td></tr><tr><td><strong>Refresh suppression lists regularly</strong></td><td>If you're syncing suppression data to a CRM or ad platform, set a frequent refresh schedule. Stale suppression lists can lead to compliance issues or wasted ad spend on suppressed contacts.</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>Filter People by list, not account-wide</strong></td><td>Pulling all People across an account with many large lists can be slow and produce messy output due to inconsistent custom fields. Scope your source to a specific subscriber list for cleaner, faster exports.</td></tr><tr><td><strong>Use Aggregate for campaign trend reporting</strong></td><td>Instead of exporting every row of raw campaign data to a spreadsheet, apply the Aggregate transformation in Coupler.io to group metrics by month or campaign type before they land in your destination.</td></tr></tbody></table>

## Common pitfalls

{% hint style="danger" %}
Don't confuse Sent, Draft, and Scheduled campaign entities — they are separate and only Sent campaigns include performance metrics like opens and clicks. Building a report on Draft campaigns will return no engagement data.
{% endhint %}

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

* Use account-level API keys for agency or multi-client setups
* Set a start date to scope syncs to relevant time periods
* Re-run the data flow after 24–48 hours to capture settled campaign metrics
* Use the Append transformation to combine Sent campaigns from multiple client accounts into one report
  {% endcolumn %}

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

* Rely on a single snapshot for open/click rates taken immediately after sending
* Pull People across all lists when custom fields differ per list
* Use a client-level API key when you need account-wide data like suppression lists or admins
* Build dashboards on Draft or Scheduled campaign data expecting performance metrics
  {% endcolumn %}
  {% endcolumns %}
