
A Google Ads asset disapproved for an unverified phone number means Google could not confirm that the number belongs to the business in the ad. Google is not calling you or texting a code. It checks whether the number and the domain go together — either by finding that number as readable text on your landing page, or by confirming you own the domain through a linked Search Console property or a Google Ads tag on the site. If neither check passes, the asset stops serving. On accounts that run call tracking, the second check is the one you want, because the first one will keep failing no matter how many times you appeal.
This is one of the most common disapprovals we clean up when we take over an ads account, and it is almost never a fraud problem. It is a plumbing problem between the ad, the website and the call tracking layer.
What Google is actually checking
The policy covers call-only ads, call assets, message assets and location assets. Google's own unverified phone number policy puts the requirement in one sentence: the number must be in service and relate to the advertised company.
"Relate to the advertised company" is where people get stuck, because Google verifies the relationship in two ways and only tells you that it failed:
- The crawl check. The number appears as text on the ad's landing page, on the same domain as your display URL. Text baked into an image does not count, because there is no text there to read.
- The ownership check. You have proven you own the domain, by linking a verified Search Console property to the Google Ads account, or by having a Google Ads conversion or remarketing tag installed on the site.
The ownership check is the escape hatch. It says: this advertiser controls this domain, so the number they put in the asset is theirs to put there. Once it passes, Google no longer needs to go find the number in your HTML.
Most advertisers try to fix this at the ad level, and the fix lives at the account level.
Why call tracking numbers fail this check almost every time
Dynamic number insertion works by loading the page with your normal number in the HTML, then rewriting it in the browser with a session-specific tracking number. That is the entire point: the visitor sees a number tied to their click.
Google's policy review does not run your JavaScript the way a visitor's browser does. It reads the page as delivered. So in the source, the number is your main office line. In the call asset, the number is a tracking number from CallRail, CallTrackingMetrics, Invoca or whoever you use. Those two numbers do not match, the crawl check fails, and the asset is disapproved.
Every time we have seen this on an account running dynamic number insertion, the same two things were true: the tracking number was never present in the server-rendered HTML, and the Google Ads account had no Search Console link. Fix the second one and the first one stops mattering.
The wrong fix is to pull the tracking number out of the call asset. It clears the disapproval and quietly destroys your call attribution, which is how agencies end up reporting a sudden drop in phone leads that never actually happened. We wrote about that failure mode in more detail in our guide to fixing broken call tracking attribution.
The five causes we see behind this disapproval
In rough order of how often they turn out to be the real problem:
- No domain ownership signal and a JavaScript-injected number. The default state of a call tracking setup that nobody linked to Search Console. This is the big one.
- The number is only on the page as an image or a styled graphic. Common on design-led sites where the phone number sits inside a hero banner or a header image.
- Landing page domain doesn't match the display URL. A campaign pointing at a third-party booking page, a subdomain, or a separate landing page builder. Google looks at the domain in your display URL, and the number needs to live there.
- Formatting mismatch. The asset has one format, the page has another. Cheap to rule out, so rule it out early rather than arguing about it.
- The number isn't in service, or it's a vanity number. Ported numbers that were never fully cut over, or an alphanumeric number that Google will not accept. Call it from a phone that isn't yours before you assume this one is fine.
How to fix it without losing attribution
The order matters more than the individual steps. Doing them out of order is what turns a 48-hour fix into a fortnight of resubmissions.
Link Search Console before you touch the number
Verify the exact domain in Search Console, then link that property to the Google Ads account. This is what removes the dependency on the crawl. If you manage multiple client accounts, do this on every account during onboarding, whether or not anything is currently disapproved.
Make the page and the asset agree
Have a real, server-rendered phone number in text on the landing page, on the same domain as the display URL. If your call tracking platform can server-render the swapped number, use that. If it can't, make sure the static number in the source is the same one you put in the call asset, and let the tracking layer handle the rest.
Resubmit once, then wait
Edit, save, walk away. Automatic review typically finishes in 24 to 48 hours. Editing again the next morning restarts it. Google gives at least seven days' notice before this policy escalates to anything account-level, so a disapproved asset is a task, not a fire.
Handle location assets in Business Profile
If the disapproved asset is a location asset, the number is coming from the linked Business Profile, and editing it in Google Ads usually changes nothing. Fix it in the profile, confirm the profile is verified and not suspended, then recheck.
What about numbers pointed at an AI voice agent?
This is the version of the problem we run into most now, and it catches people off guard. You provision a number through Twilio or your voice platform, point it at an inbound agent, and drop it into a call asset. That number has never appeared on the website, was never in a Business Profile, and has no history tied to the brand. From Google's side it looks exactly like a random number attached to someone else's business.
Same two fixes, same order. Prove domain ownership first, and get the number onto the site as text — even if it's a small "call our booking line" block in the footer. We treat this as a launch checklist item on every voice deployment now, alongside the call recording disclosure and the transfer path. If you're building that stack, our notes on routing missed calls into automated follow-up and on running voice agents as an agency cover the pieces around it.
One more thing worth checking while you're in there: if you're importing call conversions back into Google Ads, confirm that pipeline still works after the change. The move to the Data Manager API changed how those imports are wired, and a disapproval fix is a good excuse to verify the whole chain rather than just the part that was red.
What doesn't work
- Appealing without changing anything. The appeal goes to the same automated check that just failed. Change something first, then appeal.
- Swapping in a different number to see if that one passes. It won't, for the same reason, and now you've restarted the review with a number your call tracking isn't expecting.
- Adding the number in a
tel:link only. If the visible text is still an image or the link is written by a script, there's nothing for the crawler to read. - Waiting it out. Disapproved assets do not heal. They just stop serving, and on a call-driven account that is most of your lead volume.
The whole thing usually resolves in one afternoon of work and two days of patience. The reason it drags on is that the error message points at a phone number, and the actual fix is a domain ownership link that has nothing to do with phones. Once you know that, it's a checklist.
Get a Free Automation Audit
If your call assets keep getting disapproved, or you're not sure whether your call tracking and conversion imports still line up after the last round of fixes, we'll look at it. Our team runs paid ads management alongside the attribution and automation stack behind it, so we check the whole path — ad, asset, landing page, tracking number, conversion import — instead of one broken piece.
Request a free automation audit and we'll send back what we find, including anything currently disapproved that you haven't been told about.
