Overview

AdPriva gives every page view on a publisher’s site a signed, scored receipt. It anchors those receipts on a public blockchain so that anyone can re-check them later.

Components

ComponentWhere it runsWhat it does
AdPriva TagThe publisher’s pages, loaded from cdn.adpriva.com/tag.js (older embeds: cdn.adpriva-ads.com/tag.js)Renders nothing and sets no cookies. Sends one view event per page load with aggregated behavioural signals. Witnesses consent on forms the publisher marks.
Ingest serveringest.adpriva.com, and server.adpriva-ads.com for tags loaded from cdn.adpriva-ads.com (one service, two hostnames)Receives events, refuses replayed nonces, seals each event with an HMAC and stores it. Scores each view proof.
Scoring serviceInternal, called by the ingest serverRuns the behaviour (L2) and agent-identity (L3) checks in shadow mode. Its result is kept privately and does not change the public verdict.
Anchor workerInternalEvery 5 minutes, groups new proofs into a Merkle tree and anchors the batch root on Horizen.
APIapi.adpriva.comPublic verification endpoints, and the signed-in endpoints behind the console and the WordPress plugin.
Consoleconsole.adpriva.comWhere a publisher sees its own proofs, verdicts and traffic reports, and downloads certificates.
Explorerexplorer.adpriva.comPublic, read-only lookup of a proof, a batch or an anchor. No login.
WordPress pluginThe publisher’s WordPress siteConnects the site to AdPriva, loads the tag, and shows a traffic summary in wp-admin.

Data flow for a page view

  1. A visitor opens a page. The tag loads and starts keeping aggregate counts: foreground dwell time, scrolls, clicks, pointer speed and automation hints.
  2. About one second after the page loads, the tag sends one view event with the counts so far to the ingest server. The event carries a one-time nonce.
  3. The server refuses the event if its nonce was already used. Otherwise it signs the event with an HMAC. The signature becomes the proof id.
  4. The server scores the event from its user agent (L0) and the class of its IP address (L1), and stores that validity score and verdict with the proof. These are the public score and verdict. The scoring service then runs the behaviour (L2) and agent-identity (L3) checks and keeps its result privately. AdPriva runs in shadow mode, so no proof is blocked because of its verdict.
  5. On its next 5-minute run, the anchor worker puts the proof in a batch and anchors the batch’s Merkle root on Horizen.
  6. The publisher sees the proof and its verdict in the console. Anyone who has the proof id can look it up in the Explorer or the public API, and check it against the on-chain root.

See Event Lifecycle for each step in more detail.

The same tag can witness consent. A form marked data-adpriva-consent produces a consent certificate. A form that declares a registered Legal Bundle (data-adpriva-bundle) produces a Consent Evidence certificate. Both are sealed on the server and anchored on Horizen. See Consent Certificates — Quickstart and Consent Evidence — Integration.

Design properties

  • No cookies or cross-site identifiers. The tag sets no cookies and does not try to recognise a returning visitor.
  • Signed and anchored. Every proof is sealed with an HMAC, and every batch root is anchored on Horizen. The anchored root fixes which proofs are in each batch. For a view proof it does not cover the score, the verdict or any other field; only the HMAC seal, which AdPriva alone can check, covers the sealed fields.
  • Public check, private reports. The public record shows a proof’s id, status, score and verdict. It never shows the publisher, site, page or visitor. Per-site reports are only in the signed-in console.
  • Shadow mode. Verdicts are recorded and published, but they do not block anything yet.

Diagram

{% @mermaid/diagram content="flowchart LR
T\[AdPriva Tag on a publisher page]
S\[Ingest server: seal and score]
D\[Database]
W\[Anchor worker: batch every 5 minutes]
H\[Horizen: Anchored event]
A\[API]
C\[Console: your own traffic]
X\[Explorer: public lookup]

T -->|view event| S
S -->|sealed proof| D
D --> W
W -->|Merkle root| H
D --> A
A --> C
D --> X" %}