Question: the team created eight ChatGPT campaigns, but the performance export contains five. Can the other three be treated as campaigns with zero impressions?
Answer: not from absence alone. A missing row can reflect the report’s inclusion rules, filters, date scope or extraction completeness. Before diagnosing why an advertisement did not serve, establish whether the report includes the campaign at all. This article is about completeness of the reporting inventory. The separate no-delivery investigation concerns operational reasons an included campaign may not deliver.
OpenAI documents an option for including zero-impression entities in an unsegmented Insights report. That is API documentation, not a claim that an equivalent control is present in every interface or in AthillyAds. If your workflow uses an export rather than an API integration, first establish what that export includes.
Build the expected list independently
Start with a campaign inventory for the relevant account. Record campaign IDs, names, creation dates and the intended reporting scope. The expected list should not be constructed from the same performance export you are checking. Otherwise campaigns omitted from the export are also omitted from the expectation, and the audit becomes circular.
Decide whether the review includes all campaigns existing during the period or only a defined operational set. A campaign created after the reporting interval should not be classified as missing delivery for that interval. A paused campaign may still belong in a historical inventory if it existed and delivered during the selected dates.
Keep this scope decision explicit. The question “Which campaigns received impressions last week?” has a different expected row set from “Which campaigns in our launch plan have recorded any impressions?” Both are useful, but they should not be answered by an unlabeled table.
Classify the result of the comparison
Join the expected inventory to the performance export using stable identifiers. Give each campaign one of three initial statuses: present with positive impressions, present with zero impressions, or absent from the report. Do not convert the third status into the second during the join.
In the hypothetical eight-campaign case, suppose four rows show positive impressions and one row shows zero. Three campaigns remain absent. The report proves only one measured zero within that extraction. The remaining three need a reporting check before anyone concludes they failed to serve.
For absent campaigns, check account scope, reporting interval, status filters and any extraction limit. If you use the documented API inclusion option, confirm that the request meets its stated conditions. Preserve the complete request settings with the result. A note saying “include zeros enabled” without the actual request is weak evidence when another analyst needs to reproduce the audit.
Three statuses, three conclusions
- Present with activity
Positive impressions establish observed delivery.
- Present with zero
The zero row can proceed to operational delivery investigation.
- Absent from report
Check scope and complete extraction before judging delivery.
Avoid changing two questions at once
Do not add country or device segmentation halfway through the inventory check and then compare the row count directly. A segmented report has a different row structure. One campaign may legitimately occupy several rows, while unsupported or absent combinations may behave differently from an unsegmented entity list.
Complete the unsegmented inventory reconciliation first. Only then investigate how delivery is distributed within campaigns that have measured activity. This order keeps a completeness question separate from a performance breakdown and prevents a growing row count from being mistaken for better coverage.
If the account contains many campaigns, verify the extraction is complete across any pagination. Paginated report checks explain why an apparently tidy first page may still omit valid entities. Zero-row handling cannot repair an export that stopped before the last page.
Turn measured zeros into an action list
Once a campaign is genuinely present with zero impressions, assign an operational review rather than a performance verdict. Record its identity, reporting dates and configuration owner. The next investigation can check intended launch timing, current setup and other relevant delivery evidence without reopening the question of whether the report included it.
Avoid rankings based on CTR for campaigns with no impressions. The denominator does not support a normal observed rate. Likewise, “worst campaign” is not a useful label when the campaign has not produced delivery evidence. A report should distinguish unavailable performance from poor observed performance.
Keep an exception owner for absent rows that remain unresolved. A reporting gap should not vanish from the next weekly review simply because no one can yet explain it. Track when the row first went missing, the checks performed and the next verification date.
What a complete audit can honestly say
A defensible conclusion is specific: “All eight expected campaigns were reconciled to the unsegmented report for this account and period; four had positive impressions and four had measured zero impressions.” Another valid conclusion is that coverage remains incomplete for three identities. Neither requires guessing at demand or blaming the creative.
Use stable campaign joins to keep the inventory reliable after renames. The source for the zero-impression inclusion behavior is OpenAI reporting, checked on 29 September 2026. This audit verifies what the report covers; it does not guarantee that any campaign should have received delivery.
Sources and scope
Reconciling the expected campaign inventory with report coverage before operational delivery troubleshooting.
Working methods and examples are editorial suggestions. Check current platform requirements and available features before implementation.
