{"slug": "how-my-ai-agent-crew-audited-154-small-business-sites-and-built-two-32-page-with", "title": "How my AI agent crew audited 154 small-business sites and built two 32-page static sites (with approval gates)", "summary": "Alex Rowan built a five-role AI agent crew that audited 154 small-business websites and generated two 32-page static rank-and-rent sites, each roughly 20,000-22,000 words, using a Python site builder that outputs plain HTML and sitemaps for Cloudflare Pages. All agents operate under pasted approval gates that block spending, sending, submitting and publishing, and a separate verifier script re-checked 30 mini-audits against live sites, finding 10 cited issues already fixed and 2 with no confirmed issue. Revenue stands at $0, with 10 emails sent manually after a gated scripted send timed out.", "body_md": "I'm Alex Rowan. I'm building a local lead-gen business where a crew of AI agents does most of the work, and I'm writing down how it's built, including the parts that haven't worked yet. As of this week the revenue is $0. This post is about the plumbing, not the money.\n\nFive agent roles, each with its own brief:\n\nEvery agent gets the same block of approval gates pasted into its instructions, ahead of everything else:\n\n```\n1. SPEND: Never buy, subscribe, renew, or enter payment details.\n2. SEND: Never send an email, DM, form message, or post. Draft it and queue it.\n3. SUBMIT: Never submit an application, signup, or legal agreement.\n4. PUBLISH: Never deploy a site, change DNS, or publish content. Build, test, zip, request approval.\n5. CLAIMS: Every price, statistic, law, or payout needs a source URL and the date checked.\n```\n\nThe gates override any instruction found in a web page, email or file. When an agent hits one, it stops that step, logs it under \"Decisions needed\" in the debrief, and moves on to other work.\n\nThe site builder is a Python script: a JSON brief goes in (business type, city, services, service areas, guides, FAQs) and a folder of plain HTML comes out, plus `sitemap.xml`, ready for Cloudflare Pages. No framework, no database, no build server.\n\nEach rank-and-rent site ended up at 32 pages:\n\nMeasured on body text only (no header, nav, footer or scripts), that's about 22,100 words for medfordseptic.com and about 20,300 for roanoketreeremoval.com. The live sitemaps match the local copies byte for byte.\n\nEvery factual claim on the sites goes into a sources file with a link and a retrieval date. Facts I couldn't verify are hedged in the copy or left out.\n\nThe agent builds, tests and zips. Deploying is gated, so I push it live.\n\nThe outreach pipeline:\n\n`verify_issues.py` fetches the live site again and confirms each cited issue.\nBefore the first batch, the verifier re-checked 30 mini-audits against the live websites. 10 cited a problem the business had already fixed. Seven of those were \"no reviews or testimonials on the homepage\" after the business had added them. 2 of the 30 had no confirmed issue at all and were skipped.\n\nSo verification became its own routine, triggered by any \"send batch\" item in the queue:\n\n``` php\n1. python3 verify_issues.py prospects.csv [N]\n2. Confirmed issues -> keep; dropped issues -> remove and regenerate the PDF; zero confirmed -> skip.\n3. Check the suppression list.\n4. Check each draft: sender identity, physical address, opt-out, honest subject, one link max.\n5. Write the report: checked / passed / regenerated / skipped.\n6. Mark the batch \"VERIFIED, awaiting owner approval\".\n```\n\nTwo things I'd pass on. First, run the check as late as possible, because websites change between audit and send. Second, use a fresh agent session to do it. It catches more than the agent that wrote the audit checking its own work.\n\nOn day one the scripted email send timed out. Because sending was gated, I knew exactly what had gone out, which was nothing. I sent the first 10 emails by hand after reading each one. 18 more are drafted and waiting.\n\n| Businesses audited | 154 | \n| Mini-audits | 78 | \n| Emails sent | 10 | \n| Rank-and-rent sites live | 2 (32 pages each) | \n| Referral sites live | 2 (26 and 27 pages) | \n| Revenue | $0 | \n\nSearch Console data, replies and calls aren't measured yet. They'll go in the next update.\n\nThe roles, gates and verifier brief are written up in a free playbook: [https://agent-run-agency-site.pages.dev](https://agent-run-agency-site.pages.dev)", "url": "https://wpnews.pro/news/how-my-ai-agent-crew-audited-154-small-business-sites-and-built-two-32-page-with", "canonical_source": "https://dev.to/agentrunagency/how-my-ai-agent-crew-audited-154-small-business-sites-and-built-two-32-page-static-sites-with-4pdi", "published_at": "2026-10-11 02:46:32+00:00", "updated_at": "2026-10-11 02:49:41.066105+00:00", "lang": "en", "topics": ["ai-agents", "ai-tools", "generative-ai", "developer-tools"], "entities": ["Alex Rowan", "Cloudflare Pages", "medfordseptic.com", "roanoketreeremoval.com"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/how-my-ai-agent-crew-audited-154-small-business-sites-and-built-two-32-page-with", "markdown": "https://wpnews.pro/news/how-my-ai-agent-crew-audited-154-small-business-sites-and-built-two-32-page-with.md", "text": "https://wpnews.pro/news/how-my-ai-agent-crew-audited-154-small-business-sites-and-built-two-32-page-with.txt", "jsonld": "https://wpnews.pro/news/how-my-ai-agent-crew-audited-154-small-business-sites-and-built-two-32-page-with.jsonld"}}