> 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/ppc/facebook-ads/best-practices.md).

# Best Practices

Get the most out of your Facebook Ads data in Coupler.io by following these recommendations.

### Recommended setup and configuration

<table data-card-size="large" data-view="cards"><thead><tr><th></th><th></th></tr></thead><tbody><tr><td><strong>Start with default metrics</strong></td><td>The default columns (Account name, Campaign name, Spend, Reach, Frequency, Impressions, Clicks, CPC, CPM, CTR) cover the most common reporting needs. Add more metrics only as needed.</td></tr><tr><td><strong>Use Reports and Insights for dashboards</strong></td><td>This is the most versatile report type. It gives you access to all performance metrics and breakdowns.</td></tr><tr><td><strong>Pick the right report type for the job</strong></td><td>Use "List of Campaigns" or "List of Ads" when you need structural data (statuses, budgets, objectives). Use "Reports and Insights" when you need performance numbers.</td></tr><tr><td><strong>Match your attribution settings</strong></td><td>Before running your first import, check what attribution window your team uses in Ads Manager and set the same in Coupler.io. This prevents data discrepancies from day one.</td></tr></tbody></table>

## Data refresh and scheduling tips

<table data-card-size="large" data-view="cards"><thead><tr><th></th><th></th></tr></thead><tbody><tr><td><strong>Set your end date to yesterday</strong></td><td>Facebook's API often has incomplete data for today. Using yesterday as the end date ensures you always get complete numbers.</td></tr><tr><td><strong>Update date ranges on a schedule</strong></td><td>If you use fixed date ranges, remember to update them periodically so your report window stays current. Alternatively, use a short rolling window (e.g., the last 30 or 60 days) and rely on auto-refresh to keep data fresh.</td></tr><tr><td><strong>Schedule refreshes wisely</strong></td><td>If you have multiple data flows pulling from the same ad account, stagger their schedules by a few minutes to avoid hitting Facebook's API rate limits.</td></tr><tr><td><strong>Daily split for trend analysis</strong></td><td>Use "Split data by period: Daily" when you want to track trends over time. Use "Totals only" when you just need aggregate numbers for a fixed date range.</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>Limit breakdowns</strong></td><td>Each breakdown multiplies the number of rows in your report. Adding Age + Gender + Publisher platform to a large date range can result in thousands of rows. Only add breakdowns you actually need.</td></tr><tr><td><strong>Narrow your date range</strong></td><td>Pulling years of historical data in one go can be slow and may hit API limits. For initial backfills, consider pulling data in monthly chunks.</td></tr><tr><td><strong>Use filters to focus</strong></td><td>If you only need data from specific campaigns, use the Filters field (Graph API syntax) to limit what gets pulled. For example: <code>[{"field":"campaign.name","operator":"CONTAIN","value":"Brand"}]</code></td></tr><tr><td><strong>Choose fewer metrics first</strong></td><td>Start with core metrics and add others incrementally. Pulling every available metric at once increases processing time.</td></tr></tbody></table>

## Dashboard accuracy

<table data-card-size="large" data-view="cards"><thead><tr><th></th><th></th></tr></thead><tbody><tr><td><strong>Handle Reach correctly</strong></td><td>Reach is a unique-users metric and cannot be summed. If you aggregate daily Reach rows in Looker Studio or Sheets, you'll double-count users. Display Reach per-row only (per day, per campaign), or use "Totals only" in Coupler.io for a single deduplicated value over a fixed date range.</td></tr><tr><td><strong>Recalculate ratio metrics in your dashboard</strong></td><td>Metrics like CTR, CPC, and CPM are ratios — summing them produces meaningless numbers. In Looker Studio, create calculated fields instead: CTR = Clicks / Impressions, CPC = Spend / Clicks, CPM = (Spend / Impressions) × 1,000. This gives you correct values at every aggregation level.</td></tr><tr><td><strong>Combine creatives with performance data</strong></td><td>The "List of Ads with Ad Creatives" entity gives you image URLs and ad text but no performance metrics. To build a creative performance report, create two sources — one Reports and Insights at the Ad level, one Ads with Ad Creatives — and use Coupler.io's data stitching (Join) to combine them on Ad Id.</td></tr></tbody></table>

## Common pitfalls to avoid

* **Don't mix attribution windows** — If your Coupler.io import uses a 7-day click window but you're comparing to Ads Manager with a 1-day click window, your numbers will never match. Always verify this first.
* **Don't combine incompatible breakdowns** — Some breakdown combinations are not supported by the Facebook API (e.g., demographic breakdowns with hourly breakdowns). These will cause import failures.
* **Don't ignore action breakdown inflation** — When you add action breakdowns, the sum of the parts can exceed the total. This is expected behavior from the Facebook API, not a bug.
* **Don't forget about account limits** — Facebook Ads is a [tenant-based source](broken://pages/vjPA7mOwlQhoWcVG3xVV) in Coupler.io. Each ad account you select counts toward your plan's account limit. Reuse credentials instead of adding duplicates.


---

# 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/ppc/facebook-ads/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.
