Skip to Content
ReferenceProduct Variables

Product Variable Reference

Every product configured in a funnel exposes a set of computed properties derived from its store price data. These properties are available in Liquid templates, conditions, and dynamic properties.

Access Patterns

Products are accessed by name or via the special selected key:

{{ products.monthly.price }} {{ products.yearly.rawPrice }} {{ products.selected.period }}
  • products.{name}.{property} — Access a specific product by the name you assigned in funnel settings (e.g., monthly, yearly, lifetime).
  • products.selected.{property} — Access the currently selected product. Updates automatically when the visitor selects a different plan.

Product names are case-sensitive and must match exactly what you configured in the funnel’s product settings. Common convention is lowercase: monthly, yearly, weekly.

Property Reference

All product variables are read-only and computed from your payment provider’s price data.

Identity

PropertyTypeDescription
idstringUnique product entry UUID (internal to AppFunnel).
namestringProduct name as configured in funnel settings.
displayNamestringHuman-readable name from the payment provider (price name or product name).
indexnumberZero-based position of the product in the funnel’s product list.

Pricing

PropertyTypeDescription
pricestringFormatted price with currency symbol (e.g., $9.99).
rawPricenumberRaw numeric price without formatting (e.g., 9.99).
dailyPricestringFormatted price normalized to a daily rate (e.g., $0.33).
weeklyPricestringFormatted price normalized to a weekly rate (e.g., $2.31).
monthlyPricestringFormatted price normalized to a monthly rate (e.g., $9.99).
yearlyPricestringFormatted price normalized to a yearly rate (e.g., $119.88).

Normalized prices (daily, weekly, monthly, yearly) are calculated by dividing or multiplying the raw price based on the billing interval. For example, a $59.99/year plan has a monthlyPrice of $5.00 and a dailyPrice of $0.16.

Currency

PropertyTypeDescription
currencyCodestringISO 4217 currency code (e.g., USD, EUR, GBP).
currencySymbolstringCurrency symbol derived from the code (e.g., $, EUR, GBP).

Billing Period

PropertyTypeDescription
periodstringHuman-readable billing period noun (e.g., month, year, quarter, one-time).
periodlystringHuman-readable billing period adjective (e.g., monthly, yearly, quarterly, one-time).
periodDaysnumberBilling period length in days (e.g., 30 for monthly, 365 for yearly).
periodWeeksnumberBilling period length in weeks (e.g., 4 for monthly, 52 for yearly).
periodMonthsnumberBilling period length in months (e.g., 1 for monthly, 12 for yearly).

The period and periodly values handle common intervals with natural language:

IntervalCountperiodperiodly
day1daydaily
week1weekweekly
week22 weeksbiweekly
month1monthmonthly
month3quarterquarterly
month66 monthssemiannually
year1yearyearly
one_time-one-timeone-time

Trial

PropertyTypeDescription
hasTrialbooleanWhether this product has a trial period configured.
trialDaysnumberNumber of trial days (e.g., 7, 14). 0 if no trial.
paidTrialbooleanWhether the trial requires an upfront payment (has a trial price).
trialPricestringFormatted trial price with currency symbol (e.g., $0.99). $0.00 if free trial.
trialRawPricenumberRaw numeric trial price (e.g., 0.99). 0 if free trial.
trialDailyPricestringFormatted trial price normalized to a daily rate.
trialCurrencyCodestringTrial price currency code. Falls back to the main price currency.
trialCurrencySymbolstringTrial price currency symbol. Falls back to the main price currency symbol.
trialStorePriceIdstringInternal store price ID for the trial price. Empty if no paid trial.

Common Patterns

Pricing Display

{{ products.selected.price }}/{{ products.selected.period }}

Renders: $9.99/month

Price Comparison (Yearly Savings)

{{ products.monthly.rawPrice | times: 12 | minus: products.yearly.rawPrice | to_fixed: 2 }}

Renders the dollar amount saved by choosing yearly over monthly.

Trial Messaging

{% if products.selected.hasTrial %} Start your {{ products.selected.trialDays }}-day free trial, then {{ products.selected.price }}/{{ products.selected.period }} {% else %} {{ products.selected.price }}/{{ products.selected.period }} {% endif %}

Daily Price Breakdown

That's just {{ products.yearly.dailyPrice }}/day

See Liquid Templates for the full filter reference and more template examples.

Last updated on