<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Propel field notes</title><description>Practical thinking on marketing measurement, attribution, data quality, and trustworthy decision systems.</description><link>https://partnerwithpropel.com/</link><language>en-us</language><item><title>Troubleshooting Meta CAPI: what we covered in our webinar</title><link>https://partnerwithpropel.com/blog/troubleshooting-meta-capi-what-we-covered-in-our-webinar/</link><guid isPermaLink="true">https://partnerwithpropel.com/blog/troubleshooting-meta-capi-what-we-covered-in-our-webinar/</guid><description>Why deduplication breaks, how event match quality affects your spend, why Meta over-reports, and the logging that makes the next problem faster to fix.</description><pubDate>Wed, 19 Aug 2026 00:00:00 GMT</pubDate><content:encoded>Timo and I ran a webinar on troubleshooting Meta&apos;s Conversions API. This is a recap of what we covered. We built the session around what people told us when they registered, so it wasn’t a &quot;how to set up CAPI&quot; walkthrough. Most of the room already had CAPI live and running, and the questions were about what to do when it breaks quietly and you can&apos;t tell whether the problem sits in Meta, GTM, or your server.

![Article image 1](/images/blog/troubleshooting-meta-capi-what-we-covered-in-our-webinar/image-001.png)

Three problems came up more than any others: events being counted twice, match quality quietly eroding, and Meta reporting more conversions than a company&apos;s own data. We took each in turn, then Timo covered what to put in place now so the next problem is faster to diagnose.

#### Deduplication is the most common problem, and it usually comes down to the event ID

Most companies send the same conversion twice on purpose: once from the browser pixel, once from the server. That&apos;s a good setup. The browser sees things the server can&apos;t, and the server sees a longer customer journey, lets you enrich the user, and isn&apos;t limited by consent or ad blockers the way the browser is. For it to work, Meta has to recognise the two hits as one event and drop the duplicate.

It deduplicates on the event ID. There are other fields in the payload, but the ID is the one that matters, combined with the event name, and it has to be identical on both the browser and the server hit. The way this breaks in practice is organisational: one team sets up the client side in GTM, another sets up the server side, and each generates its own &quot;unique&quot; ID from timestamps or something else. Both are unique. Neither matches. The clean fix is to generate the ID on the client and pass it to the server, so the server picks up the same value and sends it back.

![The ID has to be generated once, upstream of both senders. Two teams inventing their own format is the most common way dedup quietly fails.](/images/blog/troubleshooting-meta-capi-what-we-covered-in-our-webinar/image-002.png)
_The ID has to be generated once, upstream of both senders. Two teams inventing their own format is the most common way dedup quietly fails._

One more failure mode worth watching: timing. If the server event arrives long after the browser event, deduplication can fail. In our experience the safe rule is to send both as close together as possible; if you batch server events (say, a daily send from BigQuery), that gap alone can be enough to break the match.

You can see the coverage percentage in Meta, but not which specific events were duplicated, which is exactly the thing you&apos;d want when debugging. 

![Article image 3](/images/blog/troubleshooting-meta-capi-what-we-covered-in-our-webinar/image-003.png)

So you need your own client-side logs to compare the two streams event by event. As a rule of thumb you want deduplication coverage near 100%, and you usually want more server events than browser events, because the server hit is the more complete and more reliable of the two.

![Article image 4](/images/blog/troubleshooting-meta-capi-what-we-covered-in-our-webinar/image-004.png)

A quick way to catch double-counting without any logging: in the events view, segment first conversions against all conversions on an event most users only fire once, like a sign-up. If sign-ups show more &quot;all&quot; conversions than &quot;first&quot; conversions, more sign-up events are firing than there are people signing up. That doesn&apos;t tell you where the duplication is, browser, server, or both, but it tells you to go look.

![Article image 5](/images/blog/troubleshooting-meta-capi-what-we-covered-in-our-webinar/image-005.png)

#### Low event match quality doesn&apos;t just weaken optimisation, it can cut your spend

Event match quality is how well Meta can tie a conversion back to someone it showed your ad to. The more identifying information you pass, and the better its quality, the higher the score. Data teams tend to be relaxed about this, the same way they tolerate 75% quality on behavioural data, because they&apos;re used to messy data being fine. On CAPI it isn&apos;t just a data-quality number. It changes what the platform is willing to spend.

Here&apos;s a case that made it concrete. A client changed their consent banner. Consent to advertising cookies dropped by around 40%, which meant that share of client events stopped carrying the click ID. Within about ten days, spend had roughly halved. The mechanism: Meta could now attribute far fewer conversions, so the CAC it saw went up, and to stay under the target CAC set in the campaign it pulled back budget on its own. Nobody had told marketing the banner was changing, so from their side it looked like the campaigns fell off a cliff for no reason. That&apos;s a hard thing to debug, because a consent change and a spend drop don&apos;t look connected, and it&apos;s not the usual &quot;tracking looks a bit lower&quot; symptom, it&apos;s a drop in real delivered volume.

&gt; Match quality isn&apos;t a dashboard number. It&apos;s part of what the platform bids with, so when it drops, your spend can drop with it.

Two things follow. First, match quality is worth monitoring continuously, not checking once, because it can be fine one day and not the next. Second, it&apos;s per-event, so treat events differently. A page view fired server-side carries almost no identifying information and will score badly, and that&apos;s fine, because you shouldn&apos;t be optimising for page views anyway. Purchases and other high-value events are where you want the score to be strong. A useful gut check we use is to aim above 8 on the events that matter, while remembering it depends on how many events you have: if you convert rarely, matching as many as possible matters far more.

![Article image 6](/images/blog/troubleshooting-meta-capi-what-we-covered-in-our-webinar/image-006.png)

There&apos;s a subtler trap. A high score can mean you&apos;re matching the wrong people. Meta is better at matching consumer identities than business ones, so a B2B advertiser can end up matching the personal-Gmail signups, the least valuable ones, and missing the business buyers. A good score on the wrong conversions still costs you.

The takeaway for what you send server-side: only add an event, or a field, if it brings something the client event doesn&apos;t. Usually that&apos;s more identifiers so Meta can match more, or a value you can only compute on your server, like a predicted LTV or a lead score. Mirroring every client event onto the server &quot;just in case&quot; adds cost and noise, not signal.

#### Meta reports more than your first-party data, and that&apos;s mostly working as intended

This is the discrepancy we get asked about most. Before blaming it, it helps to know that Meta&apos;s Events Manager and a tool like Google&apos;s conversion reporting are counting different things. Meta shows everything that was sent to it. Google shows what it was sent _and_ could attribute to a campaign. So they will never line up, and that&apos;s before you get into attribution windows.

The bigger point is that Meta reporting more conversions than your own analytics is usually a feature, not a bug. The reason you send server-side events with all that identifying information is to help Meta find more good users, that&apos;s a campaign-optimisation job, not a reporting one. It is not claiming every one of those conversions for itself as a reported result. Comparing Meta&apos;s number to your GA4 or Amplitude number as if they should match is comparing two different jobs.

The place this becomes useful rather than confusing is Meta&apos;s attribution-setting breakdown, where you can split conversions into post-click, post-engagement, and post-view. Your first-party tools, GA4, Amplitude, Snowplow, only ever see post-click. So anything that isn&apos;t post-click will never appear there, and chasing that gap is chasing something that can&apos;t reconcile by definition.

![Article image 7](/images/blog/troubleshooting-meta-capi-what-we-covered-in-our-webinar/image-007.png)

Post-view is worth reading closely, in context. On one client running the same setup across markets, the market where they had the strongest brand showed around 80% of Meta conversions as post-view, while other markets were the reverse, mostly post-click. That doesn&apos;t prove the post-view conversions weren&apos;t incremental, but a number that high, in a specific market, is a flag worth acting on. For that client we used it to prioritise an incrementality test in that market, because we needed a CAC we could trust rather than one leaning on &quot;would these people have converted anyway&quot;.

#### The fix for next time is logging what you send, not just what you track

Most of the session was about problems people already had. Timo&apos;s point at the end was about making the next one more transparent: get visibility into the things the ad platforms don&apos;t give you visibility into.

Concretely, that means logging not only your own tracking but everything you send to the ad platforms, with all the parameters, into a data warehouse like BigQuery. You can write it from server-side GTM, or from an event pipeline like RudderStack or Segment if you already run one. Once it&apos;s there, you can put tests and alerts on top, so if click IDs stop coming through or a parameter goes missing, you know immediately instead of discovering it in a spend report weeks later.

A couple of debugging notes that came out of the questions. A 200 response from Meta means &quot;received and looks OK on first pass&quot;, not &quot;processed successfully&quot;, we&apos;ve seen events return 200 and still have problems downstream, so inspect the payload you actually sent rather than trusting the status code. And logging the client side is genuinely harder than the server side: there&apos;s no direct path from client-side GTM into BigQuery, and routing it through GA to store it inflates your analytics and annoys the marketing team. It&apos;s cleaner on RudderStack or Segment, but plenty of teams are on GTM and GA4, so we&apos;re planning a proper guide on how to log client-side events for troubleshooting.

![Without the warehouse leg, a broken signal looks exactly like weak demand and you spend three weeks optimizing creative instead of fixing a parameter.](/images/blog/troubleshooting-meta-capi-what-we-covered-in-our-webinar/image-008.png)
_Without the warehouse leg, a broken signal looks exactly like weak demand and you spend three weeks optimizing creative instead of fixing a parameter._

#### A few honest limits

None of this gives you a perfect number. Match quality, deduplication, and attribution all leave gaps, and the point isn&apos;t to close them, it&apos;s to know where they are and stop them moving without you noticing. A lot of what we do on client audits is exactly that: go in deep, work out what&apos;s actually working, and hand back something the marketing team can read and trust, especially when data and marketing aren&apos;t speaking the same language about why the numbers moved.

If you want to work through where your own CAPI setup is leaking, or which of these three problems you&apos;re most likely sitting on, book a call with us.

You can watch the full session on demand [here](https://partnerwithpropel.com/workshops/meta-capi-troubleshooting/).</content:encoded></item><item><title>Why Meta Advantage+ and Google PMax keep sending you low-value users</title><link>https://partnerwithpropel.com/blog/why-meta-advantage-and-google-pmax-keep-sending-you-low-value-users/</link><guid isPermaLink="true">https://partnerwithpropel.com/blog/why-meta-advantage-and-google-pmax-keep-sending-you-low-value-users/</guid><description>Meta and Google target based on the conversion signal you send. What that means for CAC and pipeline quality, and how to point them at the right people.</description><pubDate>Thu, 30 Jul 2026 00:00:00 GMT</pubDate><content:encoded>If you&apos;re running Performance Max or Advantage+ and acquiring users who don&apos;t convert, the instinct is to call it a funnel problem and go fix the landing pages or the nurture flow. That&apos;s usually the wrong fix for the wrong problem, and it&apos;s an expensive one. More often it&apos;s an acquisition problem, and it traces back to a decision you may not realise you&apos;ve handed over.

### Why Meta and Google push you toward automated buying

These campaign types can do things a manual setup can&apos;t. Take search on Google. With traditional responsive search ads you&apos;re capped at three enabled ads per ad group, each pointing to one landing page you picked, so a handful of fixed destinations and the headlines you wrote. Turn on Performance Max with Final URL expansion and Google can instead send someone to whichever page on your site matches their intent, and generate headlines and descriptions to fit that page. Someone searching for a specific product lands on that product&apos;s page, not a generic category one.

That&apos;s the real appeal: ads get more relevant to each user across more of your site, with far less manual work, and relevance is what drives efficiency. Advantage+ does the equivalent on Meta, assembling and targeting combinations no manual structure could cover.

The trade is control. You no longer pick the audience, the copy is generated, the platform chooses the landing page, and it decides who sees the ad. The most valuable decision, who to go and find, moves from you to the algorithm. That&apos;s a good deal when the algorithm is aiming at the right people. Whether it is comes down to one thing: the signal you give it.

![Article image 1](/images/blog/why-meta-advantage-and-google-pmax-keep-sending-you-low-value-users/image-001.png)

### The platform optimises toward whatever signal you send

Meta and Google don&apos;t know what a good customer looks like for your business. They know what you told them to optimise for, and they go and find more of it.

&gt; WYSIWYG: what you send is what you get.

Optimise for &quot;leads&quot; and treat every lead as equal, and the platform finds you the cheapest leads it can, because that&apos;s what you asked for. It&apos;s doing its job perfectly; the instruction was the problem. Pass a value that says this lead is worth 150 and this one is worth 5, and it has something better to aim at, so it starts finding people who look like your 150s.

So the users who don&apos;t convert aren&apos;t leaking out of the funnel. They&apos;re exactly who you asked the platform to acquire.

### What a &quot;funnel problem&quot; actually costs you

The misdiagnosis is expensive in two directions at once.

First, the wasted spend keeps running. If your signal pulls in low-value users, every day the campaign runs it buys more of them. You&apos;re not paying once for a bad batch, you&apos;re paying continuously for the platform to get better at finding the wrong people.

Second, you pour effort into fixing the wrong thing: rebuilding landing pages, reworking nurture, adding sales follow-up, all aimed at converting people who were never going to convert, while the acquisition instruction underneath stays broken.

Put rough numbers on it to see the shape (illustrative, not a benchmark): you&apos;re spending 20k a month optimising for a flat &quot;lead&quot; event, and a large share of those leads have no real intent. A meaningful chunk of that budget is buying pipeline your sales team then spends time disqualifying. Worse, the CAC on your **good** customers looks fine on the dashboard because it&apos;s averaged across a pile of cheap leads, so the problem stays hidden. Fixing the funnel does nothing about any of that. Fixing the signal does.

![Article image 2](/images/blog/why-meta-advantage-and-google-pmax-keep-sending-you-low-value-users/image-002.png)

### Decide what a good user is before you optimise

The fix isn&apos;t a setting. It&apos;s a decision you make before touching the campaign: what makes a user valuable, and what can you observe early enough to act on? That second part is where most teams are too optimistic. Almost no one can see a customer&apos;s real value at the moment they convert.

| Your business | What you can see early | The catch |
| --- | --- | --- |
| Ecommerce | An actual purchase and its value | Closest to real value, but a first order isn&apos;t lifetime value; most mature teams pass a predicted LTV, not just order value |
| Subscription / SaaS | A signup or activation | An activation isn&apos;t value on its own; you need a proxy that correlates with who stays and expands |
| Long sales cycle | Little or nothing at conversion time | You&apos;re predicting from early proxies: lead quality, enrichment, first-session behaviour |

The pattern across all three: you&apos;re almost always sending a **prediction** of value, not confirmed value. Ecommerce comes closest to the real thing, and even they increasingly model it. So the practical question isn&apos;t &quot;what is this user worth&quot;, it&apos;s &quot;what can I see early that reliably points to what they&apos;ll be worth&quot;, and you send that.

### Make the value explicit, not just the conversion

Once you have that early proxy, pass it as value, not just a conversion. A conversion tells the platform &quot;this happened.&quot; A value tells it &quot;this was worth this much,&quot; which is what lets it separate your best users from your cheapest.

| What you send | What the platform learns |
| --- | --- |
| A flat &quot;lead&quot; or &quot;purchase&quot; event, the same for everyone | Every conversion is equal, go find the cheapest |
| &quot;Lead, value 5&quot; for a free-email signup, &quot;Lead, value 150&quot; for an enriched, qualified lead | These are worth ~30x more, go find people like them |

You don&apos;t need full lifetime-value modelling to start. You need a defensible view of relative value, and you need to segment it, because the same event can be worth different amounts depending on the campaign and platform it came from. Flatten that and you&apos;ve handed Meta or Google a blunter instruction than they can follow, and paid full price for it.

### Watch what your signal does to your traffic

Whatever you optimise for, the platform pulls your traffic toward it, and that can narrow you in ways you didn&apos;t intend.

One team we worked with optimised for people who called them, because calls closed well. It worked, traffic shifted toward likely callers. But it quietly missed everyone who would have booked directly without ever calling, a whole segment of good revenue the campaign stopped chasing. The signal was doing its job so well it steered spend into one narrow slice of the real market.

So this isn&apos;t set-and-forget. Send the signal, then watch what it does to the mix of people coming in, and check you haven&apos;t optimised yourself into a corner.

![Article image 3](/images/blog/why-meta-advantage-and-google-pmax-keep-sending-you-low-value-users/image-003.png)

### What this looks like in your results

Done well, it shows up in your numbers as one of two outcomes, both testable:

- **Better users at the same spend:** higher-quality pipeline and more revenue per acquired customer, without paying more per acquisition.

- **The same quality at lower spend:** you tell the platform who **not** to chase, hold acquisition quality steady, and cut the wasted budget.

Run it as a pilot, compare against your own data, and you&apos;ll see which one you got, and roughly what it was worth.

And keep the limits in view. None of this is exact; you&apos;re acting on early, incomplete information, so you&apos;ll live with gaps. The aim was never a perfect read on every user. It&apos;s a signal good enough to point Meta and Google at the right people, improved as you learn.

If you want to work out what a good user looks like in your data, whether you can see it early enough to act on, and what better targeting would be worth to your numbers, book a call and we&apos;ll take a look together.</content:encoded></item></channel></rss>