Behind the Numbers
Suddenly Singapore: When bots distort your GA4 numbers
At first, the dashboard looks encouraging. More visitors, more pageviews, a healthy climb in the chart. Perhaps a story is taking off?
A closer look makes things less clear. A large share of the additional traffic comes from Singapore. Visits are spread across old articles that barely feature in the current editorial day. And while GA4 reports a lot more activity, NowMetrix shows a much quieter picture.
That is usually when the question comes up: which number can we actually trust?
Other website owners are noticing it too
There are several reports along these lines in Reddit's r/GoogleAnalytics community. Website owners describe unexpected visits from Singapore and China, unusually high numbers of desktop users, and traffic that does not seem to match their usual audience.
In a discussion about Singapore and Lanzhou, the author reports that visits still appear in GA4 after blocking those countries in Cloudflare. They cannot find corresponding country IP addresses in their server logs.
Another user describes a spike spread across thousands of URLs. The unusual visits are concentrated on Windows and one particular Chrome version, with very little measured engagement.
These are accounts from website owners, not completed technical investigations. But they do show that anyone puzzled by this kind of traffic is not alone.
Doesn't Google Analytics filter bots automatically?
It does. Google's documentation on bot filtering says that known bots and spiders are automatically excluded. Google uses its own research alongside a list maintained by the industry body IAB.
The important word is “known”.
Automatic filtering does not mean that every recorded pageview comes from a person. The Reddit reports are therefore compatible with GA4 already removing bots. Unusual data can still remain. Google's documentation also says that users cannot see how much known bot traffic was excluded.
For a newsroom, that leaves a practical task: investigate an unusual spike before turning it into a story about audience growth.
Why top articles can match while the totals differ
When comparing GA4 and NowMetrix, people usually start with their successful stories. That makes sense. If the most important articles have similar pageview counts in both systems, tracking appears to be working overall.
But the total includes everything else as well.
Just one additional view on each of 20,000 different articles adds up to 20,000 extra pageviews. None of that might be visible in a top-50 list. In the daily report, the difference suddenly looks substantial.
That is why it helps to look at pages with low view counts. Is the discrepancy spread across the archive? Are there lots of isolated visits? Do they mostly come from one country or one browser group?
This pattern can point towards automated traffic. It still needs to be checked alongside whether both tools measure the same period and website, and whether both trackers are installed correctly.
Why a Cloudflare block does not always answer the question
The term “ghost traffic” comes up frequently in these discussions. It refers to apparent visits in an analytics report that may have no corresponding visit to the actual website.
The website and Google Analytics' data collection are separate destinations. For example, GA4 can receive events sent from servers through the Measurement Protocol. There are legitimate reasons to do this. It also illustrates why an analytics event does not automatically establish that a new page request reached the website's server.
If false events arrive directly at an analytics service, a firewall in front of the website cannot stop that transmission. Whether this explains a particular case needs investigation. Missing entries in the web server log alone are not enough: a CDN can serve pages from its cache, and different services may assign different countries to traffic.
There are several possible routes to an unusual number. Changing how your own tracker sends data will not automatically address all of them.
Where we would start investigating
A useful first comparison does not need to become a huge project. One carefully defined day and a few focused questions often achieve more than ten extra reports.
- Match the period and the website. Compare GA4 and NowMetrix for the same completed day in the same time zone. Check the hostname too: do the GA4 figures include subdomains or additional websites?
- Start with pageviews. User counts also depend on how people are recognised and how a tool defines a user. Pageviews are usually easier to trace as a starting point.
- Break down the unusual traffic. Country, browser, operating system, device category and screen resolution can help show whether the discrepancy is concentrated in one group. Look at the affected articles and engagement alongside them.
- Trace a few specific pages. Compare matching time windows in the website's CDN logs and the tracking logs. A page request and a message to an analytics endpoint are two separate things.
A country or screen resolution on its own is not enough reason to block visitors. The useful evidence comes when several signals line up and the pattern can also be found in the technical data.
Check GA4 yourself: country, single views and browsersCollapse guide
Using Singapore as an example: We are looking for pages that received exactly one view from this country on a particular day, across all browsers combined. You can find the traffic in GA4. We then use a CSV export to select the pages with exactly one view, with either Excel, ChatGPT or Claude.
1. Open the pages report
Select the relevant GA4 property and open Pages and screens under Reports. Depending on your navigation, it may be under Engagement or a collection based on your business objectives. Google's pages report guide explains the available routes.
2. Choose a day and a country
Use the date picker at the top right to select one completed day, such as the day before yesterday. Click + Add filter, select Country, choose exactly matches, then select Singapore from the list. Click Apply. If the property contains several websites, add a condition for your website's Hostname in the same filter. These steps are also covered in Google's report filter instructions.
3. Show articles alongside browsers
Above the first table column, select Page path and screen class. Click the + beside it and add Browser as the secondary dimension. The table now shows Views from the selected country for each page path and browser combination.
4. Export the table
At the top right, choose Share this report → Download file → Download CSV. You now have two options: use ChatGPT or Claude as explained below, or follow the Excel PivotTable instructions from step 5. Either way, count only the actual data rows; exclude comment lines and any overall summary row from your article data. GA4 exports up to 100,000 data rows. If the export reaches this limit, or GA4 shows a grouped row such as “(other)”, the individual-page analysis may be incomplete.
Alternative: Analyse it with ChatGPT or Claude
Not in the mood for PivotTables? You can also upload the CSV file to ChatGPT or Claude and ask it to do the analysis. This takes care of steps 5 to 7 for you. Attach the full export from step 4 and copy the prompt below into your chat. Replace the details in square brackets first.
Prompt to copy:
Analyse the attached GA4 CSV export. Use code, such as Python, to calculate the result from all data rows.
I already selected the following in GA4:
- Day: [date]
- Property time zone: [time zone]
- Country: [country, e.g. Singapore]
- Hostname: [hostname or "no hostname filter"]
Find page paths with exactly one view in total within this selection, broken down by browser.
1. Inspect the file and any metadata. The required columns are Page path and screen class, Browser, and Views, or their translated equivalents. Country and hostname do not need separate columns if they were already filtered in the report. Flag conflicts with my details and ask if columns are missing or the selection is unclear.
2. Parse views as numbers, accounting for thousands separators. Do not count comment lines or overall summary rows as pages. First sum each page path's views across every browser and data row. Only then keep page paths with a total of exactly 1. An article with one Chrome view and one Safari view has 2 views in total and must be excluded. Do not use user or session counts for this.
3. For the selected page paths, show a table sorted by views: browser, views, and percentage of all selected views. Keep unknown browsers as a separate category. Check that the browser totals equal the number of selected page paths. Say explicitly if there are no matches.
4. Report the number of page paths analysed, their total views, and how many page paths have exactly one view. Also provide these selected page paths with their browser and views as a CSV. Briefly explain the calculation and show three example rows, if available.
Flag export limits, grouped rows such as "(other)", and missing page paths; do not treat them as individual articles. Limit the findings to this export, do not invent missing values, and do not infer proof of bot activity from this pattern alone.
Then check a few of the resulting page paths against the original export. The key is to add up all views for each article before filtering. If you prefer to do the analysis in Excel, here is how:
5. Add up the views for each article
Import the CSV file into Excel and use the data table with its column headings. Select it and choose Insert → PivotTable. Drag Page path and screen class to Rows, Browser to Columns, and Views to Values. Check the Value Field Settings and make sure the calculation uses Sum of Views. The total on the right now shows each article's views across all browsers combined.
6. Keep only pages with exactly one view
In the PivotTable, open the filter for the row field Page path and screen class, or Row Labels. Choose Value Filters → Equals, select Sum of Views, and enter 1. This excludes an article with one Chrome view and one Safari view: it has two views in total. Microsoft explains the controls in its guide to filtering data in a PivotTable.
7. Read the browser breakdown
The Grand Total row at the bottom now shows how many of these single views came from Chrome, Safari and other browsers. If totals are missing, select Design → Grand Totals → On for Rows and Columns. To calculate a browser's percentage, divide its total by the total for all browsers. Keep every browser in the table for this calculation, and exclude filtered-out articles from the grand totals. Microsoft's guide to grand totals explains the options.
What the result means: Exactly one view per page path within the selected country and period. The same article may have additional views from other countries. This is neither “one view per user” nor “one view per session”, and it is not proof of bot activity on its own.
How we approach this at NowMetrix
At NowMetrix, bot filtering is part of our ongoing product work. We filter recognised bot traffic out of collection and continue to maintain the rules. A newsroom needs to know which stories people are reading and where audience interest is growing.
That is why we investigate discrepancies with GA4. We compare articles, periods and traffic groups, then examine where the numbers diverge. A lower number can result from effective bot filtering. It can also indicate a tracking problem. Making that distinction is part of providing dependable analytics.
Our aim is for the numbers in your live dashboard to be useful throughout the editorial day. A spike should help you spot a story, prioritise an update or follow up on a topic. That means paying attention to what happens behind the chart as well.
If your GA4 numbers suddenly look different or diverge significantly from NowMetrix, get in touch. We will look at the specific case together and investigate the difference.
Want to see what NowMetrix looks like with your own traffic? Try NowMetrix for free and watch live which stories are getting attention.
Try NowMetrix for free →