# Create, publish and share a form

Make a form on a collection in the console, publish it, protect it from spam, share its link or embed it, and read what visitors send in.

A form is a public page, or an embed on your site, that writes what a visitor
types into a collection: contact requests, sign-ups for an event, feedback.
This guide makes **Contact us** for Acme Analytics, on the Contact requests
collection the [collections guide](/collections/create-a-collection) made, and
sends it a first request.

> **Note:**
  A plan with forms, a console role that can create forms, and a collection with
  a live version to fill ([create a
  collection](/collections/create-a-collection)).

## 1. Open Forms

[Open Forms in the console](https://console.buildbase.app/dashboard/admin/forms)

In the left rail choose **Forms**. **All forms** lists each form with its
title, how many submissions it has had, and its status. Press **Create form**.

![The Forms page, with All forms listing Contact us as a Draft, and the Create form button highlighted as step 1](/images/forms/create-a-form/forms-list.webp)

## 2. Name it and choose what it fills

In **Create new form**, fill **Name** (what your team reads), **Title** and
**Description** (what the visitor reads), then choose the **Collection** and
its **Collection version**. The form asks for the version's fields. Press
**Create**.

![The Create new form dialog: Name Contact us, Title Talk to the Acme Analytics team, a description, Collection Contact requests, and the Collection version v1 highlighted as step 2](/images/forms/create-a-form/create-dialog.webp)

## 3. Publish it

A new form is a **Draft**: its link, its embed and every public endpoint answer
`404`. Press **Publish** on its row and confirm with **Publish**.

![The Publish form dialog: This will make the form live and accepting submissions, with the Publish button highlighted as step 3](/images/forms/create-a-form/publish.webp)

## 4. Choose your captcha, once

**Spam protection**, at the top of Forms, picks the captcha every protected form
uses: **Managed by BuildBase** (nothing to set up), the **Built-in check**, or
your own Cloudflare Turnstile, hCaptcha or Google reCAPTCHA keys. Press **Save**
if you change it ([spam protection](/forms/spam-protection)).

![The Spam protection dialog: the captcha providers, highlighted as step 4, with Managed by BuildBase active and recommended, then Built-in check, and your own Cloudflare Turnstile, hCaptcha and Google reCAPTCHA keys](/images/forms/create-a-form/spam-protection.webp)

## 5. Protect this form

Press the shield on its row. **Require a captcha** turns the captcha on for
this form. Below it, **Content rules** cap the links in an answer and block
words, and **Email addresses** turns away throwaway inboxes and domains you
name. Every form already has a hidden bot trap and ignores repeat submissions.
Press **Save**.

![The Protect "Contact us" dialog: Require a captcha highlighted as step 5, Content rules with Most links allowed and Blocked words and phrases, and Email addresses with Block throwaway email addresses](/images/forms/create-a-form/protect.webp)

The envelope on its row, **Collect subscribers**, adds the people who fill the
form to your [audience](/users/audience-and-lists), with a confirmation email
if you want one.

## 6. Share it or embed it

Press the eye on its row to open it. **Share and embed** has its link, with a
copy button, and an **Embed code** to paste into any page of your site. The
captcha and spam rules come with both ([share and embed](/forms/embedding)).

![The Share and embed card: the Embed guide and Custom forms guide links, the form's link with its copy button highlighted as step 6, and the Embed code](/images/forms/create-a-form/share-embed.webp)

## 7. Send it a test

Press **Open public form**, at the top of its page. Fill it in as a visitor
would and press **Submit**. The visitor sees **Thank you**.

![The hosted form Talk to the Acme Analytics team: Name Lena Fischer, Email, Message, and the Submit button highlighted as step 7](/images/forms/create-a-form/hosted-form.webp)

![Thank you: Your response has been recorded, with Submit another response](/images/forms/create-a-form/thank-you.webp)

## 8. Read what came in

Back on the form's page, **Submissions** lists each one with its status:
**Received**, or **Held for review** when it broke a content rule. **View
submission** shows the answers, and the record is in the collection too. A held
one fires nothing until you press **Approve submission**; **Delete submission**
removes it.

![Submissions: a Received submission, highlighted as step 8, with View submission and when it came in](/images/forms/create-a-form/submissions.webp)

To act on each one, use a [workflow](/workflows/overview) on **Form Submitted**,
or the **Form Submission to Webhook** template.

## Check it works

Submit the form from its link: the entry is **Received** under **Submissions**,
and a record is in Contact requests.

## Things to watch out for

- **Only a published form answers.** A Draft or Archived form's link, embed and endpoints answer `404`.
- **A form cannot be deleted, and an archived one keeps its name.** Archive a form to free its place under your plan's form count; restoring brings it back as a Draft. Creating another with the same name is refused: "Name ... is already in use. Choose a different name."
- **Submissions are rate limited:** 10 a minute and 20 an hour from one address, and 5,000 a day for your organization. A form your own server posts to meets the first limit sooner.
- **A held submission fires nothing until you approve it.** Approving fires `form.submitted`.
- **With your own captcha keys,** the widget's allowed hostnames must include the console hostname the Spam protection dialog shows, not only your site's.

## Next Steps

- [Spam protection](/forms/spam-protection) - each setting, and your own captcha keys.
- [Share and embed](/forms/embedding) - the link and the embed in detail.
- [Custom forms](/forms/custom-forms) - post to a form from your own UI.
