Where every number comes from
Every number in a deliverable can name where it came from. This is the machinery that makes that true, and what happens when a number simply is not available.
The four rungs
Section titled “The four rungs”For each individual metric, a skill resolves it on a ladder, stopping at the first rung that works:
| Rung | Source | What gets carried into the deliverable |
|---|---|---|
| 1 | A connected tool (your Meta connector, for instance) | Tool name, the window, the pull timestamp |
| 2 | Your own API key against a script | Script, key name, pull timestamp |
| 3 | A dated export you produced by hand | The file and its export date |
| 4 | NO-DATA | What is missing and the manual path to get it |
It resolves per metric, not per source. A normal run sits on several rungs at once, and that is fine rather than degraded. The alternative, dropping a whole data source because one field inside it is missing, throws away good data.
What NO-DATA looks like in practice
Section titled “What NO-DATA looks like in practice”This is the part that keeps a hole honest. A metric that lands on rung 4 does not get dropped from the report and does not get a substitute. The row ships with the gap labelled and everything derived from it withheld:
| Flow | Reach | Value band | Priority score |
|---|---|---|---|
| Browse abandonment | NO-DATA — trigger-event counts not available on this rung; task raised | $2.10 to $4.40 | NOT RANKED — reach term absent |
Three things are true of that row at once: you can see the flow exists, you can see exactly which input is missing, and you cannot mistake it for a ranked recommendation. A blank cell, a dash, or a quietly deleted row would each fail at least one of those.
The setup message
Section titled “The setup message”When a required number falls to rung 4, you do not get a refusal. You get five specific things:
SETUP NEEDED — Klaviyo
Missing: KLAVIYO_API_KEYGet it: Klaviyo → Settings → API Keys → create a read-only keyThis run: Flow revenue rows go NO-DATA. Deliverability and the flow map still complete.Instead: Export the flow performance CSV and I'll read that.
Want me to proceed with the CSV path?What is missing, the exact identifier, where to get it, what this run degrades to, and the next best move. A message missing any of the five is not a setup message, it is a refusal.
Which account is this, actually
Section titled “Which account is this, actually”Sourcing a number correctly says nothing about whether it describes the right account. A perfectly sourced, fully evidenced report about somebody else’s ad account fails silently and cleanly: every pull succeeds, every gate passes, and nothing looks broken.
So every account-scoped skill:
- Binds its account from the identifiers recorded during onboarding.
- Confirms by rendering the account name as the platform itself reports it, next to the brand you said, before any verdict rests on it.
- Stops and asks if the stored name and the live name disagree, rather than silently updating.
This is why the first line of an audit is often “confirmed as Example Brand LLC (act_1234…)”. A near name-match is otherwise indistinguishable from the real thing.
What this means for you day to day
Section titled “What this means for you day to day”- Connect what you can, once. Identifiers get recorded and inherited, so later skills stop asking.
- A
NO-DATArow is a to-do, not a bug. It names the one thing that would unlock it. - Read the confirmation line. It takes two seconds and it is the check that prevents an entire report being about the wrong account.
- Export paths work. If an API is not available, a dated CSV is a legitimate rung.
Related
Section titled “Related”Gates and verdicts explains why NO-DATA blocks. Your files covers where identifiers get recorded.