# Create a signup form

Create a form that records consent and share it as a hosted page, embed or popup.

Create a signup form to collect contacts and record their email consent. Valid signups join the group you choose. Share a hosted page, embed the form in your site or display it as a popup.

## Before you start

Create the group new signups should join, such as "Newsletter" or "Juniper Kitchen supper club". See [Groups](/docs/guides/contacts/groups).

## Build the form

1. Go to **Forms** and choose **New form**. You can also choose **Draft with Kiro AI** and describe the form you want.
2. Under **Form details**, fill in:
   - **Form name**: for your team only.
   - **Heading** and **Intro** (optional): what visitors see above the form, such as "Get our weekly menu".
   - **Add contacts to group**: the group every signup joins.
   - **Submission source**: a label for where these signups came from, such as `website-footer`. It appears on each submission and can be used to start a journey from only this form.
3. Under **Fields**, the **Email** field is already there and is always required. Use **Add field** to add more: **Text**, **Long text**, **Dropdown**, **Checkboxes**, **Date** or **Phone**. For each field, set the **Label shown**, an optional **Placeholder**, whether it's **Required**, and where it **Saves to**: a contact field such as first name, or one of your attributes.
4. To let people pick what they hear about, choose **Topics** under **Add field** and tick the **Topics to offer**. Topics are set up in **Settings › Messaging › Topics**.
5. Under **Consent**, write the **Consent wording shown beside the checkbox**, for example "Yes, send me Juniper Kitchen news and offers. I can unsubscribe at any time." Visitors must tick it to sign up.
6. Optionally turn on **Confirm by email (double opt-in)**. Each signup then gets an email with a confirmation link that lasts seven days. Until they confirm, they get no marketing email and don't join the group.
7. Under **After submitting**, choose **Show a message** or **Redirect** to a page of your own.
8. Use the style options to set the **Accent colour**, **Font**, **Corner radius** and **Button label**, and check the **Preview**.

**Hidden values** lets you record extra context on every signup, such as which campaign the page belonged to, as an attribute.

## Protect it from bots

Every form has a hidden honeypot field that catches most bots, and limits each visitor to ten submissions a minute. For extra protection, turn on **Require a CAPTCHA** and paste the **Turnstile site key** and **Turnstile secret key** from a Cloudflare Turnstile widget you create for your site. A published form without a CAPTCHA gets a warning, because it's the one bots use most.

## Publish and share

1. Choose **Save draft** to keep working, or **Publish** when the form is ready.
2. Open the form to find how to share it:
   - **Signup link**: a hosted page anyone can use. Share it on social media, in a bio or as a QR code.
   - **Embed on your website**: add your website's address under **Where it may be embedded** (for example `https://www.juniperkitchen.com`), then copy the **HTML embed** or the **React example** for your web developer.

Under **On your website**, choose how the embed shows: **Where you place it**, or **As a popup**. Popups can open after a number of seconds, after scrolling part of the page, or when a desktop visitor is about to leave. You can limit them to certain pages, wait a number of days before showing them again after someone closes one, and stop showing them to people who have signed up. The hosted page always shows the form normally.

To change a live form, edit it and choose **Save live changes**. To stop taking signups, choose **Archive**. Contacts and history are kept.

## Send a welcome email

Start a journey with the trigger **Submits a form** to welcome new signups. A person who signs up twice isn't welcomed twice. See [Build a journey](/docs/guides/journeys/build-a-journey).

Next: [Form submissions](/docs/guides/forms/form-submissions).