~140ms per page · audited automatically · self-contained HTML

One template. One CSV.
N personalized landing pages.

Personalizer turns a single landing page into hyper-local variants — one per ZIP, neighborhood, store, or audience — with city/state/JSON-LD substitutions, an automatic QA pass, and self-contained HTML output you can host anywhere. Built on Cloudflare. Side-by-side preview as you type.

Launch the app → See pricing
~140msper page
100%self-contained HTML
QAaudit pass per export
$29/mo entry tier

What it actually does

No hand-waving. Every primitive below is implemented end-to-end and shipping in production today.

🌐

Open URL clone

Paste any public URL. The cloner inlines CSS, fonts, images, and SVG sprites into a single self-contained HTML you can ship anywhere — HubSpot, WordPress, S3, Cloudflare Pages.

📝

CSV-driven personalization

Drop a CSV: zip, city, state, neighborhoods, optional title/description/H1 override per row. Engine applies text replacements, DOM swaps, and JSON-LD areaServed mutations.

👀

Side-by-side live preview

Source on the left, personalized variant on the right. Edit a row, see the changes immediately. No build step. No deploy round-trip.

Automatic QA

Every variant runs an audit: city in title / meta / OG / Twitter / H1, JSON-LD areaServed, sprite integrity (viewBox preserved!), no source-host leakage. You see the report before you ship.

📦

One-click ZIP export

Streaming server-side ZIP of every variant + a manifest. Drop the contents directly into your CMS or hosting layer. 6.5 MB per page is normal — well under the 25 MB HubSpot Custom HTML limit.

🔒

Sign in to use

Google sign-in required. No anonymous URL fetches. Templates and exports are scoped to your account. The owner's email is always-free; everyone else is on the tier they pick.

The pipeline

Six stages, all running on Cloudflare's edge. Templates and exports live in R2; subscriptions and audit results live in D1.

[paste URL or upload HTML] [cloner: inline CSS / fonts / images / sprites → self-contained template] [drop CSV (zip, city, state, neighborhoods…)] [personalizer × N rows: text + DOM + JSON-LD + (optional banner)] [audit: city in title / meta / H1 / JSON-LD; sprite integrity; host pinned] [R2 per-variant + streaming ZIP download]

Pricing — built for businesses, not freeloaders

Free tier exists to let you kick the tires on a real run. Paid tiers stack from "I run one location" to "I run a multi-client agency." The owner email [email protected] is always treated as Agency tier (so this site can dogfood itself).

Free
$0
1 variant / month · 1 saved template
Try-it tier — kick the tires before you commit.
  • URL clone OR HTML upload
  • CSV-driven generation
  • Audit pass with QA report
  • Self-contained HTML output
Sign in with Google
Solo
$29 / mo
20 variants / month · 5 templates
Solo marketers, single-location SMBs, franchise owners.
  • Everything in Free
  • Side-by-side live preview
  • Streaming ZIP download
  • 7-day export retention
  • Email support
Start Solo
Pro · Most popular
$99 / mo
90 variants / month · 20 templates
In-house marketing teams, multi-location regional SMBs.
  • Everything in Solo
  • Priority generation queue
  • Per-export audit history
  • Per-row stats & download
  • Faster R2 retention (7 days)
Start Pro
Agency
$299 / mo
Unlimited variants · unlimited templates
Agencies running multi-client local-SEO programs.
  • Everything in Pro
  • 30-day export retention
  • White-label output
  • Priority email support
  • Owner-tier dogfood (always-free)
Start Agency

Why self-contained HTML?

Because pasting a single <script>…</script> into a CMS shouldn't require a deploy.

📥

HubSpot Custom HTML module

25 MB per-file cap. Our output is ~6.5 MB. Fits with margin to spare. Drop into a Custom HTML module and it just works.

📁

WordPress Custom HTML block

No enforced size limit. Output is identical to the source page visually because every asset is inlined as a data: URI.

Cloudflare / S3 / Netlify

Just upload the HTML. No build step, no asset paths to fix, no CDN re-hosting. The page is one file.