Key takeaways
- A pixel depends on the user's browser loading a tag and keeping a cookie, so cookie limits, ad blockers, device switches, and in-app browsers all cost you conversions.
- A server-to-server postback depends only on the advertiser storing the click ID and calling back, so it keeps working in apps and privacy-focused browsers and can report reversals later.
- Pixels still help for quick web setups and ad platform optimization; the strongest setups send server events as the record and deduplicate any pixel events against them.
Postback vs pixel tracking: which is more reliable?
Postback tracking is more reliable than pixel tracking for counting and paying conversions. A pixel only fires if the user’s browser loads the thank-you page, runs the tag, and still has the cookie from the click, and privacy features, ad blockers, and app environments break that chain every day. A server-to-server (S2S) postback is sent by the advertiser’s server with a stored click ID, so none of those browser problems apply. Pixels are still useful for fast web setups and for feeding ad platforms, and many advertisers now run both, with the server event as the record.
This page compares the two methods side by side. If you want the basics of S2S first, read What is server-to-server (S2S) tracking?, and for the URL format, macros, and statuses, see What is a postback URL?
How pixel tracking works
Pixel tracking, also called client-side or cookie-based tracking, has two halves. When the user clicks the ad, the tracking platform sets a cookie in their browser with the click details. When the user converts, the advertiser’s confirmation page loads a small tag from the platform’s domain. The browser sends the platform’s cookie along with that request, and the platform matches the conversion to the click.
The tag comes in three common forms.
Image pixel
The oldest form is a 1 by 1 image placed on the thank-you page:
<img src="https://track.example.net/conv?offer=12&amount=20" width="1" height="1" alt="">
Loading the image is the conversion report. It is simple and works without JavaScript, but it cannot run any logic. It sends what is in its URL plus whatever cookie the browser attaches.
JavaScript pixel
A script tag can read values on the page, such as the order ID or a click ID kept in a first-party cookie, and send richer events. Most ad platform tags work this way. It is more flexible, but it only runs if scripts are allowed and the tag is not blocked.
Iframe pixel
An iframe pixel loads a whole page from the tracking platform inside the thank-you page. Inside that frame the platform can run its own scripts and fire further tags, which is how some affiliate networks let their partners place their own pixels on an advertiser’s page without the advertiser editing code for each one.
| Pixel type | What it can do | Main weakness |
|---|---|---|
| Image pixel | Send a fixed URL and the platform’s cookie | No logic; relies entirely on a cookie in a third-party context |
| JavaScript pixel | Read page values and first-party cookies, send detailed events | Blocked when scripts or the tag domain are blocked |
| Iframe pixel | Run the platform’s own code and fire partner tags | Third-party frame, so it is hit hardest by cookie partitioning |
So in the iframe pixel vs image pixel question, the iframe is more flexible but not more reliable. Both depend on the platform’s cookie being readable when the tag loads on someone else’s site, and that is exactly what modern browsers restrict.
Why pixels lose conversions
A pixel can fail at any point between the click and the thank-you page. These are the most common causes.
Third-party cookie limits
The tracking platform’s cookie is a third-party cookie when it is read on the advertiser’s page, and the major browsers treat it very differently (checked on October 21, 2026):
- Safari. WebKit’s Tracking Prevention documentation says Intelligent Tracking Prevention blocks all third-party cookies by default, with no exceptions. It also deletes cookies created in JavaScript, and other script-writeable storage, after 7 days without user interaction with the site, and when it detects click IDs added to links it caps cookies that JavaScript sets on the landing page to 24 hours. A conversion that happens a week after the click may have nothing left to match.
- Firefox. MDN’s page on third-party cookies says Firefox turns on Total Cookie Protection with Enhanced Tracking Protection, which is on by default, giving third-party cookies a separate cookie jar per site. MDN’s state partitioning guide explains the effect: a cookie set while the platform is a first party cannot be read when its tag is embedded on another site.
- Chrome. The same MDN page says Chrome does not block third-party cookies by default, only in Incognito mode or when users choose to block them in settings. Google’s October 2025 Privacy Sandbox update says Chrome will keep its current approach of offering users third-party cookie choice, and announced the retirement of several Privacy Sandbox technologies.
Chrome’s defaults keep many pixels working, but you cannot pick your users’ browsers.
Ad blockers and privacy extensions
Ad blockers and privacy extensions use filter lists that include many tracking domains and tag URLs. When the request to the pixel is blocked, the conversion is never reported, even though the user really signed up or bought.
Cross-device journeys
A user clicks an ad on their phone and buys later on a laptop. The cookie lives on the phone, the pixel fires on the laptop, and nothing connects the two. A postback avoids this when the click ID is stored with the user’s account, because the account follows the user to the new device.
In-app browsers and WebViews
Links opened inside social and messaging apps often load in an in-app browser rather than the user’s main browser. On Android, Chrome’s Custom Tabs overview notes that WebViews do not share state with the browser, while Custom Tabs share the browser’s cookie jar. If the click happens in one cookie store and the purchase in another, the pixel has no cookie to read. Native apps have no thank-you page at all, so a web pixel cannot track an install or an in-app event on its own.
The page never loads
The user closes the tab before the confirmation page appears, a payment provider redirects them somewhere else, or a developer changes the checkout and drops the tag. Pixels also cannot report what happens after the page: a refund, a chargeback, or a lead that fails review.
How a postback differs
A postback moves the report from the browser to a server. The platform puts a click ID into the tracking link, the advertiser stores it with the new user or order, and when the conversion happens, the advertiser’s server calls the platform’s postback URL with that click ID and the event. Later, it can call again with a new status, such as a reversal.
The browser’s only job is to carry the click ID once, at landing. After that, cookies, blockers, closed tabs, and device switches do not matter. The weak point moves too: S2S fails when the advertiser does not store the click ID, or when their server does not call back. Those are bugs you can find and fix with logs on both sides, which is harder to do with conversions that disappear inside users’ browsers.
Illustrative example: counting the same campaign two ways
Suppose an advertiser’s database shows 400 sign-ups from a campaign, and each stored click ID was reported by postback, so the network records 400. The pixel on the same thank-you page reports 330, because some users were on Safari with an old click, some had blockers, and some closed the tab early. The gap depends on your audience. To find yours, compare the advertiser’s own records with each method’s count for the same period.
Postback vs pixel: side-by-side comparison
| Pixel (client-side) | Postback (server-to-server) | |
|---|---|---|
| Who reports the conversion | The user’s browser loads a tag | The advertiser’s server calls a URL |
| How the click is matched | Cookie set at click time | Click ID stored with the user or order |
| Third-party cookie limits | Affected, often heavily on Safari and Firefox | Not affected |
| Ad blockers | Often blocked | Not affected |
| Cross-device conversions | Usually lost | Kept if the click ID is tied to an account |
| Native apps and games | Not usable on their own | Works the same as on the web |
| Late conversions | Lost when the cookie expires | Reported whenever the event happens |
| Reversals and status changes | Not possible | Sent as a new call for the same transaction |
| Setup effort | Paste a tag on a page | Store the click ID and add a server call |
| Debugging | Hard; failures happen in users’ browsers | Logs on both servers show every call |
| Typical use | Ad platform optimization, simple web funnels | Affiliate networks, offerwalls, app campaigns, payouts |
Reliability and fraud trade-offs
Reliability is not only about missing conversions. It is also about fake or duplicate ones.
- Pixels can be fired by anyone. A pixel URL sits in the page source. A user who refreshes the thank-you page, or a bot that loads the pixel directly, can create conversions that never happened unless the platform deduplicates by order ID and checks the click.
- Postbacks can be faked if they are not protected. A postback URL is also just an address. Without a secret key or an HMAC signature, anyone who learns it can call it. With a signature, a once-per-transaction check, and HTTPS, a forged call is rejected. Postback security walks through those checks.
- The advertiser controls both. With a pixel, the advertiser controls which page carries the tag. With a postback, the advertiser’s server decides when to call. Either way, the network depends on the advertiser reporting honestly, so reconcile the counts with the advertiser’s own records from time to time.
- Postbacks can wait for proof. The advertiser can hold the call until a trial converts or a lead passes review, and send a reversal if a purchase is refunded. A pixel fires once, on page load, before any of that is known.
Neither method detects bots on its own. Signed postbacks prove who sent a call, not that a human did the task. Ad fraud and bot traffic covers the patterns to watch, and Click injection and SDK spoofing explains two app-specific ones.
Hybrid setups: server events plus a pixel
The big ad platforms have moved in the same direction: keep the pixel, and send the same events from your server too.
- Meta Conversions API. Meta’s deduplication guide recommends implementing the Conversions API alongside the Meta Pixel, calls this a redundant setup, and says it treats a pixel event and a server event as the same when the event ID and event name match. It keeps the first one it receives and discards matching events that arrive within 48 hours.
- Google enhanced conversions. Google Ads’ enhanced conversions help page describes a feature that adds to your existing conversion tags by sending first-party data, such as email addresses, hashed with SHA256, which Google matches to signed-in Google accounts.
The lesson carries over to affiliate and offerwall tracking. If you run a pixel and a postback for the same conversion, give both the same transaction or order ID and count each ID once. Treat the server event as the record you pay or get paid on, and the pixel as a backup signal for platforms that need one. Note that sending hashed emails is a different data flow from sending a click ID: it needs its own consent and privacy notice wording where the law requires them.
Hybrid mistakes that double-count
Firing a pixel and a postback with different IDs, so both are counted. Generating a new event ID on every page refresh. Paying a partner on pixel conversions while reconciling on postbacks. Sending emails or names in plain text in a postback URL, where they end up in server logs.
Mobile apps: MMP postbacks instead of pixels
In native apps, the question is mostly settled. There is no thank-you page to load a pixel on, and an app does not share cookies with the browser where the ad was clicked. App installs and in-app events are measured by the app’s own SDK or a mobile measurement partner, which then sends postbacks to each ad network to say which of its users installed or converted. What is an MMP? explains how that matching works on Android and iOS, and What is attribution? covers the models and windows that decide who gets credit.
The same logic applies when an app is the publisher rather than the advertiser. An app that rewards users for completing offers needs to hear about every credit and every reversal on its own backend, so it can update the user’s balance. That is always a server-to-server postback, never a pixel.
Which one should you use?
- You pay or get paid per conversion: use postbacks as the record. Affiliate networks, CPA offers, and offerwalls all settle on S2S.
- You track app installs or in-app events: use your SDK or MMP and its postbacks.
- You credit users with points or coins: use a signed postback to your server, and credit only from it, never from a redirect or a pixel. Our guides for a Node.js postback handler and a Python postback handler show working code.
- You optimize campaigns on an ad platform: keep its pixel, add its server-side API, and deduplicate by event ID.
- You have a simple web funnel and no developer: a pixel is a reasonable start. Move to postbacks once money depends on the numbers.
How Sharklio tracks conversions
Sharklio is a pay-per-result affiliate network, and it tracks results with server-to-server postbacks on both sides. Advertisers, who work with us through custom integrations, confirm each conversion with a server-to-server postback and pay only for the conversions it confirms, never for impressions or clicks. Publishers receive a signed server-to-server postback on their own server for every credit and every reversal, so balances in your currency stay in line with what was actually paid. See how the wall works, or get in touch to plan an advertiser integration.
Frequently asked questions
What is the difference between a postback and a pixel?
A pixel is a tag loaded by the user’s browser on a confirmation page, matched to the click by a cookie. A postback is a call from the advertiser’s server to the platform’s server, matched to the click by a stored click ID.
Is S2S tracking better than pixel tracking?
For counting and paying conversions, usually yes, because browser cookie limits, ad blockers, and app environments do not affect it. It needs more setup, and it only works if the advertiser stores the click ID and calls back every time.
What is an iframe pixel?
An iframe pixel loads a page from the tracking platform inside the advertiser’s thank-you page, so the platform can run its own code and fire partner tags. Because it runs in a third-party frame, browser cookie partitioning affects it the same way as an image pixel, or more.
Does Safari block tracking pixels?
WebKit’s Intelligent Tracking Prevention in Safari blocks third-party cookies by default and shortens the life of cookies set by JavaScript, so many cookie-based pixels cannot match the conversion to the click.
Do I still need a pixel if I use the Conversions API?
Meta recommends running the Conversions API alongside the Meta Pixel and deduplicating the two by event ID and event name. For affiliate and offerwall payouts, the postback alone is enough.
Can a postback replace a pixel completely?
Yes, for any conversion your server knows about, including app events and reversals. You may still keep a pixel for ad platforms that optimize on browser signals.