# 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 one source per brand</strong></td><td>BigMailer scopes all data by brand. Set up a separate source for each brand and use the Append transformation to merge them into a unified report. This keeps your data clean and avoids cross-brand confusion.</td></tr><tr><td><strong>Pull Fields before building contact reports</strong></td><td>Run the Fields entity first to map out all custom attributes in your account. This tells you exactly which columns to expect in your Contacts export and helps you design your destination schema in advance.</td></tr><tr><td><strong>Join Campaigns with Brands</strong></td><td>The Bulk campaigns and Transactional campaigns entities include a Brand ID. Join them with the Brands entity to enrich your campaign reports with brand names — especially useful for agency reporting across multiple clients.</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>Match refresh frequency to send volume</strong></td><td>If you send campaigns daily, a daily refresh is enough for campaign-level reporting. For contact or suppression list monitoring, weekly is usually sufficient unless you're actively running list hygiene operations.</td></tr><tr><td><strong>Refresh suppression lists after major sends</strong></td><td>Bounce and unsubscribe rates spike right after a large campaign. Schedule a suppression list refresh shortly after your bulk sends to capture new opt-outs and keep your active contact counts accurate.</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>Don't pull all entities in one run</strong></td><td>If you have a large contact database or many brands, avoid stacking too many sources in a single data flow. Group related entities (e.g., Contacts + Lists) in one flow and campaign data in another to avoid timeouts.</td></tr><tr><td><strong>Use AI destinations for insight, not raw storage</strong></td><td>Sending your Bulk campaigns or Segments data to Claude, ChatGPT, or Gemini works best for analysis tasks — like reviewing subject line patterns or audience overlap — rather than as a long-term data store. Use BigQuery or Sheets for persistent storage.</td></tr></tbody></table>

## Common pitfalls

{% hint style="danger" %}
Do not use the same API key across multiple environments without checking its scope. A key with broad access used in a shared workspace can expose contact data from all brands to anyone with access to that data flow.
{% endhint %}

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

* Create one source per brand when working with multi-brand accounts
* Pull the Suppression lists entity regularly to stay on top of deliverability
* Use Append to combine transactional and bulk campaign data into a single history table
* Verify custom field population in the Fields entity before building contact segments
  {% endcolumn %}

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

* Assume a single Contacts pull covers all brands — it doesn't
* Ignore the Brand ID column — it's essential for filtering in multi-brand setups
* Use draft campaigns as a source of truth — check the Status field before reporting on campaign counts
* Store suppression list data only in your destination without a refresh schedule — it goes stale quickly
  {% endcolumn %}
  {% endcolumns %}
