RevenuADSIGNAL
HomeCategoryMethodPricing
3 provenance tiers · 5 channels we cannot see · 1 of them namednothing here is unmarked

Method

Every number carries its own receipt.

Three tiers, three marks. A figure we counted does not look like a figure we estimated, and neither looks like a figure a platform handed us. You should be able to tell which is which from across the room — before you read a word.

The rule
Observed
Modelled
Reported

Solid, hatched, dotted. Square, rule, and figure shape all move together — a mark is never decorative.

The three tiers

what each mark promises you
Observed
3,411

We counted it ourselves.

A placement we saw with our own scan, on a named date. No interpolation, no vendor feed. If the count is wrong, it is our fault and we can show you the run.

  • ■ Every figure carries its scan date
Modelled
$243–456K

We show our exact maths, source and all.

Built from a third-party ad library's own spend estimate. The Meta rate is now an observed CPM, weighted by real impressions across four live campaigns from one advertiser, not a chosen constant -- every other channel's rate is still ours, chosen without a live campaign to check it against. It's net media cost only: platform, tech and data fees are not included.

  • ▨ The Meta rate reflects one advertiser's four campaigns, not a broad calibration -- an observation, not a fit
  • ▨ The band is our own chosen ±30% around the midpoint, not a measured uncertainty
  • ▨ Where the source gives no variance, we show one number, not an invented range
Reported
08/01/2026

The platform said so. We did not check.

Useful, and borrowed. Start dates, disclosure labels, advertiser names. We pass it through unchanged and mark it, so its weight is never mistaken for ours.

  • □ Source named at point of use
  • □ Unverified by us, by design

Two kinds of nothing

these must never look alike
scannednone found
0

We looked. There was nothing there.

A solid cell holding a real zero. This is a finding — it survives a client meeting, and you can build an argument on it. Absence, counted and dated.

■ Solid border · full-strength figure · timestamp attached

not scannedno visibility

We haven't looked. Don't read this as zero.

A dashed cell holding an em dash. There may be a great deal of activity here — we simply cannot see it yet. Rendering this as a zero would be the single most damaging thing the product could do.

□ Dashed border · em dash, never a digit · no timestamp to give

What we haven't measured

the list we keep in public
TikTok
Not scanned at all
□ No API access · row stays dashed until it changes
4
Channels covered of an estimated nine
■ Meta, Search, YouTube, Display
5
Brands in banking, not the whole category
■ Neobanks and mutuals not yet indexed
Creative performance signals
□ We count presence, not effect — we cannot see spend outcomes

A gap we've named is worth more than a number we've guessed.

This list grows before it shrinks. When we start scanning a channel, the row stops being dashed and starts carrying dates — and we say so on the day it changes, not in a quarterly note.

When a figure can't declare a tier

the slot stays empty
Est. spend · TikTok · all brands
tier: none
  • □ no observation to count
  • □ no basis to model from
  • □ nothing reported to us
Withheld — no tier can be claimed

If it can't be marked, it doesn't ship.

A metric that can't say where it came from has no place on the page. We leave the slot open and label the refusal, rather than filling it with a plausible-looking figure that nobody can defend.

  1. 01No tier, no publish — the slot renders empty and labelled.
  2. 02An unknown never degrades into a zero, in any view or export.
  3. 03When coverage arrives, the mark changes on that day and the date is stated.