Skip to content

Form Submission Trigger

Overview

The Form Submission trigger captures data when visitors submit forms on your website. This creates a seamless connection between your website and your automation workflows, enabling instant follow-ups, lead nurturing, and data processing.

When to use this trigger:

  • Capture contact form submissions
  • Process lead generation forms
  • Handle registration forms
  • Manage support ticket submissions
  • Collect survey responses
  • Process quote requests

The Website Form trigger opened to its settings, top to bottom: the form’s title, colour and settings, the Form Output with the embed script (blurred) and its three ways to use it, and the Form Fields list with a type and a required tick for each field

Quick Start

  1. Create a workflow and add a Website Form trigger
  2. Build the form — its fields, branding, and the link or embed code to put it on your site — in the classic BaseCloud portal, as the trigger's panel says
  3. Put the form on your website
  4. Add the tasks to run for each submission, and switch the workflow on
  5. Submit the form once yourself and check the run's output

Each submission starts the workflow once, with the submitted fields as its outputs.

Outputs

Field Type Example Notes
task_name string Website contact form The name of the trigger task that fired. Always present — useful when several forms share a workflow.
run boolean true
run_text string Inbound data received and processed successfully.

Every other field is whatever the form posted, spread across the top level of the output. A form posting name, email and message produces {{task_<ID>_name}}, {{task_<ID>_email}} and {{task_<ID>_message}}.

The rest of the output is the incoming payload

This trigger spreads the payload it received across the top level of its output, so the remaining field names come from the source, not from BaseCloud. Run the workflow once and read the task's OUTPUT panel to see exactly what arrived.

Field Types

Each field on the form has a Field Type, chosen in the trigger's Form Fields list.

Field Type What the visitor sees What your workflow receives
Text One line of text The text
Email One line for an email address The address. See Email Fields
Phone Number A country next to a box for the number The number in full, like +14155552671. See Phone Number Fields
Date A date picker The date
Textarea (Multi-line) A larger box for longer text The text
Checkbox A tick box Yes or No
Single Select A list to pick one option from The option
Multi Select A list to pick several options from The options, separated by commas
HTML/Text Display Your own text or HTML, with nothing to fill in Nothing

Email Fields

Use the Email field type for an email address, instead of a Text field. A Text field accepts anything, so a visitor can send sam@gmail, sam.gmail.com or their phone number by mistake. An Email field only accepts a complete address: a name, an @, and a domain with its ending, like name@example.com.

If the address is not complete, the visitor sees a message on the field and the form is not sent until they fix it. Spaces before and after the address are removed. Your workflow receives the address as {{task_<ID>_form_field_<N>_value}}, the same as a Text field, so nothing else in the workflow changes.

What the check cannot tell

The form checks that the address is written properly, not that the mailbox exists. sam@gmial.com is a properly written address, so it is accepted. If reaching the person matters, ask for a phone number too.

Phone Number Fields

Use the Phone Number field type for any phone or cellphone number, instead of a Text field. A Text field accepts anything: words, a number with a digit missing, a number with no country code. A Phone Number field only accepts a real phone number.

What the visitor sees: a country next to the box for their number. The country is already set to where they are, and they can change it. They type the number the way they normally would, such as (415) 555-2671 or 082 123 4567, with or without spaces and brackets. A visitor who types the number with its country code, such as +44 20 7946 0958, has the country set for them.

What the form checks: that the number is a real one for that country, with the right number of digits. If it is not, the visitor sees a message under the field and the form is not sent until they fix it. Cellphone and landline numbers are both accepted.

What your workflow receives:

Field Example Notes
{{task_<ID>_form_field_<N>_value}} +14155552671 The number in full: +, the country code, then the number, with no spaces. Ready for SMS, WhatsApp, calls and Match to Client.
{{task_<ID>_form_field_<N>_country}} US The two-letter code of the country the number belongs to. Empty when the field was left empty.

Because the number already arrives in full, you do not need a Phone Formatter after the form.

Country the field starts on: by default this is the visitor's own country, worked out from their internet address. If nearly all your enquiries come from one country, choose that country under the field's settings and every visitor starts there. They can still pick another.

Changing an existing form

Open the trigger, find your phone field in Form Fields, and change its Field Type from Text to Phone Number. The field keeps its name, so the rest of your workflow carries on working, and you can remove the Phone Formatter that came after it. Do the same for your email field, choosing Email.

A form sent without the embed script

The check happens in the form BaseCloud gives you (the JavaScript embed or the Public URL). If your own website code posts straight to the form's address instead, a number sent with its country code is still tidied into the full format, and anything else is passed on as it was sent.

What BaseCloud Adds to a Submission

Besides the form's own fields, a submission carries:

Fields What they hold Notes
referrer, utm_source, utm_medium, utm_campaign, utm_term, gclid, gbraid, wbraid, fbclid Where the visitor first came from: the website that sent them, and the campaign and ad click details from the link they followed. Remembered in the visitor's browser for 30 days (7 days in Safari and iPhone browsers), so they are still there when the visitor submits on a later visit. Empty when there was none.
Any other value in the page address A form opened at …?source=email&ref=partner123 also sends source and ref. Taken from the page the form was submitted on.
ip_address, country, country_code, city, region, timezone, latitude, longitude Roughly where the visitor is, worked out from their internet address. Left out when the location cannot be worked out.
journey and the other journey_… fields The pages the visitor viewed before submitting. See Visitor Journey.

There is no submission time or form id

A submission has no form_id, user_agent or submitted_at unless your form sends a field with that name. If you need the submission time, use a Date Formatter, or add the value to the form itself.

Visitor Journey

A form placed on your own website with the JavaScript embed also sends the pages the visitor viewed before submitting, including earlier visits in the last 30 days. If someone visited three days ago, came back today and only then submitted, both visits are there, page by page.

Field Type Example Notes
journey list see below One entry per page, oldest first. Use {{task_<ID>.JSON.journey}} for the whole list, or {{task_<ID>_journey_0_url}} for one value.
journey_summary string Visit 1 - 2026-10-06 (from https://www.google.com/) … The same journey as readable text, one line per page (times in UTC) — for a workflow note or an email. To choose the columns, the order or your own timezone, use a List Formatter on journey.
journey_visits number 2 How many separate visits. A pause of more than 30 minutes starts a new visit.
journey_pages number 7 How many pages were viewed.
journey_first_visit string 2026-10-06T14:02:11.000Z When the first recorded page was viewed (UTC).
journey_landing_page string https://example.com/pricing The first recorded page.

Each entry in journey holds type (page, or form_submitted for an earlier submission on the same website), url, title, time (UTC), visit (1, 2, 3 …) and, on the first page of a visit that came from another website, referrer.

Show the journey in a workflow note

Two ways, depending on how much say you want over the layout:

  • Quick: place {{task_<ID>_journey_summary}} in the note. One line per page, grouped by visit.
  • Your own layout: add a List Formatter, set its List to {{task_<ID>.JSON.journey}}, choose the columns (for example Page → url, Date → time), and place its output in the note. Dates are shown in your account's timezone.
Form Submission
  └─ List Formatter    List: {{task_55001.JSON.journey}}   Columns: Page → url, Date → time
      └─ Workflow Note "Pages viewed before submitting: {{task_72001_output}}"

Put the script on every page

Only pages that load the form script are recorded. Add the script to every page of the website — without data-auto-open="true" on pages where the form should not pop up by itself. Several forms on one website share one journey, and a page with more than one form is still recorded once.

What the journey cannot see

  • It is kept in the visitor's browser, so a visit on a phone and a submission on a laptop are two journeys, and a private window or cleared browsing data starts a new one.
  • Safari and iPhone browsers forget it after 7 days without a visit; other browsers keep it for 30 days.
  • It covers one website address: www.example.com and shop.example.com keep separate journeys.
  • It holds the latest 100 pages.
  • A form opened from its Public URL has no journey.
  • It is visitor tracking. If the website asks visitors for cookie consent, include it there.

Real-World Examples

Capture an enquiry into the CRM

Form Submission
  └─ Match to Client     contact_email from the form
      └─ Workflow Note   log the enquiry

Create the client when nobody matches

Form Submission
  └─ Match to Client     contact_email from the form
      └─ If Statement    run is false
          └─ New Client  create the record

Confirm to the person who submitted

Form Submission
  └─ Email   send the confirmation to the submitted address

Assign the enquiry fairly

Form Submission
  └─ Round Robin   cycle through the sales team
      └─ Email     notify {{task_30001_response}}

Field names come from your form

Everything except task_name is whatever the form posted. Run it once and read the OUTPUT panel to see the exact names.

Best Practices

  • Match the person first — Match to Client on the submitted email — so a returning enquirer is not created twice.
  • Check required fields with an If before creating anything.
  • Use the Phone Number field type for phone numbers, so every number arrives real and in full. See Phone Number Fields.
  • Use the Email field type for email addresses, so an incomplete address is caught while the visitor is still on the form. See Email Fields.
  • Test with a real submission and read the run's output to see each field's name as it arrives.

Troubleshooting

Submissions not starting the workflow

  1. Check the workflow is switched on
  2. Check the form on your site is the one built for this trigger
  3. Submit it yourself and look for the run in the workflow's Records

A field is missing from the output

The output holds what the form submitted, under the field's name — check the field exists on the form and was filled in.

Frequently Asked Questions

Can I have several forms?

Yes — give each its own Website Form trigger (and workflow), or one workflow that branches on a field.

Do I still need a Phone Formatter after the form?

Not for a Phone Number field. It already gives your workflow the number in full, like +14155552671. You only need a Phone Formatter for a number collected in a Text field.

Can a visitor from another country fill in their number?

Yes. The country starts on where the visitor is, and they can choose any country from the list.

Can I prevent spam submissions?

Use the Email and Phone Number field types, so a submission needs a complete email address and a real phone number. For anything further, check the submission with an If before acting on it.


Next Steps: