internal platform · solo build · 2026

Agency SEO and Ads Platform

One platform and one warehouse replacing a paid reporting tool and a scatter of consoles for a healthcare marketing agency: rankings, audits, security scans, Google and Meta ads, AI search visibility, and one-click WordPress fixes with rollback.

  • 16 days51k lines TypeScript · 1,257 tests
  • 8data sources in one warehouse
  • 425ksearch-query rows backfilled, spot-checked exact
  • 98client onboardings queued at handoff

The problem

The agency paid for a third-party reporting tool and still lived in a dozen tabs: rank trackers, ad consoles, analytics, audit tools, and manual WordPress edits. Data lived everywhere, fixes lived nowhere, and nothing connected what a client paid for to what actually happened on their site or their ad account.

What I built in 16 days

Roughly 51,000 lines of TypeScript across 60 database models, a companion WordPress plugin in PHP with an HMAC-signed REST API, and 1,257 automated tests. Eight integrations feed a local warehouse: GA4, Search Console, Google Ads, the Meta Marketing API, SERP and keyword data, PageSpeed Insights, Census demographics, and search-question research, plus Claude for content generation.

Per-client dashboards cover analytics, search performance, Core Web Vitals, a 23-check technical audit with client-facing fix guidance, a 15-check security scan, rankings, an opportunity queue, AI visibility, ads, and shareable reports, behind five roles and enforced two-factor authentication. Nightly engines do the ETL, rank tracking, crawls, and ads ingestion.

The ads engine runs ten checks for wasted spend, disapproved ads, conversion-tracking gaps, and fatigue. Write-back actions, pauses, budget changes, and negative keywords, capture before-state, require typed confirmation, log an applied-or-failed ledger entry, and roll back in one click. A failed mutation can never be recorded as a success.

How I knew it worked

Every milestone got a written spec, test-driven implementation, an adversarial review by a second model instance before merge, and live verification in production. Review caught a role-based-access hole and a query-injection path before they shipped. Live verification caught what unit tests could not: the Meta API silently paginating at 25 rows, exact-match location names, a sunset ads API version. Each became a fix and a regression test.

On a real account with $1,731 of spend and zero conversions, the engine correctly flagged missing conversion tracking and $37 of waste across 16 non-converting terms. I applied a negative keyword to the live account, confirmed it by re-query, rolled it back, and confirmed the removal. The opportunity engine produced 72 prioritized opportunities from one client's 43,000 queries, including 22 terms that convert in paid and are absent in organic.

Why it matters

The agency stopped paying for the reporting tool, gained one place where data and fixes live together, and got documentation and runbooks for handoff. The AI-visibility work carried forward into Obelisk.

In brief

What is Agency SEO and Ads Platform?
One platform and one warehouse replacing a paid reporting tool and a scatter of consoles for a healthcare marketing agency: rankings, audits, security scans, Google and Meta ads, AI search visibility, and one-click WordPress fixes with rollback.
What did Brian Powell build for Agency SEO and Ads Platform?
Roughly 51,000 lines of TypeScript across 60 database models, a companion WordPress plugin in PHP with an HMAC-signed REST API, and 1,257 automated tests. Eight integrations feed a local warehouse: GA4, Search Console, Google Ads, the Meta Marketing API, SERP and keyword data, PageSpeed Insights, Census demographics, and search-question research, plus Claude for content generation.
What was the result of Agency SEO and Ads Platform?
The agency stopped paying for the reporting tool, gained one place where data and fixes live together, and got documentation and runbooks for handoff. The AI-visibility work carried forward into Obelisk.