Conversion tracking setup with one source of truth per action.
Implementation work for Google Ads and Meta conversion tracking: one measurement path per conversion action, counting and bidding settings chosen on purpose, and closed revenue sent back to the platforms. For teams that already know what needs building.
What this covers
This is the build, not the diagnosis. Conversion tracking for Google Ads and Meta, implemented across your tag manager, site and CRM, so every action you sell or capture is measured once, by one system.
One source of truth per conversion action. Each business action gets exactly one measurement path: a native Google Ads conversion tag, an imported GA4 key event, or an offline import. The choice is written down before anything is built. Where a duplicate is already live, retiring the losing path is inside this scope rather than a ticket you inherit.
Counting decided once, and recorded. Every conversion action and every GA4 key event leaves the build with its counting method set deliberately and the reason recorded in the register, and the Google Ads setting and the GA4 setting are decided together rather than one at a time. That happens on the scoping call, against how your business actually repeats: whether the same customer buying again is a second sale, and whether the same person submitting a form twice is a second lead.
Primary and secondary, assigned then locked. The build ships with one named primary action per campaign, the one whose count you want in that campaign’s Conversions column and steering its bidding, and everything upstream of it set secondary. Because a campaign can override the account default, the register records the goal each action sits in and any campaign that departs from it, rather than one flag per action. The register is the deliverable: it is what makes the next promotion a decision someone signs rather than a checkbox someone reasonable ticks.
Enhanced conversions, built from a named source. Web and leads are built against the same rule: the identifier is captured at the moment the customer supplies it, normalized to Google’s format, and hashed exactly once. That means naming a real source for every field on your site rather than scraping a confirmation page that no longer holds it, and stating in the spec what happens on the paths where a field is absent.
Offline conversion import. Built as one path: the click identifier captured on landing and persisted, written to the CRM record at submit, hashed contact details as the fallback for records that lose it, and the return leg that sends stage changes back with a conversion time and a value. The conversion window on the action is set as wide as the platform allows if your deals need it, before the first upload rather than after one fails. The platform caps that window, so where the sales cycle runs past the ceiling, closes that land outside it cannot be imported against the click. That is said during scoping, not discovered on the first upload.
Meta pixel and the Conversions API. Both paths are built and deduplicated on a shared event ID, and Events Manager is the sign-off rather than the configuration screen. Where the server path runs on your own infrastructure rather than a hosted relay, that is a server-side tagging build and is scoped there.
How it runs
Scope comes before price. A call establishes which actions matter, which systems hold the data, and which pieces need a developer on your side. The work is quoted fixed-price against that scope.
The spec is the first deliverable. Which system owns which action, where the click identifier is captured and where it is stored, the normalization and hashing rules for every user-provided field, the counting setting on each action, and what is deliberately not measured. A build with a written spec can be checked; a build without one can only be trusted.
Nothing is constructed in your live container. Tags are built and tested in a separate GTM workspace, across consent accepted, refused and left unanswered, on desktop and mobile with the connection throttled. Everything publishes as one named version referencing the spec, so the whole set reverts in a single action, and nothing publishes until you approve it.
Verification happens at the destination. A tag that fires is not a conversion that counted. Each action is checked against your own orders, leads or CRM records over the same window and timezone, and the difference the platforms are expected to have is stated up front rather than argued later.
What you get
A working implementation, with evidence per action. The request, the payload, and what the platform recorded, before and after, for every conversion action touched.
A conversion action register. One row each: source, counting setting, the goal it sits in and any campaign override, window, owner. This is what stops the next duplicate being created by someone acting reasonably.
The measurement spec as a maintained file, including normalization and hashing rules and the identifier scheme, so a developer can extend it without reopening the decisions.
A recorded walkthrough and a support window. What was built, where each piece lives, and questions answered after handover for a period agreed in the scope.
When this is the wrong fit
The brief is to find out why the numbers disagree. Diagnosis is separate work and it comes first. Scoping a build against a guess is how the wrong thing gets built well.
You want the reporting layer. Dashboards, attribution modeling and blended reporting sit on top of collection. This is collection.
Your CRM cannot store a field or return a list. Offline import needs both. Where neither is possible that part is scoped out rather than quietly promised.
You want tracking that ignores a consent choice, or someone to run the accounts. Neither happens here. Tags are built to respect the state the visitor left. The output is a signal your media buyer can rely on.
Most builds start with the Missing Conversions Audit, because it produces the input a scope is hardest to write without: which actions are miscounted, and by how much. It is $900 flat, and the fee is credited in full toward the implementation that follows. If you already know what needs building, say so on the call and the build is scoped directly.
Questions
Can you build this without a developer on our side?
Often, and where a developer is needed you are told before anything is quoted. Most tag work, the counting settings, the primary and secondary assignment and the Meta browser path can be built in the container against data your pages already expose. Three things usually need your developer: writing the click identifier to the CRM record at submit, sending server-side events from your own infrastructure, and exposing a value that exists only in your backend. Those are named in the spec so the work can be scoped on your side before the build starts, rather than discovered halfway through it.
What happens to conversion history when you change which system owns an action?
The history stays with the old conversion action and the new one starts empty, so bidding has to relearn on it. That is why the changeover is run deliberately rather than as a swap: both paths record for a period with only one of them primary for the campaign, until the new action carries enough volume to drive bidding, and then the old one is retired rather than left switched on. The changeover date is recorded, so a year-over-year comparison later reads a deliberate migration as a migration instead of as a collapse in performance.
Do you need access to our CRM to build offline conversion import?
What is needed is the ability to store one field against a record and to return a list containing that identifier, a stage, a timestamp and a value. Whether that arrives through a native export, an API or a scheduled file does not change the measurement design, and it is settled on the scoping call. If your CRM can do neither, offline import cannot be built on it. That gets said before the work is scoped rather than after it is paid for, and the enhanced conversions path is scoped instead where hashed contact details are available.
Start hereThe Google Ads conversion tracking auditMost of this work is scoped from what the audit finds, and the $900 is credited against it.
Related services
Next step
Find out what this is costing you.
The Missing Conversions Audit is a fixed-price teardown of your GA4, Google Tag Manager, ad pixels and consent setup. Every gap logged, the top 10 fixed and validated. $900 flat. 5 business days.
A 15 minute call
- We look at your setup from the outside and say what we can already see.
- You get a straight answer on whether the audit is worth it for your account.
- If it fits, we book the slot and send the access checklist.
Opens the calendar here. Nothing loads from Calendly until you do.
Prefer email? hello@missingconversions.com