What was in the way
Site data lives in silos: analytics in one dashboard, Google Ads in another, Search Console in a third, JS errors and uptime nowhere useful. When you run sites with an AI agent, there is no single place it can query to answer "is anything broken, and is it costing me conversions?" The hard part is not joining the dashboards. It is being right about somebody else's site continuously, unattended, when every source lies differently — a counter that advances past a thrown exception, a page-level total that cannot exceed a property total but does, a canonicalization bug that the homepage is structurally immune to.
What it is
An MCP server that joins first-party analytics, conversions, Google Ads, Search Console, JS errors and uptime into one queryable interface, so Claude Code, Cursor or any MCP client can answer cross-cutting questions about a site in plain language. It exposes 45 tools. The Google Ads bridge is two-way: OAuth, sync, reports, campaign mutation and offline conversion upload, so an agent can read spend and act on it. Analytics work by role rather than by URL — a page carries a data-askbowtie-tag attribute and classifies itself on every crawl and every page load, with a second marker for section-level engagement, so "how do the commercial pages convert" is one call instead of a spreadsheet. Errors are ranked by business impact, and an uptime watcher runs every five minutes. Originally launched as itbroke.dev, then rebranded and expanded into askbowtie.
What I built
Full-stack SaaS on Cloudflare Workers with 28 distinct subsystems — ingest, tracker, crawl, alerts, flows, scores, sections, page tags, reports, rollup, outreach, email, webhooks and the MCP layer itself. Every tracked site gets its own D1 database rather than a tenant column in a shared table, so one customer's data cannot leak into another's by a missing WHERE clause. Session stitching across pageviews, conversion baselines that learn normal patterns, incident clustering, revenue-impact estimates. Two API contracts are formally locked and documented as locked, so an additive change cannot silently break an agent already reading the surface. 1,079 tests across 77 files run as the gate, and the project's hard-won rules are written down rather than rediscovered — including "a stamp or a counter is a claim, not a measurement", which exists because a job reported 90/90 while throwing.