---
title: "How to build a customer journey with forms"
description: "Put a multi-step form behind one QR code: a first question sorts people, a visitor data condition branches on the answer, a second form appears only for those who need it, one question at a time if you want, and every answer lands on the visitor's profile."
canonical: "https://linkbreakers.com/help/article/how-to-build-a-customer-journey-with-forms"
last-updated: 2026-11-08
---

# How to build a customer journey with forms

> Put a multi-step form behind one QR code: a first question sorts people, a visitor data condition branches on the answer, a second form appears only for those who need it, one question at a time if you want, and every answer lands on the visitor's profile.

Video: [How to make a QR code form that branches on the answer](https://www.youtube.com/watch?v=fQ1_EWg7Pn0)

## Short answer

To put a **multi-step form behind a QR code** that **branches on an answer**, build it on the link's workflow in Linkbreakers. A link's **workflow** is the chain of steps that runs after each scan, drawn as a canvas in the link editor. A first **Form** step asks the question that sorts people, for example "Are you buying for a café?" Yes or No, then a name and an email. A **[Visitor Data condition](/workflow-steps/visitor-data-condition)** after it, a step that routes each visitor by what is saved on their profile, splits the journey on that answer. Only the people who answered Yes get a second form with the questions that matter for them, and each branch ends on its own [thank-you page](/workflow-steps/thank-you-page). That is how you get **conditional questions** without a separate form tool: the branching happens between forms, not inside one.

The visitor never leaves your page. Every step wears the link's **page theme**, the look you set once for every page a visitor sees after the scan, and the second form swaps in place without a reload. The same theme can ask **one question at a time** (the Focused experience) instead of showing each form whole (Classic). Each form's answers are saved on the visitor's profile as soon as that form is sent, so someone who stops after the first form has still left a name and an email. Forms, conditions and page themes are on every plan, Free included.

## Quick summary

- One QR code, one link, several forms: the workflow chains them, with conditions in between
- The first question sorts visitors; a Visitor Data condition (attribute `cafe`, equals, `Yes`) sends each group down its own branch, and everyone else goes to **Other Visitors**
- Branching happens between steps: a single form has no logic jumps inside it
- Every page of the link wears the same page theme, the next page swaps in place without a reload, and the back button works
- Classic shows a whole form at once; Focused shows one question at a time, for every form on the link
- Each form's answers go on the visitor's profile when that form is sent, not at the end of the journey
- Start from a Rating, Contact, Inquiry or Blank form, with 10 field types
- Every plan, Free included, and also through the REST API, MCP, the Assistant and the SDKs

:::try-ai-prompt {"prompt":"Create a QR code link whose first step is a form with a Radio field 'Are you buying for a café?' (key cafe, options Yes and No), then name and email. After the form, add a Visitor Data condition: when cafe equals Yes, show a second form with Café name (key cafe_name), City (key city) and Kilos of coffee a week as a Number field (key kg_per_week), then a thank-you page. Send other visitors to a thank-you page. Set the link's page theme to Focused.","description":"Let the Assistant build the branching two-form journey and switch it to one question at a time.","target":"assistant"}:::

## How a branching form works

A multi-step form is usually one long form cut into screens, often hosted on a form tool's site that the QR code sends people to. In Linkbreakers each form is its own step in the link's workflow, and steps are joined by conditions. A condition looks at something about the visitor and picks the next step: an answer they already gave (a Visitor Data condition), or their country, language, device, the time of the scan, or whether they are new or returning. So the questions after a condition depend on what happened before it.

Take a roaster with one QR code on its coffee bags. Home brewers and cafés both scan it, but only cafés need the wholesale questions:

```mermaid
flowchart TD
  S["Scan of the coffee bag"] --> F1["Form 1: Are you buying for a café? Name, email"]
  F1 --> C{"Visitor Data condition on cafe"}
  C -->|"cafe equals Yes"| F2["Form 2: café name, city, kilos a week"]
  F2 --> T2["Thank You Page for cafés"]
  C -->|"Other Visitors"| T1["Thank You Page for home brewers"]
```

The steps below build exactly this.

## Step 1: Build the first form

1. Go to your [links dashboard](https://app.linkbreakers.com/workspace/dashboard/links), open the link (or create one) and open its workflow. The canvas shows the scan (Link Visit) connected to the next step, usually the redirect to your page.
2. Hover the connector after the scan, click the plus and choose **Form**. Pick a form type (Rating Form, Contact Form, Inquiry Form or Blank Form).
3. Click **Manage Fields**. Put the sorting question first: "Are you buying for a café?", with the answers Yes and No and the key `cafe`. Then add a name and an email. With the reserved keys `$firstName` and `$email`, they fill the visitor's profile; any other key is saved as a custom attribute.
4. Click **Insert Form Step**.

For the yes or no question, a **Dropdown** with the options Yes and No does the job from the app's field list. Two visible buttons are a **Radio** field, which the app's field list does not offer: ask the Assistant, Linkbreakers' built-in AI that builds and edits links from a sentence ("add a Radio field Are you buying for a café? with Yes and No, key cafe"), or create it through the API. Either way, remember the key: the condition in the next step reads it.

## Step 2: Branch on the answer with a Visitor Data condition

1. Click the plus on the connector after the form and choose **Visitor Data**.
2. Set the attribute to `cafe`, keep the type Text, pick the operator **equals** and enter the value `Yes`.
3. Click **Create Visitor Data Condition**.

The canvas now shows two branches under the condition: `cafe equals "Yes"` and **Other Visitors**. The step that followed the form stays on Other Visitors, so nothing changes for anyone who answers No.

Two details decide whether it works:

- **The value must match the answer exactly.** Text comparisons are case-sensitive, so write `Yes` the way the option is written, not `yes`.
- **Other Visitors catches everyone else**, including a visitor whose answer is missing. Conditions are checked in order and the first match wins.

The condition runs on the server when the form is sent, with the new answer already on the profile, so the visitor goes straight to the right branch. Every operator and more routing patterns are in [how to use visitor data conditions](https://linkbreakers.com/help/article/how-to-use-visitor-data-conditions).

## Step 3: The second form, and a thank-you page on each branch

1. On the `cafe equals "Yes"` branch, click the plus and add a **Form**, this time a **Blank Form**.
2. In **Manage Fields**, add **Café name** (Text, key `cafe_name`), **City** (Text, key `city`) and **Kilos of coffee a week** (Number, key `kg_per_week`). Each field has its own key, so each answer becomes its own attribute on the profile.
3. Click the plus after the second form and choose **Thank You Page**, with a title and message for cafés.
4. On **Other Visitors**, end on a **Thank You Page** too, with a message for home brewers. If that branch already redirects to your shop, you can keep the redirect instead.

A thank-you page is an exit step: no buttons, the journey ends there ([how to create a thank-you page](https://linkbreakers.com/help/article/how-to-create-a-thank-you-page)). To show a message and then continue to another step, use a [message page](https://linkbreakers.com/help/article/how-to-create-a-message-page) instead.

## What the visitor sees

A home brewer scans the coffee bag, answers No, leaves a name and an email, and lands on the thank-you page for home brewers. A café scans the same bag, answers Yes, and the second form takes the place of the first on the same page: no reload, no new tab, the same look. After the kilos question, the café's thank-you page.

Three things make it feel like one form rather than a chain of websites:

- **One look.** Every visitor page of a link (forms, message and thank-you pages, password, multi-link, location request, social links and contact card) wears the link's page theme. More in [what's a page theme](https://linkbreakers.com/help/article/whats-a-page-theme).
- **Pages swap in place.** Since 1 November 2026, moving from one page of a link to the next happens without reloading the browser: the next page fades in over the same background and the address bar follows.
- **The back button works.** The phone's back button returns to the previous page of the link, as visitors expect.

## Where the answers go

Each form sends its own answers when the visitor presses its button, and they are saved on the visitor's profile at that moment, not at the end of the journey. Open the visitor in **Visitors**: the name and email fill the profile, and the other answers are listed under **Custom Attributes**. A café shows `cafe`, `cafe_name`, `city` and `kg_per_week`; a home brewer shows `cafe`.

Because answers are kept per form:

- Someone who stops after the first form has still left a name, an email and their answer to the first question.
- A later condition can route on any answer already saved, for example a Number rule on `kg_per_week` that sends your largest accounts to a booking page.
- A returning visitor whose answers are on file can skip a form automatically (see "Auto-skip for returning visitors" below).

Each submission also shows in **Live Events** as it arrives and goes to your [webhook](https://linkbreakers.com/help/article/how-do-webhooks-work-in-linkbreakers), one submission per form.

## Classic or Focused

The page theme also sets the **visitor experience**, how each page paces its content. Open the link's **Page Theme** editor and pick one in the **Visitor experience** panel:

- **Classic**: "Each page shows everything at once, like a whole form on one screen."
- **Focused**: "One question at a time, moving on as soon as a choice is picked."

Focused keeps the same look as Classic. Enter moves on, letter keys pick a choice, and a pick on a Radio, Dropdown or Rating question moves to the next question by itself. Typed answers and checkboxes wait for the visitor to confirm. On a form's last question, a pick does not send the form by itself: the visitor presses the form's button. That is one more reason to put the yes or no question first: in Focused, a tap on Yes or No moves straight on to the name.

Focused applies to every form on the link, since the theme belongs to the link and not to a step. The editor's preview is the real visitor page: click through each page of the link on a phone or a desktop and try the Focused flow before you save. Nothing done in the preview is recorded. The release notes are in [Focused forms and a live page theme preview](https://linkbreakers.com/help/article/focused-forms-and-a-live-page-theme-preview).

## Limits and caveats

- **The page theme is per link, not per step.** Every form on a link is Classic, or every form is Focused.
- **In Focused, the last question does not submit on a pick.** The visitor presses the form's button. Put a choice question first if you want the form to move on by itself.
- **Each form submits its own answers.** The journey is not one big form submission, so a webhook or integration receives one submission per form.
- **A redirect leaves the flow.** Sending the visitor to another site or to another link is a full page load; only pages of the same link swap in place.
- **Branching happens between steps.** A single form has no logic jumps and no fields that show or hide on an earlier answer, and there is no file upload field. Linkbreakers does not replace every feature of a dedicated form builder.
- **Auto-skip is on by default.** With **Automatically skip if data is known**, a visitor whose required data is on file skips the form. Turn it off if every scan must show the form.
- **A visitor who leaves mid-form does not reach the next step.** The scan, and any form already sent, are still recorded.
- **Pages need a connection.** Forms open in the phone's browser and do not work offline.
- **Personal data comes with legal obligations** that depend on where you and your visitors are.
- Forms, conditions, page themes and Visitors are on every plan, including Free ([pricing](https://linkbreakers.com/pricing)).

## Available form field types

Linkbreakers offers 10 field types. Eight are in the app's **Manage Fields** list (Text, Email, Phone, Text Area, Number, Date, Rating and Dropdown); Radio and Checkbox fields are added by the Assistant or through the API.

| Field Type | Description | Best For |
|------------|-------------|----------|
| **Text** | Single-line text input | Names, short answers, custom identifiers |
| **Email** | Email input with format validation | Lead capture, newsletter signups, contact forms |
| **Phone** | Phone number input | Sales leads, appointment booking, call-backs |
| **Text Area** | Multi-line text input | Feedback, comments, detailed responses |
| **Radio** | Single selection from visible options | Yes/no questions, small option sets (2-4 choices) |
| **Checkbox** | Multiple selection from options | Preferences, multi-select surveys, consent checkboxes |
| **Dropdown** | Single selection from a list | Larger option sets, category selection, qualifying questions |
| **Number** | Numeric input only | Quantities, ages, scores, budget ranges |
| **Date** | Date picker interface | Appointments, birthdays, event registration |
| **Rating** | Rating scale | NPS surveys, satisfaction scores, product reviews |

## Other journeys you can build

### Email collection before content access

**Scenario**: You have exclusive content (PDF, video, discount code) and want to build your email list.

**Journey flow**:
1. Scan QR code
2. Form: Email address (required), Name (optional)
3. Redirect to exclusive content

**Form configuration**:
- Title: "Get Instant Access"
- Description: "Enter your email to unlock exclusive content"
- Submit button: "Access Now"

The step-by-step version for a booth or a flyer is [how to add a lead capture form to a QR code](https://linkbreakers.com/help/article/how-to-add-a-lead-capture-form-to-a-qr-code).

### NPS rating after purchase

**Scenario**: Collect customer satisfaction scores at the point of experience.

**Journey flow**:
1. Scan QR code (on receipt, packaging, or table tent)
2. Form: Rating 0-10 (required), "What could we improve?" text area (optional)
3. A Visitor Data condition on the score: high scores to your review or referral page, low scores to a private follow-up form

**Form configuration**:
- Title: "How Did We Do?"
- Description: "Rate your experience from 0-10"
- Submit button: "Submit Feedback"

It is the same branching as the coffee bag, on a number instead of a yes or no. The full build, with the Rating Form's `rating` key, the rule order and the review platforms' rules, is [how to route visitors based on NPS scores](https://linkbreakers.com/help/article/how-to-route-visitors-based-on-nps-scores).

### Event registration

**Scenario**: Register attendees and collect preferences before an event.

**Journey flow**:
1. Scan QR code on event invitation
2. Form: Name (required), Email (required), Dietary preferences (checkbox), Session preference (dropdown)
3. Redirect to event details or calendar invite

### Product survey with segmentation

**Scenario**: Gather product feedback and segment respondents for follow-up.

**Journey flow**:
1. Scan QR code on product packaging
2. Form: Which product did you purchase? (dropdown), Satisfaction rating (rating), Would you recommend us? (radio), Comments (text area)
3. A [visitor data condition](https://linkbreakers.com/help/article/how-to-use-visitor-data-conditions) that routes on the satisfaction score

## Advanced form options

### Skip functionality

Not every form needs to block the visitor. Tick **Allow visitors to skip this form** to add a skip button that continues to the next step. This is ideal when:

- Information is helpful but not essential
- You want to reduce friction for privacy-conscious visitors
- The form is optional feedback rather than required registration

You can set the skip button's text. In a branching journey, a skipped form saves nothing, so a condition after it sends the visitor to **Other Visitors** unless an earlier answer is on file.

### Auto-skip for returning visitors

**Automatically skip if data is known** is on by default: when the visitor already has the required data on file, the [form step](/workflow-steps/form) is skipped. Returning visitors go straight on, while new ones still see the form. On the coffee bag, a café whose answers to the wholesale form's required fields are on file is not asked them again on its next scan.

### System field mapping

Map form fields to visitor profile attributes using system keys:

- `$email`: email address
- `$phone`: phone number
- `$firstName`: first name
- `$lastName`: last name

When visitors submit data to these fields, their profile is updated, so they are recognised across your QR codes. Answers saved under any other key become custom attributes, listed under **Custom Attributes** on the visitor's page in Visitors.

## Combining forms with other workflow steps

### Password + Form

Protect content with a password, then collect registration information:

1. QR Code Scan
2. Password step
3. Form step (email, name)
4. Redirect to protected content

### Form + condition on something other than an answer

A condition does not have to read a form. Country, language, device, time and new or returning visitor conditions work between forms the same way, for example a second form in the visitor's language.

### Multi-form progressive profiling

Collect information gradually across multiple interactions:

1. First scan: Email only
2. Second scan: Auto-skip email, collect preferences
3. Third scan: Auto-skip known data, collect detailed feedback

## Best practices for customer journey forms

### Ask the sorting question first

The first question decides which form comes next, so it goes at the top of the first form, as a choice. In Focused, a choice that is not the last question moves on by itself.

### Keep each form short

Ask only for what you need at this step. Splitting questions across forms behind a condition means each visitor only answers the ones that apply to them.

### Provide value

Explain why you're asking for information and what the visitor gets in return, in the form's title and description.

### Use clear keys and appropriate field types

Choose keys you will recognise later (`cafe_name`, not `field1`): conditions, Visitors and webhooks all use them. Dropdown and Radio fields give you consistent answers you can route and filter on; Number and Rating fields give you numbers you can compare.

### Make critical fields required, the rest optional

Mark only essential fields as required. An email-only submission is better than an abandoned form.

### Test on a phone

Most QR code scans happen on phones. Use the page theme editor's phone preview, then scan the code yourself and take both branches.

## Managing form data via API

For teams managing workflows programmatically, you can create form steps, conditions and page themes, and read visitors and their answers, through the [Linkbreakers API](https://docs.linkbreakers.com/), the MCP server, the SDKs or the Assistant. The page theme's visitor experience is the `visitor_experience` field. A [webhook](https://linkbreakers.com/help/article/how-do-webhooks-work-in-linkbreakers) pushes each form submission, with its answers, to your endpoint as it happens.

This enables:

- Bulk creation of form-based workflows
- Field configuration based on campaign parameters
- Sending each submission to your CRM or data warehouse, directly or through Zapier, Make or n8n

## Frequently Asked Questions

### Can I build a multi-step form behind one QR code?

Yes. Chain several form steps in the link's workflow. Each one shows on its own page, in the link's page theme, and the next one swaps in without a reload.

### How do I show some questions only to some people?

Put those questions in a second form, behind a Visitor Data condition on an earlier answer. Fields inside a single form do not show or hide based on other answers; the branching happens between forms.

### Can I ask one question at a time, like Typeform?

Yes. Choose **Focused** in the **Visitor experience** panel of the link's page theme. It applies to every form on the link. Choice and rating questions move on by themselves, except on a form's last question, where the visitor presses the button.

### Can one form be Focused and another Classic?

Not on the same link. The visitor experience belongs to the link's page theme. Two links can use different experiences.

### What happens if a visitor stops after the first form?

The first form's answers are already on their profile, with the name and email. They do not reach the next step, and the scan is still recorded.

### Does the visitor see a page reload between forms?

No. Pages of the same link swap in place, and the back button returns to the previous page. A redirect to another site or another link does load a new page.

### Can I edit form fields after the workflow is live?

Yes. Changes to form fields take effect immediately. The QR code itself never changes, only the workflow logic does.

### How do I export form submissions?

Every submitter is listed in **Visitors**, where **Export CSV** downloads the list (following any filter you set) with names, emails and a column for each custom attribute, such as `cafe` or `kg_per_week`. You can also read answers on each visitor's page, through the API, or by webhook.

### Are forms compliant with GDPR and privacy regulations?

Linkbreakers provides tools for data management, but compliance is your responsibility. Include appropriate consent language, link to your privacy policy, and only collect data you have a legitimate basis to process.

### How do I track form performance?

Live Events shows each scan and fills in the visitor's email when the form is submitted. The step funnel (through the Assistant or `POST /v1/analytics/funnel`) shows how many visits reached each form and how many went past it. Field-level abandonment is not reported.

## One coffee bag, two jobs

Back to the roaster. One QR code on the bag now does two jobs. A home brewer answers No, leaves a name and an email, and is done in seconds. A café answers Yes and, on the same page in the same look, tells you its name, its city and how many kilos of coffee it goes through a week, and your wholesale team finds all of it on one visitor profile, ready for a call. Nobody leaves your page to fill in a form on another site, and you print one code.

Open any link in your [Linkbreakers dashboard](https://app.linkbreakers.com/workspace/dashboard/links) to build it, or start from the Assistant prompt above. Next, set up the branch rules with [visitor data conditions](https://linkbreakers.com/help/article/how-to-use-visitor-data-conditions) and the look with [what's a page theme](https://linkbreakers.com/help/article/whats-a-page-theme).

## Sources

- Steps, labels and the visitor pages checked in the Linkbreakers app on 2026-11-08: the workflow canvas, the Visitor Data condition, Manage Fields, Thank You Page, Custom Attributes in Visitors and the page theme's Visitor experience panel.
- Focused behaviour on a form's last question: checked in the visitor pages' code on 2026-11-08.
- Release notes: [Focused forms and a live page theme preview](https://linkbreakers.com/help/article/focused-forms-and-a-live-page-theme-preview).
- Attributes in the visitors CSV export: checked live on 2026-11-07.
- Plans and what each includes: [linkbreakers.com/pricing](https://linkbreakers.com/pricing).

## Last reviewed

2026-11-08 by Laurent Schaffner.
