Skip to main content
FORMS

Spin up public web forms in minutes — describe the form you want in plain English and ParsaLink builds the schema, generates the page, and wires submissions to the right CRM entity.

Creating a Form

1

Open the Forms section

Go to CRM → Forms → New Form.
2

Describe it (optional)

Paste a description like “A contact form for prospects with name, email, company, and a free-text message” and click Build with AI. The schema builder drafts fields, types, and required flags for you. Or skip this and start from a blank form.
3

Refine fields

Add, remove, or rename fields. Each field has a type (text, long text, email, phone, number, select, multi-select), a required toggle, and an optional default value.
4

Pick the target entity

Choose what each submission creates: a Contact, Lead (contact with a specific stage), Account, or Case.
5

Set the Source and Tags

Stamp every submission with a Source value and any Tags so downstream Automations can pick them up.
6

Publish

Save and click Get Public Link. The form is live at https://app.parsalink.io/portal/{'{'}tenant-slug{'}'}/forms/{'{'}form-slug{'}'}.

Spam Protection

Every public form is protected with Cloudflare Turnstile (similar to reCAPTCHA but privacy-preserving). Genuine humans don’t notice it; bots hit a friction wall. If you want stricter validation on top, add:
  • Required email field — combined with email format validation, this filters out drive-by submissions.
  • Hidden honeypot fields — automatically inserted by ParsaLink; bots that fill them are silently dropped.
  • Rate limiting by IP — enforced at the gateway.

What Happens on Submission

  1. The form payload hits /api/crm/forms/public/{'{'}tenant_slug{'}'}/{'{'}form_slug{'}'}/submit/.
  2. Cloudflare Turnstile verifies the submission isn’t a bot.
  3. ParsaLink creates the configured entity (Contact / Account / Case / etc.) with the Source and Tags you set.
  4. Any matching contact_created / contact_source_changed / tag_added automation rules fire.
The full submission JSON is also stored on the entity’s data field, so even fields not mapped to a CRM column are preserved.
If the form creates a Contact and an email field is filled in, ParsaLink checks for duplicates by email. The default behavior is to update the existing contact rather than create a duplicate — useful for “request a demo” forms where the same person might submit twice.

Embedding the Form

You can:
  • Link to the hosted page (/portal/{'{'}tenant{'}'}/forms/{'{'}slug{'}'})
  • Embed the hosted page in an iframe
  • Use the API directly — POST a JSON payload to the submit endpoint (handy if you want full design control on your own site)
For API submissions, include the Turnstile token from your own Turnstile widget in the payload as cf_turnstile_token.

Tracking Submissions

Every form has a submissions tab showing chronological entries, the source IP, and the created entity. Click any submission to open the contact/account/case it produced — useful for QA-ing a new form before you broadcast it.
Pair a public form with a contact_source_changed automation rule (matching the source you stamped on the form) to instantly run a welcome sequence on every submission.