WordPress Waitlist Plugin: The Complete Setup Guide (2026)
TL;DR: You don't need a WordPress plugin to add a referral waitlist, and LaunchList doesn't ship one. Paste LaunchList's two lines of HTML into a Custom HTML block (or Elementor's HTML widget, Divi's Code module or the Classic Editor's Text tab) and you get referral links, a live leaderboard, Contact Trust verification and built-in email in about ten minutes. If your host strips scripts, a plain HTML form with no JavaScript works too. You can also enqueue the script site-wide, open the form as a popup (including on exit intent, a timer or scroll), add live widgets, and keep the SEO on your own WordPress domain.
A huge share of pre-launch landing pages are built on WordPress, so it's natural to search for "WordPress waitlist plugin."
Here's the honest answer: most WordPress waitlist plugins are built for a different job, and they're missing the referral mechanics that make a waitlist grow. The better approach is a hosted waitlist service that manages the referral logic, spam protection and email, embedded on your WordPress page. There's no plugin to install, update or keep compatible with your WordPress version.
This guide walks through the exact setup for every common WordPress editor: Gutenberg, Elementor, Divi and the Classic Editor.
Why not use a native WordPress waitlist plugin?
Native WordPress waitlist plugins (like WaitList WooCommerce or YITH WooCommerce Waitlist) are designed for a specific use case: notifying customers when an out-of-stock product comes back. They're great for ecommerce, but they're not built for pre-launch waitlists.
What they typically lack:
- ❌ Referral links and a leaderboard
- ❌ Live queue position
- ❌ Fake-signup detection, disposable-address blocking and rate limiting
- ❌ Referral credit that waits for the friend to verify
- ❌ Reward milestones
- ❌ A page each signup can come back to, with their position and referral link
For a pre-launch, early-access or "coming soon" campaign, a waitlist service embedded on your WordPress site gives you all of this in about ten minutes.
Every way to put a LaunchList waitlist on WordPress
There are several ways to get a signup from a WordPress page into LaunchList. They all run the same pipeline once the signup lands: deduplication, referral credit, Contact Trust scoring, the verification email, webhooks and automations happen whichever one you pick. Choose by what you already have.
| You want | Method | What goes into WordPress |
|---|---|---|
| The quickest working form | Inline embed | One <div> plus the loader script, in a Custom HTML block |
| Your own WordPress form design, run by LaunchList | Enhance your own form | One data-launchlist-enhance attribute on your form, plus the loader |
| A form that works with no JavaScript at all | Plain HTML form | A native <form> posting to LaunchList |
| A button that opens the form in an overlay | Popup | One data-launchlist-popup attribute on any element |
| A popup that opens on exit intent, a timer or scroll depth | Popup auto-trigger | A hand-written data-trigger element (see below) |
| Live social proof next to the form | Widgets | One <div> each: counter, leaderboard, milestone, countdown, updates feed |
| No code at all | Hosted launch page | A link or button pointing at your LaunchList page |
| Signups created by your own backend | REST API | Nothing; your server calls api.getlaunchlist.com/v1 |
The loader is the same for every method that uses it, and it goes on the page once, however many forms, popups and widgets you add:
<script src="https://embed.getlaunchlist.com/v1/embed.js" async></script>
All of this works on every LaunchList plan, the Free plan included.
Step-by-step: add a referral waitlist to WordPress
This works on every WordPress theme, on self-hosted WordPress.org and on WordPress.com plans that allow custom HTML.
Step 1: Create your project
- Sign up for LaunchList. The Free plan covers 100 contacts, with no card.
- Create a project named after your product. It comes with a waitlist form, a status page for every signup and a hosted launch page.
- Optionally, open Audience → Referrals & rewards to adjust points per referral or add reward tiers (rewards are on the Collect plan and up).
- Open Embed & API → Your website, choose WordPress under What is your site built with?, pick your form if you have more than one, and copy the Inline snippet.
Step 2: Understand the snippet
The snippet looks like this:
<!-- frm_8Kd2Qm4Rp9 is an example ID; use your own from Embed & API → Your website -->
<div data-launchlist-form="frm_8Kd2Qm4Rp9"></div>
<script src="https://embed.getlaunchlist.com/v1/embed.js" async></script>
Two parts:
- The
<div>goes wherever you want the signup form to appear. You can repeat it as often as you like. - The
<script>(the loader) can sit right next to the div, or once site-wide in your theme's head. Site-wide is better if you plan to use forms, popups or widgets on several pages. A loader in both places is harmless.
Step 3a: Install on Gutenberg (block editor)
- Edit your landing page.
- Click +, search for Custom HTML, and add the block.
- Paste the whole snippet (div and script).
- Use the block's Preview tab to see it render, then Publish.
That's the whole integration.
Step 3b: Install on Elementor
- Edit your Elementor page.
- Drag an HTML widget onto the canvas.
- Paste the snippet.
- Optionally, to load the script site-wide, use Elementor → Custom Code, set the location to
<head>, paste the script tag and save. Then each HTML widget only needs the<div>.
Use the HTML widget, not a Shortcode widget: a Shortcode widget won't render the form.
Step 3c: Install on Divi
- Edit your Divi page.
- Add a Code module where you want the form.
- Paste the snippet.
- Optionally, put the script tag once in Divi → Theme Options → Integrations (the head section) and keep only the
<div>in each module.
Step 3d: Install on the Classic Editor
- Switch the page editor from Visual to Text.
- Paste the snippet where you want the form.
Optional: load the script site-wide from your theme
If you'd rather not repeat the script, enqueue it once in your child theme's functions.php:
add_action('wp_enqueue_scripts', function (): void {
wp_enqueue_script(
'launchlist',
'https://embed.getlaunchlist.com/v1/embed.js',
[],
null,
['strategy' => 'async', 'in_footer' => false],
);
});
Use a child theme: editing functions.php in a parent theme means your change disappears at the next theme update. A header-scripts plugin such as WPCode does the same job if you prefer not to touch code. With the script loaded site-wide, a theme template such as front-page.php or footer.php only needs the <div>.
Step 4: Customize the look
The form renders inside a shadow root, so your theme's CSS can't reach it and a theme change can never break it. Style it in LaunchList under Project settings → Branding: colors, font, corner radius and button style. Changes apply to every form, widget and page in the project, with nothing to change in WordPress. Forms also follow light and dark automatically.
Step 5: Test the signup flow
- Visit your WordPress page in a private window.
- Sign up with an address you can check (or use LaunchList's test mode so practice signups stay out of your list).
- Confirm the verification email. Double opt-in is on by default for waitlist forms.
- On your status page, copy your referral link and sign up a second address through it.
- Once that second address confirms, check that your referral count and position moved.
If your host strips script tags
Some managed WordPress plans and page builders remove <script> from post content. Use a plain HTML form instead: it posts straight to LaunchList and needs no JavaScript at all.
<form
action="https://embed.getlaunchlist.com/f/frm_8Kd2Qm4Rp9/submit"
method="POST"
>
<input type="email" name="email" required />
<input type="hidden" name="_channel" value="html" />
<button type="submit">Join</button>
</form>
Copy the action from Embed & API → Your website rather than typing it. Two things to know:
- It needs somewhere to land. The server answers with a redirect to the signup's status page or your own URL. Set the form's success behavior to one of those, not "inline message".
- Referrals need the loader somewhere on the site. A native form can't read
?ref=from the URL on its own. If you can load the script anywhere (for example site-wide from your theme), it finds the form by itsactionand adds the referral code and UTM parameters as hidden fields, without taking the submission over.
This form is also a good fit if you want your theme's own form styling: it's your markup and your CSS.
Advanced: keep your own styled form
If you want full control over the form's look with your theme's CSS but still want LaunchList's validation and referral handling, write your own form and add one attribute:
<form data-launchlist-enhance="frm_8Kd2Qm4Rp9">
<input type="email" name="email" placeholder="[email protected]" required />
<button type="submit">Join</button>
</form>
With the loader on the page, LaunchList takes over submission, live format validation, a one-tap fix for email domain typos, inline errors, referral attribution and what happens after submit, while your markup and CSS stay yours. Match each input's name to the field key shown in LaunchList.
WordPress + Elementor Pro: a dedicated waitlist page
If you're using Elementor Pro, you can build a dedicated waitlist landing page in about 15 minutes:
- Create a new landing page in Elementor Pro.
- Add a Hero section with your product pitch.
- Drop an HTML widget with the LaunchList form below the headline.
- Add a Social proof section, including a live counter widget once your number helps you:
<div data-launchlist-widget="counter" data-project="acme"></div>(use your own project handle). - Add a FAQ section with the Accordion widget.
- Publish.
Don't want to build the page in WordPress at all? Every LaunchList project has a hosted launch page with a block editor, and AI can draft it from a sentence about your product. See 15 Waitlist Landing Page Examples for layout inspiration.
Add a popup signup form, and open it on exit intent, a timer or scroll
Any element can open your LaunchList form in an overlay. Put this in a Custom HTML block, or add the attribute to a WordPress button you already have:
<button type="button" data-launchlist-popup="frm_8Kd2Qm4Rp9">
Join the waitlist
</button>
It's your own button, so style it however you like. Add data-variant="slideover" with data-position="right" for a side panel instead of a centered modal. From your own script you can also open it with LaunchList.popup('frm_8Kd2Qm4Rp9').open();.
The runtime can open the popup on its own, too. Add a hidden element carrying a data-trigger:
<!-- Exit intent: opens when the pointer leaves through the top of the window (desktop only) -->
<div hidden data-launchlist-popup="frm_8Kd2Qm4Rp9" data-trigger="exit"></div>
<!-- Timer: opens 10 seconds after the page loads (default 5) -->
<div hidden data-launchlist-popup="frm_8Kd2Qm4Rp9" data-trigger="time" data-delay="10"></div>
<!-- Scroll: opens once 60% of the page has been scrolled (default 50), at most every 14 days -->
<div hidden data-launchlist-popup="frm_8Kd2Qm4Rp9" data-trigger="scroll" data-scroll="60" data-cap="14"></div>
- Frequency cap.
data-capsets how many days must pass before the same visitor sees an auto-opened popup again. The default is 7. - Never after a signup. Once a visitor has joined through the popup, it doesn't auto-open for them again.
- Exit intent is desktop only. Phones have no pointer leaving the window, so pair it with a timer or scroll trigger if mobile traffic matters.
- These are hand-written attributes. The snippet generator in Embed & API → Your website gives you click-to-open popup buttons; the
data-trigger,data-delay,data-scrollanddata-capattributes are typed by you, exactly as above. The loader still has to be on the page.
Use one auto-trigger per page. A popup that fights the visitor for attention costs more signups than it wins.
Add live social proof: counter, leaderboard, milestone, countdown
Widgets put live numbers from your waitlist on your WordPress page. Each is one <div> in a Custom HTML block; copy the exact snippet from the Widgets section of Embed & API → Your website, with your own project handle in place of acme.
<!-- Live signup total -->
<div data-launchlist-widget="counter" data-project="acme" data-label="founders already in"></div>
<!-- Top referrers -->
<div data-launchlist-widget="leaderboard" data-project="acme" data-title="Top referrers"></div>
<!-- Progress toward a community goal -->
<div data-launchlist-widget="milestone" data-project="acme" data-goal="1000" data-reward="Early access for everyone"></div>
<!-- Time until launch (needs a launch date in Project settings, General) -->
<div data-launchlist-widget="countdown" data-project="acme" data-heading="We open in"></div>
<!-- Your published updates, as a "What's new" feed -->
<div data-launchlist-updates="acme" data-heading="What's new" data-count="5"></div>
Widgets are on every plan, Free included. They're aggregate only: no widget ever shows an email address or phone number, a leaderboard row shows the name your form collected or a masked identifier, and a slice of fewer than ten people shows no number at all. Like the form, they render in a shadow root and take their look from Project settings → Branding.
One rule: a counter reading "7 people have joined" sells against you. Leave it off until the total helps, or use the milestone widget, which frames a small number as progress toward a goal.
Embed on WordPress, or use the hosted page? The SEO answer
Every LaunchList project also comes with a hosted launch page, built in a visual editor with 19 block types, 8 style presets and 6 starting templates, and AI can write the first draft from one sentence about your product. So which should carry your waitlist?
- Embed on WordPress when the waitlist belongs on a page you already rank or plan to rank. The page is yours and on your domain, so it's indexed exactly as your WordPress site is, and the signups it earns build your domain, not ours.
- Use the hosted page when you don't want to build a page at all, or need a dedicated page for an ad campaign. It's server-rendered, so search engines get real HTML on the first request.
The honest indexing rule: a hosted page on its your-slug.launchlist.page address is never indexed by search engines, on any plan. It's live and shareable, but it asks search engines not to index it. To have a hosted page indexed, connect your own domain: one custom domain on the Collect plan, three on the Launch plan, unlimited on the Grow plan. You add one DNS record under Embed & API → Hosted page → Custom domain, and HTTPS is issued and renewed automatically. The launchlist.page address keeps working alongside it. The "Powered by LaunchList" badge comes off on the Launch and Grow plans.
You can use both: a hosted page for a campaign and the embed on your WordPress site. Deduplication is per project, so the same person arriving through both is one contact.
Tracking waitlist signups in GA4, Meta Pixel and your other analytics
On your WordPress site, your own analytics already sees the page, because the form sits on your page. To count signups as conversions:
- Send signups to your own thank-you page. In the form's settings, set what happens after submit to Your own URL, point it at a WordPress page, and fire your conversion event there. UTM parameters pass through, so the conversion is still attributed to the right campaign.
- Record them server-side with webhooks. LaunchList sends signed webhooks for 27 event types, including
signup.created,contact.verifiedandreferral.made, signed with HMAC-SHA256 and retried 7 times over about two and a half days, with a delivery log under Embed & API → Developers → Webhooks. There's no native Zapier or Make app; point a webhook at "Webhooks by Zapier", Make or n8n and route signups anywhere from there.
On the hosted page, add your own tags under Project settings → Privacy & spam: Google Analytics 4, Google Tag Manager, Google Ads, Meta Pixel, TikTok Pixel, LinkedIn Insight, X Pixel, Plausible and PostHog. They load on the hosted page and the status page, with an optional consent banner that links to your privacy policy. Custom tracking tags are on every plan.
Inside LaunchList, Analytics shows signups over time, organic versus referred, the hosted page's visit-to-signup rate and the share that confirmed, each compared with the period before. The breakdown of where signups come from (channels, landing pages and referring sites) is on the Grow plan. LaunchList doesn't track email opens or clicks; it reports delivered, bounced, unsubscribed and spam complaints.
What happens after someone signs up
The form is the start. Here's what LaunchList does with each signup, with no extra setup:
- A status page of their own with their position, their referral link, one-tap share buttons and their referral count. Every email you send links back to it, so "where's my link?" never reaches your inbox.
- Double opt-in, per form. It's on by default for Waitlist and Marketing forms and off for Survey forms; switch it under the form's Settings → Verification.
- A Contact Trust verdict on every signup: Verified, Valid, Unknown, Risky or Fake. A contact is only marked Fake when two independent signals agree, and suspicious signups are held for review rather than deleted, outside your list and your bill until you approve or block them.
- Referral credit only after the friend verifies. By default a referrer can earn at most 3 credited referrals from one IP address and 20 in an hour, and credit is taken back if a referred contact later turns out to be fake.
- Rewards and points unlock automatically by referral count on the Collect plan and up, each with its own announcement email.
- Email from the same place. Broadcasts on the Collect plan and up; branching automations, a custom sending domain and saved segments on the Launch and Grow plans; beta invites with personal codes on every plan (the Free plan covers your first 100).
Spam protection is on every plan. If a bot finds your form, raise the strictness or turn on CAPTCHA under Project settings → Privacy & spam, with your own Turnstile, reCAPTCHA or hCaptcha keys. Add your site's domain to the allowed hostnames in your CAPTCHA provider's account, or the challenge won't load.
For developers: the REST API, webhooks and MCP
If signups happen on your server rather than in a browser, skip the embed and post them directly:
curl https://api.getlaunchlist.com/v1/contacts \
-H "Authorization: Bearer llk_live_..." \
-H "Content-Type: application/json" \
-d '{ "project": "prj_7Qk2mN4pR8", "email": "[email protected]" }'
One call returns the referral code, the live queue position and the trust verdict. The REST API has 53 operations, described by a public OpenAPI 3.1 spec at api.getlaunchlist.com/v1/openapi.json, and keys are created under Embed & API → Developers → API keys with 13 scopes.
The same workspace is open to AI agents through LaunchList's MCP server: 35 tools that Claude, ChatGPT, Cursor and other MCP clients can use to read your audience, draft broadcasts or edit your page draft. You connect over OAuth, approving one workspace on a consent screen, or with a scoped API key, under Embed & API → AI assistants. Agents can't delete contacts or publish pages, and a broadcast needs a separate confirmation step. The API, webhooks and MCP are on every plan, the Free plan included.
Troubleshooting common WordPress issues
The block shows the code as text
- You used a Paragraph block. Switch to Custom HTML.
The form isn't appearing
- Your host or a security plugin may be stripping
<script>. Use the no-JavaScript form above. - Purge your caching plugin and CDN after publishing. LaunchList never caches the form itself.
- Check the browser console for errors, and that the form ID matches the one in LaunchList.
The form appears but can't submit
- Check your security plugin (Wordfence, Sucuri) or Content Security Policy. The embed needs its own host allowed:
script-src 'self' https://embed.getlaunchlist.com;
connect-src 'self' https://embed.getlaunchlist.com;
style-src 'self' 'unsafe-inline';
font-src 'self' https://embed.getlaunchlist.com;
- If your brand font isn't the default, also allow
https://fonts.googleapis.cominstyle-srcandhttps://fonts.gstatic.cominfont-src. With CAPTCHA on, allow your provider inscript-srcandframe-src:challenges.cloudflare.comfor Turnstile,www.google.comandwww.gstatic.comfor reCAPTCHA, orjs.hcaptcha.comandhcaptcha.comfor hCaptcha. The no-JavaScript form needs no CSP change.
The form shows twice
- The form block is on the page twice; each renders its own form. Remove the duplicate. A script enqueued site-wide and in the block is harmless.
Referrals aren't crediting
- Credit lands when the referred friend confirms their email, not when they submit. A referrer's count shows credited referrals only.
- Load the script site-wide so the
?ref=code is captured on whichever page a referral link lands. It's stored in the visitor's browser for 90 days. - Someone who was already on your list can't be referred again.
Spam signups are getting through
- Spam protection runs on every plan, Free included. Tune how strict it is under Project settings → Privacy & spam, and review the Held for review group on Audience → Signups.
- If you're under attack, turn on CAPTCHA in the same place with your own Turnstile, reCAPTCHA or hCaptcha keys.
Frequently asked questions
What's the best WordPress waitlist plugin for a pre-launch?
For a pre-launch waitlist you don't need a plugin. Paste LaunchList's two-line snippet into a Custom HTML block and you get referral links, a live leaderboard, Contact Trust verification and built-in email, which back-in-stock plugins such as YITH WooCommerce Waitlist don't offer.
Is there a LaunchList WordPress plugin?
No, and you don't need one. The embed is two lines of HTML, so there's nothing to install, update or keep compatible with your WordPress version, and it adds no PHP to your site.
Can I add a waitlist to a WordPress.com site?
On WordPress.com's Business plan and above, yes, with the Custom HTML block. Lower WordPress.com tiers strip script tags, so use LaunchList's no-JavaScript form instead. Self-hosted WordPress.org works either way.
How do I add a waitlist form in Elementor or Divi?
Use Elementor's HTML widget or Divi's Code module and paste the same snippet. A Shortcode widget won't render the form.
Can I add an exit-intent waitlist popup to WordPress?
Yes. Load the LaunchList script site-wide and add a hidden element with data-launchlist-popup and data-trigger="exit"; time and scroll triggers work the same way. These attributes are written by hand, show at most once every 7 days by default, and never reopen for someone who already signed up.
Will my WordPress waitlist page be indexed by Google?
A form embedded on your WordPress page is indexed like the rest of your site. A LaunchList hosted page on a launchlist.page address is never indexed on any plan; connect your own domain on the Collect plan or higher to index it.
Does the waitlist work with WooCommerce?
Yes, for launching a new product, collection or store. LaunchList doesn't take payments or pre-orders, so for checkout and back-in-stock alerts keep WooCommerce and a dedicated plugin.
How do I stop spam signups on my WordPress waitlist?
Spam protection runs on every LaunchList plan: rate limits, a honeypot, disposable-address checks and a trust verdict on every signup, with suspicious ones held for review. If a bot keeps hitting the form, raise the strictness or add your own Turnstile, reCAPTCHA or hCaptcha keys under Project settings, Privacy & spam.
Launch your WordPress waitlist today
You can have a referral waitlist live on your WordPress site in about ten minutes. The Free plan covers 100 contacts with referral links, a live leaderboard, status pages, spam protection and a hosted launch page, with no card.
Related reading
- Add a waitlist form to any website: the no-code embed hub.
- Add a waitlist to Webflow: cousin setup guide for Webflow sites.
- Add a waitlist to Squarespace: cousin setup guide for Squarespace.
- 15 waitlist landing page examples that convert, with templates to copy.
- Best free waitlist software compared (2026)
- LaunchList features: embeds, the hosted page, referrals, email and the API.