Send call conversions to Google Ads
Who this is for: buyers running Google Ads traffic to a landing page with a phone number on it.
What you’ll need: admin access to the Google Ads account, the ability to edit the landing page <head>, and a Moja number pool for DNI.
Time: about 30 minutes, plus a wait for the first scheduled upload.
Where this lives: Integrations → Manage on the Google Ads card (Overview / Configuration) · Numbers → Snippets · Reporting / Call Tracking
Moja uploads eligible call conversions back to Google Ads so you can optimise on call outcomes instead of clicks. The whole integration rests on one requirement: Moja must have a supported Google click identifier attached to the call. Everything below exists to make that true.
How it works
Section titled “How it works”flowchart LR
A[Visitor clicks the ad<br/>lands with gclid] --> B[Moja snippet loads<br/>captures session + click ID]
B --> C[DNI swaps the number<br/>from the pool]
C --> D[Visitor calls the<br/>inserted number]
D --> E[Moja ties the call<br/>to the session]
E --> F{Eligible<br/>conversion & routing?}
F -->|yes| G[Apply Traffic Rules<br/>route to Upload Targets]
G --> H[Upload to each eligible<br/>target on a schedule]
F -->|no| I[Call tracked in Moja,<br/>not uploaded]
-
The visitor clicks a Google ad. Google sends them to the landing page with a supported click identifier —
gclid,gbraid, orwbraid. -
The Moja snippet loads and captures the visitor session together with any supported click identifier on the URL. If the visitor later navigates or reloads without those parameters, the snippet preserves the Google Ads click ID and its upload‑routing information across page loads for up to 90 days (where browser storage is available). A newer ad click replaces any previously saved click.
-
DNI replaces the phone number with a Moja tracking number from the configured pool.
-
The visitor calls. Because they dialled the inserted number, the call is associated with the snippet session and the captured click identifier.
-
Moja evaluates the conversion. If the call is eligible, Moja applies Traffic Rules and Unmatched Call Routing to choose Upload Targets, then checks each target’s Connected call length minimum.
-
Moja uploads to Google Ads on a schedule for each selected Upload Target the call meets. Failed uploads are retried automatically, up to the configured retry limit.
Why the snippet and DNI are not optional
Section titled “Why the snippet and DNI are not optional”Without the snippet, Moja usually cannot see the website session or the click identifier — the call will appear in Moja but be ineligible for upload. Without DNI, the visitor dials a static number that carries no session, with the same result.
Static-number calls are still tracked in Moja, and existing call tracking is unaffected. They just cannot be uploaded as Google click conversions.
| Identifier | Where it comes from |
|---|---|
gclid |
Standard Google Ads auto-tagging |
gbraid |
iOS app-to-web click paths |
wbraid |
iOS web-to-web click paths |
If none of the three is present on the call, it cannot be uploaded as a Google click conversion. That is the first thing to check when a conversion is missing.
What’s included
Section titled “What’s included”- Google Ads conversion postbacks — upload eligible Moja call conversions to Google Ads
- Upload Targets — linked Google Ads accounts and conversion actions that may receive conversions; each target can require a minimum Connected call length
- Traffic Rules — route eligible calls to one or more Upload Targets using URL
moja_ga_routevalues or supported snippet matches; see each target’s Connected call length condition and preview eligibility for an example call length - Unmatched Call Routing — choose No Default Destination (recommended for multi‑account setups; fail closed) or Send Unmatched Calls to a Default Destination (with ownership confirmation for multi‑account defaults). When Strict Routing is active, unmatched calls stay unroutable.
- Historical Call Recovery — frozen preview of eligible historical calls, then confirm and queue within Google’s 90‑day upload window
- Supported click identifiers —
gclid,gbraid, andwbraid - Moja snippet + DNI — capture attribution and connect the session to the call
- Per–Upload Target delivery reporting — routing source and Traffic Rule context, with independent results and Google errors per target; skipped targets (below Connected call length) listed separately from Google upload failures
- Delayed upload processing & retries — eligible conversions processed on a schedule; failed uploads retried up to the configured limit
Before you begin
Section titled “Before you begin”- Google Ads auto-tagging is enabled, or supported click identifiers are otherwise preserved on your landing-page URLs
- Linked Google Ads accounts and conversion actions exist for calls
- A Moja number pool is provisioned for the landing page
- You can edit the landing page
<head>— directly or through a tag manager - If the Google account you connect belongs to a Google Workspace that restricts third‑party apps, a Workspace admin has allowed Moja AI: in the Google Admin console, Security → Access and data control → API controls → Manage App Access (some consoles say Manage third‑party app access). Otherwise Google can sign you in but withhold the Google Ads permission (see Troubleshooting). Workspaces that don’t restrict third‑party apps need no admin change
Step 1 — Open the Google Ads integration
Section titled “Step 1 — Open the Google Ads integration”-
In Moja, open Integrations in the sidebar, then click Manage on the Google Ads card.
-
On Overview, confirm connection health, Uploads Active status, Enhanced Conversions for Leads readiness, and any reconnect, permission, account‑access, or temporary‑error guidance.
-
Open Configuration.


Expected result: Google Ads is connected and shows Overview and Configuration tabs. There is no Connection tab — connection health, linked accounts, and Remove Integration are on Overview.
Step 2 — Create Upload Targets and set Connected call length
Section titled “Step 2 — Create Upload Targets and set Connected call length”-
In Configuration → Upload Targets, create or review targets for the linked Google Ads accounts and conversion actions that may receive conversions.
-
When adding or editing a target’s condition, set Connected call length (minutes and seconds). 0:00 means no minimum (previous behaviour). Only targets a completed call meets will be uploaded; targets below the minimum are skipped with a reason and are not treated as Google upload failures.

Expected result: Upload Targets exist for each intended account/action, with any required Connected call length set.
Add financial conditions to an Upload Target
Section titled “Add financial conditions to an Upload Target”Use Financial conditions to decide whether an otherwise eligible call can upload to a specific target based on its buyer revenue, publisher payout, or converted status. These conditions are separate from the tag filter and do not change the conversion value sent to Google Ads.
-
Open Integrations, click Manage on the Google Ads card, and go to Upload Targets in Configuration. Forms such as add or edit upload target open in a side drawer.
-
Add or edit the target’s conditions. Find Financial conditions below the tag filter.
-
Turn on Only upload when financial conditions match.
-
Choose a source, operator, and value for each condition:
- Buyer revenue — compare the buyer revenue amount using equals, not equals, greater than, or less than.
- Publisher payout — compare the publisher payout amount using equals, not equals, greater than, or less than.
- Converted — choose yes or no, with equals or not equals.
-
Combine conditions with AND when all must match, or OR when any may match.
-
Save the target’s conditions. Configure each Upload Target separately.
For example, use Buyer revenue greater than 0 AND Converted equals yes to require both positive buyer revenue and a converted call for that target. Use Buyer revenue greater than 0 OR Publisher payout greater than 0 when either positive amount should satisfy the financial conditions. These are configuration examples, not test results.
Step 3 — Create Traffic Rules and choose Unmatched Call Routing
Section titled “Step 3 — Create Traffic Rules and choose Unmatched Call Routing”-
In Configuration → Traffic Rules, create rules for URL
moja_ga_routevalues or supported snippet matches, then select the Upload Target or Targets for each rule. -
Use Traffic Rules to see each target’s Connected call length condition and preview which targets an example call length would meet.
-
Under Unmatched Call Routing, choose:
- No Default Destination to upload only calls that match a Traffic Rule (recommended for multi‑account setups; fail closed), or
- Send Unmatched Calls to a Default Destination, then select the intended Upload Target. Multi‑account defaults require an ownership confirmation and are not used as failover after a rejected upload.

Expected result: Traffic Rules are defined and an explicit unmatched‑call policy is set.
Step 4 — Review Overview status
Section titled “Step 4 — Review Overview status”Confirm Uploads Active is enabled through at least one active Traffic Rule. Calls without a matching Traffic Rule remain unroutable.
Step 5 — Create the snippet
Section titled “Step 5 — Create the snippet”-
Go to Numbers → Snippets.
-
Create or edit a snippet for the landing page.
-
Configure the snippet fields:
- Snippet Name — the label you will recognise later
- Campaign (Default) Number — the number used when DNI cannot serve a pool number
- Number to Replace — the static website number that should be swapped out
- Number Pool — the pool of Moja tracking numbers DNI draws from
-
Confirm Enable Number Replacement is on.
-
If the site spans multiple domains, review Linked Domains so the visitor ID survives the hop between them.
Expected result: the snippet is listed with number replacement enabled and a pool assigned.
Step 6 — Install the snippet on the landing page
Section titled “Step 6 — Install the snippet on the landing page”Copy the snippet code from Edit Snippet and paste it into the <head> section of the landing page.
The snippet is generated per account, so copy it from your own portal rather than from any example. Full reference in DNI and DNI tracking tags, snippets, and number pools.
Expected result: loading the landing page with ?gclid=test123 on the URL shows a pool number in place of the static number.
Step 7 — Verify it works
Section titled “Step 7 — Verify it works”-
Open the landing page from a URL containing a supported click identifier.
-
Confirm the displayed phone number changed to a pool number.
-
Call that number and let the call complete normally.
-
Open Reporting / Call Tracking and find the call.
-
Confirm the call shows a captured tracking identifier.
Useful labels and columns in Reporting / Call Tracking:
| Label / column | What it tells you |
|---|---|
| WITH GCLID | Calls that arrived with a captured Google click ID |
| CONVERSIONS | Calls counted as conversions |
| UPLOADED | Conversions that have been uploaded back to the ad platform |
| Tracking IDs | The captured tracking identifiers on the call |
| Conversion Value | Type | Conversion value and conversion type on the call |
Success looks like: the test call appears WITH GCLID, is counted under CONVERSIONS if it met the conversion rule, and moves to UPLOADED after the next scheduled upload run.
Upload timing and retries
Section titled “Upload timing and retries”- Conversions are not uploaded instantly.
- Uploads are delayed to respect Google Ads requirements and any configured upload delay.
- Eligible conversions are processed automatically on a schedule.
- If Google Ads is temporarily unavailable or an upload fails, Moja retries automatically up to the configured retry limit.
Historical Call Recovery
Section titled “Historical Call Recovery”Recover earlier eligible calls without auto‑releasing them:
- In Configuration → Historical Call Recovery, choose a date‑and‑time range within Google’s 90‑day upload window.
- Optionally enter Exact Call IDs.
- Select Preview Historical Calls to see a frozen preview of eligible calls, Traffic Rules, Upload Targets, default‑routed calls, and unroutable results.
- Confirm the exact scope, then Queue This Historical Scope.

Preview and execution apply the same Connected call length check as live uploads. Delivery stats and the preview list skipped targets separately from Google upload failures.
Troubleshooting
Section titled “Troubleshooting”| Symptom | Likely cause | Fix |
|---|---|---|
| Google Ads shows Permission Needed after you connect, and no accounts load | Google accepted the sign‑in but didn’t grant the Google Ads permission. Either Google Ads was unticked on Google’s consent screen, or a Google Workspace policy blocks third‑party apps. Google Ads or manager‑account admin rights alone don’t fix this | If the account belongs to a Google Workspace that restricts third‑party apps, first have a Workspace admin trust Moja AI in the Google Admin console under Security → Access and data control → API controls → Manage App Access (some consoles say Manage third‑party app access). Then, for any account, remove the old connection (in the Google account’s third‑party connections, and with Remove Integration in Moja), reconnect, and approve Google Ads on Google’s consent screen, not just your email and profile. If it still fails, contact Moja support, and include the details from Copy details if the page shows them |
| Calls appear in Moja but never upload | No gclid, gbraid, or wbraid was captured on the call |
Work through the row below |
| No Google click ID on any call | Auto‑tagging is off; the click identifier was never present before the snippet first ran; the snippet is not installed or loads after the visitor calls; or the number was never replaced. Stripping query parameters on later pages does not remove a previously captured click ID. A click ID appended only after a page has already loaded may not replace an older saved click. | Check each in that order — auto‑tagging first, snippet placement last |
| Static-number calls are not uploading | Expected. Static-number calls usually carry no session and no click identifier | Route those visitors through DNI if the calls should be attributed |
| The wrong number is being replaced | The snippet’s replacement configuration is matching a number that should stay static | Review Number to Replace and confirm which numbers the snippet is allowed to touch |
| The number changes on one domain but not another | Cross-domain visitor ID is not being carried | Review Linked Domains on the snippet |
| Conversion uploaded, but the value is wrong | Conversion value or type is set differently in Moja and Google Ads | Compare the Conversion Value | Type column against the Google Ads conversion action |
| Eligible calls are not uploading (unmatched) | Routing or status is preventing upload | Confirm Uploads Active on Overview. Confirm Traffic Rules match the call’s moja_ga_route or snippet. If No Default Destination is selected, unmatched calls stay unroutable by design. If using a Default Destination, confirm the selected Upload Target and any required ownership confirmation for multi‑account defaults. Review per–Upload Target delivery reporting for routing source, Traffic Rule context, and Google errors. If a target was skipped for Connected call length, confirm the call’s Call Length meets the target’s minimum. |
Related
Section titled “Related”- Find and manage integrations
- DNI tracking tags, snippets, and number pools
- DNI developer reference
- Send call conversions to Meta Conversions API
- Track affiliate IDs with DNI on shared landing pages
- Call log column dictionary
Last reviewed: October 2026.

