16 days ago I deployed to live for first time SysWP Radar — server-side analytics for WordPress.
Today's numbers:
- +590K events captured across 19 sites
- +12K AI crawlers identified (GPTBot, ClaudeBot, etc.)
- +82K suspected attack attempts (wp-login probes, exploit signatures)
- 8 accounts (2 paying, both Pro tier)
Why server-side: most analytics (Plausible, GA, GoatCounter) need JS to fire.
If a visitor doesn't execute JS — bot, attacker, crawler — they vanish from reports. Radar combines a pixel for HTML pages with a WordPress plugin that beacons server-side, covering wp-json/, xmlrpc.php, wp-login.php.
Stack: vanilla PHP, no Composer, MariaDB. The plugin is on wp.org.
What worked in 16 days:
- WP.org plugin listing → organic acquisition (1 customer)
- LinkedIn announcement → friends/network (8 sites onboarded)
- Privacy-first positioning (IP anonymization on by default, LGPD/GDPR compliant)
What didn't:
- HN Show HN today got auto-flagged (account too new, lesson learned)
- Cold outreach paused (no time)
Next 14 days: pause on features, push on distribution.
Link: https://radar.syswp.com.br
Genuine feedback welcome.
Top comments (3)
@syswp_br the gap between server-side and client analytics is wider than most expect. On one site server logs counted 20 percent more sessions than JS after adblock and consent drop. That changed dashboards for me.
Sorry if my English sounds weird!!
that 20% is consistent with what I see across the sites in this dataset — the gap ranges 15-60% depending on the audience.
What surprised me most when I started measuring: it's NOT just adblock. Consent banners that block trackers until accept-click = entire chunks of EU sessions invisible to JS. AI crawlers (GPTBot, ClaudeBot, PerplexityBot) entirely missing. Server logs catch RSS readers, archive.org snapshots, curl probes — none of which JS will ever fire on.
(Your English reads great, no need to apologize!)
Curious — was the 20% mostly humans-with-adblock, or did your server logs also surface bot/crawler activity that JS was hiding?
I used Google translate!!