Best Practices
Recommended setup
Join campaign details with campaign reports
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.
Use Append for multi-account reporting
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.
Pull subscribers and mailing lists separately
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.
Data refresh and scheduling
Schedule around your send cadence
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.
Use daily refreshes for subscriber data
Subscriber status can change daily as people bounce or unsubscribe. A daily refresh keeps your destination list health data current without hammering the API.
Performance optimization
Avoid pulling campaign recipients for every campaign
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.
Use AI destinations for narrative reporting
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.
Common pitfalls
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.
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
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
Last updated
Was this helpful?
