<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Aymane</title>
    <description>The latest articles on DEV Community by Aymane (@aymaneonlinedev).</description>
    <link>https://dev.to/aymaneonlinedev</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4170668%2F2b95680d-b3f9-4c78-bde1-68c7747be91c.jpg</url>
      <title>DEV Community: Aymane</title>
      <link>https://dev.to/aymaneonlinedev</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/aymaneonlinedev"/>
    <language>en</language>
    <item>
      <title>How to Add a Waitlist to Any Website (2 Lines of Code)</title>
      <dc:creator>Aymane</dc:creator>
      <pubDate>Mon, 12 Oct 2026 13:20:48 +0000</pubDate>
      <link>https://dev.to/aymaneonlinedev/how-to-add-a-waitlist-to-any-website-2-lines-of-code-5ejk</link>
      <guid>https://dev.to/aymaneonlinedev/how-to-add-a-waitlist-to-any-website-2-lines-of-code-5ejk</guid>
      <description>&lt;p&gt;Almost any website can host a GetWaitly waitlist, because the embed is just two lines of HTML: a script tag and a container div. If your site lets you add custom HTML anywhere, you can add a waitlist to it — no plugin, no framework, no SDK.&lt;/p&gt;

&lt;p&gt;Here is the generic HTML embed, plus the popup and no-JavaScript variants and how to troubleshoot it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The short answer
&lt;/h2&gt;

&lt;p&gt;Paste &lt;code&gt;&amp;lt;script src="https://getwaitly.com/widget.js" defer&amp;gt;&amp;lt;/script&amp;gt;&lt;/code&gt; once near the end of your page, and place &lt;code&gt;&amp;lt;div class="gw-widget" data-waitlist-id="YOUR_WAITLIST_ID"&amp;gt;&amp;lt;/div&amp;gt;&lt;/code&gt; where you want the form. The widget renders inline and matches your waitlist's branding. Total time: 2 minutes.&lt;/p&gt;

&lt;h2&gt;
  
  
  What you need
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;A GetWaitly account with a waitlist created (free plan covers 100 subscribers).&lt;/li&gt;
&lt;li&gt;Your waitlist's public ID from the Widget/Embed section of the dashboard.&lt;/li&gt;
&lt;li&gt;A website where you can add custom HTML — your own HTML, or any builder with an "Embed" or "Custom Code" feature.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The two lines
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Script tag&lt;/strong&gt; (loads the widget; place it once per page):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"https://getwaitly.com/widget.js"&lt;/span&gt; &lt;span class="na"&gt;defer&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Container div&lt;/strong&gt; (where the form appears):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"gw-widget"&lt;/span&gt; &lt;span class="na"&gt;data-waitlist-id=&lt;/span&gt;&lt;span class="s"&gt;"YOUR_WAITLIST_ID"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Use the waitlist's public &lt;strong&gt;ID&lt;/strong&gt;, not its URL slug. Both come from the Embed section of your dashboard.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where to put them
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Put the &lt;strong&gt;script&lt;/strong&gt; just before the closing &lt;code&gt;&amp;lt;/body&amp;gt;&lt;/code&gt; tag, or anywhere on the page. The &lt;code&gt;defer&lt;/code&gt; attribute makes it load after your content, so it does not block rendering.&lt;/li&gt;
&lt;li&gt;Put the &lt;strong&gt;div&lt;/strong&gt; exactly where you want the form. To control width and alignment, wrap it in a container:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"max-width: 480px; margin: 0 auto;"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"gw-widget"&lt;/span&gt; &lt;span class="na"&gt;data-waitlist-id=&lt;/span&gt;&lt;span class="s"&gt;"YOUR_WAITLIST_ID"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"https://getwaitly.com/widget.js"&lt;/span&gt; &lt;span class="na"&gt;defer&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you want the form on several pages, load the script once in your site's global footer or a shared template, and place only the div on each page.&lt;/p&gt;

&lt;h2&gt;
  
  
  Platform guides
&lt;/h2&gt;

&lt;p&gt;The widget works the same everywhere, but each platform has its own place to paste it. Step-by-step guides:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Website builders&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://getwaitly.com/blog/how-to-add-a-waitlist-to-wordpress" rel="noopener noreferrer"&gt;WordPress&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://getwaitly.com/blog/how-to-add-a-waitlist-to-webflow" rel="noopener noreferrer"&gt;Webflow&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://getwaitly.com/blog/how-to-add-a-waitlist-to-squarespace" rel="noopener noreferrer"&gt;Squarespace&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://getwaitly.com/blog/how-to-add-a-waitlist-to-godaddy" rel="noopener noreferrer"&gt;GoDaddy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://getwaitly.com/blog/how-to-embed-getwaitly-on-carrd" rel="noopener noreferrer"&gt;Carrd&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Ecommerce&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://getwaitly.com/blog/how-to-add-a-waitlist-to-shopify" rel="noopener noreferrer"&gt;Shopify&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://getwaitly.com/blog/how-to-add-a-waitlist-to-woocommerce" rel="noopener noreferrer"&gt;WooCommerce&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;No-code &amp;amp; app builders&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://getwaitly.com/blog/how-to-add-a-waitlist-to-framer" rel="noopener noreferrer"&gt;Framer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://getwaitly.com/blog/how-to-add-a-waitlist-to-bubble" rel="noopener noreferrer"&gt;Bubble&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://getwaitly.com/blog/how-to-add-a-waitlist-to-notion" rel="noopener noreferrer"&gt;Notion&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Blog &amp;amp; publishing&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://getwaitly.com/blog/how-to-add-a-waitlist-to-ghost" rel="noopener noreferrer"&gt;Ghost&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://getwaitly.com/blog/how-to-add-a-waitlist-to-wordpress" rel="noopener noreferrer"&gt;WordPress&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Developers&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://getwaitly.com/blog/how-to-add-a-waitlist-to-react-and-nextjs" rel="noopener noreferrer"&gt;React &amp;amp; Next.js&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The popup variant
&lt;/h2&gt;

&lt;p&gt;For a button that opens the form in a modal, use a trigger element instead of the div:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"gw-trigger"&lt;/span&gt; &lt;span class="na"&gt;data-waitlist-id=&lt;/span&gt;&lt;span class="s"&gt;"YOUR_WAITLIST_ID"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Join waitlist&lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"https://getwaitly.com/widget.js"&lt;/span&gt; &lt;span class="na"&gt;defer&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is useful for a header CTA, a floating button, or a "Join" link anywhere on the page.&lt;/p&gt;

&lt;h2&gt;
  
  
  Full control: your own form
&lt;/h2&gt;

&lt;p&gt;If you want to style the form yourself, write custom HTML and let GetWaitly handle submission with the DIY script (&lt;code&gt;widget-diy.js&lt;/code&gt;):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;form&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"gw-form"&lt;/span&gt; &lt;span class="na"&gt;data-waitlist-id=&lt;/span&gt;&lt;span class="s"&gt;"YOUR_WAITLIST_ID"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt; &lt;span class="na"&gt;required&lt;/span&gt; &lt;span class="na"&gt;placeholder=&lt;/span&gt;&lt;span class="s"&gt;"Your email"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"name"&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"text"&lt;/span&gt; &lt;span class="na"&gt;placeholder=&lt;/span&gt;&lt;span class="s"&gt;"Full name (optional)"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"submit"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Join waitlist&lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/form&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"https://getwaitly.com/widget-diy.js"&lt;/span&gt; &lt;span class="na"&gt;defer&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This submits without a page reload and shows an inline success message, while you keep full CSS control.&lt;/p&gt;

&lt;h2&gt;
  
  
  No JavaScript at all
&lt;/h2&gt;

&lt;p&gt;If scripts are blocked or you simply do not want one, post a plain HTML form to your waitlist's join endpoint:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;form&lt;/span&gt; &lt;span class="na"&gt;action=&lt;/span&gt;&lt;span class="s"&gt;"https://getwaitly.com/api/join/YOUR_WAITLIST_ID"&lt;/span&gt; &lt;span class="na"&gt;method=&lt;/span&gt;&lt;span class="s"&gt;"post"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt; &lt;span class="na"&gt;required&lt;/span&gt; &lt;span class="na"&gt;placeholder=&lt;/span&gt;&lt;span class="s"&gt;"Your email"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"submit"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Join the waitlist&lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/form&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The browser posts the signup and redirects to your thank-you page. You lose the inline success animation, but the subscriber still lands in your dashboard.&lt;/p&gt;

&lt;h2&gt;
  
  
  Testing
&lt;/h2&gt;

&lt;p&gt;Open the page, submit a test email, and confirm you see the success message and the subscriber appears in GetWaitly. Then check mobile — the widget is responsive out of the box.&lt;/p&gt;

&lt;h2&gt;
  
  
  Troubleshooting
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Nothing renders.&lt;/strong&gt; Check the browser console for a blocked script. Ad blockers, strict Content Security Policy (CSP), or a security plugin can block third-party scripts. If your site has a CSP, add &lt;code&gt;https://getwaitly.com&lt;/code&gt; to &lt;code&gt;script-src&lt;/code&gt; and &lt;code&gt;connect-src&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The box is empty.&lt;/strong&gt; Usually a wrong &lt;code&gt;data-waitlist-id&lt;/code&gt;. It must be the public ID, not the slug.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It works locally but not in production (or vice versa).&lt;/strong&gt; Confirm the script tag is on the published page, not just your template or a preview.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Two forms appear.&lt;/strong&gt; You loaded the script twice (for example, in a global footer and again in the page). Load it once.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What kind of website can use the GetWaitly embed?
&lt;/h3&gt;

&lt;p&gt;Any site that lets you add a &lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt; tag and an HTML element. That includes hand-coded HTML, WordPress, Webflow, Squarespace, Shopify, Framer, Carrd, and most page builders. Platform-specific guides are linked below.&lt;/p&gt;

&lt;h3&gt;
  
  
  Do I need to know how to code?
&lt;/h3&gt;

&lt;p&gt;No. Copy two lines and paste them. If you can paste into an "Embed" or "Custom HTML" box, you can add a waitlist.&lt;/p&gt;

&lt;h3&gt;
  
  
  Will the widget slow down my site?
&lt;/h3&gt;

&lt;p&gt;No. The script is small and loaded with &lt;code&gt;defer&lt;/code&gt;, so it does not block rendering.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I style the form to match my site?
&lt;/h3&gt;

&lt;p&gt;The standard widget uses your GetWaitly accent color and font. For full styling control, use the DIY form (&lt;code&gt;widget-diy.js&lt;/code&gt;) and style the inputs yourself, or the no-JavaScript form action.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does it work if my site blocks external scripts?
&lt;/h3&gt;

&lt;p&gt;Not the widget. Use the no-JavaScript form action above, which posts directly to your waitlist, or link to GetWaitly's hosted page at &lt;code&gt;getwaitly.com/w/your-id&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Where do I find my waitlist ID?
&lt;/h3&gt;

&lt;p&gt;In your GetWaitly dashboard, open the waitlist and go to the Widget/Embed section. Copy the public ID shown in the &lt;code&gt;data-waitlist-id&lt;/code&gt; example.&lt;/p&gt;

&lt;h2&gt;
  
  
  Related guides
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://getwaitly.com/blog/how-to-add-a-waitlist-to-wordpress" rel="noopener noreferrer"&gt;How to Add a Waitlist to WordPress&lt;/a&gt; — the Custom HTML block method&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://getwaitly.com/blog/how-to-add-a-waitlist-to-webflow" rel="noopener noreferrer"&gt;How to Add a Waitlist to Webflow&lt;/a&gt; — the Code Embed method&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://getwaitly.com/blog/how-to-add-a-waitlist-to-react-and-nextjs" rel="noopener noreferrer"&gt;How to Add a Waitlist to React &amp;amp; Next.js&lt;/a&gt; — script + component&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://getwaitly.com/blog/best-waitlist-tools-solo-founders" rel="noopener noreferrer"&gt;7 Best Waitlist Tools for Solo Founders in 2026&lt;/a&gt; — the full comparison&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://getwaitly.com/blog/waitlist-creator" rel="noopener noreferrer"&gt;Waitlist Creator: How to Create a Waitlist Page in Minutes&lt;/a&gt; — what a waitlist creator is and how to set one up&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The simple, affordable waitlist tool for founders and makers. Start free in 5 minutes — no credit card required. &lt;a href="https://getwaitly.com/signup" rel="noopener noreferrer"&gt;Try GetWaitly free →&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>html</category>
      <category>javascript</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Which Form Builder for a Waitlist? (Tally, Typeform, Carrd, GetWaitly)</title>
      <dc:creator>Aymane</dc:creator>
      <pubDate>Sun, 11 Oct 2026 19:08:13 +0000</pubDate>
      <link>https://dev.to/aymaneonlinedev/which-form-builder-for-a-waitlist-tally-typeform-carrd-getwaitly-427</link>
      <guid>https://dev.to/aymaneonlinedev/which-form-builder-for-a-waitlist-tally-typeform-carrd-getwaitly-427</guid>
      <description>&lt;p&gt;You need a waitlist form live today. Not next week, not after you research every tool — today, so you can start collecting emails while you build. The problem is that "form builder" and "waitlist tool" sound like the same thing, and picking the wrong one costs you either money, time, or features you will not notice you are missing until launch.&lt;/p&gt;

&lt;p&gt;This guide covers how to get a waitlist form live in an afternoon, which form builders can do it, and the one shortcut that skips the workarounds.&lt;/p&gt;

&lt;h2&gt;
  
  
  The short answer
&lt;/h2&gt;

&lt;p&gt;If you want a waitlist form live fast, you have two paths. Use a &lt;strong&gt;general form builder&lt;/strong&gt; (Tally, Google Forms, Typeform) if you only need to collect email addresses and do not care about referrals or follow-up emails. Use a &lt;strong&gt;dedicated waitlist tool&lt;/strong&gt; (like GetWaitly) if you want referrals, automated emails, and analytics built in from day one. For most solo founders launching a product, the dedicated tool saves more time than it costs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why a plain form builder starts to hurt
&lt;/h2&gt;

&lt;p&gt;A form builder is great at one thing: turning input into data. Tally and Typeform are excellent at that. But a waitlist is not just a data-capture problem. It is a people-engineering problem.&lt;/p&gt;

&lt;p&gt;Here is what a general form builder does not give you without extra work:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;A referral loop.&lt;/strong&gt; "Share to move up the list" needs a unique link per subscriber and logic to track who referred whom. Form builders do not do this out of the box.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A confirmation and welcome email.&lt;/strong&gt; You need a second tool (Mailchimp, Kit) wired to the form, or you send nothing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Position tracking.&lt;/strong&gt; People want to know where they are in line and how to move up. That requires state, not just a form submission.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Analytics.&lt;/strong&gt; Visitors, signups, and conversion rate on one screen. A form builder shows submissions, not a funnel.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Spam handling.&lt;/strong&gt; A public waitlist form attracts bot signups. Dedicated tools ship with spam protection; raw forms often do not.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of those is fatal. But each one is a workaround — a second tool, a Zap, a script. By the third workaround, you have spent more time than a dedicated tool would have cost.&lt;/p&gt;

&lt;h2&gt;
  
  
  The form builders you might consider
&lt;/h2&gt;

&lt;p&gt;Here is an honest look at the common starting points, and where each one stops being enough.&lt;/p&gt;

&lt;h3&gt;
  
  
  Tally
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; A free, genuinely pleasant form builder with a no-code editor and unlimited free responses.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When it works:&lt;/strong&gt; You need a fast, clean form and you are happy piping results into a spreadsheet or sending manual emails.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Where it falls short:&lt;/strong&gt; No referral system, no position tracking, and no built-in email sequence. You are exporting a CSV and emailing people by hand, or paying for a separate email tool.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Validating whether there is any interest at all, before you commit to a real waitlist.&lt;/p&gt;

&lt;h3&gt;
  
  
  Typeform
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; A polished, conversational form builder with strong design and logic jumps.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When it works:&lt;/strong&gt; You want a beautiful, interactive form and your brand leans on design.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Where it falls short:&lt;/strong&gt; Free plan is capped (10 responses/month), and it has the same gaps as Tally — no referrals, no waitlist-specific email, no analytics funnel.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Founders who want a premium form experience and will handle the waitlist mechanics separately.&lt;/p&gt;

&lt;h3&gt;
  
  
  Google Forms
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; The fastest free option, if you already live in Google Workspace.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When it works:&lt;/strong&gt; You literally just need a text box and a spreadsheet.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Where it falls short:&lt;/strong&gt; No design control, no referrals, no emails, and it looks like — a Google Form. For a product you want people to be excited about, presentation matters.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; A throwaway test, not a launch.&lt;/p&gt;

&lt;h3&gt;
  
  
  Carrd's built-in form
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; If your landing page is already on Carrd, its native form sends submissions to an email platform.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When it works:&lt;/strong&gt; Your page is on Carrd and you only need basic email capture.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Where it falls short:&lt;/strong&gt; You still need an external tool for the emails and referral logic. There is a better path: &lt;a href="https://getwaitly.com/blog/how-to-embed-getwaitly-on-carrd" rel="noopener noreferrer"&gt;embed a real waitlist widget on Carrd&lt;/a&gt; instead of using the native form.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; People already committed to Carrd who want minimal moving parts.&lt;/p&gt;

&lt;h3&gt;
  
  
  GetWaitly (a dedicated waitlist tool)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; A waitlist-specific tool for founders and makers — a signup form, referrals, broadcast emails, and analytics in one place.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When it works:&lt;/strong&gt; You are launching a product and want the whole waitlist loop working without stitching tools together.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Where it falls short:&lt;/strong&gt; It is not a general-purpose form builder. If you need complex form logic, payments, or dozens of custom fields, a form builder is more flexible. GetWaitly deliberately does not try to be that.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Solo founders who want a waitlist live today and want referrals and emails built in.&lt;/p&gt;

&lt;h2&gt;
  
  
  Comparison at a glance
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;Free tier&lt;/th&gt;
&lt;th&gt;Referrals&lt;/th&gt;
&lt;th&gt;Auto emails&lt;/th&gt;
&lt;th&gt;Position tracking&lt;/th&gt;
&lt;th&gt;Analytics funnel&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Tally&lt;/td&gt;
&lt;td&gt;Yes (unlimited)&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Typeform&lt;/td&gt;
&lt;td&gt;10/mo&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Google Forms&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Carrd form&lt;/td&gt;
&lt;td&gt;With Carrd&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No (external)&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Basic&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GetWaitly&lt;/td&gt;
&lt;td&gt;100 subscribers&lt;/td&gt;
&lt;td&gt;Yes (Starter)&lt;/td&gt;
&lt;td&gt;Yes (Starter)&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  How to get a waitlist form live today
&lt;/h2&gt;

&lt;p&gt;Whichever tool you pick, the sequence is the same. Here is the fast path with GetWaitly.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Create the waitlist (2 minutes)
&lt;/h3&gt;

&lt;p&gt;Sign up, name your waitlist, and publish. The free plan gives you one waitlist and up to 100 subscribers — enough to validate.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Choose where the form lives
&lt;/h3&gt;

&lt;p&gt;You have two options:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Hosted signup:&lt;/strong&gt; GetWaitly provides a page at a shareable link. Customize the content and branding, then share the URL. Best for a fast start.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Embed on your own site:&lt;/strong&gt; Drop a two-line embed into your existing site so the form lives on your domain. Best when you already have a page.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you want the form on your own domain, the embed is the move — the &lt;a href="https://getwaitly.com/blog/how-to-embed-getwaitly-on-carrd" rel="noopener noreferrer"&gt;Carrd embed guide&lt;/a&gt; walks through it step by step. The same widget works on any site that accepts custom HTML; there are dedicated guides for &lt;a href="https://getwaitly.com/blog/how-to-add-a-waitlist-to-wordpress" rel="noopener noreferrer"&gt;WordPress&lt;/a&gt;, &lt;a href="https://getwaitly.com/blog/how-to-add-a-waitlist-to-webflow" rel="noopener noreferrer"&gt;Webflow&lt;/a&gt;, &lt;a href="https://getwaitly.com/blog/how-to-add-a-waitlist-to-squarespace" rel="noopener noreferrer"&gt;Squarespace&lt;/a&gt;, and &lt;a href="https://getwaitly.com/blog/how-to-add-a-waitlist-to-shopify" rel="noopener noreferrer"&gt;Shopify&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Turn on referrals
&lt;/h3&gt;

&lt;p&gt;On the Starter plan ($5/mo), every subscriber gets a unique referral link automatically and moves up the list when friends join. This turns a static form into a small growth loop — the single biggest reason to use a dedicated waitlist tool over a form builder.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Send your first email
&lt;/h3&gt;

&lt;p&gt;Write the welcome email in the built-in editor and send it to everyone who joins. Open and click tracking tell you what lands. If you want the exact copy, the &lt;a href="https://getwaitly.com/blog/waitlist-email-template-examples" rel="noopener noreferrer"&gt;waitlist email template library&lt;/a&gt; has a paste-ready version.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Watch the funnel
&lt;/h3&gt;

&lt;p&gt;The analytics dashboard shows views, signups, and conversion rate with a 30-day trend, so you can tell whether the problem is traffic or the page itself.&lt;/p&gt;

&lt;h2&gt;
  
  
  Frequently asked questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Can I build a waitlist with a form builder?
&lt;/h3&gt;

&lt;p&gt;Yes — Tally, Typeform, or Google Forms will collect email addresses. What they will not do is referrals, position tracking, or the follow-up email sequence without a second tool. If you only need emails, a form builder is fine.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is the fastest way to build a waitlist form?
&lt;/h3&gt;

&lt;p&gt;A dedicated waitlist tool like GetWaitly: create the waitlist, copy the embed or share the hosted link, and publish. That is a live form in minutes with referrals and emails already wired up. A form builder is faster to &lt;em&gt;create&lt;/em&gt; but slower to &lt;em&gt;finish&lt;/em&gt;, because of the missing pieces you add later.&lt;/p&gt;

&lt;h3&gt;
  
  
  Do I need a form builder and a waitlist tool?
&lt;/h3&gt;

&lt;p&gt;No. If you use a waitlist tool, the form is included. You only need both if you want a general-purpose form (with payments or complex logic) &lt;em&gt;and&lt;/em&gt; a separate waitlist system — which is rare for a pre-launch product.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is a free form builder good enough for a real launch?
&lt;/h3&gt;

&lt;p&gt;For validation, yes. For a launch where you want referral growth and follow-up emails, no — you will end up bolting on tools. Starting with a waitlist tool that includes both is simpler and usually cheaper than three free tools that do not talk to each other.&lt;/p&gt;

&lt;h2&gt;
  
  
  The bottom line
&lt;/h2&gt;

&lt;p&gt;A form builder answers "how do I collect emails." A waitlist tool answers "how do I collect emails, grow them through referrals, and keep them warm until launch." If all you need is the first question, Tally is free and fine. If you are actually launching a product, the second question is the one that matters — and it is worth starting there.&lt;/p&gt;

&lt;p&gt;GetWaitly is the simple, affordable waitlist for founders and makers: a live form, referrals, and emails from $0, with the paid tier at $5/mo. &lt;a href="https://getwaitly.com/signup" rel="noopener noreferrer"&gt;Try it free →&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Related guides
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://getwaitly.com/blog/waitlist-creator" rel="noopener noreferrer"&gt;Waitlist Creator: How to Create a Waitlist Page in Minutes&lt;/a&gt; — what a waitlist creator is, and how to make one&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://getwaitly.com/blog/best-waitlist-tools-solo-founders" rel="noopener noreferrer"&gt;7 Best Waitlist Tools for Solo Founders in 2026&lt;/a&gt; — the full dedicated-tool comparison&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://getwaitly.com/blog/how-to-embed-getwaitly-on-carrd" rel="noopener noreferrer"&gt;How to Embed GetWaitly on Carrd&lt;/a&gt; — put the form on your own site in two lines&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://getwaitly.com/blog/how-to-add-a-waitlist-to-wordpress" rel="noopener noreferrer"&gt;How to Add a Waitlist to WordPress&lt;/a&gt; — the Custom HTML block method&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://getwaitly.com/blog/how-to-add-a-waitlist-to-webflow" rel="noopener noreferrer"&gt;How to Add a Waitlist to Webflow&lt;/a&gt; — the Code Embed method&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://getwaitly.com/blog/how-to-add-a-waitlist-to-any-website" rel="noopener noreferrer"&gt;How to Add a Waitlist to Any Website&lt;/a&gt; — the generic HTML embed&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://getwaitly.com/blog/waitlist-email-template-examples" rel="noopener noreferrer"&gt;Waitlist Email Templates You Can Copy Today&lt;/a&gt; — what to send after someone signs up&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://getwaitly.com/blog/email-vs-waitlist-vs-landing-page" rel="noopener noreferrer"&gt;Email vs Waitlist vs Landing Page: Which Do You Need?&lt;/a&gt; — choosing the right pre-launch approach&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>webdev</category>
      <category>saas</category>
      <category>tooling</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>How to Add a Waitlist to WordPress (No Plugin)</title>
      <dc:creator>Aymane</dc:creator>
      <pubDate>Sat, 10 Oct 2026 14:13:47 +0000</pubDate>
      <link>https://dev.to/aymaneonlinedev/how-to-add-a-waitlist-to-wordpress-no-plugin-3hdh</link>
      <guid>https://dev.to/aymaneonlinedev/how-to-add-a-waitlist-to-wordpress-no-plugin-3hdh</guid>
      <description>&lt;p&gt;You want a waitlist signup form on your WordPress site — not a Mailchimp redirect, but a real waitlist that tracks referrals and sends updates. GetWaitly's embeddable widget drops into WordPress with two lines of code, no plugin required.&lt;/p&gt;

&lt;p&gt;Here is exactly how to add a waitlist to WordPress, and the one plan limitation to know about first.&lt;/p&gt;

&lt;h2&gt;
  
  
  The short answer
&lt;/h2&gt;

&lt;p&gt;Add a &lt;strong&gt;Custom HTML block&lt;/strong&gt; to the page where you want the form and paste your GetWaitly embed snippet. The widget renders inline, matches your brand colors, and collects subscribers straight into your dashboard. On a self-hosted WordPress site (WordPress.org) this always works. On WordPress.com, JavaScript in HTML blocks requires a Business plan or higher. Total time: 5 minutes.&lt;/p&gt;

&lt;h2&gt;
  
  
  What you need
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;A GetWaitly account with a waitlist created. The free plan covers 100 subscribers.&lt;/li&gt;
&lt;li&gt;Your waitlist's public ID (from the Widget/Embed section of the dashboard).&lt;/li&gt;
&lt;li&gt;A WordPress site. &lt;strong&gt;Self-hosted (WordPress.org)&lt;/strong&gt; works on any host. &lt;strong&gt;WordPress.com&lt;/strong&gt; needs a plan that allows custom JavaScript — free, Personal, and Premium strip script tags; Business and Commerce allow them.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 1 — Get your embed code
&lt;/h2&gt;

&lt;p&gt;In your GetWaitly dashboard, open the waitlist and go to the &lt;strong&gt;Widget&lt;/strong&gt; section. Copy two pieces of code:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Script tag&lt;/strong&gt; (loads the widget):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"https://getwaitly.com/widget.js"&lt;/span&gt; &lt;span class="na"&gt;defer&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Container div&lt;/strong&gt; (where the form appears):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"gw-widget"&lt;/span&gt; &lt;span class="na"&gt;data-waitlist-id=&lt;/span&gt;&lt;span class="s"&gt;"YOUR_WAITLIST_ID"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Replace &lt;code&gt;YOUR_WAITLIST_ID&lt;/code&gt; with your waitlist's public ID.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2 — Add the form to a page
&lt;/h2&gt;

&lt;p&gt;Open the page or post where the waitlist belongs in the WordPress block editor. Click the &lt;strong&gt;+&lt;/strong&gt; button, search for &lt;strong&gt;Custom HTML&lt;/strong&gt;, and add the block.&lt;/p&gt;

&lt;p&gt;Paste both parts into the block:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"gw-widget"&lt;/span&gt; &lt;span class="na"&gt;data-waitlist-id=&lt;/span&gt;&lt;span class="s"&gt;"YOUR_WAITLIST_ID"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"https://getwaitly.com/widget.js"&lt;/span&gt; &lt;span class="na"&gt;defer&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Click &lt;strong&gt;Preview&lt;/strong&gt; or &lt;strong&gt;Publish&lt;/strong&gt;. The signup form renders where the block sits.&lt;/p&gt;

&lt;p&gt;That is the whole integration. If your theme supports it, the form inherits your GetWaitly accent color and font automatically.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3 — Or load the script site-wide (optional)
&lt;/h2&gt;

&lt;p&gt;If you plan to show the widget on several pages, load the script once instead of on every page. Add only the script tag globally, then place only the container div on each page.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;With a plugin:&lt;/strong&gt; Install a header/footer plugin like &lt;strong&gt;WPCode&lt;/strong&gt; or &lt;strong&gt;Insert Headers and Footers&lt;/strong&gt;, and paste the script tag into the &lt;strong&gt;Footer&lt;/strong&gt; section (before &lt;code&gt;&amp;lt;/body&amp;gt;&lt;/code&gt;).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"https://getwaitly.com/widget.js"&lt;/span&gt; &lt;span class="na"&gt;defer&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then, on each page, add a Custom HTML block with only the div:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"gw-widget"&lt;/span&gt; &lt;span class="na"&gt;data-waitlist-id=&lt;/span&gt;&lt;span class="s"&gt;"YOUR_WAITLIST_ID"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Without a plugin:&lt;/strong&gt; Edit your theme's &lt;code&gt;footer.php&lt;/code&gt; (in Appearance → Theme File Editor) and paste the script tag just before &lt;code&gt;&amp;lt;/body&amp;gt;&lt;/code&gt;. A plugin is safer — theme updates overwrite manual edits.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4 — Use the popup variant (optional)
&lt;/h2&gt;

&lt;p&gt;If you want a button that opens the form in a modal instead of an inline form, use the trigger variant. Add the script once (Step 3), then place a button where you want it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"gw-trigger"&lt;/span&gt; &lt;span class="na"&gt;data-waitlist-id=&lt;/span&gt;&lt;span class="s"&gt;"YOUR_WAITLIST_ID"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Join waitlist&lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is a good fit for a header CTA or a sticky button.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 5 — Test it
&lt;/h2&gt;

&lt;p&gt;Publish and open the page in a private window. You should see the signup form. Submit a test email and confirm:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The success message appears.&lt;/li&gt;
&lt;li&gt;The subscriber shows up in your GetWaitly dashboard.&lt;/li&gt;
&lt;li&gt;On mobile, the form is full-width and easy to tap.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If the form does not appear, see the troubleshooting section below.&lt;/p&gt;

&lt;h2&gt;
  
  
  Troubleshooting
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The form is blank.&lt;/strong&gt; Most often, JavaScript was stripped from the HTML block. On WordPress.com, move to a Business plan, or use the no-JavaScript method below. On self-hosted sites, check whether a security or caching plugin is stripping &lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt; tags — some "optimization" plugins defer or remove them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The script loads but the form does not render.&lt;/strong&gt; The &lt;code&gt;data-waitlist-id&lt;/code&gt; must be the waitlist's &lt;strong&gt;public ID&lt;/strong&gt;, not its URL slug. Copy it again from the dashboard.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Nothing shows in the editor.&lt;/strong&gt; Some block editors do not run third-party JavaScript in the editor preview. Check the published page, not the editor.&lt;/p&gt;

&lt;h2&gt;
  
  
  Alternative: no JavaScript at all
&lt;/h2&gt;

&lt;p&gt;If you cannot run scripts (for example, on WordPress.com free), point a native HTML form at your waitlist's form action URL. No widget script, no plugin:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;form&lt;/span&gt; &lt;span class="na"&gt;action=&lt;/span&gt;&lt;span class="s"&gt;"https://getwaitly.com/api/join/YOUR_WAITLIST_ID"&lt;/span&gt; &lt;span class="na"&gt;method=&lt;/span&gt;&lt;span class="s"&gt;"post"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt; &lt;span class="na"&gt;required&lt;/span&gt; &lt;span class="na"&gt;placeholder=&lt;/span&gt;&lt;span class="s"&gt;"Your email"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"submit"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Join the waitlist&lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/form&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The browser posts the signup and redirects to your thank-you page. You lose the inline success animation and the match-your-branding styling, but the signup still lands in your dashboard.&lt;/p&gt;

&lt;h2&gt;
  
  
  Alternative: the hosted page
&lt;/h2&gt;

&lt;p&gt;If editing your WordPress theme or blocks is more than you want to do right now, GetWaitly includes a hosted page. Publish it at &lt;code&gt;getwaitly.com/w/your-id&lt;/code&gt;, customize the content and branding, and link to it from your site. It works as a standalone destination while you build the product.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Do I need a plugin to add a waitlist to WordPress?
&lt;/h3&gt;

&lt;p&gt;No. A Custom HTML block on the page is enough for the inline form. A plugin is only useful if you want to load the widget script site-wide and place the form on multiple pages without repeating the script tag.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does the GetWaitly widget work on WordPress.com?
&lt;/h3&gt;

&lt;p&gt;Yes, if your plan allows custom JavaScript. WordPress.com free, Personal, and Premium plans strip &lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt; tags; Business and Commerce allow them. On lower plans, use the no-JavaScript form action above or link to the hosted page.&lt;/p&gt;

&lt;h3&gt;
  
  
  Will the widget slow down my WordPress site?
&lt;/h3&gt;

&lt;p&gt;No. The script uses &lt;code&gt;defer&lt;/code&gt;, so it loads after your content, and it is under 15KB. Load it site-wide once via a footer plugin if you use the widget on several pages.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I add the waitlist to a sidebar or footer widget area?
&lt;/h3&gt;

&lt;p&gt;Yes. Use a &lt;strong&gt;Custom HTML&lt;/strong&gt; widget in Appearance → Widgets (or the block-based widget editor) and paste the container div there. Load the script site-wide first.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does the form match my site's design?
&lt;/h3&gt;

&lt;p&gt;The widget uses your waitlist's accent color and font from GetWaitly settings. It cannot be styled independently, but you can control its width and alignment by placing the container div inside a styled wrapper in the block editor.&lt;/p&gt;

&lt;h3&gt;
  
  
  How do I collect names or phone numbers, not just emails?
&lt;/h3&gt;

&lt;p&gt;Enable those fields in your GetWaitly widget settings. The inline widget form renders the fields you configure. Custom questions are supported too.&lt;/p&gt;

&lt;h2&gt;
  
  
  Related guides
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://getwaitly.com/blog/how-to-embed-getwaitly-on-carrd" rel="noopener noreferrer"&gt;How to Embed GetWaitly on Carrd&lt;/a&gt; — the same widget on Carrd, step by step&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://getwaitly.com/blog/how-to-add-a-waitlist-to-webflow" rel="noopener noreferrer"&gt;How to Add a Waitlist to Webflow&lt;/a&gt; — the Code Embed method&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://getwaitly.com/blog/waitlist-form-builders" rel="noopener noreferrer"&gt;Which Form Builder for a Waitlist?&lt;/a&gt; — form builders vs a dedicated waitlist tool&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://getwaitly.com/blog/best-waitlist-tools-solo-founders" rel="noopener noreferrer"&gt;7 Best Waitlist Tools for Solo Founders in 2026&lt;/a&gt; — the full comparison&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The simple, affordable waitlist tool for founders and makers. Start free in 5 minutes — no credit card required. &lt;a href="https://getwaitly.com/signup" rel="noopener noreferrer"&gt;Try GetWaitly free →&lt;/a&gt;&lt;/p&gt;

</description>
      <category>wordpress</category>
      <category>webdev</category>
      <category>php</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Waitlist Benchmarks: Conversion, Referral &amp; Email Rates (2026)</title>
      <dc:creator>Aymane</dc:creator>
      <pubDate>Fri, 09 Oct 2026 07:30:12 +0000</pubDate>
      <link>https://dev.to/aymaneonlinedev/waitlist-benchmarks-conversion-referral-email-rates-2026-hbm</link>
      <guid>https://dev.to/aymaneonlinedev/waitlist-benchmarks-conversion-referral-email-rates-2026-hbm</guid>
      <description>&lt;p&gt;"How many signups should my waitlist get?" is the wrong question until you know what good looks like. This page collects the formulas behind the numbers and the benchmark ranges to aim for — so you can set targets that hold up instead of guessing.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Disclaimer: figures below come from public benchmark reports and vendor studies, cited inline. Your results will depend on your audience and page. Use these as orientation, not guarantees. The formulas are exact; plug in your own data.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Waitlist conversion rate: the formula
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Conversion rate = signups ÷ unique visitors × 100.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is the number to watch first. It isolates whether your page and offer connect, separate from how much traffic you send. If you drive 1,000 visitors and get 30 signups, your conversion rate is 3%.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is a good range?&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Conversion rate&lt;/th&gt;
&lt;th&gt;What it usually means&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Under 5%&lt;/td&gt;
&lt;td&gt;The page, offer, or traffic is off — fix these before scaling&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5–10%&lt;/td&gt;
&lt;td&gt;Typical for an average landing page&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10%+&lt;/td&gt;
&lt;td&gt;Strong; a well-run waitlist&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;20%+&lt;/td&gt;
&lt;td&gt;Excellent, usually with warm or targeted traffic&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;For context, Unbounce's conversion benchmark report — analyzing roughly 57 million conversions across more than 41,000 landing pages — puts the &lt;strong&gt;median landing page conversion rate at about 6.6%&lt;/strong&gt;. Waitlister's analysis of thousands of waitlists reports a &lt;strong&gt;median waitlist conversion rate around 11%&lt;/strong&gt;, suggesting a focused waitlist page out-converts a generic landing page. Treat both as directional, not targets to beat.&lt;/p&gt;

&lt;p&gt;If your traffic is cold (ads, broad social), expect the lower end; if it is warm (your followers, a community, referrals), expect higher.&lt;/p&gt;

&lt;p&gt;Related: &lt;a href="https://getwaitly.com/blog/waitlist-page-copywriting" rel="noopener noreferrer"&gt;Waitlist Copywriting that Converts&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Referral k-factor (viral coefficient)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;k = i × c&lt;/strong&gt;, where:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;i&lt;/code&gt; = average invites sent per subscriber&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;c&lt;/code&gt; = conversion rate of those invites (invites that become signups)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Worked example:&lt;/strong&gt; if 100 subscribers each send 3 invites on average (&lt;code&gt;i = 3&lt;/code&gt;) and 15% of invites convert (&lt;code&gt;c = 0.15&lt;/code&gt;), then k = 3 × 0.15 = &lt;strong&gt;0.45&lt;/strong&gt;. Those 100 subscribers bring in about 45 more. Growth still depends on new traffic — the loop slows down.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;To get k above 1&lt;/strong&gt; (self-sustaining growth), you need the product of the two numbers above 1. For example, 4 invites per subscriber at 25% conversion gives k = 1.0; 5 invites at 25% gives k = 1.25.&lt;/p&gt;

&lt;p&gt;Two levers raise k: make sharing easier (more invites) and make the reward compelling (higher conversion). Only about &lt;strong&gt;7% of waitlists run a referral program at all&lt;/strong&gt;, per Waitlister's analysis — so simply turning on referrals puts you ahead of most.&lt;/p&gt;

&lt;p&gt;Related: &lt;a href="https://getwaitly.com/blog/pre-launch-referral-program-guide" rel="noopener noreferrer"&gt;Pre-Launch Referral Program Guide&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Referral rate and referral conversion
&lt;/h2&gt;

&lt;p&gt;Two different metrics are often confused:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Referral rate = subscribers who referred at least one person ÷ total subscribers.&lt;/strong&gt; This measures how many people share at all. A healthy program gets a meaningful share of subscribers to refer; if almost nobody shares, the reward or the friction is the problem.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Referral conversion rate = signups from referral links ÷ clicks on referral links.&lt;/strong&gt; This measures the quality of referred traffic. Referred visitors often convert better than cold traffic because the recommendation comes from a friend.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Track both. A high referral rate with low conversion means people are sharing to a cold audience; a low referral rate with high conversion means the reward is good but hard to find.&lt;/p&gt;

&lt;p&gt;Related: &lt;a href="https://getwaitly.com/blog/pre-launch-referral-program-guide" rel="noopener noreferrer"&gt;Pre-Launch Referral Program Guide&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Email open and click rates
&lt;/h2&gt;

&lt;p&gt;Once you can email your list, three formulas matter:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Open rate = opens ÷ emails delivered.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Click rate = clicks ÷ emails delivered.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Click-to-open rate (CTOR) = clicks ÷ opens.&lt;/strong&gt; This tells you whether the people who opened found the content worth clicking.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Email benchmarks vary widely by list, industry, and send frequency. For an engaged pre-launch list, open rates are often reported in the &lt;strong&gt;20–40% range&lt;/strong&gt;, with click rates of a few percent. A dropping open rate is the earliest warning that your audience is losing interest — tighten your sending, and email only when you have something worth saying.&lt;/p&gt;

&lt;p&gt;Related: &lt;a href="https://getwaitly.com/blog/waitlist-email-sequence-guide" rel="noopener noreferrer"&gt;Waitlist Email Sequence Guide&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Launch-day conversion
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Launch conversion = paying customers ÷ waitlist size.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is the number people brag about, and the one with the widest spread. It depends almost entirely on product, price, and how warm the waitlist is — not on the waitlist tool. Expect a range rather than a fixed target, and watch the trend across launches rather than one data point.&lt;/p&gt;

&lt;p&gt;Related: &lt;a href="https://getwaitly.com/blog/launch-day-playbook" rel="noopener noreferrer"&gt;Launch Day Playbook&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to set targets that hold up
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Start with your conversion rate.&lt;/strong&gt; If it is under 5%, do not scale traffic yet — improve the page.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Add a referral loop.&lt;/strong&gt; Even a simple milestone ("invite 3 friends for early access") raises your referral rate from zero, and word-of-mouth remains the most trusted channel (Nielsen puts word-of-mouth trust around 88%).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Protect deliverability.&lt;/strong&gt; Double opt-in and a clean list keep your launch email out of spam.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Compare against yourself.&lt;/strong&gt; Your own last 30 days are a better benchmark than any industry average.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The point of benchmarks is not to hit a number — it is to know which number to fix next.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What is a good waitlist conversion rate?
&lt;/h3&gt;

&lt;p&gt;A median landing page converts around 6.6% (Unbounce's benchmark report), while waitlist-specific analyses report a median closer to 11%. Anything above 10% is strong; under 5% usually signals a page or traffic problem worth fixing first.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is the formula for the viral coefficient (k-factor)?
&lt;/h3&gt;

&lt;p&gt;k = i × c, where i is the average number of invites per subscriber and c is the conversion rate of those invites. k above 1 means self-sustaining growth; below 1 means growth relies on new traffic.&lt;/p&gt;

&lt;h3&gt;
  
  
  How many people on a waitlist actually refer?
&lt;/h3&gt;

&lt;p&gt;Only about 7% of waitlists run a referral program, according to Waitlister's analysis, so a large share of list owners never measure this. Among those that do, referral rate (percent of subscribers who refer at least one person) is the metric to track.&lt;/p&gt;

&lt;h3&gt;
  
  
  What email open rate should I expect?
&lt;/h3&gt;

&lt;p&gt;For an engaged pre-launch list, open rates commonly fall in the 20–40% range, with click rates of a few percent. Both vary by list and send frequency, so watch your own trend over time.&lt;/p&gt;

&lt;h3&gt;
  
  
  Where do these benchmark numbers come from?
&lt;/h3&gt;

&lt;p&gt;The conversion figures are cited from Unbounce's conversion benchmark report and Waitlister's published waitlist analysis. The formulas are standard. All figures are directional — use your own data for decisions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Related guides
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://getwaitly.com/blog/waitlist-glossary" rel="noopener noreferrer"&gt;Waitlist Glossary: 16 Terms Every Founder Should Know&lt;/a&gt; — plain-English definitions for every term here&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://getwaitly.com/blog/pre-launch-referral-program-guide" rel="noopener noreferrer"&gt;Pre-Launch Referral Program Guide&lt;/a&gt; — raising your referral rate and k-factor&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://getwaitly.com/blog/waitlist-page-copywriting" rel="noopener noreferrer"&gt;Waitlist Copywriting that Converts&lt;/a&gt; — lifting your conversion rate&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://getwaitly.com/blog/waitlist-email-sequence-guide" rel="noopener noreferrer"&gt;Waitlist Email Sequence Guide&lt;/a&gt; — the emails behind the open and click rates&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The simple, affordable waitlist tool for founders and makers. Start free in 5 minutes — no credit card required. &lt;a href="https://getwaitly.com/signup" rel="noopener noreferrer"&gt;Try GetWaitly free →&lt;/a&gt;&lt;/p&gt;

</description>
      <category>saas</category>
      <category>webdev</category>
      <category>analytics</category>
      <category>marketing</category>
    </item>
    <item>
      <title>How to Add a Waitlist to React &amp; Next.js</title>
      <dc:creator>Aymane</dc:creator>
      <pubDate>Thu, 08 Oct 2026 08:53:11 +0000</pubDate>
      <link>https://dev.to/aymaneonlinedev/how-to-add-a-waitlist-to-react-nextjs-5fci</link>
      <guid>https://dev.to/aymaneonlinedev/how-to-add-a-waitlist-to-react-nextjs-5fci</guid>
      <description>&lt;p&gt;If you are building your pre-launch site in React or Next.js, you do not need a waitlist SDK or npm package. GetWaitly ships a single script tag and a container element — the same embed that works on any site. Here is how to wire it into a React or Next.js app cleanly.&lt;/p&gt;

&lt;h2&gt;
  
  
  The short answer
&lt;/h2&gt;

&lt;p&gt;Load &lt;code&gt;https://getwaitly.com/widget.js&lt;/code&gt; once in your root layout, then render a &lt;code&gt;&amp;lt;div className="gw-widget" data-waitlist-id="YOUR_WAITLIST_ID" /&amp;gt;&lt;/code&gt; wherever the form should appear. For a popup, render a &lt;code&gt;&amp;lt;button className="gw-trigger" data-waitlist-id="YOUR_WAITLIST_ID"&amp;gt;&lt;/code&gt;. Use the waitlist's public &lt;strong&gt;ID&lt;/strong&gt;, not its slug. Total time: 5 minutes.&lt;/p&gt;

&lt;h2&gt;
  
  
  What you need
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;A GetWaitly account with a waitlist created (free plan covers 100 subscribers).&lt;/li&gt;
&lt;li&gt;Your waitlist's public ID from the Widget/Embed section of the dashboard.&lt;/li&gt;
&lt;li&gt;A React or Next.js app. The widget is plain JavaScript — it does not care which framework you use.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The embed, in framework terms
&lt;/h2&gt;

&lt;p&gt;The GetWaitly widget is two parts: a script that defines the &lt;code&gt;&amp;lt;div class="gw-widget"&amp;gt;&lt;/code&gt; behavior, and the div itself. In JSX:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"gw-widget"&lt;/span&gt; &lt;span class="na"&gt;data-waitlist-id&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"YOUR_WAITLIST_ID"&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The script must load once per page. In Next.js that is &lt;code&gt;next/script&lt;/code&gt;; in plain React you can put it in &lt;code&gt;index.html&lt;/code&gt; or inject it in an effect. The widget finds the &lt;code&gt;.gw-widget&lt;/code&gt; element and renders the form into it, styled with your waitlist branding.&lt;/p&gt;

&lt;h2&gt;
  
  
  Next.js (App Router)
&lt;/h2&gt;

&lt;p&gt;Load the script in your root layout so it is present on every route, and render the widget on the page that needs it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;app/layout.tsx&lt;/code&gt;&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;Script&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;next/script&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;RootLayout&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="nx"&gt;children&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;}:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;children&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ReactNode&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;html&lt;/span&gt; &lt;span class="na"&gt;lang&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"en"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;body&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;children&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Script&lt;/span&gt;
          &lt;span class="na"&gt;src&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"https://getwaitly.com/widget.js"&lt;/span&gt;
          &lt;span class="na"&gt;strategy&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"afterInteractive"&lt;/span&gt;
        &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;body&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;html&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;&lt;code&gt;app/page.tsx&lt;/code&gt;&lt;/strong&gt; (or any page)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;Home&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;main&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;h1&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Something great is coming.&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;h1&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"gw-widget"&lt;/span&gt; &lt;span class="na"&gt;data-waitlist-id&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"YOUR_WAITLIST_ID"&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;main&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;strategy="afterInteractive"&lt;/code&gt; loads the script after the page becomes interactive, so it does not block your render.&lt;/p&gt;

&lt;h2&gt;
  
  
  Next.js (Pages Router)
&lt;/h2&gt;

&lt;p&gt;Use &lt;code&gt;_app.tsx&lt;/code&gt; to load the script once, and place the div in your page:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;pages/_app.tsx&lt;/code&gt;&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;Script&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;next/script&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;AppProps&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;next/app&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;App&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;Component&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;pageProps&lt;/span&gt; &lt;span class="p"&gt;}:&lt;/span&gt; &lt;span class="nx"&gt;AppProps&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Component&lt;/span&gt; &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;pageProps&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Script&lt;/span&gt;
        &lt;span class="na"&gt;src&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"https://getwaitly.com/widget.js"&lt;/span&gt;
        &lt;span class="na"&gt;strategy&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"afterInteractive"&lt;/span&gt;
      &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Plain React (Vite / Create React App)
&lt;/h2&gt;

&lt;p&gt;There is no &lt;code&gt;next/script&lt;/code&gt;, so add the script tag to &lt;code&gt;index.html&lt;/code&gt; before the closing &lt;code&gt;&amp;lt;/body&amp;gt;&lt;/code&gt;, and render the div in a component:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;index.html&lt;/code&gt;&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"root"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"https://getwaitly.com/widget.js"&lt;/span&gt; &lt;span class="na"&gt;defer&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;&lt;code&gt;src/App.tsx&lt;/code&gt;&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;App&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;main&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;h1&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Join the waitlist&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;h1&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"gw-widget"&lt;/span&gt; &lt;span class="na"&gt;data-waitlist-id&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"YOUR_WAITLIST_ID"&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;main&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you cannot edit &lt;code&gt;index.html&lt;/code&gt;, inject the script in an effect instead:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;useEffect&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nf"&gt;useEffect&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;querySelector&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;script[src="https://getwaitly.com/widget.js"]&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;s&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createElement&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;script&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;src&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://getwaitly.com/widget.js&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;defer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;appendChild&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;[]);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  The popup variant
&lt;/h2&gt;

&lt;p&gt;For a button that opens the form in a modal, load the script once (above) and render a trigger button:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt; &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"gw-trigger"&lt;/span&gt; &lt;span class="na"&gt;data-waitlist-id&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"YOUR_WAITLIST_ID"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  Join waitlist
&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  TypeScript and custom fields
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;data-waitlist-id&lt;/code&gt; is a valid &lt;code&gt;data-*&lt;/code&gt; attribute on a &lt;code&gt;div&lt;/code&gt; and &lt;code&gt;button&lt;/code&gt; in JSX, no type changes needed. Enable name, phone, or custom fields in your GetWaitly widget settings and the form renders them automatically.&lt;/p&gt;

&lt;h2&gt;
  
  
  Single-page apps: one caveat
&lt;/h2&gt;

&lt;p&gt;The widget script initializes on page load. In a single-page app the script loads once and does not re-run on client-side navigation. In practice this is fine because the widget renders into the &lt;code&gt;.gw-widget&lt;/code&gt; div wherever it appears. If you mount the div conditionally &lt;em&gt;after&lt;/em&gt; the script has loaded, the widget may miss it on the first client-side transition — a full page load fixes it. If that matters for your flow, keep the container div mounted, or drive the form yourself with the no-JavaScript form action below.&lt;/p&gt;

&lt;h2&gt;
  
  
  Full control: post to the join endpoint
&lt;/h2&gt;

&lt;p&gt;If you would rather build your own React form (for custom validation or styling), skip the widget script and POST to your waitlist's join endpoint:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;form&lt;/span&gt; &lt;span class="na"&gt;action&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"https://getwaitly.com/api/join/YOUR_WAITLIST_ID"&lt;/span&gt; &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"post"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;input&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt; &lt;span class="na"&gt;required&lt;/span&gt; &lt;span class="na"&gt;placeholder&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"Your email"&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"submit"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Join the waitlist&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;form&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The browser posts the signup and redirects to your thank-you page. You lose the inline success animation and the automatic branding, but you keep full control of the markup.&lt;/p&gt;

&lt;h2&gt;
  
  
  Testing
&lt;/h2&gt;

&lt;p&gt;Run your app, open the page, and submit a test email. Confirm the success message appears and the subscriber lands in your GetWaitly dashboard. If the form does not render, check the browser console for a blocked script (ad blockers and strict CSP can block third-party scripts) and verify the &lt;code&gt;data-waitlist-id&lt;/code&gt; exactly matches your waitlist.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Is there an npm package for the GetWaitly widget?
&lt;/h3&gt;

&lt;p&gt;No. You inject one script tag (&lt;code&gt;https://getwaitly.com/widget.js&lt;/code&gt;) and render a container div. There is nothing to install.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does GetWaitly work with Next.js Server Components?
&lt;/h3&gt;

&lt;p&gt;Yes — the script loads via &lt;code&gt;next/script&lt;/code&gt; in your layout, and the container div is a plain element you can render from a Server Component. If you add the script in an effect, put that in a Client Component.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why does the widget not render after client-side navigation?
&lt;/h3&gt;

&lt;p&gt;The script initializes on load and does not re-run on route changes. Keep the &lt;code&gt;.gw-widget&lt;/code&gt; div mounted, or use the form action to POST to &lt;code&gt;/api/join&lt;/code&gt; yourself. A hard refresh always re-initializes.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I use the popup trigger in React?
&lt;/h3&gt;

&lt;p&gt;Yes. Render a &lt;code&gt;&amp;lt;button className="gw-trigger" data-waitlist-id="YOUR_WAITLIST_ID"&amp;gt;&lt;/code&gt;. Load the script once and any trigger on the page opens the modal.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does it work with Vite, Remix, or Astro?
&lt;/h3&gt;

&lt;p&gt;Yes. Anywhere you can add a &lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt; tag and render a div, the widget works. For server-rendered frameworks, load the script with whatever mechanism the framework recommends (or a plain &lt;code&gt;defer&lt;/code&gt; tag).&lt;/p&gt;

&lt;h3&gt;
  
  
  How do I collect custom fields?
&lt;/h3&gt;

&lt;p&gt;Configure them in your GetWaitly widget settings. The inline widget renders the fields you enable. For a fully custom form, use &lt;code&gt;cf_0&lt;/code&gt;, &lt;code&gt;cf_1&lt;/code&gt;, … inputs matched to your custom field order and post to &lt;code&gt;/api/join&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Related guides
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://getwaitly.com/blog/how-to-add-a-waitlist-to-any-website" rel="noopener noreferrer"&gt;How to Add a Waitlist to Any Website&lt;/a&gt; — the generic HTML embed&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://getwaitly.com/blog/how-to-add-a-waitlist-to-framer" rel="noopener noreferrer"&gt;How to Add a Waitlist to Framer&lt;/a&gt; — the Embed component method&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://getwaitly.com/blog/waitlist-form-builders" rel="noopener noreferrer"&gt;Which Form Builder for a Waitlist?&lt;/a&gt; — form builders vs a dedicated waitlist tool&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://getwaitly.com/blog/best-waitlist-tools-solo-founders" rel="noopener noreferrer"&gt;7 Best Waitlist Tools for Solo Founders in 2026&lt;/a&gt; — the full comparison&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The simple, affordable waitlist tool for founders and makers. Start free in 5 minutes — no credit card required. &lt;a href="https://getwaitly.com/signup" rel="noopener noreferrer"&gt;Try GetWaitly free →&lt;/a&gt;&lt;/p&gt;

</description>
      <category>react</category>
      <category>nextjs</category>
      <category>webdev</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
