A missing advertising metric and a measured zero require different decisions. A zero conversion count may justify investigating the customer journey. An unavailable conversion count first requires investigating the measurement. Treating both as zero turns an information problem into an apparent performance problem.
OpenAI’s reporting documentation explicitly distinguishes null from zero. A null metric is unavailable or cannot be calculated. This article turns that distinction into a reporting method you can apply to exported ChatGPT Ads data. The examples are hypothetical and concern your own analysis, not additional functionality claimed for AthillyAds.
Give each state a readable label
A useful reporting table distinguishes at least four states: a measured value, a measured zero, an unavailable value and a value that is not applicable. A fifth state, still awaiting verification, can help during an incident. Do not use the same blank cell for all of them.
For example, “0 purchases” tells the reader what the available count says. “Purchase count unavailable” says the count cannot currently support a decision. “ROAS not calculated because spend is zero” explains a denominator problem. These labels take slightly more space than a dash, but they prevent an executive from interpreting an empty cell as a failed campaign.
Keep the raw value alongside the display label in your data pipeline. Formatting an unavailable value as “N/A” is useful for readers, but replacing the underlying value with the text “N/A” can create problems for later numeric calculations. The display layer and the calculation layer have different jobs.
Follow the numerator and denominator
Consider three hypothetical campaigns. All amounts use the same account currency in major units, with spend and sales measured over the same scope:
| Campaign | Spend | Attributed sales | Interpretation |
|---|---|---|---|
| A | 100 | 0 | Observed ROAS is zero if sales coverage is complete |
| B | 100 | unavailable | ROAS cannot be calculated from these inputs |
| C | 0 | 200 | Division by zero prevents a conventional ROAS calculation |
Only campaign A has the inputs for a numeric zero. Campaign B may have sales that have not been reported or values that were never sent. Campaign C has a mathematical denominator issue. Giving all three a zero hides the difference between no recorded return, missing revenue information and an undefined ratio.
Before calculating a derived metric, validate both operands. A spreadsheet formula that catches every error and returns zero may produce a neat-looking table while concealing exactly the problems you need to see. Return a meaningful status instead, and keep an exception list for rows that need attention.
Which gap is present?
- Measured zero
Positive spend and complete outcomes with zero purchases can give zero ROAS.
- Missing purchase value
Unknown revenue cannot support a calculated return.
- Zero spend
Division by zero needs an explained status, not an invented ratio.
Decide whether a portfolio total is complete
Suppose campaign A reports 500 in sales and campaign B has an unavailable sales value. Adding the known values gives a known subtotal of 500 in reported sales, but it does not establish a complete account total. Label it “known reported sales” or withhold the portfolio comparison until coverage is confirmed.
The same principle applies to averages. Ignoring unavailable rows can make the reported performance look better or worse depending on which rows disappeared. Show the number of included campaigns and the share of known spend covered by the calculation. Coverage information helps a reader understand the limits of the number without inventing the missing outcome.
Do not automatically discard measured zero rows. Removing them from a conversion-rate analysis can bias the result upward. Missing rows and genuine zero-result rows deserve separate handling, even when both make a chart look less tidy.
Use a short diagnostic sequence
Start by asking whether the raw response contains the metric, a null value or no row at all. These are distinct observations. Then check whether the requested field, scope, date range and reporting source match the question. A filtered report that excludes an entity is not evidence that the entity had no results.
Next inspect dependencies. A return metric needs a purchase value and a spend amount. A rate needs a denominator. If those inputs are present, compare the same period with the same reporting settings before escalating a suspected calculation defect. Record the raw response and retrieval time so the next analyst can reproduce what you saw.
For recent data, mark the observation provisional and refresh it according to an agreed schedule. Do not silently overwrite an earlier executive report and leave readers unable to explain why the numbers changed. Report snapshots provide a useful audit trail.
Agree what the team will do
Assign an owner to unresolved measurement gaps. The campaign operator might investigate delivery, while an analyst checks the extraction and a developer checks purchase-value instrumentation. A single “bad performance” ticket blurs these different responsibilities.
In a weekly report, show the measured result, coverage limitation and next action together. For example: “Campaign B has 100 in recorded spend; purchase value is unavailable; the event payload will be checked before profitability is assessed.” This avoids both false reassurance and an unsupported claim that the campaign produced no sales.
The practical standard is simple: preserve uncertainty until evidence resolves it. For adjacent checks, read weighted CTR and different update times for clicks and costs. The platform’s null-value definition is documented in OpenAI reporting.
Sources and scope
Interpreting unavailable metrics and incomplete totals before judging campaign performance.
Working methods and examples are editorial suggestions. Check current platform requirements and available features before implementation.
