How to make the signup form on your AI-made page actually work
Short answer
A form that ChatGPT, Claude, or Gemini writes has nowhere to send its entries until something receives them. The usual fix is a form service such as Formspree, whose free plan takes 50 submissions a month and emails you each one, pasted into the form's action. If the page doesn't have a host yet, Convika hosts it and adds a form that stores every entry, with CSV export and visit stats, free for 50 entries a month. Convika doesn't email you each entry.
Free plan: no credit card, 10 pages, 50 form entries a month.
You asked ChatGPT or Claude for a landing page with a signup form. The form looks finished: an email field, a button, maybe a “Thanks, you're on the list!” message. You type your own address, press the button, and nothing arrives anywhere. This guide explains why, compares 6 ways to make the form actually work, and walks through 4 of them, from pasting one line into the page to hosting it somewhere that stores the entries for you.
Prices and limits come from each vendor's own pages, checked on October 4, 2026.
Why the form on your page doesn't go anywhere
A form needs a receiver: an address that accepts what visitors type and stores it or forwards it. An AI writing a single HTML file has no server to point at, so it usually writes one of these:
- A
<form>with noaction, or withaction="#". Pressing the button reloads the page. - A script that stops the submit and shows a message, like this:
<form onsubmit="event.preventDefault(); alert('Thanks! We\'ll be in touch.')">
<input type="email" placeholder="you@example.com" required>
<button>Join the waitlist</button>
</form>
The alert makes it look as if the signup worked. Nothing was sent. And if the page's address starts with file:///, it's a file on your own computer, so nobody else can reach the form at all.
To fix it, you give the form a receiver. The table compares 6 kinds, and Options A to D below walk through 4 of them.
6 ways to make the form work, compared
| Option | Where entries are stored | Free limit | Another account | Code to change | Works on any host | Visit stats | |
|---|---|---|---|---|---|---|---|
| Formspree | Formspree inbox, 30 days on Free | Emails you each entry, up to 2 addresses | 50 a month | Yes, Formspree | One action line | Yes | No |
| Netlify Forms | Netlify dashboard | Emails you each entry once you set up notifications | Unlimited, until the 300 monthly credits run out | No, if Netlify hosts the page | One attribute, then deploy again | No, the page must be on Netlify | Request logs for the past 24 hours |
| Google Forms embed | The form's responses, or a linked Google Sheet | Emails you once you turn on notifications | Google publishes no price or limit | Yes, Google | Paste embed code | Yes | No |
| Mailchimp or Kit signup form | Your mailing list | Emails the subscriber, such as a confirmation | Mailchimp: 250 contacts. Kit: 10,000 subscribers | Yes | Paste embed code | Yes | No |
| Your own function and database (Supabase) | A table in your database | Only if you build it | Supabase: 500 MB, paused after 1 week idle | Yes, plus a function host | A handler you write | Depends on the host | No |
| Convika | Convika dashboard, with CSV and JSON export | No | 50 a month; Pro has no cap | No, Convika also hosts the page | None | No, only pages Convika hosts | Yes, visits, sources, devices, and clicks |
The short version:
- You need an email for every entry: Formspree, or Netlify Forms if Netlify already hosts the page.
- You'll send the list newsletters: Mailchimp or Kit, so the signups land where you'll email them from.
- You want a free form that never caps submissions: Netlify Forms, as long as your sites stay within Netlify's monthly credits.
- The page isn't online yet, and you want the page, the entries, and the visitor stats in one place: Convika.
Option A: paste a Formspree form into your page
Formspree receives the form's data and emails it to you. The free plan takes 50 submissions a month across unlimited forms, emails up to 2 linked addresses, and keeps 30 days of submission history. Export starts on the paid plans: Personal costs $15 a month for 200 submissions, and Professional costs $30 a month for 2,000.
- Sign up at Formspree and create a form. Formspree gives it an endpoint, such as
https://formspree.io/f/abcdwxyz. - Ask your AI: “Change the form so it posts to
https://formspree.io/f/abcdwxyzwith method POST, and give every input anameattribute.” A field without anameisn't sent. - Check that the form now looks like Formspree's own example:
<form action="https://formspree.io/f/{form_id}" method="post">
<label for="email">Your Email</label>
<input name="Email" id="email" type="email">
<button type="submit">Submit</button>
</form>
- Upload the changed page to your host, and send yourself a test entry.
After a visitor submits, Formspree shows its own “Thank you” page by default. A custom thank-you page needs a paid plan, or a script that sends the form in the background. Past 50 a month, Formspree still saves the entries to your account but stops emailing them.
Two other services work the same way. FormSubmit needs no account: point the form's action at its address with your email, and it emails you each submission and keeps them for 30 days. Google Forms gives you a whole form to embed instead: in the form, open the More menu, select Embed HTML, and paste the code into your page. Responses stay in the form or a linked Google Sheet, and you can turn on email notifications for new responses.
Option B: use your host's own forms (Netlify Forms)
If Netlify hosts your page, it can store the entries itself. Netlify's docs say forms are “free and unlimited” on its credit-based plans, including Free.
- In the Netlify dashboard, open Forms and select Enable form detection.
- Add
data-netlify="true"to the<form>tag, and make sure the form hasmethod="POST". - Deploy the page again. On Netlify Drop, that means dropping the folder again, because Netlify only looks for forms when it deploys.
- Send a test entry. It appears under Forms. To get an email for each one, add an email notification for the form.
The catch is the credit budget. The Free plan has 300 credits a month, and a production deploy costs 15. When the credits run out, Netlify says “all of your web projects (sites/apps) are paused” and they stop receiving “web traffic, or form submissions” until the next month.
Option C: a signup form from Mailchimp or Kit
A waitlist you'll email at launch belongs in an email tool. Both of these give you a signup form you can embed on any site:
- Mailchimp's free plan holds 250 contacts and sends 500 emails a month, at most 250 a day. With double opt-in, each new subscriber gets an email to confirm the address.
- Kit's free plan holds up to 10,000 subscribers with unlimited forms, and shows Kit branding.
Either one stores the list where you'll send from, which saves an export and import later. Neither shows how many people visited the page or where they came from.
If you host the page on Convika, choose the email tool's plain HTML version of the form. A form that submits as a normal page request works on every plan. Background requests from a Convika page reach only the page's own address, plus a short list of analytics tools on Pro, so a signup form that sends entries with a script may never reach the email tool.
Option D: host the page on Convika and add a form in 6 steps
Convika hosts the page itself, so the form, its entries, and the page's visitor stats sit in one dashboard. The Free plan needs no credit card and covers 10 pages and 50 entries a month.
1. Mark where the form goes
Before you download the page, ask your AI: “Replace the form with <div data-convika-form></div>.” Convika puts the working form in that spot. Without it, the form goes near the end of the page, just above the footer.
2. Create a free Convika account
Sign up at app.convika.com. No credit card is needed.
3. Upload the page
In the dashboard, click Upload an HTML file. Drop your .html file (up to 2 MB), or switch to Paste code and paste the code. Click Create my preview. Uploading uses no AI credits.
4. Add the form
On the page's dashboard screen, click Add a form to my page. Pick Email only, Name and email, or Name, email, and message, then edit the button text and the message people see after they send it. Click Add form to my page. Convika saves a new preview version with the form in place; your live page doesn't change until you publish.
5. Send a test entry from the preview
Open the preview and submit the form. Convika checks the entry but doesn't save it, so tests stay out of your list. If you didn't add the placeholder in step 1, the AI's old form is still on the page too. Type “Remove the old form and keep the Convika form” into Improve with AI, which costs 1 AI credit on the default model.
6. Publish and read the entries
Click Publish. New entries appear on the page's dashboard screen under Forms. Click View submissions to read them, and Export CSV or Export JSON to download them. Entries stay until you delete the form.
Add the form from Claude or another MCP client
If you use Claude, Claude Code, or Codex, you can connect Convika to it as an MCP server and ask it to “add an email signup form and show me a preview.” It creates the form with the fields you ask for, stores the entries in the same place, and can export them for you later.
Waitlist pages: what to ask the AI for
A waitlist form converts better when it asks for less. When you ask the AI for the page, specify:
- One field. Email only, unless you'll sort the launch email by a second answer.
- A button that says what happens: “Join the waitlist” or “Get early access”, not “Submit.”
- A confirmation message that sets expectations, such as “You're on the list. We'll email you once, at launch.”
Then share a different UTM-tagged link in each place you post, so you can see which one brings signups. The full walkthrough is in how to make a waitlist landing page for free.
Send a test entry before you share the link
Whichever option you pick, test it from your phone after the page is live:
- Open the public URL, not the file on your computer.
- Submit the form with an address you can check.
- Confirm the entry arrived: in Formspree's inbox, in Netlify's Forms tab, in your email tool's list, or under Forms in Convika.
On Convika, a test from the live page is stored and counts toward the 50 a month on Free. Up to 5 entries a minute and 20 an hour are accepted from one network, so a rapid series of tests may be refused for a while.
What Convika doesn't do
- No email for each entry. Entries wait in the dashboard and the CSV. Pro sends a weekly email with each week's totals, including how many entries came in, but not the entries themselves. If you need an email every time, use Formspree. A Formspree form with a plain
action, as in Option A, also works on a Convika page. - 50 entries a month on Free, counted across all your forms. Entries after that are refused until the next month. Pro, at $12 a month after a 14-day free trial, has no cap.
- 3 field sets from the dashboard: email; name and email; or name, email, and message. No file uploads.
- No message to the person who signs up. Convika shows them your confirmation text on the page. It doesn't send them an email.
- Forms only on pages Convika hosts. A Convika form can't receive entries from a page hosted somewhere else.
Frequently asked questions
How do I collect emails from a static HTML page without a backend?
Point the form at a service that receives it. Formspree takes 50 submissions a month free and emails you each one; you paste its endpoint into the form's action. Netlify Forms works if Netlify hosts the page. Or host the page on Convika, which adds a form that stores every entry with CSV export, free for 50 a month.
Why don't submissions from my AI-made contact form go anywhere?
The AI had no server to send them to, so the form has no action, an action="#", or a script that shows a thank-you message without sending anything. Give the form a receiver: a form service, your host's forms, an email tool's signup form, or a host such as Convika that stores entries for you.
Can a landing page Claude made save signup emails?
Not on its own. A shared Claude artifact stays on claude.ai, and Anthropic's docs describe no storage for form entries. Connect Convika to Claude as an MCP server and ask it to save the page and add a signup form; Convika stores the entries and exports them as a CSV. Or download the page and use Formspree with any host.
How do I add a waitlist signup form to a page ChatGPT made?
Ask ChatGPT to replace its form with <div data-convika-form></div>, download the HTML, upload it in Convika's dashboard, and click Add a form to my page with Email only selected. Test it from the preview, then publish. If you'll email the list at launch, a Mailchimp or Kit signup form is the alternative.
Does Convika email me each form submission?
No. Entries are stored in the dashboard, where you can read them and export them as CSV or JSON. On Pro, a weekly email reports how many entries came in. For an email per entry, use Formspree, which also works on a Convika page through a plain HTML form.
Is Formspree free?
Yes, for 50 submissions a month. The free plan includes unlimited forms, email to up to 2 linked addresses, and 30 days of submission history. Personal costs $15 a month for 200 submissions, and Professional $30 a month for 2,000.