Generate AI Email Campaigns From Any Product URL
SESMetric's AI campaign generator now accepts up to four product URLs — pricing page, features page, signup page, or just the homepage — and writes a grounded one-shot or multi-step drip sequence in your brand voice. No copy-pasting marketing copy into a prompt window.
By SESMetric Editorial
Generic AI copy is what every model produces when it has nothing real to say about your product. Feed it "write a launch email for a SaaS tool" and you get the launch email every SaaS tool has already sent. SESMetric's campaign generator now closes that gap: point it at any of your product URLs — pricing, features, signup, or just the homepage — and the AI reads the actual page before writing the copy.
The result is a one-shot broadcast or a 2–7 step drip sequence whose claims, numbers, feature names, and positioning match what your site actually says. No pasting marketing copy into a prompt window, no hand-holding the model away from invented features.
How it works
The generator takes up to four URLs as optional grounding input. For each URL, SESMetric fetches the page, extracts the title and the first ~1,500 characters of body text, and concatenates them into an 8,000-character "Reference product content" block. That block is appended to the prompt sent to the model.
The four labeled slots in the wizard are:
- Pricing URL — your
/pricingpage - Features URL — your
/featuresor product detail page - Signup URL — your
/signupor trial start page - Home URL — your root landing page
You can fill in one, two, three, or all four. One URL is enough — the homepage alone usually carries positioning, tagline, and a feature summary. More URLs give the model more material to ground the copy in, but a single well-written landing page covers most of what a campaign needs.
The page fetcher is a deliberate single-page GET with regex-based extraction — no headless browser, no JavaScript rendering. That keeps the fetch fast and dependency-free. For sites whose pricing lives behind a JS-rendered app, paste the most informative static page you have; the model still does useful work with whatever text it can read.
What the generator produces
Two output shapes, picked by the kind parameter:
One-shot
A single broadcast email. Useful for product announcements, newsletter blasts, promotion launches, or any single-touch send.
{
"kind": "oneshot",
"subject": "...",
"preheader": "...",
"html": "<!doctype html>...",
"text": "...",
"persona": "founder",
"generation_id": "gen_..."
}
Drip
A multi-step sequence with delays between each step. The default is three steps sent at day 0, day 3, and day 7 — the classic onboarding cadence. You can ask for anywhere from 2 to 7 steps and supply your own cadence in days.
{
"kind": "drip",
"name": "Trial onboarding series",
"steps": [
{ "delay_days": 0, "subject": "...", "html_body": "...", "text_body": "..." },
{ "delay_days": 3, "subject": "...", "html_body": "...", "text_body": "..." },
{ "delay_days": 7, "subject": "...", "html_body": "...", "text_body": "..." }
],
"persona": "founder",
"generation_id": "gen_..."
}
Each step gets its own subject, HTML body, and plain-text alternative. HTML is sanitized — <script> tags and inline on*= event handlers are stripped before the output is returned, so what you receive is safe to render and send.
Tone and persona
Two separate knobs shape voice:
- Persona — a fixed catalog:
founder,friendly,professional,playful,urgent. Picks the posture the model writes from. A founder persona writes like someone who built the product; an urgent persona writes like someone racing a deadline. - Tone — free-text. Use it to override or sharpen the persona: "witty but not flippant", "enterprise B2B, no exclamation points", "D2C consumer, warm and second-person". The model takes the tone string as additional guidance on top of the persona.
If neither is supplied, the model defaults to neutral professional copy.
Where to call it
Three surfaces hit the same backend. Pick the one that matches your workflow.
Wizard (browser)
The campaign wizard at /dashboard/campaigns/new exposes the four URL slots under a "+ From your site" toggle. Fill in the URLs you have, write a short prompt describing what the campaign should do, pick oneshot or drip, and click generate. The output lands in the wizard editor, where you can revise, schedule, or send a test before going live.
The wizard is the right path for marketing teams who want to iterate on the copy in a UI before sending.
REST API
For application code that generates campaigns programmatically:
POST https://api.sesmetric.com/api/campaigns/generate
X-API-Key: sk_live_...
{
"prompt": "Welcome series for new trial signups. Push them to connect their first sending domain.",
"kind": "drip",
"steps": 4,
"cadence": [0, 1, 3, 7],
"persona": "founder",
"tone": "concise, technical, no hype",
"product_urls": [
"https://example.com/pricing",
"https://example.com/features",
"https://example.com/signup"
]
}
Authentication requires a verified domain identity on the calling account. Generation is rate-limited to 20 calls per hour per account — enough to iterate, not enough to abuse.
MCP tool
For AI agents that discover and call tools — Claude Code, Cursor, custom internal agents:
{
"mcpServers": {
"sesmetric-mail": {
"url": "https://ai.sesmetric.com/mcp",
"headers": { "X-API-Key": "sk_live_REPLACE_ME" }
}
}
}
The relevant tool is generate_campaign_content, scope marketing:manage. It takes the same parameters as the REST endpoint and returns the same payload — the underlying implementation is shared, so behavior cannot drift between the two surfaces.
A worked agent session:
User: Build a 3-step drip for trial signups, grounded on our pricing page.
Agent: generate_campaign_content({
prompt: "Trial onboarding. Highlight the free tier limits.",
kind: "drip",
steps: 3,
persona: "founder",
product_urls: ["https://example.com/pricing"]
})
→ { kind: "drip", steps: [...3 emails...], generation_id: "gen_..." }
Agent: Generated a 3-step drip grounded on your pricing page. Day 0 introduces
the free tier cap, day 3 nudges toward the first paid upgrade, day 7
shows usage-based pricing. Want me to save it as a draft campaign?
The same MCP server also exposes the full campaign lifecycle — create_campaign, update_campaign, send_campaign, test_send_campaign, pause_campaign, resume_campaign, cancel_campaign, get_campaign_analytics — so an agent can go from "write the copy" to "send it, watch the numbers, pause if it underperforms" without leaving the tool surface.
Why grounding matters
A model asked to "write a pricing email" without grounding will produce a plausible-sounding email that names features your product does not have, prices you do not charge, and comparisons to competitors you have not made. The output reads well and is wrong in the ways that hurt most — the wrong details are the ones a careful customer checks.
Grounding the prompt in the real page text collapses that failure mode. The model sees what your pricing page actually says — the tier names, the per-unit costs, the usage caps, the trial terms — and writes copy that quotes them correctly. When it does not know something (because the page does not say), it stays vague instead of inventing.
This is also why a single homepage URL is usually enough. The homepage carries positioning, the elevator pitch, and the top three features in 90% of marketing sites. The other three URL slots matter when the homepage is sparse or when a specific page has detail the homepage does not — a full pricing breakdown, a feature comparison matrix, a signup flow with trial terms.
When to use one-shot vs. drip
| Use case | Kind | Notes |
|---|---|---|
| Product launch announcement | oneshot | Single broadcast, time-bounded |
| Promotion / sale | oneshot | One email, clear CTA |
| Newsletter blast | oneshot | Generic broadcast |
| Trial onboarding | drip | 3–5 steps over the trial window |
| Lead nurture | drip | 4–7 steps, longer cadence |
| Re-engagement | drip | 3 steps, escalating urgency |
| Feature education | drip | One feature per step, 2–4 steps |
Drip cadence defaults to [0, 3, 7] days — a tight onboarding rhythm. For lead nurture, stretch it: [0, 7, 14, 21, 30] over five steps gives a slow-burn sequence that does not burn out the list. For re-engagement, compress and sharpen: [0, 2, 5] with an urgent persona on the final step.
Limits and guardrails
- Four URLs maximum. The 8,000-character context cap is shared across all four. More URLs means more material but tighter per-page truncation.
- Twenty generations per hour per account. Keeps the LLM spend predictable and prevents runaway loops.
- Verified domain required. The calling account must own a verified sending identity. Anonymous trial accounts cannot generate.
- HTML is sanitized.
<script>and inline event handlers are stripped. The output is safe to render, but review the copy before sending — sanitization does not catch misleading claims. - The model picks per tier. The
modelparameter is deprecated — the backend resolves the appropriate model based on your plan tier and the use case (template design vs. campaign planning). This keeps quality predictable across the customer base.
Pairing with branding generation
A separate, complementary feature: SESMetric can derive your branding profile — brand name, primary color, logo, footer HTML, support email — from a single homepage URL. The branding profile is what every generated campaign template renders with, so the copy the campaign generator writes lands inside an email that already looks like your product.
The recommended setup order:
- Run branding generation against your homepage once. Review and save.
- Generate campaigns against whichever product URLs matter per campaign.
After that, every campaign — whether generated or hand-written — renders with your logo, your colors, and your footer links without per-template wiring.
Get started
- Sign up at
https://sesmetric.comand verify a sending domain at/dashboard/identities. - Open the campaign wizard at
/dashboard/campaigns/new, or grab an API key at/dashboard/keyswith themarketing:managescope. - Paste the URLs you want to ground on, write a one-line prompt, and generate.
- Review the output in the wizard editor, send a test, and schedule or send.
The same key works across the wizard, the REST API at https://api.sesmetric.com, and the MCP server at https://ai.sesmetric.com/mcp. Pick the surface that matches the caller — UI for marketers, REST for application code, MCP for AI agents.