Why Meta gets its own pipeline
It would be reasonable to assume the Meta conversion pipeline is the Google one pointed at a different endpoint. It deliberately isn't, and the differences matter to how you use it.
Google closed the create half of its offline conversion upload to non-allowlisted callers in June 2026. What still lands is a restatement — an adjustment to a conversion Google's own tag already recorded — and nothing else. Meta has no equivalent restriction, and it matches on a hashed phone number or email alone rather than requiring a click id. A qualified call with no fbclid is still reportable to Meta, where the same call with no gclid is not reportable to Google.
The Conversions API
When a call qualifies, PPC TNT reports it to Meta server-side. Three behaviours are worth understanding.
Lead fires at qualification; Purchase fires when value appears
Meta accepts a valueless Lead and treats it as a first-class optimisation signal — Lead campaigns optimise for lead count. So the lead is reported the moment it qualifies, whether or not anyone knows yet what the job was worth. Later, when a value first appears, a separate Purchase event fires once, with its own id.
A value corrected after the fact cannot reach Meta. Re-sending an event id with a new value is either deduplicated or double-counted, and Meta's aggregate response cannot tell you which happened. Rather than silently re-send and hope, the app states the limitation. If accurate revenue matters more than speed, wait for the invoice before qualifying.
The browser pixel deduplicates properly
The pixel on the page and the event sent from the server share an event id minted in the browser, so Meta counts a single action once rather than twice. Server-side reporting layered on top of a pixel without a shared id is the standard way accounts end up double-counting everything.
The window is seven days
Meta rejects any event older than seven days. The scan window is six days, and age-outs are settled before any network call is made — so a stale event is retired cleanly instead of being retried against an endpoint that will always refuse it. If your sales cycle routinely runs longer than a week, the Purchase half of this will not fire for those jobs; the Google pipeline and the dashboard's own revenue reporting are unaffected.
Meta Lead Ads
Connect your Facebook Page and lead-form submissions are ingested as leads like any other source, attributed to the ad that produced them. They appear in the Leads views alongside calls and website form submissions.
If you have set a lead webhook on the site, ingested Lead Ads are forwarded to it in the same way as a Bulk Pages form submission — so they reach your CRM without anyone exporting a CSV out of Meta's Lead Center.
The Meta Ads Uploader
Under Intelligence. It builds a batch of ads by copying the settings of an ad that already works, and it is built around one assumption: a bulk creator is the single place in the product where a misconfiguration spends real money before anyone notices.
The flow
- Ad account — read-only. It is one-to-one with the workspace, resolved from your Meta connection, so there is no picker to get wrong.
- Media — drag and drop, or paste an
https://link for anything past the inline cap. Uploads go to the ad account's own library, not to PPC TNT storage. - Copy settings from an existing ad — a three-column campaign → ad set → ad picker. The chosen ad's objective, targeting and copy become the template.
- Campaign & ad set options — where the ads land, and how they divide.
- Preview — the dry run, rendered as the table it returns.
- Ad text, creative enhancements, publication — with an asset-feed probe reporting what the account will accept.
- Create — returns a job id, and the right rail polls it live.
Four things that will save you a bad afternoon
Everything is created PAUSED. Unlike the tool this replaces. Nothing spends until you unpause it, which means the preview is worth reading rather than a formality.
The preview is the launch. The dry run is a server round trip, not a local computation, and the same planner builds the preview and executes the launch. What you approve is literally what runs. The preview endpoint performs no writes at all, which is what makes it safe to fire on every change.
Template text is a prefill, not a fallback. The source ad's copy is loaded into the fields once. After that the fields are the truth — clearing a headline clears it on the launched ads. Silent inheritance would mean somebody who deliberately blanked a field ships the source ad's copy and cannot see why.
The schedule card prints the ad account's clock. Meta reads a naive start time in the account's timezone, not your browser's. An operator in London scheduling midnight for a Los Angeles account is eight hours out unless they can see which clock applies — so the card names it.
Joining ad sets that already exist
The uploader can point a batch at ad sets already in the account instead of creating parallel ones. This is the difference between adding a creative round to an audience that has already finished learning, and restarting that learning from scratch. The preview marks each ad set as create or join so the choice is visible before you commit.
Everything resets on a workspace switch. The page's whole state belongs to one ad account, so an agency can run the same routine down a client list without anything carrying over.
Frequently asked questions
Do I need an fbclid for a call to be reported to Meta?
No. Meta matches on a hashed phone number or email alone, so a qualified call carrying no click id is still reportable. This is the opposite of Google, where a conversion without a gclid cannot be uploaded at all.
How far back can events be sent?
Seven days. Meta rejects anything older, so the pipeline scans a six-day window and settles age-outs before making any network call.
What if a job value is corrected after the Purchase event fired?
It cannot be communicated to Meta. Re-sending the same event id with a new value is either deduplicated or double-counted and the response cannot say which, so the app reports the limitation instead of silently re-sending.
Are ads created by the uploader live immediately?
No — everything is created paused. You unpause when you have read the preview and you are happy with it.
Does this replace the Meta Ads Agent?
No. The Agent is a chat interface for asking questions about the account and applying changes conversationally. The Uploader is for building many ads at once from a known-good template. They use the same connection.