Skip to main content
Variables let you capture and display user data throughout your funnel. When someone enters their name, selects their age group, or arrives with tracking parameters - variables store these values so you can use them anywhere.

How Variables Work

User provides input → Variable stores it → You display it anywhere Variables are like personalized placeholders. They get replaced with actual values when your funnel runs, creating unique experiences for each visitor.
Most common use: Showing users their own responses. “Thanks for your interest in the {{plan-type}} plan, {{name}}!” feels personal because it uses their actual selections.

Quick Example

Types of Variables

User Input Variables

Created automatically when users interact with input elements:
Element: Text Input with ID “email” or OAuth button Creates: {{email}} Contains: Whatever user typedExample: User types “john@example.com” → {{email}} displays “john@example.com”

URL Query Variables

Automatically captured from your funnel URL:
Available variables:
  • {{query.utm_campaign}} → “summer”
  • {{query.promo}} → “SAVE20”
Testing hack: Add ?title=New Headline Test to your URL and use {{query.title}} in your funnel to quickly test different headlines without editing.

System Variables

Built-in variables provided by FunnelFox: For understanding profiles vs sessions, go to Core Concepts. To match these IDs against webhook events, go to Matching user profiles.

Subscription Variables

Show details of the customer’s subscription, for example in cancellation funnels: Dates and the billing period follow the language of the funnel variation. The status variable shows a code, not a readable label: active, trialing, cancellation_scheduled, paused, expired, or not_found. Use it in custom code, not in text the customer sees.
If FunnelFox doesn’t find a subscription, these variables show empty text. Use the Subscription condition to show a fallback screen instead.

Using Variables

Text Elements & Lists

Type the variable name with double braces anywhere in your text:

Actions

Use variables in action parameters:

Plan Pickers

Use variables in Plan Picker title, badge, and price:

Buttons

Use variables in button labels:

Options

Use variables in option labels to personalize choices:

Timers

Use variables in timer button text to personalize urgency:

Processing Elements

Use variables as loader labels on processing elements:

Charts

Use variables in chart badges and axis labels:

Raw HTML

Use variables inside Raw HTML elements:

Screen Header Title

Use variables in the screen header title to personalize navigation:

Variable Rules

Naming Requirements

✅ Allowed:
  • Letters and numbers: name, email2, step1
  • Hyphens and underscores: first-name, user_age
  • URL-friendly characters only
❌ Not allowed:
  • Spaces: user name won’t work
  • Special characters: email@address won’t work
  • Unicode: 用户名 won’t work
  • Reserved prefixes: user, query, inputs, source_subscription

Case Sensitivity

Variables are case-sensitive:
  • {{name}} ≠ {{Name}} ≠ {{NAME}}
  • Be consistent with your element IDs

Missing Variables

When a variable doesn’t exist:
  • The literal text {{variable-name}} displays
  • Analytics logs a variable_not_found event
  • User sees the brackets and all
Exception: subscription variables show empty text instead of {{variable-name}}.
Always test your funnel flow to ensure variables are collected before they’re used. You can’t display {{email}} before the user provides it.

Common Patterns

Personalized Feedback

Show users how they compare to others like them:

Progressive Profiling

Build understanding across screens:
  1. Screen 1: Collect {{industry}}
  2. Screen 2: “As someone in {{industry}}, you’ll appreciate…”
  3. Screen 3: Collect {{company-size}}
  4. Screen 4: “{{industry}} companies with {{company-size}} employees typically…”

Campaign Tracking

Maintain attribution throughout the funnel:

Dynamic Testimonials

Match testimonials to user context:

Relationship with Dynamic Actions

Variables and dynamic action states are closely related:
  • Variables: Display data as text ({{age-group}} shows “25-34”)
  • States: Control flow logic (if age-group = “25-34”, navigate to screen X)
Both use the same underlying data - user inputs create both a displayable variable and a state for dynamic actions.
Key difference: Variables are for showing content, states are for controlling behavior. Same data, different purposes.

Limitations

No Transformations

Variables display exactly as stored:
  • Can’t uppercase/lowercase
  • Can’t truncate or substring
  • Can’t format numbers
  • Can’t calculate with them
Need transformations? Use custom JavaScript.

No Default Values

Variables don’t support fallbacks:
  • Can’t do {{name|"Friend"}}
  • Empty variables show as {{name}} (subscription variables show empty text)
  • No conditional display
Need defaults? Collect the data earlier or use custom code.

Session Scope

Variables are bound to one session:
  • Persist throughout the funnel visit
  • Lost when session ends
  • Can’t pass between different funnels
  • Restored if same session continues in new tab

Best Practices

Name Meaningfully

Use clear, descriptive IDs:
  • ✅ first-name, plan-type, budget-range
  • ❌ input1, field2, var3

Test Your Flow

Always preview with test data:
  1. Add test parameters to URL: ?name=Test&plan=Premium
  2. Go through entire funnel
  3. Verify all variables display correctly
  4. Check what happens with missing data

Examples

Personalized Pricing Page

Quiz Funnel Personalization

Multi-Step Form

Troubleshooting

The variable doesn’t exist yet. Check:
  • Element ID matches exactly (case-sensitive)
  • User has actually provided input before you use it
  • Query parameter exists in URL
  • No typos in variable name
Variables must be URL-friendly:
  • Remove spaces (use hyphens or underscores)
  • Remove special characters
  • Use only letters, numbers, hyphens, underscores
These are reserved prefixes:
  • user (for system variables)
  • query (for URL parameters)
  • inputs (for user inputs)
  • source_subscription (for subscription details)
Choose different names for your elements.

Next Steps