GetWaitlist

getwaitlist.comcontributed by Samuele Ongaro

YES

Replaceable in one session with an AI coding agent.

A waitlist with referral positions: people sign up, get a place in the queue and a link, and move up when friends join using it.

Promptfree, for everyone, and the only version there is
Build me a waitlist that replaces GetWaitlist: a signup form, a queue people can move up by referring others, and no way to game it.

STACK
- Node 20+ with Fastify, server-rendered HTML plus one small embeddable script
- SQLite through better-sqlite3, WAL mode
- Caddy in front. The form must survive being linked from somewhere busy

THE DATA MODEL
- lists: id, name, slug, is_open, capacity, invite_batch_size, created_at
- entries: id, list_id, email, name, referral_code, referred_by_id, position, points, status, ip_hash, created_at, verified_at, invited_at, joined_at
- referrals: id, entry_id, referred_entry_id, created_at, counted — a row per successful referral, so a reversal is a flag and not a decrement
- questions and answers, if the list asks anything beyond an email
- events: id, entry_id, kind, created_at — signup, verify, refer, invite, join. The archive of what happened to a person
- Status: pending, verified, invited, joined, removed

SIGNING UP
- Email, and nothing else unless the list owner adds a question
- Double opt-in by default: a position is not final until the address is verified. This is not a formality — without it a competitor can put a thousand fake addresses at the top of your queue
- A referral code per entry, and a link that carries it
- Duplicate emails do not create a second row; they get their existing position back
- Rate limit per address hash, and a honeypot field, and a minimum fill time

THE QUEUE, AND KEEPING IT HONEST
- Position is computed, never stored as truth: order by points descending, then by verified_at ascending. Store a cached position for display and recompute it on every change
- A referral is worth points only when the referred address verifies. This one rule removes most of the abuse
- Cap points from a single referrer per day, and ignore referrals whose address hash matches the referrer's
- A removed entry keeps its row and its history — you want to be able to answer 'why did my position change'
- Show a person their position, their points, their referral link, and how many places they moved this week

INVITING
- Invite in batches: the top N, or everybody above a points threshold, or a random sample — random is there because inviting only the loudest people gives you a biased first cohort
- An invitation is an email with a signed link that expires, and the entry is marked invited with the time
- Joined is set when the product tells the waitlist the person actually signed up, through a webhook or an API call — never assumed from the click
- Un-invited entries keep their position; an expired invitation returns them to the queue and says so

THE WIDGET AND THE PAGE
- A hosted page per list, and an embeddable form under 8KB that posts to the same endpoint
- The embed carries no styles of its own beyond a class hook; it inherits the host page
- After signing up, the same page shows position, referral link, and share buttons that are plain links — no third-party SDKs
- Everything works without JavaScript: the form posts, the page renders the result

TELLING PEOPLE
- Verification email immediately, and nothing else unless something changes
- Optional: a message when somebody moves up by more than N places, capped to one a week
- The invitation, and one reminder if unopened after three days
- Every email has a one-click unsubscribe that removes them from the list, which is the honest meaning of unsubscribe here

WHAT THE OWNER SEES
- Signups over time, verification rate, referral coefficient, and the share of entries that came from referrals
- Top referrers, with their referred addresses' verification rate beside them so a bulk-fake referrer is visible
- Export to CSV, and a JSON feed

PRIVACY
- The address, the salted hash of the IP, and whatever the list asked for. Nothing else
- Deletion by email address, complete, on request and without asking why
- No third-party script anywhere

THE INTERFACE
- Owner: one list per page, a table, and the invite button
- Public: the form, then the position. Big type, one screen, no scrolling required

OPERATIONS
- .env: DATABASE_PATH, BASE_URL, HASH_SALT, SMTP_URL, API_TOKEN
- Migrations on boot, each once
- Nightly backup off the machine, restore script
- Health endpoint

WHAT MATTERS MOST
Double opt-in and the referral rules are the product. A waitlist with a leaderboard and no verification is a leaderboard of whoever wrote a script first. Build signup, verification and points first, then try to cheat your own queue — if you can, keep going.

Give me the repository, the embeddable form, migrations, .env.example, a seed list with a hundred entries, and a README with deploy steps behind Caddy.

What you lose

  • Referral mechanics already built, including the anti-gaming rules that keep a queue honest
  • A hosted signup page and widget with no deployment
  • Position emails sent as the queue moves, which is what makes people share the link

If you would rather not build

  • A form plus a position query, which is what the prompt builds
  • A Google Form, if referrals do not matter

What it costs

as published on their pricing page

PlanBilled monthlyBilled yearlyLast read
—$21/mo——

Their pricing page is where these came from. Seeing a different price? Tell us.

The escape hatch

open source · no votes, no paid placement

Listmonk

$0

Handles the list and the mails; you write the position logic.

knadh/listmonkfree · open source

Formbricks

$0

Self-hosted forms for the signup half, with an API to read responses.

formbricks/formbricksfree · open source

Why this verdict

our own opinion · changed only by a person

93/100

Verdict yes at 93. Computing position at query time rather than storing it is the whole trick; storing it is how these systems end up wrong.

History

tracked since 10 Aug 2026 · nothing is ever overwritten

Interest · last 30 dayspeak 2/day
views01230 Aug4 Sept9 Sept14 Sept19 Sept24 Sept28 Sept
— views— prompt copies none yet— votes none yet

Questions about GetWaitlist

answered from the record above

Is GetWaitlist free?

No — the plan we track is $21 a month. Around $21/month billed monthly for the growth tier; a free tier covers small lists.

Can you replace GetWaitlist by building your own?

YES. Replaceable in one session with an AI coding agent. Replacement score 93 out of 100, build time one session. Read what you lose before you decide.

How much does GetWaitlist cost?

$21 a month on Growth — $252 a year. Recorded 10 Aug 2026.

What do you lose by replacing GetWaitlist?

Referral mechanics already built, including the anti-gaming rules that keep a queue honest; A hosted signup page and widget with no deployment; Position emails sent as the queue moves, which is what makes people share the link. If any of those carry weight for you, keep paying.

Is there an open-source alternative to GetWaitlist?

Yes: Listmonk, Formbricks. The prompt on this page is for when you want it your way instead.

Related entries

same category first, most replaced first

All 19 in Forms

Not sending yet

Every week, something stops being worth paying for.

New verdicts, prices that moved, entries added. One email a week. Unsubscribe in one click. Nothing is being sent yet — your address is kept here, and the first issue is the first thing it is used for.

free forever · no tracking pixel · stored here, never passed to anyone

Esc