How to set up contact forms and see form responses

Add a Contact Form, choose its fields, email recipients and auto-reply, accept file uploads, send leads to Google Sheets, HubSpot, Mailchimp or a webhook, and read every submission in Form Responses.

Updated October 18, 2026

The Contact Form widget (Add > Business) emails you each submission and saves it in the site's Form Responses.

Set up the form

Select the form and click Manage Form. It has four tabs.

Form Items

Add, reorder (Move up, Move down), Duplicate and Delete fields with Add field. A new form starts with Name, Email and Phone (a third of the row each, all required) and Message. Pick a field to edit it:

  • Field type: Text, Long text, Email, Phone, Number, Date, Time, Dropdown, Radio buttons, Checkboxes, Opt-in, Free text or File upload.
  • Width: Full row, Half, One third, One quarter, or Custom % with Width in percent for any share of the row, such as 70 and 30.
  • Label: what the visitor sees. On an Opt-in field it's Name in submissions ("e.g. Marketing consent") and the visitor sees the Consent text instead. A Free text field shows its Text and collects nothing.
  • Placeholder: the hint inside an empty field.
  • Choices (one per line): Dropdown, Radio buttons and Checkboxes. Type each choice on its own line.
  • Ticked to start: Radio buttons and Checkboxes. Tick a choice to have it ticked when the page opens (visitors can untick it). Zeus's Google Ads landing pages use this to tick the ad's own service.
  • Required: the form won't send without it.

The Button text row at the bottom of the list changes the button's wording (default "Send Message"). Its colors and position are in Design → Button.

Submission

  • Form title and Show: the heading above the form. Default "Contact Us", shown. Its look is in Design → Form Title.
  • Error message: what visitors see if the message can't be sent. Default "Something went wrong and your message wasn't sent. Please try again or contact us directly."
  • After someone submits: Show a thank-you message (type it, with its look in Design → Submission Message) or Go to a page.
  • Tracking code after submit: for people with custom code access. A conversion tag that runs once after a submission. Only script, noscript and image tags are kept; anything else is removed when you save.

Emails

  • Email me new submissions with Send to addresses and a Subject (default "New message from your website"). If you leave Send to empty, the Business Info email is used. With neither, it warns "Add an address here or an email in Business Info — otherwise no one is notified." Replying to the notification answers the visitor directly.
  • Send the visitor an automatic reply with your own From name, Subject and Message, and Include a copy of their answers. The form needs an Email field; without one it says "Add an Email field — the reply goes to the address the visitor enters."
  • How the emails look: both emails carry the business's branding from Business Info. The header is white with the business logo. If the logo is light (white lettering, for example) and wouldn't show on white, the header uses the site's Primary theme color instead. With no logo, the header shows the business name in dark text. The footer says "Sent by" and the business name. On the Starter plan it also says "Powered by ContentForge". On Growth and Agency nothing else is shown there.

Integrations

See Integrations below. This tab only works once the form is on a site page: otherwise it says "Open this form in a site to connect integrations."

Design panel

Click Edit Design. The sections run in this order. Every text section has the standard text controls (Font, Size, Text color, Format, Alignment, Text shadow), explained in Widget design panel basics.

Layout

  • Labels: Above fields (default) or Inside fields: the label shows inside an empty field (unless the field has its own placeholder) and is still read out by screen readers.
  • Space between elements: 0 to 48 px, per screen size. Default 16.

Fields

Starts closed.

  • Field style: Box (default; a filled box with an optional border) or Underline (no box, just a line under each field).
  • Background color: Box only. Default light gray.
  • Border (called Line with Underline): 0 to 6 px. Default 0. With Underline at 0, it draws a thin line in the text color, so it shows on light and dark backgrounds.
  • Border color (or Line color): shows when the border or line is above 0.
  • Corner radius: 0 to 30 px. Box only. Default 4.
  • Text controls for what visitors type, size up to 32 px. Default 16.
  • Message box height: shows when the form has a Long text field. The height in lines of text, 2 to 20, per screen size. Default 5. The box is that many lines at the field's font size, so a bigger font makes a taller box. It sets every Long text field in the form. Visitors can still drag the box taller.

Labels

Shows only with Labels set to Above fields. Starts closed. Text controls up to 32 px. Default 15, bold.

Button

Starts closed.

  • Style: Primary (default) or Secondary, from your theme's button styles.
  • Button color, Button text color and Button corners (0 to 60 px): give this form's button its own look. Clear the colors to go back to the theme's.
  • Button beside last field: puts the button on the same row as the last field, for a one-line form such as an email field and a Sign up button. If the last field is a full row, it shares its row with the button. If it has a set width (for example 70%), the button takes the rest. You can set this separately for each screen size, so on phones the button can drop below the field.
  • Button position: Left, Center, Right (default) or Full (the full width).

Form Title

Shows only when the form title is on (in Manage Form → Submission). Starts closed. Text controls. Default 30 px, bold.

Submission Message

The thank-you message. Starts closed. Text controls up to 40 px. Default 18.

Spacing and Animations & Effects

The usual closing sections. See Widget design panel basics and Animations and effects.

On phones, fields always show one per line (the button can still sit beside the last one).

File uploads

A File upload field accepts up to 5 files, 10 MB each. Files are stored privately. The notification email links to them for 7 days, and they're always available in Form Responses.

Integrations

Every submission is still saved in Form Responses and emailed as set up. Integrations send it on as well, after it's saved, so a problem with one never loses a lead.

  • Google Sheets: under Google account, Connect a Google account (or pick one already connected). Then Create a new sheet, or paste the link of one that account can edit. Pick the Tab (default First tab). Each submission adds a row, and new fields add new columns. Use Send a test row to check it, and Stop sending to this sheet to disconnect.
  • HubSpot: turn on Send contacts. Pick a key under Choose a saved key…, or Add a key: give it a name ("Name (e.g. Client's HubSpot)"), paste the private app token and click Check & save. Saved keys show in the list next time, so you only paste a key once. Match the form's fields to Email (required), Full name, First name, Last name, Phone, Company and Message. Each submission creates or updates a contact by email. Add the whole submission as a note on the contact is optional. Send a test contact checks it.
  • Mailchimp: turn on Add to an audience, pick or add a key the same way (paste the API key), then choose the Audience and match the fields. Ask them to confirm by email first (double opt-in) is optional. Tags (comma-separated), such as "Website lead", are added to each subscriber. Send a test subscriber checks it.
  • Webhook: turn on Send submissions to send each submission to another app as it arrives: a GoHighLevel inbound webhook (a workflow with the Inbound Webhook trigger), a Zapier Catch Hook, a Make Custom webhook, n8n or your own address.
    • Send to: paste the address and click Add address (up to 5 per form). It must start with https://; private and internal addresses are refused. Add custom headers (optional) adds headers such as Authorization or an API key the app asks for. Header values are stored encrypted and never shown again; when you Edit an address, leave a saved header's value blank to keep it. Each address has its own On / Off switch, New secret and Remove.
    • Signing secret: shown once when you add an address (or click New secret), so copy it then. Every request carries X-Webhook-Signature: t=…,v1=…, an HMAC-SHA256 of {t}.{raw body} with that secret, and X-Webhook-Id, the submission id (the same on retries). Apps that don't check signatures can ignore it.
    • Send as: JSON (works with most apps) or Form fields (application/x-www-form-urlencoded; nested values are sent as meta[site_name]).
    • Send all fields, or turn it off and tick the fields to send. Field names sent shows each field's key: its label in snake_case (Full Name → full_name), or a key you type. Every value is also sent by the form's raw field id in fields_by_id. Opt-in fields are also sent as true / false in consent. File uploads are sent as download links (valid 7 days) in files. meta has the site, page address, form name, submission id, time, language, UTM tags and ad click ids.
    • Send test posts a sample submission (marked "test": true) to each address and shows the reply's status and the start of its body. Send one before mapping fields in the other app.
    • Recent deliveries shows each send with its status, tries and reply (Details). A failed send is tried again automatically, 6 tries over about a day; Retry sends it again now. If every send to an address fails for 3 days it's switched off and you get a notification.
    • It never slows or blocks the visitor's message, and spam caught by the checks is never sent.
  • Every form at once: to send every Contact Form submission of a client, or of your whole agency, add a webhook under Integrations on Client → Settings (pick GoHighLevel for GoHighLevel) or in Settings → Integrations. See Send events to other apps with webhooks.

Form Responses

On the Websites page, click the inbox icon (Form responses) on a site card. Pick a form to see its responses, newest first. Open one to see every answer, the Submission date and where it was Sent from, or delete responses under Manage Responses.

Narrow the list with:

  • Search: words in any answer.
  • Date: All time, Last 7 days, Last 30 days, This month, Last month or Custom range (from and to dates, both days included).
  • Submitted from page: All pages or one page. A page shows its name (as in the Pages panel); a page that was renamed or removed shows its address, and Page not recorded covers submissions with no page.

The filters combine, Clear filters resets them, and the page address keeps them through a refresh. Export to CSV exports the same filtered responses. A very large form lists its newest 5,000 responses; pick a date range to reach older ones.

Forms in other languages

On a site with other languages, translate a form's labels, placeholders, choices, button text, thank-you message and auto-reply while editing that language (or with Translate with Zeus). A visitor on a page in another language gets the form, its messages and the auto-reply email in that language. Form Responses and your notification email stay in the main language; the email adds a "Language: Spanish" line. See Multi-language sites.

Good to know

  • Spam checks run automatically on every submission.
  • Client people with the Form responses permission see the same screen, filters included, on the Form responses tab of their portal. See What the client portal shows.

Didn't find what you need?

Send us a message — no sign-in needed — or email support@the-contentforge.com. Already a customer? Sign in to submit a ticket.

Contact support