Independent verification

Your ad server says
it delivered.
We check.

AdProof measures every impression independently of the platforms that sell it, classifying invalid traffic, confirming the creative rendered, and validating that delivery matched what you bought. Across CTV, OTT, in-stream video, and the web.

0B
Ad delivery events measured
0%
Of gross impressions removed before billing
0%
Share of media spend we take

Every campaign on the platform, 30 March to 10 August 2026

Verification dashboard
Live
The AdProof verification dashboard, with client identifiers obscured
Client data obscured
Measured
805.4M
Net
714.2M
Removed
11.32%
Measuring across
In-stream videoCTV & OTTMobile webOpen web
01 – The gap

Every party in the chain counts the same impression differently.

The DSP counts a win. The exchange counts a served creative. The publisher counts a page event. None of them are measuring whether a person could actually see the ad, and none of them are neutral, because each is paid on the number it reports.

AdProof introduces a fourth count that answers to the buyer. One measurement, applied identically to every channel, reconciled against the invoice.

Reconciliation – every campaign measured, 30 March to 10 August 2026
Gross impressions measured805,447,230
The impression share of 1,138,414,303 delivery events. The rest are clicks, video starts, quartiles, and completes.
Net after general invalid traffic792,164,432
13,282,798 matched GIVT signatures and came out of the count.
Counted once, after duplicate removal714,246,106
77,918,315 were the same impression counted more than once.
Removed before billing91,201,124
02 – How it works

Five checkpoints between the impression and the invoice.

Each stage produces its own record. Every impression carries the chain of those records, which is what makes a discrepancy arguable rather than anecdotal.

01
Collect
A tag, SDK, or VAST wrapper reports every delivery event from the client itself, independent of the server that served it.
OUT – measured event
02
Classify
Each impression is scored for general and sophisticated invalid traffic, and every exclusion carries the rule that caused it.
OUT – validity verdict
03
Exposure
Render, pixel geometry, and video quartiles are sampled through the exposure window rather than checked once at the start.
OUT – exposure record
04
Validate
Geography, daypart, and segment are checked against the insertion order, with a reason code on every miss.
OUT – match verdict
05
Reconcile
Verified counts are diffed against the ad server and the invoice, and the difference is filed as a discrepancy.
OUT – discrepancy report
03 – What we measure

Definitions you can hold a vendor to.

All solutions →
IVT
Invalid traffic
General and sophisticated invalid traffic reported separately and counted against gross, never blended into one rate. 13,282,798 impressions have come out as GIVT to date, each carrying the reason code that removed it.
GIVTSIVTReason codesData-centre
Delivery
Served against measured
Gross, filtered, and net on the same impression, per campaign and per source. Of 805,447,230 gross impressions measured, 714,246,106 survived invalid-traffic filtering and count-once deduplication.
GrossNetCount once
Geography
Where it actually landed
Every impression resolved from world to country to state to city, and held against the geography the campaign was booked for. 185 countries, 1,020 states and regions, and 8,028 cities resolved so far.
CountryStateCity
Targeting
Delivery match
Whether impressions landed against the geography and the plan on the insertion order, reported as a match rate with a confidence level rather than a yes or no. 2,500,069 impressions have landed outside the target.
ExactPartialMismatch
Frequency
Reach and frequency
Unique reach with duplicate exposure collapsed, plus the frequency distribution behind it, so a reach figure means people rather than cookies.
Unique reachDedupDistribution
Supply
Source quality
One row per observed source with volume, valid share, invalid rate, and target match. About 21,999 apps and sites across 4,985 networks observed to date, including delivery from supply that was never on the plan.
Valid shareIVT rateOff-plan

Four of the surfaces, as they ship.

Obscured for client confidentiality
app.adproof.io / dashboard / fraud
The fraud and invalid-traffic dashboard, with client identifiers obscured
Fraud & IVT
Invalid traffic, split by class

GIVT and SIVT counted separately against gross, with an impression timeline, decision rate, and per-source breakdown rather than one blended percentage.

app.adproof.io / dashboard / geo
The geography dashboard showing state-level delivery, with client identifiers obscured
Geo
Delivery down to the city

Drill from world to country to state to city, with impressions, clicks, and video completes at every level of the hierarchy.

app.adproof.io / dashboard / sources
The source quality table, with source names obscured
Supply
Every observed source, ranked

One row per source id with volume, valid share, invalid rate, viewability, and target match, plus an at-risk list surfaced above the table.

app.adproof.io / reports / quick
The reports and exports screen, with client identifiers obscured
Exports
Presets and raw event exports

Executive summary, inventory quality, geo delivery, MRC IVT compliance, or a line-by-line event file, on any window you choose.

04 – Independence

We do not sell media. That is the entire product.

AdProof takes no revenue share on media, operates no marketplace, and holds no equity relationship with any DSP, SSP, or publisher we measure. Our detection rules are versioned and dated, and a change that moves reported rates is documented before it ships.

When a seller disputes a flag, they get the same impression-level evidence the buyer got. Both sides argue from one record.

How the measurement works →
OwnershipNo DSP, SSP, publisher, or agency holding company holds equity in AdProof.
Revenue modelA flat platform fee on measured volume. No percentage of media, ever.
MethodologyCounting, filtration, and viewability methodology is documented in full and shared with clients.
Detection rulesVersioned and dated. Changes that move reported rates are documented before they ship.
DisputesDiscrepancies follow a documented resolution process, and the seller sees the same impression-level evidence the buyer sees.
05 – Coverage

What is measurable where, stated plainly.

Not every metric exists in every environment. Vendors who claim otherwise are modelling. We do not model. Every figure below is either an observed signal or it is reported as unmeasurable.

Metric
CTV & OTT
In-stream video
Mobile web
Open web
Impression delivery
DIRECT
DIRECT
DIRECT
DIRECT
Invalid traffic
DIRECT
DIRECT
DIRECT
DIRECT
Duplicate detection
DIRECT
DIRECT
DIRECT
DIRECT
Video completion
DIRECT
DIRECT
DIRECT
N/A
Geo validation
DIRECT
DIRECT
DIRECT
DIRECT
Target match
DIRECT
DIRECT
DIRECT
DIRECT
Reach and frequency
DIRECT
DIRECT
DIRECT
DIRECT
Viewability
N/A
N/A
N/A
DIRECT
DIRECT – observed signalN/A – reported as unmeasurable, never modelled

Viewability needs a client-side measurement hook. Almost everything we measure today is in-stream video in CTV, OTT, and mobile web environments, where that hook does not run, so viewability is reported as unmeasurable rather than modelled into a number that fills the gap.

Measurement principle

“Every number in this product resolves to the impressions behind it. A figure that cannot be opened and inspected does not belong in a report, and a blind spot is worth more stated than modelled.”

How AdProof reports, by design
13,282,798
Impressions removed as general invalid traffic, counted against gross rather than sampled
77,918,315
Duplicate impressions collapsed, so one delivery is counted and billed once
8,028 cities
Delivery resolved across 185 countries and 1,020 states and regions
Read the case studies →

Start with one campaign.
See what the log says.

Measure a single campaign alongside your ad server and compare the two numbers. No integration fee, and no obligation to continue.