webtracking.org
tools

Decode analytics beacons: read GA4, Adobe, and Meta Pixel hits in plain English

Paste a GA4, Universal Analytics, Adobe Analytics, or Meta Pixel request into a free client-side decoder and see every parameter explained in plain English.

last verified 2026-07-18

Open DevTools on any commercial site, filter the Network tab to collect, and you’ll see the raw truth of your analytics implementation: a wall of query strings like en=purchase&tid=G-ABC123XYZ&gcs=G111&ep.transaction_id=T-9921. That request — the beacon — is what actually reaches Google, Adobe, or Meta. Not what your tag manager preview claims, not what the dataLayer promised: this. If you QA tracking for a living, you read beacons constantly, and most of the parameters are two-letter abbreviations documented in five different places (or nowhere).

The Analytics Beacon Decoder turns that wall of text into a labeled table. Paste a request URL, a bare query string, or a GA4 POST body, click Decode, and every parameter gets a plain-English name and a note on what it means. It auto-detects whether the hit is GA4, Universal Analytics, Adobe Analytics, or Meta Pixel, and it runs entirely in your browser — nothing you paste is sent anywhere, and the page works offline.

What it does

  • Accepts messy input. A full beacon URL, a query string with or without the leading ?, a bare a=b&c=d fragment, or an x-www-form-urlencoded POST body. GA4 batch bodies with one event per line are split into individual rows, and blocks separated by a blank line are decoded as separate beacons — so you can paste several hits at once.
  • Auto-detects the vendor. Each block gets a pill identifying it as GA4 / Measurement Protocol, Universal Analytics (legacy), Adobe Analytics, or Meta (Facebook) Pixel. Anything it can’t classify still gets a raw key/value decode under a “generic” label.
  • Summarizes the hit. A one-line summary above the table shows the essentials: for GA4, the event name and Measurement ID; for UA, hit type and tracking ID; for Adobe, the report suite (pulled from the /b/ss/ path) and page name, plus a link-tracking flag when pe is present; for Meta, the event and pixel ID.
  • Explains every parameter. Each row shows the raw key, its human name, the URL-decoded value, and a note — e.g. gcs becomes “Consent state (gcs)”, mid becomes “Experience Cloud ID (ECID/MCID)”, seg becomes “Session engaged: 1 = engaged session”.
  • Unpacks Adobe’s compound strings. The events list and the semicolon-delimited products string get their own decoded sections instead of one unreadable cell.

How it works

Everything runs in a single page of client-side JavaScript; there is no server component.

Parsing. The input is trimmed, an https?:// prefix (if any) is captured as the request path, and the rest is split on & and newlines into ordered key/value pairs. Order and duplicates are preserved — useful when a hit sends the same key twice. Values are decoded with decodeURIComponent (with + treated as a space) inside a try/catch, so malformed encoding shows the raw value instead of breaking the decode.

Vendor detection is rule-based, checked in order:

  1. Adobe if the path contains /b/ss/, or the params include AQB, or pageName appears alongside events or v0.
  2. Meta if the path matches facebook.com/tr, or the hit has both ev and id but no tid.
  3. GA4 if v=2, the path contains /g/collect, or an en (event name) param is present.
  4. Universal Analytics if v=1, or both t (hit type) and tid are present.
  5. A google-analytics host with none of the above falls back to UA or GA4 based on v; anything else is decoded generically.

Dictionaries. Each vendor has a curated dictionary of its most common real-world parameters — around 27 for GA4 (including consent and privacy signals like gcs, gcd, dma, and pscdl), 21 for UA, 45+ for Adobe (from AQB/AQE markers through mid, aamlh, and mcorgid), and 14 for Meta. Keys not in a dictionary aren’t dropped; they’re flagged “unrecognised” with their decoded value intact.

Pattern rules handle the parameter families that can’t live in a fixed dictionary:

  • GA4: ep.* / epn.* (string and numeric event parameters), up.* / upn.* (user properties), and pr1prN (ecommerce items).
  • Adobe: c1c999 → props (traffic variables), v1v999 → eVars (conversion variables), h1h9 → hierarchies, lN → list variables.
  • UA: cdN custom dimensions and cmN custom metrics.
  • Meta: cd[...] custom data and ud[...] advanced-matching user data — the latter annotated with a reminder that those values should be SHA-256 hashed.

Adobe deep decode. The events value is split on commas, each event mapped to a label (scAdd → “Cart add”, purchase → “Purchase”, and so on), with =value amounts and :id serialization suffixes called out separately. The products string is split on commas and semicolons into a table with columns Category, Product, Quantity, Price, Event incrementors, and Merchandising eVars — the six-slot syntax that trips up nearly everyone reading a raw Adobe hit.

How to use it

  1. Open the page you’re auditing, open DevTools → Network, and filter for the collection endpoint: /g/collect (GA4), /b/ss/ (Adobe), or facebook.com/tr (Meta Pixel).
  2. Right-click the request and copy its URL (or, for a GA4 POST, copy the request payload).
  3. Paste it into the decoder and click Decode — or press Ctrl/Cmd+Enter in the textarea.
  4. Read the summary line first (right event? right property or report suite?), then scan the table for missing, empty, or unrecognised parameters. Empty values are explicitly marked “(empty)”.
  5. A collapsible “raw input” section under each result keeps the original string for reference, and Clear resets the page.

Not near a live site? The GA4 sample, Adobe sample, and Meta sample buttons load realistic purchase beacons — a GA4 purchase event with ep./epn. parameters, an Adobe hit with events, a two-product products string, props and eVars, and a Meta Purchase with cd[value] and a hashed ud[em] — so you can explore the output format immediately.

Limitations

  • Curated, not exhaustive. The dictionaries cover the most common real-world parameters per vendor. Rare, new, or vendor-internal keys show up as “unrecognised” — decoded, but unnamed.
  • Key/value payloads only. The parser handles URLs, query strings, and form-encoded bodies. A JSON payload (for example, a server-side Measurement Protocol request body) won’t split into pairs and won’t decode.
  • Heuristic detection. Vendor identification is rule-based, so a stripped-down or proxied beacon (say, a first-party endpoint with renamed paths) can land in the generic bucket even when it originated from one of the four supported vendors.
  • Decoding, not validation. The tool explains what was sent; it doesn’t check values against your tracking plan, verify the hit was accepted, or capture beacons from a live page — you bring the request, it brings the translation.

FAQ

Is anything I paste uploaded? No. The decoder is a single static page with no network calls; the parsing and dictionaries all run in your browser, and the page works offline. Beacons can contain identifiers like client IDs and hashed emails, so client-side-only handling is the point.

Which formats can I paste? A full request URL, a query string (with or without ?), a bare key=value&key=value fragment, or a GA4 POST body with one event per line. Separate multiple beacons with a blank line to decode them all in one pass.

What does “unrecognised” mean next to a parameter? The key isn’t in the curated dictionary for the detected vendor. Its value is still URL-decoded and displayed — it just doesn’t get a plain-English name.

Can it read Adobe props, eVars, and the products string? Yes. cN/vN keys are labeled as the matching prop/eVar, and the events and products values are expanded into their own decoded sections, including per-product quantity, price, and event incrementors.

Does it decode Universal Analytics hits, given UA is sunset? Yes — UA’s Measurement Protocol v1 dictionary is included because legacy hits still show up in old implementations, historical HAR files, and measurement-protocol integrations you’re migrating.