> ## Documentation Index
> Fetch the complete documentation index at: https://docs.instantcampaign.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Signup forms

> Build a signup form, embed it on your site as an inline form, popup, slide-in or banner, and manage what people submit.

Signup forms collect subscribers on your website. Each submission creates or updates a contact, can subscribe them to a list, and can start an automation. Open **Forms** from the sidebar to see your **Signup Forms**. Each form shows its target list, whether it's active, its display type, and links to **Edit**, **Responses**, **Embed** (copies the code) and **View public page**.

## Create a form

<Steps>
  <Step title="Name it">
    Click **New Form**, enter a **Form Name** (for example "Newsletter Signup") and click **Create Form**. The form editor opens.
  </Step>

  <Step title="Pick the list">
    Under **Target List**, choose the list new signups join. Choose **No list** to only create the contact.
  </Step>

  <Step title="Choose how it appears">
    Under **Display Type**, pick **Embedded** (an inline iframe on your page), **Popup** (a centred overlay with a backdrop), **Slide-in** (slides in from a corner) or **Banner** (a full-width bar at the top).
  </Step>

  <Step title="Add fields">
    Under **Form Fields**, click **Add Field** for each field (details below).
  </Step>

  <Step title="Set the wording and colour">
    Under **Settings**, set the **Submit Button Text** (default "Subscribe"), the **Success Message** (default "Thank you for subscribing!") and the **Accent Color**.
  </Step>

  <Step title="Activate and save">
    Turn the switch next to **Active** on, then click **Save Form**. Inactive forms reject submissions.
  </Step>
</Steps>

The **Live Preview** updates as you edit. Submitting from the preview is turned off.

## Fields

Every form starts with an **Email address** field. A form must have an email field to accept submissions. For each field you add, set a label, a type and whether it's **Required**. You can reorder fields or remove them.

Under each field, the editor shows the name its answer has in automation emails, for example `{{ data.company }}` for a field labelled "Company". The name is made from the label when you first save the form and doesn't change afterwards, even if you rename the label, so automations that use it keep working. It is also the name the form submits the answer under.

<Note>
  Fields added before September 2026 were saved under generated names such as `field-1727000000000`. Those names keep working, and automations can also use a name made from the field's current label (`{{ data.company }}`). For these older fields, that label name follows the label, so rename the label and the name changes too; the editor always shows the current one.
</Note>

| Type                           | Notes                                                                                                |
| ------------------------------ | ---------------------------------------------------------------------------------------------------- |
| **Text**, **Text Area**        | Free text                                                                                            |
| **Email**, **Phone**, **Date** | Email and date values are validated                                                                  |
| **Select**                     | Enter the options comma-separated, for example `Yes, No, Maybe`. A select needs at least one option. |
| **Checkbox**                   | A single tick box                                                                                    |

<Tip>
  To fill in the contact's name, label a field "First name" (or "Name") and another "Last name" (or "Surname"). The form matches these labels. A submission sets a name only when one was entered, and never clears an existing one.
</Tip>

## Popup, slide-in and banner options

For any display type other than **Embedded**, you also set:

* **Trigger**: **Time Delay** (set **Delay (seconds)**, for example 3), **Scroll Percentage** (how far down the page), **Exit Intent** (when the mouse leaves the window) or **Manual**. With **Manual**, open the form yourself by calling `ICShowPopup["<form id>"]()` in your page's JavaScript.
* **Position**: where a slide-in appears (for example **Bottom Right**).
* **Show Frequency**: **Always**, **Once** (only once ever), **Once per Session** or **Once per Day**.
* **Show Close Button**, and for popups, **Backdrop Close** (clicking outside the popup closes it).

Click **Preview Popup** to try it out.

## Put the form on your site

Click **Copy Code** in the editor, or **Embed** on the forms list, and paste the snippet into your page:

* **Embedded** forms use an `<iframe>` plus a short script that resizes the frame to fit the form.
* **Popup**, **slide-in** and **banner** forms use one `<script src=".../popup.js" data-form-id="…">` tag. Put it before `</body>`.

**View public page** opens the form as a standalone page. You can link to that page directly. On an InstantCampaign [landing page](/guides/audience-and-campaigns/landing-pages), paste the embedded snippet into an **HTML** block. The page resizes the form automatically.

## What happens on submit

1. The contact is created, or matched by email. New contacts get the source `form`, and their timezone is detected from their IP address when it isn't already known.
2. If a **Target List** is set, the contact is subscribed to it.
3. The submission is saved under **Responses**, and the consent is recorded.
4. Active automations with a **Form Submission** trigger for this form start. With double opt-in, a new signup enters them when they click the confirmation link. See [Automation triggers](/guides/audience-and-campaigns/automation-triggers#form-submission).
5. If you have outbound webhooks set up, a form-submitted webhook is sent.

### Double opt-in

When double opt-in is on for the workspace or for the target list, a new signup is added as **Pending**. They receive a confirmation email, and nothing else is sent to them until they click the link.

Someone who is already a contact keeps their status. If they aren't on the target list yet, their subscription to that list is **Pending** and they receive a confirmation email for it. Clicking the link makes that list subscription active and starts the automations for this form and for that list. It doesn't confirm any other list they are waiting on; each form's confirmation email confirms its own list. Until then, campaigns to that list don't reach them. If they're already on the list, nothing changes and no email is sent. Contacts who are unsubscribed, bounced or complained aren't sent a confirmation email. To stop repeated submissions from flooding someone's inbox, an existing contact is sent at most one confirmation email per list every 10 minutes, and at most 3 an hour. See [Double opt-in](/guides/audience-and-campaigns/double-opt-in).

## Responses

Click **Responses** on a form to see its submissions. You can search them, open one to edit or delete it (**Edit submission** / **Delete submission**), and **Export CSV**. Deleting a submission doesn't delete the contact.

## Limits and troubleshooting

* **"Too many submissions. Please wait before trying again."**: each visitor can submit a form 3 times per hour.
* **Form not found or inactive**: the form's **Active** switch is off, or the form was deleted.
* **Hidden spam trap**: forms include a hidden field that people never see. Submissions that fill it in are quietly thrown away.
* **Nothing arrives after a signup**: with double opt-in on, the contact stays **Pending** until they confirm. Check their status on the [contact page](/guides/audience-and-campaigns/contacts).
