Made by Rune Andersen @ Copenhagen, Denmark
Piano Analytics logo

Debug Piano Analytics in Chrome DevTools

To debug Piano Analytics in Chrome DevTools, install the free Event Watcher extension and open its panel: every Piano Analytics request is captured the moment it fires, decoded by a dedicated parser into named events, readable parameters, and consent signals, and cross-referenced against the visitor's consent state. Event Watcher has listed Piano Analytics under Analytics since v1.0.0, and flags any Piano Analytics event that fires without analytics consent.

European analytics platform (formerly AT Internet) with privacy-first approach and real-time insights.

Last updated:

Category
Analytics
Detected via
Network requests: Event Watcher matches the request URLs this platform sends
Consent category
Analytics / statistics consent: Event Watcher flags Piano Analytics activity that fires without it
Dedicated parser
Yes: requests are decoded into named events, parameters, and consent signals, not just raw URLs
Supported since
Event Watcher v1.0.0 (2026-02-20)
Vendor
piano.io
Show the URL patterns Event Watcher matches
  • pa.piano.io
  • api.piano.io
  • xiti.com
  • at-o.net
  • aticdn.net

What Piano Analytics traffic looks like

Piano Analytics (formerly AT Internet, still widespread among European publishers and broadcasters) sends GET hits with the payload in the query string.

Endpoint pattern
pa.piano.io; long-lived implementations still point at the legacy xiti.com or at-o.net collection domains, with the SDK served from aticdn.net
Transport
GET requests with the payload in the query string; the modern SDK packs an events parameter carrying a JSON array like [{"name":"page.display","data":{...}}], with multiple events per hit
Key parameters
s numeric site ID · s2 level-2 sub-site · p page name, with chapter hierarchy (chapter1::chapter2::page) on legacy setups; pchap/ptype on others · idclient visitor ID
Built-in events
Event names follow a dotted taxonomy (page.display, click.action, click.navigation, publisher.impression), and each event's data object holds its custom properties
Payload
stc custom variables as inline JSON on older implementations · x1x10 numbered custom variables on the oldest · vtag/ptag SDK version and type, useful when auditing a half-migrated setup

A decoded events parameter, as Event Watcher shows it:

[
  { "name": "page.display", "data": { "page": "forside", "page_chapter1": "nyheder" } },
  { "name": "click.navigation", "data": { "click": "menu_abonnement" } }
]

Debugging Piano Analytics with Event Watcher

  • Recognizes both the modern pa.piano.io endpoint and the legacy AT Internet domains. European publisher sites frequently run mid-migration with both shapes live.
  • The parser pulls the event name out of the events JSON array, falling back to the page or rich-media action for legacy hits.
  • Nested data objects, stc custom variables, and x1x10 slots decode into labeled tables, with site ID, page, chapters, and visitor ID included.
  • Multi-event hits split out per event, the difference between auditing a page in minutes and an afternoon of reading url-encoded JSON-in-a-query-string by eye.

Piano Analytics and consent

Analytics consent

The extension checks Piano Analytics against the analytics consent category. Piano's SDK ships its own consent framework, with an exempt/hybrid mode aligned to the French CNIL's audience-measurement exemption.

Many French and Benelux publishers rely on it to measure pre-consent legally. Exempt-mode hits still flow to the same endpoint, so Event Watcher marks them pre-consent all the same.

Whether that is a violation or the intended CNIL-exempt behavior is a judgment call the decoded hit lets you make explicitly rather than by assumption.

Common debugging scenarios

  • Hits split across old and new domains. Filter to Piano and check which endpoint each page section uses. Mixed xiti.com and pa.piano.io traffic usually means a stalled migration, double-counting nothing but confusing everyone.
  • Wrong site ID per country section. Scan s across pages in Grouped view; multi-country publishers routinely cross wires here.
  • click.action missing custom data. Open the parsed event and check the data object as sent, not the report.
  • Chapter hierarchy garbled. Read p/pchap values directly to see where the :: separators break.
  • Pre-consent measurement review. List every Piano hit fired before the CMP grant and reconcile against what the CNIL-exempt config is supposed to allow.

See Piano Analytics traffic on your own site

Free, no account, runs entirely inside Chrome DevTools.

Add to ChromeFree on the Chrome Web Store

Related guides

More analytics platforms