# Reporting Best Practices

This page lists some recommended practices when pulling reports.

## Save and re-use reports

It's recommended that you create and save reports for queries you run regularly
because inserting and deleting the same report multiple times wastes resources.
Using [relative date ranges](https://developers.google.com/doubleclick-advertisers/current/reports#criteria.dateRange.relativeDateRange) such as `YESTERDAY` or
`LAST_7_DAYS` makes reports more reusable.

## Schedule reports

Ad-hoc, or one off, reports can be wasteful of resources because they are run
individually and may execute against an incomplete dataset. Scheduled reports
make the best use of reporting resources because they are run in bulk and are
guaranteed not to execute until the previous day's data has completed
processing. See the [available scheduling fields](https://developers.google.com/doubleclick-advertisers/current/reports#schedule) for details.

## Use exponential backoff when polling for report status

It's not possible to predict how long a report will take to run. The length of
time can range from seconds to hours depending on many factors including date
range and the amount of data to be processed, for instance. There's also no
correlation between report runtime and the number of rows returned in the
report. You therefore need to regularly check the status of a running report to
determine when it has finished. This is a process known as "polling".

While polling is necessary, an inefficient implementation may quickly exhaust
your quota when encountering a long running report. It's therefore recommended
that you use exponential backoff to limit retries and conserve quota.

> [!IMPORTANT]
> **Key Point:** See [exponential backoff](https://developers.google.com/doubleclick-advertisers/upload#exp-backoff) for more information.

## Perform multipart downloads

Report files may be as large as multiple gigabytes. Downloading such reports in
a single request can lead to connection issues. Also if a single request
download is interrupted, there's no way to resume it and a failed single request
download cannot be resumed if interrupted. It's therefore recommended that you
use multipart downloads to break large downloads into smaller chunks. If a
single chunk fails, the download may be resumed from that point.

Although chunking has many benefits, each chunk generates a separate request.
Therefore, we recommend using a minimum chunk size of 10 MB to avoid wasting
quota. However, if your average report size is very large, consider increasing
chunk size as much as connection speed allows.

## Legacy Paid Search IDs

Legacy Paid Search IDs such as Paid Search Campaign IDs can appear in
event-level CM360 reports and reports pulled through the CM360 API. An example
of an event-level report is a report containing Custom Floodlight variables. For
clients utilizing the CM360 API, the [Search Ads 360 ID Mapping service](https://developers.google.com/search-ads/v2/how-tos/reporting/id-mapping)
can help them to convert between legacy and new ID spaces.

## Consider reporting quotas

Responsible use of the Campaign Manager 360 reporting feature is enforced
through the three following product-wide usage quotas:

1. **Ad hoc report executions (per day)**

   Limits the number of ad-hoc reports a CM account / a CM user profile can run
   in a 24-hour period. To stay under quota:
   - Reduce duplicate reports.
   - Schedule reports that are run regularly.
   - Deactivate unnecessary API scripts.
2. **Active scheduled reports**

   Limits the number of reports a CM account / a CM user profile can have
   actively scheduled at a given time. To stay under quota:
   - Reduce duplicate reports.
   - Deactivate unnecessary scheduled reports.
   - Deactivate unnecessary API scripts.
3. **Simultaneous reports**

   Limits the number of reports a CM account / a CM user profile can run
   simultaneously. To stay under quota:
   - Schedule reports that are run regularly.
   - Deactivate unnecessary API scripts.
   - Implement [backoff logic](https://developers.google.com/doubleclick-advertisers/upload#exp-backoff).

If you've optimized your reporting implementation and you still find yourself
exceeding your given quota, contact Campaign Manager 360 support using the
[contact form](https://support.google.com/campaignmanager/gethelp).