# Best Practices

## Recommended setup

<table data-card-size="large" data-view="cards"><thead><tr><th></th><th></th></tr></thead><tbody><tr><td><strong>Join campaign details with campaign reports</strong></td><td>Campaign reports contain the performance numbers, but campaign details hold the context (subject line, sender, schedule). Join them on Campaign ID in your data flow to get a complete picture in one table.</td></tr><tr><td><strong>Use Append for multi-account reporting</strong></td><td>If your organization runs multiple Zoho Campaigns accounts, add each as a separate source in the same data flow and use Append to combine them into one unified dataset in your destination.</td></tr><tr><td><strong>Pull subscribers and mailing lists separately</strong></td><td>Don't rely solely on Total contacts for list health reporting. Pull the Subscribers entity for status-level detail (active vs. bounced vs. unsubscribed) to spot list decay before it affects deliverability.</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>Schedule around your send cadence</strong></td><td>Sync campaign reports a few hours after your typical send time — open and click rates stabilize within 24–48 hours of a send. Syncing too soon captures only partial engagement data.</td></tr><tr><td><strong>Use daily refreshes for subscriber data</strong></td><td>Subscriber status can change daily as people bounce or unsubscribe. A daily refresh keeps your destination list health data current without hammering the API.</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>Avoid pulling campaign recipients for every campaign</strong></td><td>The campaign recipients entity can return very large datasets for high-volume senders. Pull it only for specific campaigns you're investigating rather than as a blanket sync.</td></tr><tr><td><strong>Use AI destinations for narrative reporting</strong></td><td>Send campaign reports data to Claude or ChatGPT to auto-generate written summaries of campaign performance — useful for weekly email marketing recaps without manual writeups.</td></tr></tbody></table>

## Common pitfalls

{% hint style="danger" %}
Don't use raw open rates from the API as your single source of truth. Apple Mail Privacy Protection inflates open counts — always cross-reference with click data to assess true engagement.
{% endhint %}

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

* Join campaign reports with campaign details for full context
* Monitor bounce and unsubscribe fields alongside opens and clicks
* Use tags and topics fields to filter and segment performance in your destination
* Test your data flow with a manual run before scheduling
  {% endcolumn %}

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

* Pull all entities in one data flow if you have large lists — split them up to avoid rate limit errors
* Rely on Recent campaigns as your only campaign history source — it only returns a recent window
* Ignore the subscriber status field — treating bounced contacts the same as active ones skews list size metrics
  {% endcolumn %}
  {% endcolumns %}
