Act · Running your business

Forms that go somewhere.

Build forms. Choose where submissions route: CRM, support tickets, newsletter, custom webhooks. Track every field, step, and abandonment.

Included in every plan · from $99/mo

Contact form → CRM

Contact us

Name

Sarah Johnson

Email

sarah@company.co

Message

Interested in…
Submit

New lead

Score 82

Sarah Johnson

sarah@company.co

SourceContact form
PipelineNew prospects
StageQualified

Without Sonor

Form submissions land in an inbox and die.

No CRM routing, no analytics on abandonment, no context.

With Sonor

Prospect → CRM pipeline. Support → ticket queue. Newsletter → subscriber list. You choose per form, with notifications and spam checks in the same flow.

What you get. Everything Forms does for you, from day one.

Route submissions intelligently. Prospect → CRM pipeline. Support → ticket queue. Newsletter → subscriber list. You choose per form, with notifications and spam checks in the same flow.

Submissions keep their context. Every submission preserves the page, campaign, visitor, and site it came from, so the CRM knows the story behind the inquiry.

Track the full funnel. Form start → step progression → completion → abandonment. See exactly where people drop off.

Go headless with hooks. useForm() gives you state, validation, and submission. Bring your own UI.

Routing

Choose where submissions go.

Every form type routes to a different destination. No inbox, no manual sorting.

  • Route per form. Prospect forms create leads, support forms open tickets, newsletter forms grow the list.

  • Notifications and spam checks in the same flow. Alerts go out and junk is filtered before anything reaches the pipeline.

  • Any endpoint you like. Custom webhooks post the submission to your own API.

Routing · Contact form

Form submission

  • CRM pipeline

    Prospect forms create leads

    Active
  • Support queue

    Support forms open tickets

  • Subscriber list

    Newsletter forms grow the list

  • Custom webhook

    Any form posts to your API

Every submission keeps its context. The CRM knows the story behind the inquiry.

  • The page. Which page, and which form on it, the submission came from.

  • The campaign. The campaign that brought the visitor, carried into the lead record.

  • The visitor. Their site activity joins the lead timeline in CRM, so follow-ups start with context.

  • The site. Agencies running many sites see exactly which one each inquiry belongs to.

Funnel analytics

Track every step. See exactly where people drop off.

  • Start to finish. Form start, step progression, completion, and abandonment, tracked per form.

  • Per-field insight. See which field people stall on, then fix it.

  • Tied to outcomes. Completions become leads in CRM, so the funnel does not stop at "submitted".

Funnel · Contact formLast 30 days

Form viewed

2,400
100%

Form started

1,200
50%

Step 2 reached

890
37%

Completed

650
27%

Abandoned

550
23%

Headless mode

Bring your own UI.

useForm() gives you state, validation, and submission. Your design, our backend.

  • One hook does the work. Fields, validation, submission, and status from useForm().

  • Your design. Render every field with your own components, or drop in ManagedForm for a styled one.

  • Our backend. Routing, spam checks, analytics, and the CRM handoff still happen server-side.

ContactForm.tsx
import { useForm } from '@sonordev/site-kit/forms'
 
const { fields, handleSubmit, status } = useForm('contact')
 
return (
<form onSubmit={handleSubmit}>
{fields.map(field => (
<YourCustomInput key={field.name} {...field} />
))}
<button type="submit">
{status === 'loading' ? 'Sending…' : 'Submit'}
</button>
</form>
)

For developers

A few lines of code. That's it.

Forms ships in @sonordev/site-kit, typed, server-first, with the same tokens as the rest of your site.

components/ContactForm.tsx
import { useForm } from '@sonordev/site-kit/forms'
 
export function ContactForm() {
const { fields, handleSubmit, status } = useForm('contact')
return (
<form onSubmit={handleSubmit}>
{fields.map(f => <input key={f.name} {...f.props} />)}
<button type="submit">Send</button>
</form>
)
}

Works with. Forms shares one record with these modules, so nothing has to be re-entered or re-explained.

Ready to try Forms?

Start with Forms and the full Sonor platform, everything included from day one.

See what you'll pay

One platform, transparent pricing. Every module included from $99/mo.

Pricing details

Start building

One npm install. 22 modules. 100+ typed components for Next.js.

Integration options

Explore the platform

Every module, one record. Listen, act, earn, and speak from the same platform.

Listen· Understanding your business

Act· Running your business

Earn· Getting paid for the work

Speak· Reaching your audience

Resonance· Maximum signal, every channel