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.

Make my form save entries

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 no action, or with action="#". 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

OptionWhere entries are storedEmailFree limitAnother accountCode to changeWorks on any hostVisit stats
FormspreeFormspree inbox, 30 days on FreeEmails you each entry, up to 2 addresses50 a monthYes, FormspreeOne action lineYesNo
Netlify FormsNetlify dashboardEmails you each entry once you set up notificationsUnlimited, until the 300 monthly credits run outNo, if Netlify hosts the pageOne attribute, then deploy againNo, the page must be on NetlifyRequest logs for the past 24 hours
Google Forms embedThe form's responses, or a linked Google SheetEmails you once you turn on notificationsGoogle publishes no price or limitYes, GooglePaste embed codeYesNo
Mailchimp or Kit signup formYour mailing listEmails the subscriber, such as a confirmationMailchimp: 250 contacts. Kit: 10,000 subscribersYesPaste embed codeYesNo
Your own function and database (Supabase)A table in your databaseOnly if you build itSupabase: 500 MB, paused after 1 week idleYes, plus a function hostA handler you writeDepends on the hostNo
ConvikaConvika dashboard, with CSV and JSON exportNo50 a month; Pro has no capNo, Convika also hosts the pageNoneNo, only pages Convika hostsYes, 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.

  1. Sign up at Formspree and create a form. Formspree gives it an endpoint, such as https://formspree.io/f/abcdwxyz.
  2. Ask your AI: “Change the form so it posts to https://formspree.io/f/abcdwxyz with method POST, and give every input a name attribute.” A field without a name isn't sent.
  3. 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>
  1. 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.

  1. In the Netlify dashboard, open Forms and select Enable form detection.
  2. Add data-netlify="true" to the <form> tag, and make sure the form has method="POST".
  3. Deploy the page again. On Netlify Drop, that means dropping the folder again, because Netlify only looks for forms when it deploys.
  4. 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:

  1. Open the public URL, not the file on your computer.
  2. Submit the form with an address you can check.
  3. 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.

Give your page a form that keeps every entry

Upload the HTML. Convika hosts the page, stores the entries, and shows which links bring them.

Free plan: no credit card, 10 pages, 50 form entries a month.