Hi,
my FB results stats are usually almost twice as high as the actual conversions. So far I could get around that issue by filtering for "unique purchase" which used to fairly accurate.
But for 2-3 weeks now even the "unique purchase" tracking is higher than the actual conversions. From my site were no changes made.
I just have a my pixel on the TY/upsell page. There are multiple pixel IDs in the same pixel code but that wasn't a problem in the past.
The current pixel code looks like this
<script>
!function(f,b,e,v,n,t,s)
{if(f.fbq)return;n=f.fbq=function(){n.callMethod?
n.callMethod.apply(n,arguments):n.queue.push(arguments)};
if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';
n.queue=[];t=b.createElement(e);t.async=!0;
t.src=v;s=b.getElementsByTagName(e)[0];
s.parentNode.insertBefore(t,s)}(window, document,'script',
'https://connect.facebook.net/en_US/fbevents.js');
fbq('init', '740xxxxxxxxxxxxx');
fbq('init', '345xxxxxxxxxxxxx');
fbq('init', '872xxxxxxxxxxxxx');
fbq('init', '659xxxxxxxxxxxxx');
fbq('init', '391xxxxxxxxxxxxx');
fbq('init', '145xxxxxxxxxxxxx');
fbq('track', 'Purchase');
</script>
<noscript><img height="1" width="1" style="display:none" src="https://www.facebook.com/tr?id=740xxxxxxxxxxxx&ev=PageView&noscript=1"></noscript>
<noscript><img height="1" width="1" style="display:none" src="https://www.facebook.com/tr?id=345xxxxxxxxxxxx&ev=PageView&noscript=1"></noscript>
<noscript><img height="1" width="1" style="display:none" src="https://www.facebook.com/tr?id=872xxxxxxxxxxxx&ev=PageView&noscript=1"></noscript>
<noscript><img height="1" width="1" style="display:none" src="https://www.facebook.com/tr?id=659xxxxxxxxxxxx&ev=PageView&noscript=1"></noscript>
<noscript><img height="1" width="1" style="display:none" src="https://www.facebook.com/tr?id=391xxxxxxxxxxxx&ev=PageView&noscript=1"></noscript>
<noscript><img height="1" width="1" style="display:none" src="https://www.facebook.com/tr?id=145xxxxxxxxxxxx&ev=PageView&noscript=1"></noscript>
You can use the Pixel Helper extension to check your pixel implementation:
https://developers.facebook.com/docs.../pixel-helper/
Here are a few options, if you want to keep the pixel on the thank you page
https://funnelboom.com/the-duplicate...w-to-solve-it/
(I would start with the cookie solution, or the GTM cache if you fire FB pixel through GTM)
You could also fire the pixel from the backend, and not on page view. See my post in this thread:
https://stmforum.com/forum/showthrea...Your-FB-Pixels
I’d suggest you implement the pixel using google tag manager. You can set the tag firing trigger to only let it fire once. If you have any sub pages, you can include the same tag so it’s got a second change at firing.
I find it’s more resilient than the usual fb implementation
I have set up GTM with FB Pixel to fire once. I hope that does the trick.

In my test today I had 15 real conversions but FB still tracked 22 "unique purchases". Seems like GTM isn't the solution. I'm wondering why because GTM was set to fire the pixel just "once per event". Does it still fire a second time when the user reloads the page?
You configured GTM to fire once per event. And the event trigger is a page view, so FB pixel is triggered once per page view, which is the exact same situation as when your pixel was hardcoded on the page. Not surprising it did not improve.
Look at your server log to check the number of page views during that period, to see if the problem comes from here.
Then, look at the solutions i mentioned above (easiest one being with cookie).
Try setting the GTM tag to "once per page" rather than once per event, see if that makes it more reliable.
Here's an idea:
1. Rewrite your FB pixel code to fire the FB purchase event, then update URL to add a query string param of done=1 or any other value.
2. Wrap the purchase event in an if block that checks if done exists, and if so, do nothing. This way if the event has already fired it will not re-fire, not unless the user reloaded the page AND removed done=1 from the URL.
I'm a JS noob but something like this might work:
var searchParams1 = new URLSearchParams(window.location.href);
if(searchParams1.has("done") == false){
console.log("firing FB pixel event");
var url = new URL(window.location.href);
url.searchParams.append('done', '1');
history.pushState("", "", url);
}
By the way - you could add a transaction id / event id to the code in order to deduplicate the purchase events.
facebook does the deduplication automatically.