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

Quick Start¶
- Create a workflow and add a Website Form trigger
- 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
- Put the form on your website
- Add the tasks to run for each submission, and switch the workflow on
- 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 |
| 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 itsoutputin 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.comandshop.example.comkeep 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¶
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¶
Assign the enquiry fairly¶
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¶
- Check the workflow is switched on
- Check the form on your site is the one built for this trigger
- 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:
- Inbound Email - Trigger workflows from incoming emails
- Webhook In Trigger - Trigger workflows from external systems
- Match to Client Task - Find/update contact records