Forms & Lead Capture
Building, publishing, and sharing public forms — and what happens to a submission once it lands.
On this page
Where to find it
Forms live under Landscapt → Communication → Forms (/crm/communication/forms). The list shows every form in your org. Opening one takes you to its detail page (/crm/communication/forms/[id]), which has three tabs:
- Design — the drag-and-drop field builder.
- Configure — confirmation behavior, notification emails, Account Management, and Tags on Submit.
- Responses — every submission, with a status you can act on.
Once published, the form itself is publicly reachable at /forms/[slug] — no login required. That page is what a visitor actually sees and fills out.
Building a form
The Design tab groups field types into four categories. Every field can be marked required individually — there's no form-level "require everything" toggle, it's a per-field flag.
Simple
| Field type | What it is |
|---|---|
text | Single-line text |
email | Single-line, expected to hold an email address |
phone | Single-line, expected to hold a phone number |
textarea | Multi-line text |
number | Numeric input |
date | Date picker |
select | Dropdown, single choice |
checkbox | Single on/off checkbox |
Advanced
| Field type | What it is |
|---|---|
multiple_choice | Radio-style single choice among several options |
checklist | Multiple choices, more than one selectable |
rating | Star/number rating scale |
review | A longer-form testimonial/review field |
hidden | Not shown to the visitor — carries a fixed or pre-filled value |
sms_optin | SMS consent checkbox, for text-message opt-in language |
Layout
| Field type | What it is |
|---|---|
header | A section heading, no input |
paragraph | Block of static text, no input |
divider | A visual rule between sections |
Widget
attachment — lets a visitor upload a file with their submission. See below for the size/type limit that applies to it.
Worked example: Free Estimate Request
A complete lead-capture form, built end to end, using only settings covered on this page.
Design tab — fields, in order
header— "Request a Free Estimate"text— Full Name, requiredemail— Email, requiredphone— Phone, requiredtext— Service Address, requiredselect— Service Interested In (Lawn Care, Landscaping, Snow Removal, Other), requiredtextarea— Anything else we should know?, optional
Configure tab
- Confirmation — type message: "Thanks! A member of our team will follow up within one business day to schedule your free estimate."
- Account Management — auto-manage on, matching strategy email. A submission whose email matches an existing client attaches to that client; otherwise a new client is created with status
lead. - Tags on Submit — add tag "Website Lead" to the resulting client, every time.
Publish the form, then share the Direct Link on the site's "Get a Quote" button — see Embedding & sharing for the other two options.
Result: every submission becomes an open ticket immediately, and because auto-manage is on and the email matches cleanly, the response also lands as completed with a lead client already tagged and attached — no manual matching needed. See Responses tab & the review workflow for what changes if auto-manage were off instead.
Configure tab: what each setting does
- Confirmation — what the visitor sees immediately after submitting. Either an on-page message (text you write) or a url redirect to another page (e.g. a thank-you page on your marketing site).
- Email notifications — recipients, from address, subject, and body are all configurable, with merge tags available in subject/body and an "Include a copy" toggle for CC'ing the submitter.
- Account Management — the auto-manage on/off toggle, an update strategy (
replace_alloradd_new), and a matching strategy (email,name_and_email,name_email_and_company, orcustom). This block decides whether a submission gets tied to a client automatically — see What happens on submission for the effect. - Tags on Submit — separate add/remove tag lists applied to the resulting client record on every submission.
Publishing
A form has exactly two statuses: draft and published. Nothing else — no "archived" or "closed" state for the form itself.
status = "published" server-side. A draft form's public URL will not load, no matter who has the link.Embedding & sharing
Three ways to put a published form in front of someone, all built off the same slug.
| Mode | What it gives you | When to use it |
|---|---|---|
| Direct Link | {origin}/forms/{slug} — the public page itself, nothing embedded | Social posts, email signatures, text messages, QR codes — anywhere you just need one URL |
| iFrame | A raw <iframe> snippet pointed at the form URL | A static site or page builder where you can paste HTML and a fixed-height embed is fine |
| Script | A <script> snippet that builds the iframe itself and listens for a twins-form-height postMessage to auto-resize the embed to fit the form's content | A CMS page (or any site) where the form's height may change — multi-step fields, validation errors, conditional fields — and you don't want a scrollbar inside the embed |
What happens on submission
Every submission, without exception, does two things immediately:
- Creates a CRM ticket with status
open. - Fires the
form_submittedautomation trigger — the same event that feeds Communication Automations sequences. See the Automations guide for what you can chain off of it.
What happens next depends on the Account Management setting on that form:
- Auto-manage on — the submission is matched (or a new client is created) using the configured matching strategy,
related_client_idis set, and the response status becomescompleted. A client created this way starts at statuslead, notactive. - Auto-manage off —
related_client_idmay still get set, but the response status ison_holdpending manual staff review on the Responses tab.
Responses tab & the review workflow
Response status is a separate concept from form status — it applies per submission, not to the form as a whole. Four values exist:
| Status | Meaning |
|---|---|
completed | Auto-managed and matched/created a client automatically. No action needed. |
on_hold | Auto-manage was off (or matching wasn't confident enough) — a staff member needs to review and manually attach or create the client. |
spam | Set manually by staff on the Responses tab. There is no automatic spam detection — see the Callout below. |
ignored | Also set manually — for a legitimate but not-actionable submission a staff member wants out of the queue without calling it spam. |
In practice: check the Responses tab for anything sitting at on_hold, decide whether it's a real lead, and either attach it to an existing client, let it create a new one, or mark it spam/ignored to clear it from the queue.
One thing to know before you share a form
Attachment field limit. The server-enforced limit on the attachment field type is 15 MB, images or PDF only — anything larger or a different file type is rejected at submission. Design any form using an attachment field around that limit.
Bot / spam protection (Cloudflare Turnstile)
Public form pages can show a Cloudflare Turnstile challenge before allowing submission — it's opt-in at the environment level, not per-form. Set NEXT_PUBLIC_TURNSTILE_SITE_KEY and TURNSTILE_SECRET_KEY (see .env.local.example) and every public form immediately shows the widget and rejects submissions that don't pass server-side verification. Leave both unset and forms behave exactly as before — no widget, no verification.
spam/ignored response statuses on the Responses tab remain the backstop either way, since Turnstile only blocks obvious bots, not a determined human.