Methodology
How SiteScan scores.
We publish the exact algorithm so publishers can debug a low score and advertisers know what the number is measuring. Nothing here is proprietary — the moat is the data we score, not the formula we use.
The three sub-systems
Each scan produces three independent sub-scores 0–100. The total is the simple average, rounded to the nearest integer.
Technical · starts at 100
Whether the page runs competing ad code, malware patterns, or popup vendors.
- Network requests matched against the fingerprints database (42 patterns: JuicyAds, ExoClick, AdSense, etc.).
- Confidence accumulates per network across all matches; threshold 60+ flags the network as detected.
- Penalty per detected network scales 10pt (just-over-threshold) to 30pt (full-confidence).
Compliance · starts at 100
Adult-network legal hygiene: age gate present, DMCA page reachable, 2257 statement linked.
- −25pt if no 18+ language found anywhere on the homepage body text.
- −25pt if /dmca and /takedown both return non-2xx.
- Future: −15pt if no /2257 page on AV/studio category sites.
Performance · starts at 100
Load characteristics that affect viewability and the publisher's user retention.
- −15pt for slow load (>6s to settle). −35pt for very slow (>12s).
- −15pt for heavy page weight (>5MB total response bytes observed).
- Future: Core Web Vitals (LCP, INP, CLS) from a Playwright performance trace.
Band cutoffs
The total score maps to one of four bands. Same labels across SiteScan (technical site state) and the publisher-quality-scores (traffic-integrity state) so a single decision applies across both signals.
| Band | Total score | Network action |
|---|---|---|
| Verified | 80–100 | Default for fresh publishers post-onboarding scan with no findings. "Verified clean" badge on the marketplace card. |
| Standard | 60–79 | No action. Visible in the marketplace; advertisers can opt into / out of this band per campaign. |
| At risk | 40–59 | Auto-warning email. Visible yellow band on the marketplace. Advertisers can exclude via campaign brand-safety setting. |
| Probation | 0–39 | Auto-suspend new impressions. Existing bookings honor their term but the auction excludes the site. |
Scan cadence
- Onboarding scan — fires on every fresh site registration, automatically. Result populates within a minute.
- On-demand rescan — publishers can request a rescan from the site detail page (one per cooldown window). Changes update the public score on completion.
- Recurring monthly rescan — planned. Today, the cadence is onboarding + on-demand; the scheduled monthly sweep lands before GA.
- Incident rescan — admin-triggered or advertiser-complaint triggered. Same scan, surfaced immediately as a one-off.
Dispute resolution
Every finding includes a remediation hint — what to do to clear it. If you believe a finding is wrong (e.g. a competing-network match is a false positive, or the scanner saw a cached version of your page), email [email protected] with the scan ID and we’ll re-run + manually inspect.
Disputes resolved either way are logged to the audit table; the remediation hint on a successfully-disputed finding is reworded for the next round so the same publisher doesn’t hit it again.
See it live
The full SiteScan breakdown — every finding, every input to the grade — sits inside the dashboard at /dashboard/marketplace/[id] once you’re signed in. Sign up to browse it against real publishers.