Contact forms & leads
Build lead-capture forms with a custom field editor, embed them inline on any page, and work the submissions in a dedicated leads inbox.
Not every visitor wants to start a chat. Contact forms let you build classic "get in touch" forms with a drag-and-drop field editor, embed them inline on your own website, and collect every submission as a lead in a dedicated inbox your team can work through.
Unlike the chat widget, a contact form isn't a floating bubble - it renders in the page, where you want it, styled to match. And unlike a ticket, a lead is a lightweight record with its own simple lifecycle.
Build a form
Open Admin → Contact forms → New form. Every new form starts from a sensible default template - Name, Email, Phone, Subject and Message - which you can reorder, edit, delete or replace entirely.
The field builder supports:
| Field type | Use it for |
|---|---|
| Short text | Names, company, subject lines |
| Long text | Messages, descriptions |
| The submitter's email (drives the confirmation reply) | |
| Phone | Optional phone number |
| Dropdown | A single choice from a list you define |
| Radio buttons | A single visible choice |
| Checkbox | Consent boxes ("I agree…") |
Mark a field's role - Contact name, Contact email or Subject - and that answer is promoted into a column in the leads inbox, so a lead is readable at a glance no matter how the rest of the form is laid out.
You can build as many forms as you like - a "Contact us" form, a "Request a quote" form, a campaign landing-page form - each with its own embed key, fields, branding and confirmation email.
Embed it inline
Copy the snippet from the form editor and drop it where you want the form to appear - it renders into the target element, in your page flow:
<div id="nsupport-contact-form"></div>
<script src="https://<your-app-host>/contact-form.js" data-key="pk_cf_…" async></script>Optional attributes:
| Attribute | Purpose |
|---|---|
data-target | CSS selector to render into (default #nsupport-contact-form). |
data-color | Accent color override. |
data-api-base | Backend base URL (defaults to the script's origin + /api/v1). |
The script is a single zero-dependency bundle (~6 kB) that renders inside a shadow DOM, so your site's CSS and the form never interfere with each other. A built-in live preview in the admin shows exactly how the form will look on your site before you ship it.
Work the leads
Every submission lands in Admin → Contact forms → Leads:
- A filterable, searchable, paginated inbox with per-status counts.
- Each lead moves through New → In progress → Completed, plus Archived for spam or anything irrelevant, and can be assigned to a teammate.
- Open a lead to see every answered field, the contact details, and act on it.
Confirmation email (optional)
Turn on the per-form confirmation email and, whenever someone leaves an email address, they get an automatic "we received your message" reply - with your workspace name and a "someone will be in touch" line you can customize. It uses the same email delivery as the rest of the platform and is rate-limited per recipient to prevent abuse.
Built to be safe on a public page
A contact form sits on the open internet, so it's locked down the same way the other embeddable widgets are:
- An origin allow-list - only the domains you list can load and submit the form.
- A rotating public key you can regenerate at any time.
- A hidden honeypot field and rate limiting to keep bots out.
Who can do what
| Action | Member | Agent | Admin | Owner |
|---|---|---|---|---|
| Build & configure forms | ✗ | ✗ | ✓ | ✓ |
| View & work the leads inbox | ✗ | ✗ | ✓ | ✓ |
| Submit a form (as a website visitor) | - | - | - | - |
Embeddable widgets
Put your AI support and feedback collection on any website with two tiny, zero-dependency scripts - one line each, sandboxed in a shadow DOM.
Booking & availability
Let customers book appointments, tables or rentals - set your availability once, then take bookings through a widget, a public link or the AI chat, with confirmations and calendar invites.