How can a loyalty tier describe its membership requirements?

The Citead team, updated

In short. Use hasTierRequirement to describe a loyalty tier's free, spending or fee-based joining condition.

Definition: hasTierRequirement is the property on MemberProgramTier that describes what a user must provide, spend or pay to join a loyalty tier. Google documents omitting the property when anyone can join the tier for free, and using a value that represents the requirement for a non-free tier.

Key facts

  • Google defines MemberProgramTier as the type used to define a tier under a MemberProgram. Google's loyalty program documentation says a loyalty program can have multiple tiers.
  • Schema.org defines hasTierRequirement as a joining requirement and lists a credit card, a periodic fee, or a minimum spending amount as examples. The property definition also says that a free tier can omit the property.
  • Schema.org describes MonetaryAmount as a monetary value or range. Its type definition includes an amount such as $50 USD as an example.
  • Google uses UnitPriceSpecification for the periodic fee a consumer pays for membership in a tier. The same Google documentation supplies the property example for that fee.
  • Schema.org describes UnitPriceSpecification as the price asked for a given offer by the respective organization or person. Its type definition provides the type's general meaning.

What does a free tier require?

Google places hasTierRequirement among the recommended MemberProgramTier properties. Its description says, “If not specified, anyone can join the tier for free.” A free registration therefore has no hasTierRequirement value in that tier object. For a non-free tier, the same description calls for a value of the type representing the requirement.

The Schema.org definition gives the same model in more general terms: the property is a requirement for a user to join a membership tier, and a free tier does not need the property. The distinction is represented by omission, so a free tier does not need an empty object or a zero-valued amount.

How should spending and fees be represented?

For a minimum spending threshold, Google's loyalty program documentation specifies MonetaryAmount. Its example uses value for the threshold and currency for the currency code:

"hasTierRequirement": {
  "@type": "MonetaryAmount",
  "value": 250,
  "currency": "USD"
}

Schema.org describes MonetaryAmount as a monetary value or range, and defines currency as the currency in which the monetary amount is expressed. A spending requirement therefore belongs in the monetary object, with the amount and currency represented as separate properties.

For a recurring membership fee, Google specifies UnitPriceSpecification. Its example describes a 12 month membership billed once a month at 9.99 euros:

"hasTierRequirement": {
  "@type": "UnitPriceSpecification",
  "price": 9.99,
  "priceCurrency": "EUR",
  "billingDuration": 12,
  "billingIncrement": 1,
  "unitCode": "MON"
}

The example uses price and priceCurrency for the fee, then uses billingDuration, billingIncrement and unitCode to describe the billing period. Schema.org defines UnitPriceSpecification as the price asked for a given offer.

Can a tier use another requirement?

Google lists CreditCard, MonetaryAmount, UnitPriceSpecification and Text as the possible values for hasTierRequirement. A credit-card value identifies the card a user needs to sign up for. A text value describes another joining condition. Google gives “Purchase a share in our coop and volunteer a minimum of 1 day a month to keep operating costs low.” as its text example.

The property belongs on each MemberProgramTier object. Google describes MemberProgramTier as a tier under a MemberProgram, and says a loyalty program must have at least one tier. A separate tier object can therefore carry its own free, spending, fee, card or text requirement.

How can the markup be checked?

Google says to validate the code with the Rich Results Test and fix critical errors. It also recommends deploying pages that contain the structured data and using URL Inspection to test how Google sees the page. The page should be accessible to Google and not blocked by a robots.txt file, a noindex tag or login requirements.

hasTierRequirement is recommended in Google's tier property table. The tier still needs the required properties documented for MemberProgramTier, including hasTierBenefit and name.

FAQ

How do you mark a tier that anyone can join for free?

Leave out hasTierRequirement from that MemberProgramTier object. Google describes an omitted value as allowing anyone to join the tier for free.

How do you mark a minimum spending condition?

Use a MonetaryAmount object under hasTierRequirement, with value and currency properties. Google's example uses 250 and USD.

How do you mark a recurring membership fee?

Use a UnitPriceSpecification object under hasTierRequirement, with the fee and billing properties documented in Google's example.

Sources

  1. Google Search Central, "Loyalty program (MemberProgram) structured data", 8 September 2026
  2. Schema.org, "hasTierRequirement", 16 September 2026
  3. Schema.org, "MonetaryAmount", 16 September 2026
  4. Schema.org, "UnitPriceSpecification", 16 September 2026

Check how a page reads to answer engines. Open the GEO score analyzer

Test a page and see what to fix first

The analysis usually takes less than 10 seconds and needs no account.

400,000+ pages scored in the public benchmark