← Use cases

Product launches

Handle launch-day and post-announce signup bursts with one domain-locked endpoint, source tags, spam controls, and export.

The problem

Launch pages need reliable intake during traffic spikes and across multiple channels without DIY rate limiting or manual cleanup.

How Simple Signups fits

Create a separate campaign for the launch, tag the source channel, and rely on domain gating, per-IP limits, and an optional bot challenge when attention spikes.

When this is a good fit

  • Launch-day “notify me” or “get updates” capture.
  • Tracking which announcement channel produced the signup.
  • Static landing pages that may see sudden bursts of traffic.

When you probably need more than this

Not a fit alone for pre-orders, payments, or onboarding flows that must continue inside your authenticated product.

Working example

Swap in your public campaign id (pub_...) and add your site domain to the campaign allow-list. Full field reference is in the developer docs.

HTML launch notify form
<p>Launching soon. Leave your email and we will notify you the day it goes live.</p>
<form action="https://simple-signups.com/api/subscribe" method="POST">
<input type="hidden" name="campaignId" value="pub_your_campaign_id" />
<input type="email" name="email" required placeholder="you@example.com" />
<input type="hidden" name="tags" value="launch" />
<input type="text" name="hp" tabindex="-1" autocomplete="off"
style="position:absolute;left:-9999px" aria-hidden="true" />
<button type="submit">Notify me</button>
</form>
fetch (JSON)
await fetch('https://simple-signups.com/api/subscribe', {
method: 'POST',
headers: { 'content-type': 'application/json' },
body: JSON.stringify({
"campaignId": "pub_your_campaign_id",
"email": "jane@example.com",
"tags": [
"launch"
],
"metadata": {
"launch": "v1",
"channel": "product-hunt"
}
}),
});

Related reading

Next step

Create a campaign in the dashboard, copy the public id, and paste the form above onto your site.