Mountify Help
BG → mountify.eu
Loyalty

Promo codes

A code at checkout that grants a percent or flat discount — for campaigns and influencers.

10 min read Updated 2026-07-26

A promo code is the most familiar discount there is: the client types a short word at payment and the price drops. In Mountify this is not a separate feature — it is a loyalty rule whose condition is Promo code. This article walks the whole life of a code: where it is created, the rules governing the code text itself, what it looks like to the client, the error messages they can hit, and how to tell whether the campaign is working.

Promo codes require the Growth plan or higher. On Start the Loyalty page opens and reads fine, but saving a new rule is refused. You also need the manage_loyalty permission.


1. Creating a code — step by step

  1. In the left icon rail open the boards product and pick the board you are running the campaign for. Codes belong to the board — if you run two venues as two boards, a code from one does not work in the other.
  2. In the board column click the Setup hub.
  3. In the Salon operations group choose the Loyalty row.
  4. Top right, press New rule.
  5. On the Pick a template page choose the Promo code card and press Use this template.
"Pick a template": the Promo code card is the first of the three
"Pick a template": the Promo code card is the first of the three

The wizard opens pre-filled: −10 % discount, order 50, an empty code field.

The fields you must fill in

CardFieldWhat to put in it
MetaInternal nameA name for your team, e.g. “Summer Instagram campaign”. The client never sees it
MetaCustomer-facing descriptionThe short line the client sees at payment and in emails, e.g. “Summer discount”
MetaOrder0–100. Decides who wins a clash with another rule. Defaults to 50
WhenPromo codeThe code itself — see §2
RewardPercent off or Flat amountHow much the price drops

The other two cards — Who qualifies and Advanced — are optional and are covered in §4 and §5.

  1. Press Save rule. “Rule saved” appears and you return to the list.

The new rule is Active immediately. There is no separate “publish” button — once it is active, the code works.


2. The rules governing the code text

The Promo code field is strict, and it is worth knowing the limits up front so you don’t invent a code that can’t be saved.

RuleValue
Allowed charactersLatin letters A–Z and digits 0–9 only
Length2 to 32 characters
CaseDoesn’t matter — Mountify upper-cases it
Spaces, hyphens, dotsnot allowed
Cyrillicimpossible

The hint under the field says exactly this: “Case-insensitive — we’ll upper-case it for the customer. Allowed: A–Z and 0–9, 2–32 characters.”

Errors you can see while typing:

MessageCause
Enter a promo code.The field is empty
Code must be at least 2 characters.Too short
Code can be at most 32 characters.Too long
Only letters A–Z and digits 0–9 are allowed.There’s a space, hyphen or non-Latin character

And one error that comes back from the server on save:

Another active rule already uses this promo code. Pick a different code or archive the other rule first.

Meaning: two active codes with the same text cannot coexist on one board. To reuse an old code, archive the old rule first (⋯ → Archive), then create the new one.

Practical advice for picking a code

  • Write it the way you want the client to see it — SUMMER20, not summer-20.
  • Avoid characters people mistype: 0 and O, 1 and I.
  • Keep it short. Six to eight characters is easy to type on a phone.
  • If you hand a code to an influencer, put their name in it (MARIA15) — later you can see which channel brought what.

3. What the client sees

The code is entered only on the public booking page, on the payment screen.

  1. The client reaches the last step and sees an I have a promo code row.
  2. They tap it — a field labelled Promo code appears with an Apply button.
  3. They type the code and press Apply.
  4. If the code is valid for that booking, the row turns into a confirmation (e.g. “Promo WELCOME (−10%) ✓”) and a Loyalty savings (est.) line appears in the price breakdown.
  5. There is also a Remove promo code button if they change their mind.

If you set a Discount ceiling, an extra line appears under the field: “Maximum discount with this code: …”.

There is nowhere to enter a promo code on a booking made by your team. Neither admin booking form has a code field. To give a discount to a client booked over the phone, do it from the client card: Clients → the client → the “Loyalty” tab → Apply rule manually. There you pick the booking, the rule and the discount amount, and write a note saying why.

The error messages the client sees

This is the table you will want when a client calls and says “the code doesn’t work”:

Message the client seesWhat it means on your side
Invalid promo code.No such active code — a typo, or the rule is archived
This code doesn’t apply to your account.In Who qualifies → Which customers you picked “First-time” or “Returning” and the client is in the other group
This code has reached its usage limit.Max uses per customer or Total budget · uses is exhausted
This code has expired.Today’s date is outside Valid from / Valid until
This code doesn’t apply to the selected service.That service isn’t in Applies to services
Your order doesn’t reach the minimum for this code.The amount is below Minimum spend
Sign in to use this code.The code has a per-customer cap and the client is a guest — see §6
This booking is paid with a package, so promo codes don’t apply.The booking is being paid with package credit
This code couldn’t be applied.The generic case — usually a combination of the above

4. Narrowing: the “Who qualifies” card

Five fields define the scope of the campaign. Every empty field means “no restriction”.

FieldEmpty meansWhen to use it
Which customersAnyone”First-time” = a code for newcomers only; “Returning” = for regulars only
Applies to servicesall servicesWhen you’re promoting one service. Switch All services to Specific services and pick from the list
Valid fromno startA campaign that starts later. A code entered earlier is refused
Valid untilruns foreverThe campaign’s end date. Bookings up to and including that date get the discount
Minimum spendno minimum”−10 on orders over 60.” Measured on the service plus add-ons

Dates are compared against the booking’s start time, not the moment the code is typed. So a code with Valid until 31 August applies to an appointment scheduled for 31 August even if the client books it on 20 August.


5. Caps: the “Advanced” card

FieldEmpty meansWhat it’s for
Combine with other rulesoffSee Stacking & budgets
Max uses per customerunlimited”Once per person”. Promo codes only
Total budget · usesunlimited”The first 100 people”. Counted workspace-wide
Discount ceilingno ceiling”−50 %, but never more than 20”
Total budget · moneyunlimited”Give away 500 in discounts, then stop”

Three things that surprise people:

  1. Cancelled bookings still count against the caps. If a client books, cancels and books again, a code capped at 1 is already spent. This is deliberate anti-abuse behaviour.
  2. Total budget · money stops the rule silently. The client just sees “Invalid promo code.” If your campaign suddenly “stops working”, check this field.
  3. To restore the cap for one specific client, use Clients → the client → the “Loyalty” tab → Eligibility overrides → Add override → Skip cap once.

6. The hidden identity requirement

If you fill in Max uses per customer, the code automatically starts requiring a verified identity. The logic is simple: without it a client could come back with a fresh email every time and “once per person” would mean nothing.

Verified identity means one of two things:

  • the client is signed in on the public page; or
  • the client confirmed an earlier booking through the link in the email (which proves the address is theirs).

A guest with neither gets “Sign in to use this code.”

If you want the code to work for fully anonymous guests — leave “Max uses per customer” empty and cap the campaign with Total budget · uses instead.


7. Telling whether the campaign works

Above the Loyalty list is a strip of four numbers: Active rules, Applications · 30d, Discount given · 30d, Avg. spend lift.

In the table itself each row shows Uses (how many times the code fired) and Discount (how much money it gave away). Open the row and you get a detailed list of every application.

The Loyalty list: the Uses and Discount columns show each code's result
The Loyalty list: the Uses and Discount columns show each code's result

8. Pausing and deleting a code

From the ⋯ menu on the row:

ActionWhat it does
ArchiveThe code stops working immediately. The rule stays under the Archived tab, history is kept, and the code text is freed for reuse
ActivatePuts an archived rule back to work
DeleteRemoves the rule permanently. The dialog warns: “This rule will be removed permanently. Usage history stays in analytics.”

For a seasonal campaign prefer Archive over Delete — that way you can compare campaigns against each other later.


9. If something isn’t working

SymptomCheck
The client sees “Invalid promo code.”Is the rule Active? Does the code match exactly? Is Total budget · money exhausted?
The code won’t saveIs another active rule using the same code? Are you on Growth?
The discount is smaller than expectedThe discount is computed without add-ons. Also check Discount ceiling
The code works but doesn’t add to another discountThat is the normal behaviour. See Stacking & budgets
The code field is nowhere on the pageThe I have a promo code row is on the payment screen, not earlier. It is hidden when paying with a package
The Loyalty row shows a locked screenYou don’t have the manage_loyalty permission — ask the owner

What’s next