Forms

Visitors to your Page can submit Forms from your Website. If a Person with the specified phone number or email already exists in your contact list, their existing record will be updated. If no Person exists, a new Person record will be created upon a successful Form submission. User Fields (e.g. email, phone number, name, language, zip code, country) and Custom User Properties will update the associated fields on the Person record with the latest data from a Form submission.

Most Page Types have a form, for example event, petition, and donation pages. Landing Page and Blog Post pages start with no form.

💡

Set a Default Form Template: Tired of adding the same fields to every new page? Go to Pages → Your Website → Settings tab and select a Default Form. Any page you select becomes the template for new pages, except donation pages. They copy only its form fields and its Disclaimer, and only when it has an Email or Phone Number field.

📘

Custom Form Fields vs. Custom User Properties: The "Add New Form Field" dropdown has two separate sections that look similar but behave very differently:

  • Custom User Properties (your organization's own properties, e.g. "Yard Sign Request", "Volunteer Role"): These fields write directly to the Person's profile on submit. The field's Name / ID and options are locked automatically. Use these when you want to track data on each person.
  • Custom Form Fields (generic types: "Text", "Dropdown Menu", "Checkboxes", etc.): These fields store data only on the form submission, not on the Person's profile. Use "Query by Form Question" in filters to find responses. Use these for one-off questions that don't need to live on the person's record.

If you want form answers to appear on a person's profile and be filterable as a custom property, always add the field from the Custom User Properties section. See Custom Properties for details.

Recognized users

A visitor to a Page on your Website will either be recognized as an existing Person in your database, or an unknown visitor. Ideally, all visitors to your Page who already have an existing Person record in your database will be recognized, so that we both tailor the page to them (language content, more focused form fields), and avoid duplicate People records.

There are three main ways a user can be recognized:

  1. Once a Person submits a form, a cookie is stored on their device so that they will be recognized on any further pages they visit on that device.
  2. From any email or text communication, using Page Links with a merge tag will generate a personalized link for that Person so that they can be recognized once they click on the link to arrive at your Page.
  3. A member can log in at the /login page of your website. The page emails a 6-digit login code. After the login, the member is recognized and counts as a verified member.

On every page except a donation page, a recognized visitor sees the link 'Not [name]? Click here.' with the form, and the link signs them out.

Using Forms on a Shared Device

At an in-person event, tabling session, or fundraiser, multiple people may submit a form on the same device (e.g., a shared iPad). Then the device stays recognized as the first person who submitted. The next visitor sees that person's answers filled in, and the submit can update the first person's record. To prevent this, enable "Don't Recognize Logged-In User" under 'Customizations' in the 'Page Settings' section of the page's Details tab. This prevents pre-filling, and each submission goes to the Person with the phone number or email entered, or to a new Person.

💡

For team members collecting info on behalf of others: Use Field Survey mode (Form tab > "Show as Field Survey") instead. This lets agents fill out a form on behalf of a person from their profile, a phonebank, a textbank, or the Solidarity app. See Field Surveys for the full guide.

Form requirements

By default, a form needs an Email or Phone Number field with Show set to 'Always Required' or 'Required If Blank'. Without one, the dashboard marks the page 'Page Incomplete - Form Requires Contact Field', and the public page does not show the form. Depending on the page type, your form may require additional fields (eg. share your story requires a video upload).

Communication permissions from a form

The Phone Number field has the toggle 'Require opt-in consent for texts alongside phone number.' When the toggle is off, the form gives SMS consent by default. The opt-in consent covers texts only, so a new Person with a phone number also gets Call Permission.

Show options

When determining whether to show or require a particular form field, there are 5 options that you can choose:

Always Required: A Person can not submit the form unless this form field has been filled out.

Required If Blank: This form field is required unless we have a recognized user logged in, who already has a valid value attached to their record for this form field.

Always Visible: This form field will always be visible, but will not be required to submit the form.

Visible If Blank: This form field will be visible and not required, unless we have a recognized user who already has a value for this field, in which case it will be hidden.

Visible Conditionally: Allows a form field to be visible depending on certain conditions. You can show a field when another field meets a condition. The conditions are 'Is Valid', 'Is Not Valid', 'Is Equal To', 'Is Not Equal To', 'Contains', and 'Does Not Contain'.

Some fields offer fewer options. On Event pages, the Email field offers only 'Always Required' and 'Required If Blank', so it cannot be optional.

All Form Field types

To add a new form field to your Page, navigate to the Form tab and use the "Form Fields" section on the left panel. The Form Preview section allows you to preview the form either logged in (with a recognized user) or logged out:

Here you will see all Form Fields on the left, and a preview of the actual form on the right. You will have to save the Form Field in order for the Form Preview to refresh. To add a new Form Field, use the "Add New Form Field" dropdown:

The content of this dropdown will look identical as above, except for the Custom User Properties section will be tailored to your Organization's Custom Properties. Each user field and each property can be on a form only once. While one is on the form, its option in the dropdown is disabled. Below is a breakdown of most field types, with a brief description:

User fields

All user fields & Custom User Properties will have their associated Person record attributes updated once the form is successfully submitted.

Email: A valid email address field.

Phone Number: A valid phone number. 'Phone Number Origin Validation' offers 'Home Country' or 'Any Country'. 'Home Country' accepts numbers from your organization's home country. By default, Solidarity Tech validates that a user's phone number is a text-able mobile phone number. This validation can be disabled.

Zip Code: A zip code or postcode. In organizations whose home country is the US, the UK, or Australia, the field can check that the code is valid for that country. You can also limit zip code input to a state, for example, making any zip code provided outside of California invalid.

Full Address: A complete address component including street address 1, street address 2 (optional), city, state, and zip code. There is an option use address autocompletion, to make it easier for users to fill out their complete address. In addition to ease, the autocomplete option will geocode the address and update the latitude and longitude of your user's location for mapping and targeting. 'Use address autocomplete' is on by default. With it on, the street, city, state, and zip inputs stay hidden until the Person picks a suggestion.

Full Name: A first a last name for the Person. You can optionally split the full name into separate fields for first and last name.

Alternate Name: A free-text field for a community name, nickname, or alternate romanization.

Date of Birth: A date input that saves to the Person's Date of Birth field. Age is computed automatically.

Preferred Language: The preferred language for the Person. If a resource (page, email blast, etc.) is available in their preferred language, it will be delivered as such.

Country: Select your country from a dropdown of all countries on earth.

Custom Form Fields

Text: A single line input field for text. You can choose to pre-pend or post-pend the input field with labels (for example the $ sign for a currency). You can also use regular expressions to validate a field and show a custom error message if the user input doesn't match the expected input. Set a Preset Value to pre-fill the field (see Preset values and merge tags).

Multiline Text: A multiple line text input. Set a Preset Value to pre-fill the field (see Preset values and merge tags).

Number: A single line text input limited to numbers

Date: A date that the visitor types, in the date order of their browser language, such as mm/dd/yyyy or dd/mm/yyyy. You can validate the minimum and maximum allowable date using three distinct forms methods: a) "current" references the current date on the day the page is loaded, b) MM/DD/YYYY format (eg. 01/28/2026), c) using relative dates like "2.weeks.ago"

Dropdown menu: A single selection field with any number of defined options. You can specify that this field be searchable, so that user's can easily find a specific option on a long list. By default, the first option is selected, but you can specify that the dropdown begin with a placeholder that you define.

Radio buttons: A single selection input where all the options are visible at once.

Checkboxes: A multiple selection input. You can define the minimum number of checkboxes that a user must include before the field is considered valid, and the maximum number they may select. Also, you can truncate a large list of checkboxes after X number of options. If truncated, a "show more" link will be included at the end of the list to reveal the rest of the options. Enable 'Searchable Dropdown' to display checkboxes as a searchable multi-select dropdown instead.

Adding an "Other" Option with a Write-in Field

If you want respondents to be able to write in their own answer when none of the provided options apply, you can pair a checkboxes (or radio buttons) field with a conditionally visible text input:

  1. Add an option called "Other" to your checkboxes field.
  2. Add a new Text input field directly below the checkboxes field.
  3. Set the text input's label to something like "If other, please specify."
  4. Set the Text field's Show option to 'Visible Conditionally'. Pick the checkboxes field and the condition 'Contains', with the value 'Other'.

The text input will stay hidden until the respondent selects "Other," at which point it will appear for them to type in their answer. This same pattern works with radio buttons and dropdown menus as well.

Signature: Collect a digital signature signed by swiping a finger or mouse.

File: A video, image, audio, PDF, or spreadsheet (.xlsx or .csv) file uploaded by your user. Each media type has a file size limit.

Image Processing

Enable facial detection and cropping to save a cropped copy of uploaded images that include a face. The cropped image has its own URL. You can use it, for example, to create membership cards with a user's cropped photo.

Field Options: "Disabled" and "Defaults On" Toggles

All form fields in Solidarity Tech that allow multiple Options come with two powerful toggles to enhance usability and configuration:

  1. Disabled: Keeps the option on the form, greyed out, so nobody can pick it. Only a Checkboxes field with 'Searchable Dropdown' on leaves the option out. This is useful for phasing out outdated options while maintaining historical data integrity.

  2. Defaults On: Automatically pre-selects an option as the default when the form is loaded for respondents. For instance, if you enable "Defaults On" for the "Community Supporter" option, it will be pre-selected for users filling out the form.

Example:

In this example, the "Community Supporter" option has the "Defaults On" toggle activated, ensuring it is selected by default when users interact with the form.

How to Use These Toggles

  • Navigate to the form field settings within the Pages editor.
  • Locate the "Options" section for any field.
  • Toggle Disabled or Defaults On for each option as needed.

Notes:

  • Use the Defaults On toggle to guide user responses when a specific choice is expected or preferred.
  • Radio Buttons and Dropdown Menu take one answer, so turn on Defaults On for one option only. On Checkboxes, every option with Defaults On starts checked.

By leveraging these toggles, you can streamline form interactions and maintain a polished experience for your respondents.

Syncing Options with a Custom User Property

When a form field (Dropdown, Radio Buttons, or Checkboxes) is backed by a Custom User Property, you can enable Sync options with property to keep the field's option list automatically in sync with that property's options.

When syncing is on, the property drives the option set, labels, and order. You can still set Disabled and Defaults On per option, and those per-form settings are preserved when the property's list updates. Options removed from the property are retired rather than deleted, so historical form results continue to display their original labels correctly.

⚠️

Note: When sync is enabled, you cannot add, remove, or reorder options directly on the form field. Make those changes on the Custom User Property itself, under People > Properties. The Properties menu item shows only to team members with the 'Add Custom Properties' permission.

This is the recommended approach whenever a Dropdown, Radio Buttons, or Checkboxes field maps to a Custom User Property, as it ensures the form always reflects the current valid values for that property without manual updates on each page.

Demand fields

Demand vote fields show in the 'Add New Form Field' dropdown only when your plan includes Demands. Demands is on the Standard, Professional, and Enterprise plans.

Demand Multiple Choice Vote: Add demand fields that users can vote on. You can choose the Demands to be voted on in these ways:

  1. Specified: Choose one-by-one the Demands you want included in the Form.
  1. Unvoted: Automatically take Demands that a logged in Person has not voted on and offer those for voting. You can choose how many Demands you want to limit the field to.

Demand Ranked Choice Vote: A field that allows users to vote on their top demands using a ranked choice voting methodology. Oftentimes, People may vote on many Demands with the highest possible level of support, and ranked choice voting allows you to discover the nuance of opinions between these Demands by asking People to sort their Demands by priority. You also choose which Demands the field shows.

HTML content block

A fully customizable HTML content block. Use our HTML editor to build out the content visually, or dig into the raw HTML content to customize your content without limits. Add it with 'Add Text, Images, Headers, & Links...' in the 'Text & Formatting' group of the 'Add New Form Field' dropdown. It is not in the Custom Form Fields group.

On Email Legislator and Call Legislator pages, an HTML content block can also name the person's legislators, with the Legislator merge tags. See Legislator Lookup Blocks.

Hidden field

A hidden field is an input field of type hidden with a pre-set value. These fields will be submitted without any user modification.

Groupings

Multipage Subform: Split your form into multiple pages, to break a large form into bite-sized pieces. The form will not be saved and submitted until after the user completes the last page and submits the form

Subform: A subform allows you to group multiple form fields into a single section. This can be useful if a) you want to visually block a set of questions into a section, or b) you want to conditionally show an entire subform based on some logical evaluation.

Preset values and merge tags

Text and Multiline Text fields have a Preset Value setting. The preset value is the text that the field shows when the form loads. The person can edit it before they submit, unless you turn off Editable on a Multiline Text field.

A preset value can include member merge tags, for example {{ user.first-name }} or {{ user.city }}. Click the brackets icon next to the Preset Value box to pick a tag. The tags fill in with the member's own info when the form recognizes the member. For anyone the form does not recognize, the tags are blank. If the page has Don't Recognize Logged-In User turned on, the tags are blank for everyone. To show fallback text, add a default: {{ user.first-name | default: "friend" }}.

In field surveys, the tags fill in with the info of the person being surveyed, even when Don't Recognize Logged-In User is on. Custom properties that the agent is not allowed to see stay blank.

The form preview in the form editor shows the result. Logged In uses your own info, and Logged Out shows what an anonymous visitor sees. If a preset value has a Liquid syntax error, the form editor shows the error and does not save.

Pre-filling Forms via URL Parameters

Pre-populate form fields by passing values as URL parameters. Useful for marketing campaigns, QR codes, email links, and partner integrations.

Basic Usage

Add field names and values as query parameters:

https://yoursite.org/join?zip_code=90210

Supported Fields

Works with these form field types: text inputs, phone numbers, emails, dates, dropdowns, radio buttons, checkboxes, textareas, and custom properties.

Radio Buttons & Checkboxes

Use either the option value or the exact label text:

By value: ?account-type=5gMb7ob4

By label: ?account-type=Rideshare Driver

Multiple checkboxes (comma-separated): ?interests=Climate,Healthcare,Housing

Phone Numbers

Use international format with country code:

?phone_number=14155551234

The number will be automatically formatted with the correct country flag.

Notes

  • URL-encode special characters (%20 for spaces)
  • Pre-filled values work with conditional logic

Tracking Form Sources with UTM Parameters

Track where form submissions come from by adding utm_source (and other UTM parameters) to your form URLs.

Example:

https://yoursite.org/join?utm_source=tabling-event-downtown

How It Works

  1. Add ?utm_source=your-source-name to any form URL
  2. When someone submits the form, the UTM source is recorded with their submission
  3. In the page's Results tab, open 'Page Analytics' to see the 'UTM Source' table. In People, use the 'UTM Data for Activity' filter.

Use Cases

  • Track which events drive the most signups (different QR codes per event)
  • Measure email vs. text vs. social media conversion
  • Compare performance of different campaigns
💡

Tip: Create unique QR codes for each event by generating QRs from URLs with different utm_source values. You can then see exactly which event brought in each signup.


Liquid template variables

Liquid templating language Merge Tags can be used in input fields for several parts of the Pages section - from the emails sent to legislator's (Email Legislator) to the follow-up page content shown after a form is successfully submitted Post-Submission. Form answers work as merge tags in Email Legislator messages and on the custom follow-up page. Use the field's 'Name / ID' in the tag.

For example, if you're using an Email Legislator page, and you have a form component with the name housing-development-name, you can include the value submitted by the user within your email, by including the following Merge Tag in your email: {{ housing-development-name }}.

Common attributes amongst types

Alongside "Show", there are several attributes that most Form Fields will have:

Name / ID: This is the key that's used to uniquely identify a form field. It is under the field's 'Extra options' link.

Label: The text above an input field describing what the user should input.

Placeholder: The grayed out placeholder text shown for input fields before a user begins to input any value.

Hint: The small, gray text below an input field, giving the user tips on how they should fill out the field.

Styling options

'Classes', 'Style', and 'Label Style' are under the field's 'Extra options' link, which starts closed.

Classes: The HTML classes to add to the field's outer container.

Style: CSS styling added to the field inline

Label Style: CSS styling added to the label inline.

Label as real-time Liquid template: Sometimes, you want to customize a field label depending on previous answers. To do this, you can enable this option and use the Liquid templating language to reference other fields. For example, let's say you have a form with an employer dropdown field that asks users who their employer is. Then, later in the form, you want to ask the user the date that their specified employer hired them. We can create a Date form field, enable "Label as real-time Liquid template", and use the label Date Hired by {{ employer | capitalize | default: 'Employer' }}. This will reference the value of the employer field, capitalize the value, and display that as the label for the Date field. So if the employer field's value were "instacart," the Date label would ask "Date Hired by Instacart."

Form Settings

In the Form tab, the bottom section of that tab allows you to customize certain form settings that are outlined below:

Form Title: This option is only available if your form uses a sidebar page template. Basic Form pages never show it. The form title appears at the top of the sidebar form. On Petition pages, it starts as "Sign The Petition".

Disclaimer: Small-type text that will appear underneath your form's submit button. This is typically used to explicitly note that a contact is giving your organization permission to text or call them if they submit the form. The Disclaimer text does not set any permission. SMS consent comes from the Phone Number field.

Submit Button Label: This is the customizable label used for your form's submit button. On Petition pages, it starts as "Sign The Petition".

Default Chapter: The setting adds new People from the form to the chapter you pick, and an existing Person keeps their primary chapter. When your organization assigns chapters by zip code, the zip code picks the chapter instead.

Require reCAPTCHA: Enabling this requires that all form submissions include a valid reCAPTCHA response for spam protection. If enabled, the form can ONLY be submitted on Solidarity Tech hosted pages

Autosave Form: Enabling this will autosave all user-inputed form data until they have successfully submitted the form.

Disable Animations: Enabling this disables all page animations that occur while filling out the form.



Did this page help you?