Real fixes from seven live sites. No pitch.Log in / My reports
Idea to Traffic Pressure Test

Analytics: wiring GA4, Search Console and AdSense together

Analytics fails quietly for two reasons: the wrong ID in the wrong place, and products owned by different Google accounts. This hub explains the measurement ID, the property ID and the publisher ID, the single-account rule behind an empty AdSense link picker, and how to confirm the tag fires before trusting an empty report.

Analytics is the stage of a launch that fails without producing an error. The site either reports numbers that belong to something else or reports nothing at all, and from the dashboard those two outcomes look identical. Across the seven live sites in this network the same three causes keep appearing: the wrong identifier pasted into the wrong field, two Google products that refuse to connect because they sit under different accounts, and a report treated as evidence before anyone confirmed the tag was firing. None of the three announces itself, which is why this stage quietly absorbs afternoons.

Three identifiers, one word for all of them

The first failure is vocabulary. A GA4 measurement ID of the form G-XXXXXXX goes in the page tag, and it is the only one of the three that ever appears in your HTML. A numeric GA4 property ID is what the reporting API needs, and it sits on a different screen from the measurement ID. An AdSense publisher ID of the form ca-pub-0000000000000000 belongs in ads.txt and in the ad code. The interface calls all three "ID". The rule that sorts them: if something asks you to paste into a website, it wants the measurement ID; if something is a script or an API call, it wants the numeric property ID; if the file is ads.txt, it wants the publisher ID. Sent the wrong number, the reporting API answers with a permission error rather than a useful one, which sends people auditing service account access for what is really a copied digit.

An empty picker is an answer, not a bug

Linking GA4 to AdSense requires edit rights on the Analytics property and administrator access on AdSense, held by the same signed-in Google account. When those permissions live under two different logins, the publisher picker returns "No results found" with no explanation, so hunting through settings is wasted effort. Sign in as the account that already owns AdSense and reopen the link screen, because that changes nothing permanent. Adding a second AdSense administrator is a permanent change to who controls a revenue account, and it is a poor trade for a temporary inconvenience. When two products need connecting and one of them controls money, grant the access on the side that does not.

The account boundary in this network

Our own setup contains exactly the split that produces these empty screens. The Google account that owns Search Console and AdSense is a different account from the one that owns the Google Cloud project behind the analytics API. Signing in with the wrong one does not return an access error. It returns a page that looks empty, and that difference is the whole cost. An access error names the problem in one line. An empty page invites an hour spent debugging your own code. The habit that removes this class of problem is clerical rather than technical. We keep a one-page account ownership sheet with the columns Service, Property or ID, Owning Google account, Admins, and Date verified, and filling it in takes less time than reconstructing it once.

Why an empty report proves nothing

The GA4 property and web stream for this site were created on 2026-09-07, and the tag was verified firing end to end against the Realtime report rather than merely confirmed to be present in the HTML. In the seven days to 2026-09-27 the site recorded 4 pageviews from 5 sessions, a figure small enough to be indistinguishable from a tag that was never installed. A working tag on a site with no traffic and a broken tag on a site with traffic produce the same near-empty screen, so the empty screen is not a diagnosis in either direction. The sequence that keeps this honest is to check the shipped HTML for the measurement ID, load the page yourself while watching Realtime, and only then read the numbers as numbers. On a multi-site network this catches a copied template still carrying the previous site's measurement ID, which routes one site's traffic into another site's reports and is close to invisible from inside Analytics, because the traffic is there and simply belongs to the wrong property.

The guides below take these apart in order: which ID belongs where, what an empty AdSense picker is telling you, and how to confirm a tag fires before trusting or distrusting a report. Silence is the normal symptom at this stage, so verification has to be deliberate rather than triggered by something visibly going wrong.

Start here

GA4, Search Console and Bing: the setup explained. Get the three IDs straight before you try to link anything to anything.

Every guide in this hub, in order

The calculator that goes with this stage

Time to First Dollar. Analytics tells you where you are now. This tells you roughly when the number stops being zero, so you know whether an empty report is a problem or just early.