Rentalbuddy

Promo codes: create discount codes, limit them and see who used them

14 min read

Promo codes are discount codes your customers type in themselves when they book — in the booking widget the field is called Campaign code. You create them under Promo codes in the left menu.

Three things are worth knowing before you start, because they surprise operators:

  • You do not need to create anything in Stripe. When you save a code, Rentalbuddy creates it in your connected Stripe account for you — both the discount (Stripe calls it a coupon) and the code customers type (a promotion code). Older advice saying "the code must also be added in Stripe" is out of date.
  • Promo codes need Stripe to be connected. The codes live in your Stripe account. Without a working Stripe connection the Promo codes list stays empty, creating a code fails with Couldn't create promo code, and customers get The campaign code is not valid for every code. Connecting Stripe is covered in the Stripe guide.
  • A code works across all your locations. A code is not tied to one location or one product. Anyone booking anywhere on your account can use it.

Create a discount code

  1. Open Promo codes in the menu and press Create promo code.
  2. Under Information, leave Type as it is — Promo Code is the only type you can create.
  3. Fill in Code. This is what the customer types at checkout: "Must be unique across all your locations. Customers will enter this code at checkout."
  4. Choose a Discount type:
    • Percentage — a percentage off the whole order. Fill in Percent (1 to 100).
    • Fixed amount — a set sum off the whole order, in your account currency. Fill in Discount amount. The discount never makes an order go below zero.
  5. Under Rules, set Valid until (a date and a time) if the code should stop working. Leave it empty and it never expires — "Leave empty for no expiration date."
  6. Set Max usage total if the code may only be used a limited number of times. Leave it empty for unlimited — "Leave empty for unlimited uses."; the field shows Unlimited until you type something.
  7. Leave Status of the code switched to Active.
  8. Press Save. You get Created! and the code shows in the Promo codes list.

Whichever discount type you pick, the discount applies to the whole order, not to a single product. There is no way to say "20 % off helmets only" or "only for the 2-hour price".

Writing the code itself

Keep it simple: plain letters A–Z and digits, no spaces, no punctuation. Codes with Swedish or other accented characters (å, ä, ö) fail, and the message you get is the unhelpful Couldn't create promo code — it does not say which field was the problem. If saving fails and every field looks filled in, retype the code with plain letters and numbers and try again.

If the code already exists you get a clear message on the field: This promo code already exists. Please choose a different code. Codes must be unique across your whole account, including codes you deactivated earlier.

Messages you may see while filling in the form

  • Enter a code — the Code field is empty.
  • Select a discount type — no Discount type chosen.
  • Enter a percentage from 1 to 100 — the Percent value is outside that range.
  • Enter an amount greater than 0 — the Discount amount is zero or blank.
  • Please fill out a discount — no discount value at all.
  • "Bookings that end up below … after the discount cannot be paid online. Use 100% if the booking should be free." — an information note while Percent is 90 or more but below 100. A cheap booking can then cost less than Stripe's smallest online payment for your currency (for example 3 SEK or 0.50 EUR), and such a total can't be paid. For free bookings use exactly 100. When you open an existing code with such a percentage, it says "Bookings that end up below … after this discount cannot be paid online." The note doesn't appear when Disable Stripe Payments is on.

Codes made directly in Stripe

A promotion code you create yourself in the Stripe dashboard also shows up in the Promo codes list and works at checkout, because checkout looks codes up in Stripe. A Stripe coupon without a promotion code is not something customers can type, so it does nothing in your widget. The simplest rule: create codes in Rentalbuddy.

What "Valid until" actually means

This is the single most misread setting.

Valid until is about when the customer books, not when they rent. It is the last moment the code can be entered at checkout. A customer booking on the last valid day can still book a rental that takes place months later — the rental dates don't matter to the code.

So a code with Valid until set to 30 June:

  • Booking made 29 June for a rental in August — the code works.
  • Booking made 1 July for a rental tomorrow — the code does not work.

There is no "valid from" date. A code starts working the moment you save it. If a campaign should start later, create the code later, or create it and switch Status of the code to Inactive until the campaign starts.

Usage limits

Max usage total is a total across all customers, not per customer. Set it to 50 and the code stops working after it has been used 50 times, whoever used it. Leave it empty and it can be used any number of times.

There is no per-customer limit, no per-day limit and no minimum order value in the form. If you need a code that only one person can use, make a unique code for that person with Max usage total set to 1.

After you save — what you can and cannot change

Open a code from the list (the settings icon in Actions) to see two tabs: Settings and Usage.

On Settings, almost everything is locked. Type, Code, Discount type, the Discount, Valid until and Max usage total are fixed at creation and greyed out. The one thing you can change is Status of the code, between Active and Inactive; press Save and you get Updated!

That means:

  • To stop a code immediately, open it, switch Status of the code to Inactive and press Save. It stops working for customers at once.
  • To change a discount, an expiry or a limit, you can't. Deactivate the old code and create a new one with a new name.
  • There is no delete. Codes stay in the list; use the filter to hide the ones you are done with.

A code whose Valid until has passed can't be switched back on, and expired codes can no longer be opened from the list. Opening codes also needs a role that may change promo codes; users who can only view see the list but not the code's own page.

Find codes in the Promo codes list

Search with Search by code. Next to it is Filters:

  • Active and inactive — the default. Everything except expired codes.
  • Active — codes that are switched on.
  • Inactive — codes switched off that are not expired.
  • Expired — codes that are switched off and either past their Valid until or used up.
  • Show all — everything.

The columns are Type, Code, Discount, Times used, Validity Period, Status and Actions. Validity Period shows when the code was created, then either the expiry date and how many days that is, or Ongoing if there is no expiry. Status is an icon: a green tick for a code that can be used right now, grey otherwise. Discount shows a percentage or an amount (amounts also show correctly in currencies without decimals, such as JPY); Value missing means the code has no discount attached and does nothing.

In Actions, Copy promo code text copies the code to your clipboard ("Promo code text copied") — handy when pasting it into a newsletter.

Very large accounts: the list loads your most recent codes rather than an unlimited history, so search for a specific code instead of scrolling if you have created hundreds.

See who used a code (Usage tab)

Open a code and switch to Usage. Under Promo code usage you get three figures:

  • Orders with this code — orders in Rentalbuddy that used the code, across all locations on your account.
  • Uses in Stripe — Stripe's own redemption count.
  • Total discount — the money given away in total.

The two counts can differ, and that is expected: "Orders across all locations on your account that used this promo code. The Stripe count may differ — for example if a checkout was cancelled, changed in admin, or recorded differently in Stripe."

Below is the list of orders, with Created, Name, Order No, Start, Value, Discount, Payment Status, Status, Channel and Location. Click a row to open that booking. Two switches change what you see:

  • Include canceled bookings — off by default, so cancelled bookings are hidden.
  • Show current location only — narrows the list to the location you are working in, with a caption such as "Showing 3 of 10 orders at the selected location."

If nobody has used the code yet: No bookings have used this promo code yet.

What the customer sees in the booking widget

In the checkout step the customer types the code in the Campaign code field and presses Validate. A valid code shows as a chip such as SPRING25 - 25% discount (or SPRING25 - 100 kr discount for a fixed amount) with Remove code next to it, and the price summary gets a Promo code SPRING25 line. If the code is wrong, expired, switched off or used up — or Stripe is not connected — they get The campaign code is not valid, the same message in every case.

Worth knowing:

  • Members and promo codes stack. If the customer is a member, the member discount is taken first and the code applies to the reduced price: a 10 % membership plus a 10 % code on 1000 gives 810, not 800. See the memberships guide.
  • Codes also work on membership purchases, since buying a membership goes through the same checkout.
  • Events: the event checkout only calculates percentage codes, so use Percentage codes for events.
  • Almost free is not free. If a code leaves a total above 0 but below Stripe's smallest online payment for your currency (a 95 % code or a large Fixed amount on a cheap booking), the checkout says "This amount is too small to pay online. The smallest amount that can be paid online is …" and the customer can't continue. A total of exactly 0 always goes through.
  • A code can't be added to a booking afterwards.

On the booking in admin, an applied code shows in the price summary as Promo code followed by the code and the discount in brackets, for example Promo code SPRING25 (25%).

The code shows as active but doesn't work at checkout

Checkout checks the code against Stripe, not against the list on the Promo codes page, so a code can look fine in admin and still be refused. The customer always gets the same The campaign code is not valid, so their report won't tell you which of these it is. Work through them in order:

  1. Status of the code. Open the code and check that it says Active. Switching it takes effect immediately.
  2. Valid until. It is the last moment the code can be entered, not the rental date — see What "Valid until" actually means.
  3. The usage limit. A code with Max usage total 1 that someone already used is finished, even though it may still look active. On Usage, compare Uses in Stripe with your Max usage total — Stripe's count is the one that decides at checkout, and it can be ahead of Orders with this code.
  4. Exactly what the customer typed. The widget sends the text as typed, so a space before or after the code makes it fail. Ask them to retype it; codes in plain letters and digits leave the least room for mistakes.
  5. Your Stripe connection. If Stripe is not connected, every code is refused. Check the Stripe guide.

If all of that checks out, enter the code yourself in your own booking widget — it runs exactly the same check as the customer's browser and tells you whether the problem is the code or something on their side.

Make a free test booking with a 100% promo code

For a plain test of a rental booking, the easiest way is Make a test booking in the location page's top bar, next to Save (it is there on every tab of the location): free (or with a small payment that is refunded), marked as a test, kept out of your dashboard figures and cancelled automatically (see the setup checklist guide). Test bookings made that way don't take promo codes and cover rentals only — a test visit of your booking page hides events, gift cards and memberships — so use a 100% code when you want to test the checkout with a code, test an event, or keep the booking:

  1. Create a promo code with Discount type Percentage and Percent 100. Use exactly 100: a 95 % code on a cheap booking can leave an amount too small to pay online.
  2. Give it a code nobody will guess, and set Max usage total to a small number such as 1 or 2.
  3. Make a real booking in your own booking widget and enter the code.

With a zero total, checkout goes through without charging a card. You get the confirmation email, the PIN code and the lock behaviour — everything a real customer gets, with no money moving and nothing to refund. What to check during a test booking before going live is in the setup checklist guide.

Afterwards, open the code and set Status of the code to Inactive so nobody stumbles onto it. Do this even if you set a usage limit — don't rely on Max usage total alone to close a free code; check Uses in Stripe on its Usage tab after testing.

Gift cards and punch tickets

You may see the words Gift Cards and Punch Ticket in places. Neither can be created — Promo Code is the only type the form offers, and there are no punch cards, credit packs or stored-value gift cards. If you want something gift-card-like, the usual workaround is a single-use promo code with a Fixed amount discount and a Max usage total of 1, with payment for it taken separately.

Common questions

Do I have to create the code in Stripe too? No. Create it under Promo codes in Rentalbuddy and it is created in your Stripe account automatically — which is why you may also see it listed in Stripe.

The customer says the discount didn't follow through to the payment page / the code is not valid. Check, in order: Status of the code, Valid until, whether Max usage total is used up, a stray space in what they typed, and that Stripe is connected. Then try the code yourself in your widget.

Can I edit a code, for example change the percentage or the end date? No — only Status of the code can change after saving. Set the old code to Inactive and create a new one.

Can a code be valid for just one location, one product or one price tier? No. A code works at every location on your account and always applies to the whole order. Hand the code only to that location's customers, and use Show current location only on the Usage tab to see where it was used.

Why can't I save my code — "Couldn't create promo code"? Most often the code contains å, ä, ö, a space or punctuation — use plain letters and digits. It also fails if Stripe isn't connected.

Can I give an amount off instead of a percentage? Yes — choose Fixed amount as Discount type and fill in Discount amount in your account currency.

A promo code from last year has disappeared from the list. Expired and used-up codes are hidden by the default filter. Choose Expired or Show all under Filters, or search for it with Search by code.

How do I test a booking without paying? Use Make a test booking in the location page's top bar, next to Save. To test with a code or test an event, create a 100 % promo code, book in your own widget with it, and switch the code to Inactive afterwards.

Can we offer gift cards or vouchers? Not as a built-in feature. The usual workaround is a single-use code: Fixed amount, Max usage total 1, with payment for it taken separately.

A customer with a 95 % code says the checkout won't let them pay. The total after the discount is above 0 but below Stripe's smallest online payment. Give them a 100 % code if the booking should be free.

The Make a test booking button is greyed out. The location can't take bookings yet ("This location can't take bookings yet. Finish the steps in the list below first."), or the tab you are on has unsaved changes ("Save your changes first. A test booking uses what's saved."). Finish the steps or press Save, then try again.

Can I use a promo code in a test booking? No — test bookings made with Make a test booking don't take promo codes. To test a code, book in your own booking widget with a 100 % code and switch it to Inactive afterwards.

Related guides