Series
First-Party Data Part 3/5
1/6/2026

First-Party Data in Online Advertising, Part 3: Debugging – How to Verify Everything Work

Part 3 of our first-party data series gets technical again – we'll show you how to check that data is correctly reaching each system and doing what it should. We'll look at outgoing hits in DevTools and at checks directly in the ad platforms.

First-Party Data in Online Advertising, Part 3: Debugging – How to Verify Everything Work

In the first two parts of this series, we explained why first-party data matters for campaign performance and how to send it from your website through server-side GTM to the ad platforms. Today, we'll look at how to verify that everything actually works.

Personal data flows from your form into the data layer, and you’re passing it via variables to both Google and Meta. You’ve already confirmed in GTM Preview mode that user_data is leaving your server-side GTM and that all the user parameters in your tags are populating beautifully – so you’re done.

Unfortunately, even when everything looks fine in GTM – tags fire and data goes out – things can still go wrong: the format, the hashing, incorrectly named parameters… For your implementation to actually improve your results and campaigns, it’s essential to check, in every system, how the data arrives and whether it’s being processed correctly.

Checking outgoing hits – the right tools

Put simply, every tag in GTM sends out a signal when it fires = a hit = a packet of information in a specific format that the platform can recognize and read. That’s exactly why the information needs to leave in the correct format – otherwise the invalid parts get discarded or, worse, in some cases they prevent the entire packet from being processed. For example, the Google Tag only recognizes personal data in the structured user_data object format; if it received data formatted the way Meta requires it, it wouldn’t process it and would accept no first-party data at all.

You can check the sending of this hit (= packet) from the user’s browser yourself. We’ll be using DevTools, available in Google Chrome, but other browsers have their own alternatives (Safari has Web Inspector; Edge and Opera have Chromium-based Developer Tools; and Firefox has its own Developer Tools, historically known as Firebug). You can also use the excellent mitmproxy (great for mobile debugging, for example).

On top of that, you also need to check the outgoing hit from server-side GTM – and for that, Preview Mode is all you need.

All tags (whether in the browser or on the server) send hashed values of the email address and phone number (the postal address may or may not be hashed depending on each platform’s requirements – Facebook requires it, Google doesn’t). Check what the hash of your test email should look like: hash it yourself at https://emn178.github.io/online-tools/sha256.html so you can compare it against what’s actually leaving in the requests. Use UTF-8 as the input encoding (generally the best choice for accented characters) and Hex (lowercase) as the output encoding.

Debugging in DevTools

Personally, I like to check everything at once, so I work through it alongside GTM in this order:

  1. Open sGTM and start Preview Mode
  2. Open the front-end GTM and start Preview Mode
  3. Walk through the site up to the conversion I want to send first-party data with, and just before submitting it (completing the purchase, submitting the form), open DevTools
  4. Open the Network tab and submit the conversion
  5. Filter the requests by the request URL (the URL the hit is sent to):
  6. Click the request and look either at the full request URL in the “Headers” section (I often use Claude to decode the request into a neat table for me), or at “Payload”, where the individual parameters and their values are displayed more clearly.
  7. Meta debugging:
    • I check that I’m looking at the right request by matching the event name in the “ev” parameter – e.g., ev with the value Purchase.
    • I check the user data parameters being sent – they start with “ud”.

The Meta tag doesn’t only send user data hashed – it can actually appear in up to 4 formats (depending on the pixel version and event type):

cud (masked plaintext), ncud (normalized masked), ud (hashed), aud (additional hashed copy).

It looks like this:

Example of parameters in a network request for the Meta Pixel

What you’re primarily interested in is the parameter with the ud prefix for the values [em] = email, [pn] = phone number, [fn] and [ln] = first and last name, [external_id] = your CRM user_id – compare these against the hashes of your test values.

8. Google Ads debugging:

  1. I verify I’m looking at the right request by comparing the conversion label from Google Ads with the value in the “label” parameter
  2. I check that user data is being sent in the “em” parameter:
Example of parameters in a network request for the Google Ads tag.

You’ll find the email hash after “tv.1~em.”, the phone number after “~pn.”, and so on – again, you can compare these against your hashed test values.

IMPORTANT! Seeing a different hash in Meta and Google for the same email? That’s fine – remember that the two platforms have different normalization rules, which we covered in the previous article.

Debugging in sGTM Preview Mode

  1. Open sGTM and start Preview Mode
  2. Open the front-end GTM and start Preview Mode
  3. Trigger the conversion you want to send first-party data with
  4. First, check the Event Data tab to confirm that the user_data field is present.
  5. Find the fired tag for the given platform and inspect its request body.

Meta:

  • Just like in DevTools, you’ll find it under the “em”, “pn” (etc.) parameters.
Request body of an sGTM hit to the Meta Pixel
  • Make sure the value being sent matches the one from the browser.

Google Ads:

  • The Google Ads tag behaves a bit differently in sGTM than other tags – because it wants to collect cookies, the server tag triggers a request in the browser:
HTTPS request from the browser in server-side GTM Preview Mode
  • Copy it and debug it in your notes app or with Claude – again, look for the hashes in the “em” parameter after the “tv.1~em.” value.

Other debugging tools

Here are a few useful tools you can use to verify that everything is going out as it should:

  • Test Events within the Meta Pixel (Events Manager > Test Events)
    • For CAPI, this is the key tool – it shows in real time what the server tag is sending, including all parameters.
  • Tag Assistant (Chrome extension)
    • Google’s tool for checking web browser events
  • Meta Pixel Helper (Chrome extension)
    • Meta’s tool for checking web browser events
Verifying in Google Ads

But how do you know it’s actually working?

  1. Google Ads > Goals > Conversions > Summary
  2. Select the conversion you’ve started sending user_data with
  3. In the “Status” column, hover over the “Active” status (or whatever status you have there) – if you’ve done everything right, you’ll see “Enhanced Conversions is active”.

Note: it can take several days for changes to show up. If you run into an error, fix it, debug it, and then wait a few days – the difference won’t appear in the diagnostics immediately; it can take several days up to a week.

Conversion status in Google Ads

Then scroll further down to “Go to diagnostics” to check your coverage and match rate:

Impact of Enhanced Conversions in the conversion overview in Google Ads

Unfortunately, Google won’t tell you exactly what percentage of users are being matched, but it will signal that everything is running as it should via “High 16% – 100%”. Coverage should be 100% = personal data arrives with every conversion.

Verifying in the Meta Pixel

The Event Match Quality score in Meta.

  1. Meta > Events Manager > Datasets > Pixel
  2. Select the conversion you’re sending user_data with
  3. If you’ve set everything up correctly, under “Advanced Matching Activity” you should see something like this:
Event detail in the Meta Pixel

Click “View details” at the bottom right and go through the individual metrics for the event. What interests you most is the “Event Match Quality” section, specifically “Shared parameters”, where you’ll see the coverage of the “Customer Information” parameters – i.e., exactly the email, phone number, and other personal data:

Personal data coverage for an event in the Meta Pixel

Ideally it will look something like this and you’ll get an Event Match Quality score of 9.3/10, which is Meta’s recommended value for optimal paid-advertising performance. Reaching results that high isn’t standard, though – the usual benchmark sits between 8 and 9.

To get there, you need Meta CAPI implemented and you need to genuinely send as many of these parameters as possible.

What if it doesn’t work?

The most common problems:

  • Coverage is low → user_data isn’t in the data layer for all conversions, or it only populates on a thank-you page that has no data
  • Match rate is “Low” → incorrect normalization (typically Gmail dots or a + alias, or a phone number without the country prefix)
  • Hashes don’t match → encoding (UTF-8 vs. something else), trailing whitespace, wrong letter case
  • The EMQ score isn’t going up → you’re sending too few parameters, or CAPI hasn’t kicked in yet

Monitoring

Implementation isn’t a one-off job. Any time a developer changes the structure of the order form, the checkout page, or the login flow, the flow of user_data into the dataLayer can break – and you might only find out a month later, when you notice your campaign performance has dropped.

What to monitor on an ongoing basis:
  • Google Ads diagnostics – coverage and match rate for all conversion actions you’re sending user_data to. Coverage should be a stable 100%, match rate ideally “High”. A drop of more than 10% within a week is a signal to investigate.
  • Meta Events Manager – the EMQ score per event, plus the Diagnostics section, where Meta flags incorrectly formatted parameters (e.g., “Phone number is not in the right format”).
  • GA4 DebugView – if you’re also sending user_data to GA4, this is a quick way to verify that events are arriving complete.
When to debug again:
  • After every deployment that touches forms, the cart, login, or thank-you pages
  • After changing your CMP or modifying the consent flow
  • After GTM template updates (both the Meta and Google templates get updated and occasionally change behavior)
  • If you see a warning in Google Ads diagnostics or the EMQ score in Meta drops by more than 0.5 points

What’s next

You now know how to verify that your first-party data actually arrives where it’s supposed to, in a form the platforms can process. That’s usually the most demanding part of the entire implementation. Once you have a working debug workflow, you can comfortably extend your measurement to additional events or platforms.

Series: First-Party Data
Number of articles: 5
#
Series
First-Party Data in Online Advertising, Part 3: Debugging – How to Verify Everything Work
1/6/2026

Part 3 of our first-party data series gets technical again – we'll show you how to check that data is correctly reaching each system and doing what it should. We'll look at outgoing hits in DevTools and at checks directly in the ad platforms.

#
Blog post
GA4 Sessionization in BigQuery
24/5/2026

A detailed guide to sessionizing the GA4 BigQuery export — from identifying sessions and reliably ordering events to two attribution models (First Event Available and Session Start), their limitations, and validating agreement between them.

#
Blog post
How (and Why) We Back Up ClickUp
27/4/2026

Take a look at our ClickUp backup solution. Automated exports, a GitHub repository, and a practical guide to keeping your company data under control.

#
Series
Server-side tracking, Part 1: How to Get Started with Cloud Run
20/4/2026

Learn how to deploy server-side tracking on Google Cloud Run. Compare Stape vs Cloud Run, configure load balancers, choose billing types, and test your setup.

#
Series
First-party data in online advertising, part 2: How to collect it and send it to media systems
2/4/2026

Complete technical guide to collecting first-party data via dataLayer, normalizing, hashing, and sending through server-side GTM to Google Ads and Meta.

#
Blog post
ClickUp MCP testing
15/3/2026

Testing ClickUp MCP: hands-on experience with AI-powered automation, security concerns with access tokens, practical limitations, and who should use it.

#
Series
First-party data in online advertising: part 1: How they work and why they improve the campaign performance
23/2/2026

Learn how first-party data improves campaign performance, measurement accuracy, and cross-device tracking. Discover practical ways to collect and use it.

#
Blog post
How we migrated 250 media tags to the server - and how it all turned out
14/1/2026

Learn how we migrated 250 media tags (Facebook, Google Ads, Sklik, Bing) to server-side GTM. Practical tips, templates, and lessons learned.

#
Blog post
Analytics Workshops at Agencies
20/12/2025

Workshops on advanced digital analytics: BigQuery, cookieless tracking, consent, attribution, and building data warehouses for reporting and activation.

#
Blog post
Analytics is a great career path for women - including moms returning from (or during) maternity leave
20/11/2025

Why analytics is an excellent career for women, including those returning from maternity leave. A personal story about transitioning into data analytics.

#
Blog post
BigQuery: How to move a GA4 dataset to another GCP project
1/11/2025

Learn how to transfer historical GA4 data between BigQuery projects using Data Transfer Service. Step-by-step guide for dataset migration and billing.

#
Blog post
Reshoper 2025
15/10/2025

A look back at Reshoper - advising e-shop owners on tracking and measurement, plus a roundtable on marketing automation with insights on self-hosted N8N.

#
Blog post
Hack Your Weekend
23/9/2025

From Idea to App in 48 Hours 🚀 Building AI-powered apps at #HackYourWeekend using Claude Code, tracking with BigQuery, and lessons from team development.

#
Blog post
MeasureCamp Brno 2025
10/9/2025

Recap of MeasureCamp Brno 2025: server-side tracking insights, legal tracking without consent, and Women in Analytics session by MeasureDesign team.

#
Blog post
PPC summer camp
20/8/2025

Recap of PPC Camp: my presentation on legally measuring data without user consent - cookieless tracking, sGTM, BigQuery, Facebook conversions, and Advanced Consent Mode risks.

#
Blog post
How to calculate the date of Easter in BigQuery
16/4/2025

Ready-to-use BigQuery SQL script to calculate Easter dates (2024-2100) using Computus algorithm. Perfect for filtering GA4 data and analyzing seasonal trends.

#
Blog post
Visibility Thursday
25/2/2025

GA4 + BigQuery in practice: connecting analytics, CRM & media data, real-world use cases from IKEA, Shoptet, McDonald's & Česká spořitelna, and what it unlocks for marketing.

#
Podcast
Socials: Vašek Jelen discusses GA4, server-side tracking, BigQuery and connecting customer data with campaign performance
19/11/2024

80-minute podcast with Vašek Jelen on GA4, server-side tracking, BigQuery, and connecting customer data with campaign performance for e-commerce.

#
Blog post
MeasureCamp Prague 2024: Using Google Ads export in Google BigQuery
10/9/2024

Vašek and Anička presented at MeasureCamp Prague on using Google Ads export in BigQuery, combining it with GA4 and CRM data to solve attribution issues.

#
Blog post
Data retention: Storing data in Google Analytics 4
31/8/2024

Learn how to extend GA4 data retention from 2 to 14 months. Understand what retention affects, how to change settings, and what happens after data expires.

#
Blog post
Workshop: GA4 basics for the Tereza non-profit organization
3/6/2024

MeasureDesign led a Google Analytics 4 workshop for Tereza non-profit, focusing on practical data use for their Učíme se venku program.

#
Blog post
Reshoper 2024: New opportunities in analytics
20/5/2024

At the Reshoper conference, I had the opportunity to give a talk where I summarized new opportunities for e-commerce analytics.

#
Blog post
Marketing Festival 2024: Learn to work with GA4 data in BigQuery and GCP
22/2/2024

Workshop on working with GA4 data in BigQuery and Google Cloud. Learn to move beyond the GA4 interface and unlock the potential of raw GA4 data.

#
Webinar
Tips and tricks for GA4 not just for Shoptet users
25/11/2023

Webinar recording with practical recommendations for evaluating campaigns in GA4 for Black Friday and Christmas. Hosted with Marek Čech for Shoptet.

#
Webinar
Webinar: Evaluating GA4 Data in BigQuery
21/6/2023

Public webinar on evaluating campaigns using GA4 dataset in Google BigQuery. Featuring Vašek Ráš and Honza Tichý on DBT, SQL queries, and data flattening.

Vojtěch Černý
IT & Data Developer
Jiří Otipka
Analyst
Lenka Pittnerová
Analyst
Martina Kvasničková
AI & Data Research
Anna Horáková
Analyst
Zuzana Mikyšková
Analyst & Co-Founder
Vašek Jelen
Lead Analyst & Co-Founder
Blanka Hejduková
Back Office
Markéta Svěráková
Analyst
Petra Súkeníková
Analyst
Klára Belzová
Analyst
Vojtěch Černý
Vojtěch Černý
IT & Data Developer

Vojta works at MeasureDesign on developing technical and data solutions that are not only functional, but also practical and easy to use. He enjoys combining web development, automation, and data work to create solutions that make sense both from the user’s perspective and in terms of the technical foundations behind them. What he finds most rewarding is turning a more complex problem into a clean and reliable solution.

Jiří Otipka
Jiří Otipka
Analyst

Jirka has been working in marketing for over 10 years, and if there is anything he enjoys more than numbers themselves, it is connecting them. He loves mathematics and data analytics, and thanks to his interest in exploring source code, he can easily communicate with developers in their own language. At MeasureDesign, he specializes in connecting new data sources - building custom connectors in Python, testing data quality, and exploring which data combinations make the most sense from a business perspective. He is completely at home in Looker Studio and also has extensive experience evaluating PPC campaign performance.

Lenka Pittnerová
Lenka Pittnerová
Analyst

Lenka joined MeasureDesign at the end of 2025, bringing extensive experience from PPC marketing, where she spent many years working with Google Ads, Meta Ads, and other advertising platforms. While managing campaigns, she repeatedly ran into the same issue - poorly set up or insufficient web analytics, which made effective optimization nearly impossible.‍ This challenge initially led her to analytics out of necessity, but over time she discovered that she enjoyed it even more than advertising itself. Today, she focuses primarily on implementing web analytics and data solutions that provide companies with high-quality, reliable data for strategic decision-making and performance marketing. She continues to work on selected PPC projects as well - not only because she still enjoys them, but mainly to stay closely connected to the reality of media platforms and the real needs of clients.

Martina Kvasničková
Martina Kvasničková
AI & Data Research

Marťa helps integrate AI into everyday work—making it faster, more efficient, and accessible to every team member. What excites her most is finding practical ways to use AI and turning new technologies into useful tools.

Anna Horáková
Anna Horáková
Analyst

Anička has over 7 years of experience in the agency world, where she has managed social media ad campaigns for clients, and especially for content-driven websites, her favorite. Wanting to broaden her perspective beyond campaign data, she gradually shifted her focus toward web analytics. She joined our team in 2022 and now specializes in data analytics, using GA4, BigQuery, Looker Studio, and other tools to connect and dig deeper into data — delivering insightful analyses and valuable input for business decisions. Anička was a member of our team until 2026.

Zuzana Mikyšková
Zuzana Mikyšková
Analyst & Co-Founder

Zuzka's career path led her through corporate innovation and research management, running word-of-mouth projects, and later to a digital agency, where she managed website development projects. However, Zuzka is naturally curious and wanted to understand how a website actually works once it is launched into the world. That curiosity led her to study web analytics — and eventually to a key collaboration with Vašek. In 2019, they founded the company together.

Vašek Jelen
Vašek Jelen
Lead Analyst & Co-Founder

Vašek has been working in digital analytics for over 15 years — from setting up tracking to data storage, visualization, and interpretation. He helps companies keep their data in order and make full use of it. He focuses primarily on data from digital platforms such as websites, apps, and client zones, and on connecting that data with other business data like media and customer data. After years of freelancing, he co-founded the analytics studio MeasureDesign, where, in addition to working on analytics projects and bespoke training sessions, he also mentors and educates new analysts.

Blanka Hejduková
Blanka Hejduková
Back Office

Blanka joined our team in 2024 and has been responsible for back-office operations, including invoicing and administrative tasks, ever since. She draws on her experience from the Czech Post and her background in financial management to keep everything running smoothly. In her free time, she enjoys traveling with her two children and finds relaxation in working in her garden.

Markéta Svěráková
Markéta Svěráková
Analyst

Markéta started out in marketing, but then came maternity leave — and with it, total chaos. In an effort to hold on to the last bits of sanity, she turned to data. After all, numbers don’t yell, spill cereal into your keyboard, and at least they make some sense. She completed a data analytics course at Engeto Academy, where she bonded with SQL, Power BI, Excel, and Python, and started looking for patterns outside the bounds of children’s coloring books. Today, at MeasureDesign, she helps clients understand what their numbers are really saying.

Petra Súkeníková
Petra Súkeníková
Analyst

She joined MeasureDesign in 2023, specialising in measurement implementation and reporting. Her favourite moment is when, after all the setup and testing, the first data finally starts flowing in. Her biggest challenge? The unexpected (and often undocumented) changes from Google – those are the times when every analyst turns into a paranormal behaviour expert. 👻 She was a member of our team until summer 2026.

Klára Belzová
Klára Belzová
Analyst

Klára has been with the company since 2019. She focuses mainly on web analytics but is not afraid to dive into data work in BigQuery. What she enjoys most is guiding clients through the entire process — from defining their needs to implementing tracking and creating the final data visualizations. She gets an almost suspicious amount of joy from a clean and well-organized GTM container or a report full of useful data.