cd /news/ai-agents/i-built-a-publication-with-no-human-… · home topics ai-agents article
[ARTICLE · art-112587] src=dev.to ↗ pub= topic=ai-agents verified=true sentiment=· neutral

I built a publication with no human writers. Then I found out I couldn't measure it.

A developer built AIOps Community, a publication where AI agents autonomously register, write, and moderate articles with no human involvement. After two weeks, the developer discovered that Google Analytics could not measure the platform's key funnel because the 'Connect Your Agent' call-to-action was untracked and API-based registrations are invisible to browser-side analytics. The developer concluded that the database, not analytics, is the source of truth for machine-to-machine products.

read4 min views1 publishedAug 27, 2026

AIOps Community has no human authors. No human bylines. No human comments. No editor - not even me. AI agents register themselves, publish articles, and an AI moderator decides what goes live. There is no review queue, because there's nobody to review anything.

It's been live for two weeks. This week I went to check how it's doing and discovered I'd built a funnel I couldn't see.

An agent reads /agents.md

, POSTs itself to the registration endpoint, and gets a working API key immediately. No approval wait, no human gate. Claiming your agent - by publishing a GitHub gist - is an optional upgrade: unclaimed gets you one article a day and a plain byline, claimed gets you three a day, a GitHub-linked byline, and a spot in the contributors index.

Every registration, article, and comment passes through a moderator running on Azure OpenAI. It returns a verdict and, for articles, the meta description. Agents supply no SEO fields at all - the site generates the slug, canonical, and JSON-LD. There's a single admin control with four presets (OPEN / BALANCED / STRICT / CURATED) that drives every threshold, cap and quota underneath.

Stack: FastAPI with Jinja2 server-side rendering, Postgres Flexible Server, Azure Container Apps, Blob storage, Key Vault. Deliberately boring, deliberately not Kubernetes.

The migration off WordPress moved 374 published posts and 2,583 glossary terms, with every article URL verified 200 on a full crawl afterward. That went better than it had any right to.

This week I opened Google Analytics to answer two questions: how many people click "Connect Your Agent," and how many registrations succeed.

I could answer neither. Here's why, and both reasons are instructive.

The CTA wasn't tracked. The button is a plain internal link - an ordinary anchor tag pointing at /connect, with no gtag call, no data attribute, no handler. And GA4's enhanced measurement only auto-fires click

for outbound links - internal navigation produces nothing. I'd assumed "GA4 tracks clicks" meant GA4 tracks clicks. It tracks some clicks, and not the one that mattered. The only proxy available was pageviews of /connect: 122 views, 13 unique users, all-time. Thirteen people have ever opened the page. One got past it.

Registrations are structurally invisible to GA. This one isn't a config mistake - it's a category error I baked into the architecture without noticing. Registration happens agent-side, over the API. An agent reads agents.md and POSTs. Agents don't execute gtag.js

. They don't load pages. A browser-side analytics tag will never see a single API registration, no matter how carefully you configure it.

I'd built a machine-to-machine product and instrumented it like a website.

There was also a decoy: GA showed a registration

event with 9 hits, which looked like an answer. It's leftover WordPress tracking that hasn't fired since the cutover. If I'd trusted it I'd have reported a number that meant nothing.

Two channels, because there are genuinely two kinds of event:

cta_click

event with a cta_location

param on every Connect link, so I can tell which placement - nav, hero, mid-page, footer - actually earns the click. One delegated listener on [data-cta]

, beacon transport so the hit survives the unload, and never preventDefault()

.And the thing I should have had from day one: the database is the source of truth. GA undercounts - ad blockers, dropped beacons, bot filtering. For a number I'd quote to anyone, it's a query against Postgres, not a chart.

Every agent publishing on the platform right now is mine.

I've promoted it on LinkedIn and elsewhere. External registrations: zero. And for two weeks I genuinely didn't know whether that meant nobody visited, people visited and bounced, or agents tried and hit a bug in my registration docs - because I couldn't see any of it.

That's the actual lesson, and it's a boring one I'd read a hundred times without absorbing: you can't debug adoption you can't measure. I spent that fortnight tempted to add features, when the honest next step was admitting I had no idea which step of the funnel was broken.

Now I'll be able to tell. That's not traction. But it's the prerequisite for earning any.

If you're building something agents interact with directly, check your analytics assumptions early. Browser tags see browsers. Your users might not be using one.

── more in #ai-agents 4 stories · sorted by recency
── more on @aiops community 3 stories trending now
sponsored brought to you by zahid.host 4,200+ EU-deployed projects
reading about agents? ship yours in a single git push.

Run your AI side-project on zahid.host

EU-based hosting, git-push deploys, automatic HTTPS, no cold starts. Free tier with a custom domain — perfect for shipping the agent you just read about.

$git push zahid main
Live at https://your-agent.zahid.host
Get free account → Pricing
from €0/mo · no card required
LIVE [news/i-built-a-publicatio…] indexed:0 read:4min 2026-08-27 ·