How Agencies Use Our API to Generate Client Websites Programmatically
TL;DR: WebZum exposes a full JSON-RPC API and MCP server that lets agencies create client websites programmatically. Search for a business, kick off generation, track progress in real time, and deploy — all without touching a UI. Plus a geo-page endpoint that spins up SEO-optimized landing pages for any city + service combo, with built-in call tracking and CRM webhook routing.
The Problem: Agencies Don’t Want to Click Buttons
If you’re a digital marketing agency managing 50+ client websites, the last thing you want is a GUI workflow for each one. You want:
- Bulk creation — spin up 20 sites in a single script
- CRM integration — trigger site creation when a client signs a contract
- Geo-page campaigns — launch 30 city-specific landing pages for a plumber in one afternoon
- AI agent workflows — let Claude or GPT create sites on behalf of your team
Every AI website builder in 2026 has a pretty UI. Almost none of them have an API.
We built both.
The API: Five Tools, Full Lifecycle
Our API follows the Model Context Protocol (MCP) standard — the same protocol Claude, Cursor, and other AI tools use to connect to external services. This means your AI agents can create websites natively, without custom glue code.
The same tools are available as a standard REST API with Bearer token auth.
Tool 1: Search for a Business
curl -X POST https://webzum.com/api/mcp \
-H "Authorization: Bearer wz_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "search_businesses",
"arguments": { "query": "plumber in Austin TX" }
}
}'
Returns up to 10 candidates with name, address, phone, website, and a confidence score. We search Google, infer from context, and cross-reference multiple sources.
Tool 2: Create a Website
Pass a candidate from the search results and we generate a complete, multi-page website in the background:
{
"name": "create_site",
"arguments": {
"candidate": {
"id": "google_123",
"businessName": "Joe's Pizza",
"address": "123 Main St, Brooklyn, NY",
"phone": "555-123-4567",
"website": "joespizza.com",
"source": "google",
"confidence": 0.95
}
}
}
Returns a businessId and versionId immediately. Generation runs in the background through our full pipeline: research, web search, strategy, brand, logo, images, content, assembly.
Tool 3: Track Progress in Real Time
Poll get_site_status or connect to our SSE stream for live updates:
// Response from get_site_status
{
"stage": "strategy",
"stageProgress": 75,
"overallProgress": 45,
"message": "Generating website strategy...",
"isComplete": false
}
Seven stages from initialization to completion, each with granular progress. Your dashboard can show clients exactly where their site stands.
Tool 4: List All Sites
list_user_sites returns every site under your account — businessId, siteUrl, dashboardUrl. Simple inventory management.
Tool 5: Generate Geo-Pages
This is the one agencies love most. More on this below.
Geo-Pages: The Agency Power Tool
Service businesses need location-specific landing pages. A plumber in Austin wants separate pages for “plumber in Round Rock”, “plumber in Cedar Park”, “plumber in Georgetown”. Each page needs unique content, local keywords, and a way to capture leads.
Manually creating 30 of these is brutal. With our API, it’s one call per city:
POST /api/generate/geo-page
{
"brandName": "Austin Pro Plumbing",
"niche": "plumber",
"city": "Round Rock",
"state": "TX",
"phone": "+1-512-555-0123",
"services": ["Emergency Repairs", "Water Heater Installation"],
"serviceAreas": ["Downtown Round Rock", "Forest Creek"],
"uniqueSellingPoints": ["24/7 Emergency Response", "Fixed-Price Quotes"],
"testimonials": [
{
"quote": "Fixed our leak in under an hour!",
"author": "Sarah M.",
"location": "Round Rock",
"rating": 5
}
]
}
Each page is AI-generated with unique content — not template spam. Google can tell the difference.
Built-In Call Tracking
Agencies running paid campaigns need call attribution. We support the major providers natively:
{
"callTracking": {
"provider": "callrail",
"poolId": "pool-abc123",
"companyId": "company-xyz"
}
}
Works with CallRail, WhatConverts, CallTrackingMetrics, or your own custom script. The tracking code gets injected into the generated page automatically.
CRM Webhook Routing
When a lead fills out a form on a geo-page, you probably want it in your CRM — not in ours. We route leads directly:
{
"webhookUrl": "https://your-agency.crm.com/leads",
"webhookHeaders": { "Authorization": "Bearer your_crm_token" },
"hiddenFields": {
"utm_source": "webzum",
"campaign_id": "austin-plumbing-q1",
"location": "round-rock"
}
}
Hidden fields pass through to the webhook payload, so you can attribute leads to specific campaigns and locations without any extra work.
Analytics Out of the Box
Every geo-page supports GA4 and GTM:
{
"googleAnalyticsId": "G-XXXXXXXXXX",
"googleTagManagerId": "GTM-XXXXXXX"
}
No post-generation script injection. It’s part of the page from the first render.
Authentication: API Keys
Generate a key from your dashboard. Keys use the wz_ prefix and authenticate via Bearer token:
Authorization: Bearer wz_abc123def456...
One key per account. Keys can be revoked and regenerated instantly. We never store the plaintext key after initial display — only a lookup hash in DynamoDB.
Rate Limits
Current limits are generous for agency use:
| Endpoint | Limit |
|---|---|
| API calls | 500 / minute |
| Auth attempts | 20 / hour |
| Site generation | Concurrent, queued |
Rate limit responses include Retry-After headers so your scripts can back off gracefully.
Real-World Agency Workflow
Here’s how a typical agency uses the API:
- Client signs → CRM triggers a webhook
- Search →
search_businessesfinds the client’s existing online presence - Create →
create_sitekicks off generation with the best candidate - Monitor → SSE stream updates the agency dashboard in real time
- Geo-pages → Loop through 15 service cities, one
generate_geo_pagecall each - Track → CallRail numbers on every page, leads route to HubSpot via webhook
- Report → GA4 data flows into the agency’s reporting stack
Total hands-on time: ~10 minutes of scripting. The AI does the rest.
Why Not Just Use Duda or 10Web?
They’re great products. But they’re built for clicking, not coding.
- Duda has a comprehensive API, but it’s template-based. You’re customizing pre-built layouts, not generating unique AI content per client.
- 10Web has white-label features, but the generation is WordPress-based with heavier infrastructure needs.
- Brizy offers white-label, but no programmatic generation endpoint.
We’re the only AI website builder where you can go from “business name” to “live, unique, SEO-optimized website” in a single API call. No templates. No WordPress. No clicking.
Getting Started
- Sign up at webzum.com
- Go to Settings → API Keys → Generate
- Make your first
search_businessescall - Or install our MCP server:
npm install @webzum/mcp-server
If you’re building an AI agent that needs to create websites — for clients, for leads, for geo-campaigns — we built the API for exactly that use case.
Building an agency workflow on our API? We’d love to hear about it. Reach out at support@webzum.com.