Facebook Conversion API vs Pixel: Why the Pixel Alone Fails
The Meta Pixel is a script in the browser. The Conversion API is a call from a server into the same dataset. Pixel alone fails when that script never runs, the cookie never sticks, or the confirmation never loads. This note is how the two paths differ, how a dataset holds them, and how that gap changes the ROAS Ads Manager reports. It is not a service page, and it does not quote a fee. The ads work is on our Facebook marketing page.
Short answer: Keep the Pixel. Add the Conversion API for the same event names, with the same event_id, into the same dataset. Compare Ads Manager with orders or the inbox for the same dates. A higher ROAS is not proof the ads improved. Missing events may have arrived. A lower ROAS can be doubles you removed. Digital Agency Bangkok can hold the dataset and the ads account as one brief. This article will not invent a figure.
What the Pixel still does
The Pixel is JavaScript on the site. A page load can send PageView. A thank-you path, or a marked click, can send Lead, Contact, or Purchase. It sets a browser identifier, often _fbp, and it can read the click id on the ad URL, often fbclid, stored as _fbc. That is how Meta ties a later event to a click. If the script never runs, the click can still be billed. The result is not seen.
Keep it for events the browser completed. It can fire when the page opens, before the server knows a form stored a row. Do not treat it as the only record of a sale the shop already has. A second Pixel is not a fix. Two Pixels double-fire. Check the ID on the live Thai URL and the English URL before you add a tag.
Why the Pixel alone fails
The Pixel only knows what the browser told it. The person can still buy or send a form. Ads Manager then under-counts. A budget move from that column is about a hole, not the offer.
The script does not run
A blocker, a strict setting, or a page that never finishes loading skips the Pixel. So does an in-app browser, including LINE and the Facebook app. The inbox has the row. Events Manager does not. That is a miss, not a failed ad. Cookie limits can drop the click id on the hop from the ad. The Pixel cannot recover it. Conversion API can only send the id you stored.
The confirmation never loads
A form that only shows a success line will not fire a Pixel waiting for a thank-you URL. A payment that ends on the bank page, and returns late, does the same for Purchase. The shop has the order. Counting only the Pixel understates it. A public thank-you URL fails the other way. A menu or a bookmark can fire Purchase. Until that path is closed, do not use a pageview as the sale.
Consent, and a second language
If a banner blocks tags until Accept, a visitor who never accepts sends no Pixel event. The form may still send. English and Thai are two URLs. An English thank-you rule misses the Thai path. Browser setup sits next to how to install Google Ads conversion tracking. Form, tel:, LINE, and thank-you tags sit next to Google Tag Manager for marketers.
What the Conversion API sends
This is not a second Pixel in the header. The server sends the event after something you trust: a stored form, a confirmed charge, or a lead staff marked, if that is the written rule. The payload uses the same event name, a time, the page URL, an action source of website, and details you may send hashed, such as email or phone. Include the click id and browser id if you captured them.
Without those ids the sale can still be sent. The match is weaker. Do not invent a match score, and do not put the token in the page or a sheet. This article will not print a token or a snippet. A partner button that says connected is not finished. Confirm one real order, or one form row, made one event with the name you chose. A fire on every page view is not a result. Purchase on a product view inflates value. Turn that off before you read ROAS.
What a dataset is
A dataset is the Events Manager container for web events on this property. The older Pixel now lives there. The Pixel and the Conversion API should write to the same dataset, so two arrivals of Purchase can be one purchase when the name and the event_id match. A dataset is not a campaign. A second one splits history. Compare the ID on the live page with the ID the server uses.
Thai and English belong in that dataset unless you run two brands. A test dataset left on the live theme steals events from the one ads read. Send one lead sales can name. You want it once, both sources listed if both fired. Leave test mode before you judge a week. A test event is not a result.
Deduplicate, or reported ROAS lies the other way
Do not turn the Pixel off on day one. Both paths can send Lead or Purchase. Meta deduplicates when the event name and the event_id match. Generate that id once, when the action happens, and send it on both paths. Two random ids are two events from one action.
Skip the shared id and Ads Manager can count both. The count rises. Spend did not. Reported ROAS rises. That is a double. Orders or the inbox will not match the jump. Compare those dates before anyone calls the return better. Do not send Purchase from a thank-you view and again when payment confirms, unless they share an event_id. Do not reuse one id all day, or later sales disappear.
Which events belong on the server
Send what you would defend. A stored form is a Lead or a Contact, not a Purchase. Use the URL the person used. Do not add a form and a LINE tap and call the sum leads. A LINE click rarely hits the server. It is not a chat. Leave it on the browser, on the official account the ad names. A tel: click is not an answered call. Do not invent a value so ROAS has a number.
Purchase belongs on the server when the charge is confirmed, in that currency, for that amount. Do not send a list price, a guessed lifetime value, or a lead as a sale. If only a deposit was taken, send that amount and say so. A later cancel may still sit in Ads Manager. Compare the period with orders you still have.
How this changes reported ROAS
Reported ROAS is value Meta attributes to the ads, divided by the spend it shows, for the event and the window you selected. It is not cash divided by the Meta invoice. The column can move with no change in the creative.
Pixel-only reporting omits what the browser never sent, so reported ROAS looks weaker than results already produced. Conversion API can raise that ROAS because missing events now arrive. If orders did not rise, the change is the pipe. The reverse is a double: one sale counted twice, with no shared event_id. Reported ROAS looks stronger. Cash did not. A shared id can then lower ROAS. Compare events with orders, not with yesterday’s screenshot.
A Pixel Purchase on a thank-you view is early. A server Purchase after the bank confirms is later, and can credit a different click, or miss one outside the window. If the result is Lead, the column is not a return on sales. This article will not quote a lift or a ROAS to expect. The ads page remains Facebook marketing.
What to check before you trust the new number
Write the event as a sentence sales would accept. If you cannot, do not send it.
- The Pixel ID on the live site is the dataset the server writes to.
- Both paths share the event name and the event_id for one action.
- Purchase value is the amount charged. Leads stay leads.
- One named test lead appears once. The inbox and Events Manager agree.
- Repeat on the Thai URL and the English URL.
Do not raise a bid because Events Manager looks busier. Ask who holds the token, who publishes the tag, and which event is primary.
What this article will not do
- Invent a ROAS, a match rate, a share of blocked events, or a conversion rate.
- Quote a fee for Conversion API, the Pixel, or Facebook ads.
- Name other firms, or rank them.
- Treat a LINE click as a chat, a tel: click as a call, or a public thank-you as a sale.
- Hand you a token, a payload, or a script to paste.
FAQ
Should we turn the Pixel off when Conversion API is on?
No. Keep the Pixel for what the browser still sees, and send the same event name from the server with the same event_id, into the same dataset. Turning it off on day one drops LINE and tel: clicks that never hit the server. Deduplicate. Do not run two Pixels.
Why does Ads Manager show fewer purchases than the shop?
The Pixel never saw the confirmation. A blocker, an in-app browser, or a closed bank page will do that. Conversion API sends the confirmed charge from the server. Compare both with the order list before you change a bid.
Why did reported ROAS rise the day Conversion API started?
Missing events may have arrived, or one sale was counted twice with no shared event_id. Spend may be unchanged. Check orders against events. A higher ROAS is a correction until they agree. This article will not predict the figure.
What is a dataset, and do we need a new one?
A dataset holds web events in Events Manager. Write the Pixel and the Conversion API to the one the ads account already reads. A second dataset splits history. Match the live ID to the server ID, in Thai and in English.
Can a LINE click or a form view be the purchase used for ROAS?
No. A LINE click is not a chat, and a form view is not a lead. Send Purchase only for a confirmed charge, at the amount charged. A column built on Lead is a lead result, not a return on sales. The ads work is Facebook marketing. This article does not quote a fee.