Overview
Documentation

Foxlendar guide

Turn your Shopify store into a booking engine for rooms, villas, apartments and rentals. No code, no separate payment provider.

Overview

Foxlendar adds date-based bookings to Shopify. Guests pick dates on your product page and pay through normal Shopify Checkout. You manage everything from the app dashboard.

What you sellHow it works
Rooms, villas, apartmentsEach is an "accommodation" linked to a Shopify product.
Nightly staysGuests pick check-in/check-out. Price is calculated per night.
Add-onsOptional services like breakfast, cleaning or airport pickup.
Across channelsiCal sync with Airbnb, Vrbo and other channels that accept a feed Premium.

Prices and dates are locked server-side on a Shopify draft order. Guests cannot change them at checkout. Bookings stay in sync when an order is paid, cancelled or refunded.

The admin and the storefront are translated into 10 languages: English, Danish, German, Spanish, French, Italian, Dutch, Portuguese, Swedish and Hungarian. Both follow your store language, so there is nothing to pick.

Core concepts

The words the app uses, in the order you meet them.

Accommodation

A bookable type, like "Deluxe Double" or "Ocean Villa". Holds capacity, amenities and the link to a Shopify product.

Unit

A physical instance. "Apartment A1" and "A2" are two units of one accommodation, so two guests can hold the same dates.

Shopify product mapping

The product the guest actually buys. Name, description and images come from it, so nothing drifts out of sync.

Price calendar

Where nightly amounts live, and the one place that shows why a night costs what it costs.

Rate plan

What a price means: how much is taken at checkout, and what you promise if the guest cancels. Not the amount.

Rate

One row of money for one accommodation: the nightly price, the guests it covers, the stay lengths it is allowed on.

Season, also called a holiday or period

A named date range with its own prices. You create one under Holidays & special periods; “Season” is the word you then see when picking it on a rate, scoping a booking rule, or reading a calendar cell. Two names, one thing. A monthly price is a season too, kept below any you name yourself.

Deposit and balance

Take part of the stay at checkout and the rest at your desk. The remainder is the balance, and your desk marks it collected when it arrives.

Cancellation policy

Free cancellation with a cut-off, or non-refundable. The deposit is the cancellation fee, so there is no separate fee.

Guest type

Adults, children and an optional babies row, each with the ages it covers. Three counters on the booking form.

Service

An add-on such as breakfast, parking or city tax, with its own pricing model.

Booking rule

Stay length, allowed check-in days, advance windows, the gap you keep between stays. Shop-wide, or per room.

Closed dates

Nights you take off sale for maintenance or an owner stay. Dates imported from a connected channel show here too, and are read-only.

Request to book

The guest submits instead of paying. The room is held while you review, then you invoice.

Quote

A price you build and send as a payment link. It holds nothing until the guest pays.

Quick start

  1. Install from the Shopify App Store.
  2. Create an accommodation. Accommodations → Add. Set capacity, add at least one unit.
  3. Connect a Shopify product. In the accommodation editor, click Select product.
  4. Set a price. Rates → create a rate plan, add a base nightly rate. No rate? The product price is used as a fallback.
  5. Add storefront blocks. Getting started → Add Foxlendar blocks to your theme → add Accommodation page for a complete product page in one block, or just Reservation form to start. See Storefront blocks.
  6. Test. Book a stay end to end. The paid order appears as a confirmed booking.
TipOpen Getting started in the menu for a live checklist that tracks each step and links straight to it.

Plans & limits

FreeStandardPremiumBusiness
Accommodations1525Unlimited
Units per accommodation210UnlimitedUnlimited
Bookings per month15150750Unlimited
Days with their own price5UnlimitedUnlimitedUnlimited
Nightly rates, add-on servicesYesYesYesYes
Seasons, booking rules, discountsNoYesYesYes
Memberships, quotes, request to book, channel syncNoNoYesYes

Hitting a limit is explained where you hit it, with the upgrade beside it. Two of these behave more gently than a limit usually does.

  • Bookings per month is a soft cap. You are warned as you approach it and again when you pass it, and checkout is never blocked. A guest with a card out always gets through. It counts bookings you actually got, so a cancellation, a request still awaiting review, and a request you declined or let expire all cost you nothing. Strangers filling in your form cannot push you towards an upgrade.
  • Days with their own price counts the dates you treat as exceptions: nights you priced on their own, plus the dates covered by a holiday or special period that carries a price. It is a set, so two rules over 25 December spend one day, and a rule repeating every year spends its days once rather than once a year. Editing a day you already own is free.

Your monthly grid, your base rate and the weekend factor are free on every plan. They are the shape of your year rather than exceptions to it, and twelve month cells would swallow a small allowance on sight.

Moving to a smaller plan

Nothing is deleted, and coming back switches everything on exactly as you left it. The Moving to screen lists what stops before you confirm: accommodations past the new allowance come off sale, oldest kept first, and seasons, booking rules and discounts stop applying if the new plan does not include them.

TipTwo things keep running on purpose after a downgrade. Channel sync, because cutting an import sells a booked room twice. And request to book, because withdrawing it would start selling instantly to anyone on the rooms you chose to vet. You cannot switch either back on without the plan, but what you already set up survives.

Accommodations & units

Create an accommodation

  1. Accommodations → Add accommodation.
  2. Connect a Shopify product (see next section).
  3. Set capacity: max adults, children, and (if enabled) babies.
  4. Add at least one Active unit.
  5. Save.
SectionWhat it controls
Product mappingThe Shopify product the guest pays for.
StatusActive (bookable), Inactive, Maintenance, or Archived.
LocationA saved address for the map block and location search.
Details & amenitiesAttributes (size, beds, view) and amenity checkboxes.
Booking modeInstant checkout or Request to book. See Request to book.
ServicesWhich add-ons this room offers.
UnitsPhysical inventory, two units meaning two guests can hold the same dates. Each takes a Unit name, so use the number your staff actually say: “A1”, “Room 204”.
Good to knowA type with no active unit can never be booked. Set a unit to Maintenance to stop bookings without deleting its history.

Connecting Shopify products

  1. In the accommodation editor, under Product mapping, click Select product.
  2. Pick the product (its first variant is used).
  3. Save.

Name, description and images come from the product. Foxlendar never copies them, so nothing goes out of sync. Use Edit in Shopify on the mapping card to change them at the source.

Good to knowThe product must be Active, published, and not a gift card. If a product isn't bookable, guests see a clear message instead of a broken form.

Checkout thumbnail

"This is a physical product"Result at checkout
Off (recommended)Product image shows next to the booking.
OnShopify asks for shipping. Booking falls back to a plain line, no thumbnail.

Flip this from the accommodation editor. Foxlendar turns it off automatically the first time you connect a product.

Locations

A saved address you create once and reuse across accommodations. Powers the map block and the storefront location filter.

  1. Open Locations, then Add location.
  2. Fill in the address. Only City and Country are required.
  3. Open an accommodation, find the Location section, and pick it.
FieldMeaning
NameOptional short label such as “Beachfront villa”. Left blank, it is built from the address.
Address line 1Street address.
Address line 2Optional second line.
CityRequired.
Region / stateOptional.
Postal codeOptional.
CountryRequired.
Country codeTwo-letter ISO code, such as US or VN.
PhoneOptional. Shown on the booking, or kept for your own reference.
LatitudeOptional, and Longitude with it. Drops the map pin on the storefront. Enter both or leave both blank.
TipArchive location hides it from pickers and the storefront map without touching existing bookings, which keep their address.

The location filter appears once you have two or more accommodations with different locations. Skip this entirely if you don't need a map or location search.

Amenities & attributes

What it isHow to set it up
AmenitiesFacilities shown as icons: Wi-Fi, pool, parking.Open Amenities and add one with a label and a Default icon, or upload a Custom icon of your own. Then tick it per accommodation.
AttributesFacts like size, bed type, view.Open Attributes and add one with a type: Text, Number, Yes/No or Select. Tick Visible in details or Visible in highlights to choose where it shows, then fill in values per accommodation.

Both render through the Accommodation details block.

Letting guests filter by an attribute

Guests can narrow the search results by your own details — view, bed type, size, amenities. Two steps, in this order:

  1. Fill the detail in on your accommodations. Accommodations → open one → set the value. Reuse the same wording across rooms: the filter is built from the values actually in use, so "Garden" on four rooms is one choice, while four different spellings are four.
  2. Settings → Search filters. Tick what guests may filter by, then Save. Everything filterable is in that one list, including Amenities. Nothing is on until you tick it.

Done when: the row reads Ready in that list. The filter then appears above the search results, after a guest searches.

What each detail becomes

You do not choose the control. It follows from the detail, so a guest is never offered a combination no room can satisfy.

DetailControlExample
Amenities, or any detail a room holds several ofButtons, several at once. Narrows to rooms that have all of them.Wi-Fi + Pool
A detail a room holds one of (view, bed type, category)Buttons, one at a time. Picking another replaces it.Garden / City / Ocean
A small whole count (bedrooms, bathrooms)At-least thresholds.2+ / 3+
An amount (size, and anything measured)Min and max fields, bounded by what you actually have.1,200 – 2,400 sq ft
Yes/NoCannot be filtered. Still shows in the details block.—

For an amount, write the unit the same way on every accommodation ("1,200 sq ft", "120 m²"). Foxlendar reads the number, keeps your wording for the label, and understands both metric and imperial units.

If a row will not switch on

A greyed-out row says why. There are two reasons:

  • Fewer than two different values — every room matches already, so the filter would narrow nothing. Fill the detail in on more accommodations.
  • More than 12 different values — too many buttons to be a filter. Reuse wording where you can, or use numbers for anything measured.
TipChoosing values under two different filters narrows to rooms that match both. Capacity is already handled by the Guests field, so there is no need to make it an attribute.

Rate plans

A rate plan answers two questions about money: how much the guest pays now, and what you promise if they cancel. The nightly amounts live on the price calendar. The plan holds everything else.

One plan is enough for most properties. Add a second when you want to sell the same room two ways, the usual pair being a flexible rate and a cheaper non-refundable one. Give a room rates under two active plans and the booking form grows a selector so guests compare price against policy. One plan, no selector.

Create a plan

  1. Open Rates, then Rate plans, then New rate plan.
  2. Name it. Guests read this name, so “Flexible” beats “Plan 2”.
  3. Answer the two money questions below.
  4. Add nightly prices under Accommodation rates. See Rates & how price is calculated.

The What guests see panel on the right redraws as you edit. The amounts in it are a worked example on a round total, but the sentence about cancelling is the live one a guest will read. Check it before you save.

What the guest pays at checkout

ChoiceCharged nowCollected at your property
Pay in full at checkoutThe whole stayNothing
Deposit at checkoutThe share you setThe balance

Deposits round down, so they never exceed the share you set. 30% of $99.99 charges $29.

The balance shows on the booking and on the calendar until your desk marks it collected.

Worked example

A $719.50 stay on a 30% deposit:

30% of $719.50 is $215.85, rounded down$215.00
Due at the property$504.50
Guest pays at checkout$215.00

You collect 29.88%, not 30%. Rounding always goes down, so the figure you publish is a ceiling you never cross. The one exception protects the other end: a percentage that works out below $1 still charges $1, because a $0 deposit is not a deposit.

What you promise about cancelling

ChoiceGuest cancels in timeGuest cancels late, or not at all
Free cancellationRefunded in fullYou keep the money
Non-refundableNo refundYou keep the money

Choosing Free cancellation asks How late can a guest cancel for free? Pick Right up to arrival, or 24, 48 or 72 hours, or 7 days before. Need another figure? Choose the custom option and type hours into Cut-off. Each option names hours and days together, and the screen shows the exact date and time your guest will read.

Good to knowThe deposit is the cancellation fee, so there is no separate fee to set. Want a 50% fee? Set a 50% deposit. And mind the other edge of a 72-hour cut-off: anyone booking inside three days of arrival gets no free cancellation at all. For a city hotel that is a large share of your bookings.

A non-refundable rate stays quiet on the booking form. The term is attached to the room at checkout and stays on the order, so guests still agree to it before paying.

Give guests a way to use it

A policy on its own is just words. Paste the cancellation link into your confirmation email and a guest cancelling inside the window is refunded automatically, with the room back on sale the same second.

TipPlans made before deposits existed are set to Pay in full and Non-refundable, which is exactly how they already behaved. Guests see no change until you make one.

Delete rate plan is blocked while accommodation rates still sit under it, so clear those first. Switching the plan off under Availability is usually what you wanted anyway: it stops being offered to new guests and leaves every price intact.

Price calendar

Rates opens on the price calendar: what each accommodation costs per night, and where that price came from. Every figure is produced by the same engine that quotes a guest, so what you see here is what checkout charges.

ViewUse it for
MonthOne accommodation as a seven-column calendar. The default — prices sit under the weekday they apply to.
YearEvery accommodation against all twelve months. Use it to see whether your rooms are priced consistently across the year.

Each cell names where its price came from: Season, Holiday, Weekend, or Set for this date. The month dropdown jumps up to a year ahead.

Price a whole year in four steps

Start wide, then narrow. Each step only overrides the one before it, so you never undo your own work.

  1. Set your standing price. In the Year view the Normally column is what a night costs when nothing else applies. Price that first.
  2. Lift the months that differ. Click the month cells, type one price, then Set price. Shift-click for a run, or click a month heading to take the whole column. It repeats every year until you change it, and Clear price sends a month back to Normally.
  3. Add the periods that do not line up with a month. Christmas week, or Easter, which moves. See Weekend & holiday pricing.
  4. Fix single nights by hand. In the Month view, click a cell, type a price, Save. Click it again to remove it.

For a block of dates rather than one night, use Change prices: set an amount, or raise and lower by a figure or a percent, across a range. Tick weekdays to catch only Fridays and Saturdays. An increase is worked out once against the current price and saved as an ordinary nightly price, so nothing compounds later and a night is always the number on screen.

Worked example

A guesthouse charging $120 most of the year, $180 in July and August, and $250 over Christmas week:

Normally$120
July and August — month price$180
24–31 December — holiday period$250
Three entries cover every night of the year 

Two month cells and one period, rather than 365 nights typed by hand. A Saturday in July still picks up your weekend factor, because a month price is a season and seasons can be multiplied. A night you type by hand cannot, so reach for step 4 only when you mean “this exact figure, nothing on top”.

Seasons, holidays and special periods

A named date range Standard with its own prices. Open What sets your prices beside the calendar, then Manage on Holidays & special periods.

Good to knowThere is no Seasons page any more, so do not go looking for one. The screen is called Holidays & special periods and the delete dialog calls each one a rule. “Season” survives as the field label on a rate, on a booking rule’s scope, and on a calendar cell, so you will meet both words for the same thing.
FieldMeaning
NameInternal label, shown when picking a season on a rate.
Start date, End dateThe range it covers. Or list individual days, for something like Easter that moves.
Multiply the nightly price byUse this instead of typing a price per room when the period is simply dearer, for example 1.5 over Christmas.
Repeat every yearSame days every year, so you don't recreate it each January. The year you entered is ignored.
PriorityHigher number wins when two seasons overlap. Default 0.
ActiveOnly active seasons affect pricing.

A repeating season can cross the new year: 21 December to 6 January covers both months every year. It cannot be longer than a year — that is what the base rate is for.

TipLayer them with priority. "Summer" at 0, "Christmas week" at 10, and Christmas rates take over for those dates. Delete season sends the nights it covered back to their monthly or standing price, and takes any per-accommodation prices you set under it.

Prices per accommodation for one season live on their own page, opened from that same list.

Rates & how price is calculated

A rate is one row of money for one accommodation: the nightly price, the guests it covers, and the stay lengths it may be used on. A rate plan holds as many as you need.

Add your first rate

  1. Open Rates, then Rate plans, then the plan you want to price.
  2. Under Accommodation rates, choose Add accommodation rate. Once the list is long, Filter by accommodation narrows it to one room.
  3. Pick the accommodation. Leave Season on Base rate.
  4. Enter the price and how many guests it already includes, then save.

The booking form starts quoting that price immediately. Everything below is for the nights that should cost something else.

Which price wins

Every night is priced on its own. Foxlendar takes the first match going down this list.

  1. Date override — a price you typed onto that one calendar date. The calendar labels it Set for this date.
  2. Season price — any season covering the night. Highest Priority wins when two overlap.
  3. Base rate — the plan’s standing price, shown as Normally on the calendar.
  4. Shopify product price — the variant price, used when no rate reached the night at all.

Then at most one factor, never two: a holiday or special period if one covers the night, otherwise the weekend factor. Step 1 is exempt. A price you typed onto a single date is your final word on it, so nothing is applied on top.

TipA monthly price is a season too, kept below any season you name yourself. So “Christmas week” beats “December” without you having to set a priority, and a month price keeps its weekend uplift where a per-date price would have cancelled it.

Stay length is checked before any of it. A rate whose Minimum or Maximum nights rules out the booked stay is dropped from the list entirely, so a two-night stay never sees a rate written for a week. Drop every rate that way and the night falls to step 4.

Two seasons over the same night: the higher Priority wins. A holiday factor replaces the weekend one rather than stacking with it, so a Saturday inside Christmas week is charged once. See Weekend & holiday pricing.

Fields

FieldMeaning
AccommodationThe room this rate prices.
SeasonLeave on Base rate for your standing price.
Date overrideOne calendar date, priced on its own. Beats season and base.
PriceWhat one night costs.
Base adults included, Base children includedGuests the price already covers.
Extra adult, Extra childCharged per night for each guest past that count.
Minimum nights, Maximum nightsThe stay lengths this rate may be used on. Blank means no limit.
Good to knowLeave Base adults blank and the rate counts every guest as included, so Extra adult never charges anything. Type 0 to charge for all of them. The plan flags this for you: “aren’t charging their extra-guest price”.

Worked example

Base rate $200, two adults included, extra adult $30. Weekend factor 1.2 on Saturday and Sunday, which is the default. Three adults stay Friday to Sunday, so you are pricing Friday night and Saturday night.

Fri — $200 + $30 extra adult, no factor$230.00
Sat — ($200 + $30) × 1.2$276.00
Room total$506.00

Note where the brackets fall on Saturday. Extra guests are added to the nightly price first, and the factor multiplies the result, so the third adult costs $36 that night instead of $30.

Weekend & holiday pricing

A factor charges more for a night without you pricing that night. Both kinds live in the What sets your prices panel beside the price calendar. They used to be in Settings, which is why Settings still points here.

CoversSet
WeekendsThe weekdays you pick, every week. Saturday and Sunday unless you change them.One factor, 1.2 by default.
Holidays & special periodsA date range or a list of single days you name, like Christmas or Easter.A factor per period. Higher priority wins when two overlap.

A night gets one factor at most. A holiday replaces the weekend uplift rather than stacking on it, so a Saturday inside Christmas week is raised once. Which one applied is named on the calendar cell. For where factors sit against your rates, see Which price wins.

Add a holiday

  1. Open What sets your prices, then + Add a holiday or period.
  2. Name it, add the dates, and set what to multiply the price by.
  3. Save. The nights now read Holiday on the calendar.

Use a list of single days for something that moves, like Easter. Use a range for a block you keep year after year.

Exempt one accommodation from weekends

The weekend factor is shop-wide, so switching it off switches it off everywhere. To drop it for a few rooms only, choose Edit on the Weekends row, then All accommodations except… and pick them.

An apartment house priced flat all week needs this while your hotel rooms still charge more on a Saturday. The exempt accommodation keeps its base, month and season prices, and its calendar stops labelling those nights “Weekend”.

Services (add-ons)

Extras a guest adds while booking: breakfast, parking, a cleaning fee, city tax. Included on every plan.

  1. Open Services and add one. Name it, set the price and the pricing type.
  2. Open an accommodation, then Services, and tick the ones that room offers.
Pricing typeChargedFits
Per bookingOnce, flatCleaning fee, pet fee, airport transfer
Per night× nightsParking at $10 a night
Per guest× guestsWelcome drink
Per guest per night× guests × nightsBreakfast, tourist tax

The type decides what the price multiplies by. Three guests, four nights, and everything priced at $10:

Per booking$10.00
Per night — × 4$40.00
Per guest — × 3$30.00
Per guest per night — × 3 × 4$120.00
TipTurn Taxable off on a city or tourist tax, or Shopify taxes your tax. Link a Shopify product to get its image on the checkout line instead of a grey box.
Also on the serviceWhat it does
Guest unit labelWhat the storefront calls the per-person quantity. “Guests” by default; “People” or “Covers” if that reads better.
Night unit labelThe per-period equivalent. “Nights” by default, “Days” for something like parking.
SequenceSort order in the add-on list, so your best seller sits at the top.
ActiveSwitching a service off stops it being offered. It also stops any mandatory charge you had ticked on an accommodation.

Two screens, and the split matters

SettingWhereScope
Price, pricing typeServices → the serviceShop-wide. Every room offering it uses this price.
Price for this accommodationAccommodations → a room → ServicesOverrides the price on that room only. Blank means use the shop-wide one.
RequiredAccommodations → a room → ServicesPer room. Required on one, optional on another.
Good to knowRequired means always charged, not free. Tick it on a $15 breakfast and every booking for that room pays $15 whether the guest wanted it or not. That is how you collect a cleaning fee. Required decides whether you charge; the price field decides how much.

Charging nothing

Set the price to 0 and the guest reads a word instead of an amount. Which word depends on the Required tick, because the two say different things.

SetupGuest seesMeans
0 and RequiredIncludedAlready in the nightly rate. Breakfast on a half-board rate, a transfer in a package.
0, not requiredFreeA genuine freebie they opt into. Late checkout, a welcome drink.

Both still appear in the price breakdown, so a guest can see what the stay covers even though neither adds to the total.

Paid on most rooms, included on one

Breakfast costs $15, except in the VIP suite where the rate already covers it. One service, three outcomes:

AccommodationPrice for this accommodationRequiredGuest sees
Standard roomblankno$15 — they choose
VIP suite0yesIncluded
Garden room10no$10 — they choose, cheaper here

Leave the override blank on rooms you never want to think about. Enter 0 only where the rate already covers it.

Quantity limit

For Per guest and Per guest per night, decide how many a guest may order.

SettingThey can orderFits
Limit to the number of guests (default)Up to one per person on the booking, and fewer is fine.Breakfast, dinner, spa entry.
Let the guest chooseAny amount up to your Maximum quantity. Leave it empty for no limit of your own.Things sold by the piece: a bottle of wine, extra towels.

Breakfast for two of three guests is a normal request, so the limit only stops them going above the headcount. Lower the party size after picking an add-on and the add-on comes down with it.

Charging children less than adults? That is its own job, in Add-on prices per guest type.

Add-on prices per guest type

Children at half price, infants free. Switch Price by guest type to Different price per guest type and set a charge per type. The guest still sees one line, with the breakdown under it.

ChargeWhat it doesExample
Full pricePays the service price.Adults: $12
Percent of full priceA share of it, rounded per person.Children at 50%: $6
Fixed amountIts own price, ignoring the service price.Teens: $9
Not chargedFree, but still counted and listed.Infants eat, and your kitchen needs the number.
Not offeredLeft out completely.A 16+ spa entry: children never appear on it.
Good to knowNot charged and Not offered both cost nothing and are not interchangeable. Not charged keeps the guest on your lists: an infant eating breakfast free is still a place setting your kitchen needs to know about. Not offered removes them, and the add-on disappears entirely when nobody on the booking qualifies.
ExampleAdultsChildrenInfants
Breakfast, kids half priceFull pricePercent 50Not charged
Spa entry, 16+Full priceNot offeredNot offered
Kids clubNot offeredFixed amountNot offered

Who counts as a child comes from Guest types & capacity, so the ages are set once. A percentage is rounded per person, and the admin shows you the resulting amount as you type, which is how you catch what 50% of an odd price really is before a guest does.

Each charged type gets its own invoice line, “Breakfast (Adults) ×6” beside “Breakfast (Children) ×3”. Your kitchen gets a cover count per type rather than one total.

TipLeave it on Same price for everyone unless you really do charge differently. A transfer seat costs the same whoever sits in it.

Worked example

Two adults and one child, three nights. Breakfast $15 per guest per night with children at 50%. City tax $2 per guest per night, under-18s exempt, Required. One cleaning fee of $40 per booking.

Breakfast (Adults) — 2 × 3 × $15$90.00
Breakfast (Children) — 1 × 3 × $7.50$22.50
City tax (Adults) — 2 × 3 × $2$12.00
Cleaning fee — once$40.00
Add-ons on top of the room$164.50

The child pays half for breakfast and nothing for city tax, because the tax is set to Not offered for children rather than to zero. Each guest type gets its own line, so your kitchen reads six adult covers and three child covers off the invoice. The cleaning fee ignores guests and nights entirely, being per booking. The guest chose breakfast; city tax and cleaning were charged whether they wanted them or not.

Booking rules

Your defaults for every room live in Settings → Booking rules. To override them for one room or one season, create a rule Standard:

  1. Open Booking rules in the menu, then New booking rule.
  2. Set Scope: an Accommodation and a Season. Leave either as all to cover everything.
  3. Fill in only the fields you want to change. Blank means “follow the default”.
  4. Create booking rule. The strictest rule that applies wins.
RuleEffect
Minimum stayFewest nights allowed.
Maximum stayMost nights allowed.
Allowed check-in daysRestrict arrivals to certain weekdays.
Allowed check-out daysRestrict departures to certain weekdays.
Minimum advance days, Maximum advance daysHow far ahead a guest must, or can, book.
Booking buffer daysEmpty days kept before and after each booking, for cleaning or a turnaround.
Same-day bookingWhether guests can book for today.
Require guest contact detailsOn instant booking this adds a phone field, the one detail Shopify checkout cannot make mandatory on a stay. On Request to book, which already asks for all three, it makes name and phone mandatory rather than email alone.
Request to bookReview before payment. See Request to book.

The storefront date picker enforces these live, greying out dates it will not take and saying why. A rule’s Scope is an Accommodation and a Season, either of which can be left as all, so one rule can cover every room in your high season. Delete booking rule removes it and those dates go back to whatever the shop-wide defaults allow.

Guest types & capacity

Settings → Guest policy is the one place you define who you sell to: the name of each guest type and the ages it covers. The age text guests read on the booking form (“3–17”, “18+”) is generated from those numbers, so your wording and your prices can never say different things.

TypeDefault agesNotes
Adults18+Always shown. Cannot be removed — something has to cover your oldest guests.
Children3–17Always shown.
Babies0–2Row is off by default. Enable it in Settings, then choose whether babies take a place in the room and whether they are charged.

Set it up

  1. Open Settings, then Guest policy.
  2. Check the ages against the policy you already publish. Change them if your adults do not start at 18.
  3. Hosting infants? Switch the Babies row on, then decide whether they take a place in the room and whether they are charged.
  4. Save, then set capacity per accommodation: max adults, children and babies. A party larger than that is refused with a message naming the room.
TipTo host infants free but still know how many are coming: switch the Babies row on, set its ages to suit (0–2, or 0–3), and leave both takes a place in the room and charged unticked. Guests get a third counter, you see the number on every booking, and nothing is charged for it.

Setting your own age ranges

The defaults follow the common convention that under 18 is a child. They are a starting point, not a reading of any label — check them against your own policy. If your adults start at 13, set the rows to 0–2, 3–12 and 13+, and every guest who reads the form sees “13+” beside Adults.

Two rules the form enforces, because prices depend on them:

RuleWhy
No gaps, no overlapsAn age in no type has no price. An age in two types has a price that depends on the order the rows happen to be in.
The oldest type has no upper limitSomething has to cover your oldest guests, so that row's To age is not yours to set.

You cannot rename a type out of existence while an add-on still prices it — if you switch the Babies row off and an add-on charges babies, the save is refused and the message names the add-on so you can clear it first.

TipThree types today — Adults, Children and an optional Babies row — because the booking form has three counters. A fourth type such as “Teens 13–17” needs its own counter on the form to be reachable by a guest, and arrives with it.

How a guest's type is decided

By the counter the guest uses. Each guest type is one row on the booking form, with its age range printed beside the name, and the number the guest puts on that row is what gets priced.

On the booking formWhat it prices
Adults · 18+Your Adults price
Children · 3–17Your Children price
Babies · 0–2Your Babies price, if the row is enabled

The guest reads the range and picks their own row. Foxlendar never asks each child’s age on top of that. The same fact entered twice can disagree with itself, and a form that asks again is a form more people abandon.

If one children’s price is not enough

Move the boundary rather than adding a type. You have three counters, so put them where your price actually changes. A property charging a 15-year-old like an adult sets Adults to 13+, which leaves Children covering only the younger bracket:

TypeAgesBreakfast
Babies0–2Not charged
Children3–1250%
Adults13+Full price

Three prices is the ceiling, because the booking form has three counters. Need a fourth band, teens at 75% between children and adults, and the honest answer is that it is not available yet. Decide which side of your boundary teenagers fall on.

Good to knowA guest type you never priced pays the full price, not a free one. If babies should eat free, set their row on the add-on to Not charged instead of leaving it blank.

Storefront blocks

Foxlendar reaches your storefront through theme blocks — no code, and they inherit your theme’s fonts and colors. Quickest way to add them: Getting started → Add Foxlendar blocks to your theme, where every block has an Add to theme button that places it for you.

  1. Open Getting started, then Add Foxlendar blocks to your theme.
  2. Decide between one layout block and the individual ones, as below.
  3. Click Add to theme on what you chose. Each opens the theme editor with the block ready to place.
  4. Save in the theme editor. Theme edits do not save themselves.
  5. Open a product page and take a test booking.
Good to knowClick each Add to theme button once. Shopify adds another copy on every click. Delete any extras in the theme editor.

Choose one layout, not both

Accommodation page is a whole product page in one block: title, gallery, highlights, description, amenities, details and the reservation form, in a sidebar layout with a sticky booking panel. Add it, switch off what you don’t want, and you’re done.

Or add the blocks below one at a time to control their order. Don’t do both — everything would appear twice, including two booking forms.

Product page blocks

BlockWhat it doesIn Accommodation page
Reservation formDates, guests, live price, Book now. The only block guests can book from. Show heading hides the title above it when your page already has one.Yes
Accommodation titleThe accommodation name. Heading level and typography.Yes
Accommodation galleryPhotos, with aspect ratio, spacing and an optional lightbox.Yes
Accommodation highlightsAttributes you ticked Visible in highlights, plus capacity. Visible in details is the separate tick that feeds the details block.Yes
Accommodation descriptionThe description, optionally collapsed behind “Read more”.Yes
Accommodation amenitiesThe amenities assigned to this accommodation.Yes
Accommodation detailsSize, bedrooms and bathrooms.Yes
Availability calendarOpen and blocked nights by month, with nightly prices.No — add separately
Location mapMap with a pin, on Google Maps or OpenStreetMap.No — add separately

These nine work on a product page only. Click a block in the theme editor to change what it shows.

Home and collection page blocks

BlockWhat it does
Availability searchSearch by dates, guests and location, and list matching rooms. Can fill a hero image or video.
Accommodations gridA grid of bookable rooms with capacity and starting price.

Appearance

Foxlendar appearance styles every block at once. It is an app embed rather than a block, so switch it on from the same page in the app, or in the theme editor under App embeds (the puzzle-piece icon).

SettingOptions
Colour schemeLight, Dark, or Follow visitor’s device, which tracks whatever their phone or laptop is set to.
Accent colorButtons and highlights.
Button text colorLight for a dark accent, dark for a light one. Set it for contrast.
Corner radiusBlocks and inputs have their own. 0 is square.
Spacing, letter spacingFine-tuning to sit against your theme.

Leave the embed off and every block inherits your theme’s fonts and colours instead.

TipA block that renders empty almost always means the product isn’t linked: Accommodations → your accommodation → Select product. Every plan can use every block.

How a booking is created

  1. Guest picks dates and services. Price updates live.
  2. Foxlendar validates server-side: product is bookable, room is active, capacity fits, a unit is free, rules pass.
  3. "Book now" creates a Shopify draft order with the exact price locked. Guest goes to Shopify Checkout.
  4. Order paid → confirmed booking, unit assigned, services attached.
  5. Order cancelled or refunded → booking cancelled, unit released.
Good to knowA booking is created only when payment completes. Abandoned checkouts never produce a booking.

Multi-room booking

Off by default. Turn it on in Settings → Multi-room booking. Once on, it works on every product that shows the booking form.

A guest can then put more than one room in a single order — several of the same room, or a mix of different ones — same dates, one checkout. The rooms are held together, so there's no second trip through checkout hoping the other room is still free. A couple can book a Deluxe for themselves and a Standard Double for the kids and pay once.

Room combinations in search

When a group is too big for any single room, the search results suggest a combination that fits instead of showing "no availability". Search for six and you might get a Family Cottage (sleeps 4) plus a Standard Double (sleeps 2); the guest books both in one go.

This only shows up when no single room fits, so it doesn't clutter ordinary searches. It needs multi-room booking switched on, since the guest has to be able to book the whole combination together.

Good to knowAvailability and capacity are still checked when the order is placed. If a suggested combination sells out between the search and checkout, that's caught server-side like any other booking.

Request to book

The guest asks instead of paying, and you decide Premium. Built for long stays, group bookings and student housing.

Switch it on in the Request to book card on the Requests page, along with the hold window. Both used to sit in Settings, which now just points here. Then override it per room under Booking mode on the accommodation, in either direction.

The flow

  1. Guest submits. Same validation as instant booking. Email required.
  2. Room is held. Real unit reserved, calendar shows amber, channel dates blocked.
  3. You review under Requests: guest details, message, stay, total.
  4. Approve: invoice emailed to the guest. Set a custom room price or change the discount first.
  5. Guest pays → booking confirmed on the held unit.
  6. Or decline: room released, any existing invoice deleted.

Per accommodation

On the accommodation, How guests book this accommodation overrides the shop setting three ways: Always send a request for approval, Always allow instant checkout, or Follow shop setting, which names the current one so you are never guessing. Vet long stays and let day rooms sell themselves.

Hold window

Auto-decline after sets the hours a request may wait. Default 48. Set it to 0 and the request is held until somebody answers: nothing releases the room on its own.

Good to knowAfter approval the hold window no longer applies. The guest has an invoice and the room stays theirs until they pay or you decline.

A declined or expired request keeps its contact details for 90 days, long enough to answer “why was I refused?”, then they are scrubbed. The request itself stays in your history. Declined and awaiting-review requests never count against your monthly booking allowance.

Staff notifications

Email your team when a request arrives, and again while an approved request is still unpaid. Under Requests, in the Staff notifications card.

Set it up

  1. Switch the card On.
  2. Send to — up to 10 addresses. Commas, semicolons or one per line all work, so paste straight out of a spreadsheet. A typo is named back to you rather than reported as “invalid”, so you never have to bisect the list yourself.
  3. Send test to prove it arrives before you rely on it.
  4. Remind unpaid after — the first reminder. Default 2 days.

What gets sent

EmailWhenContains
New requestA guest submitsGuest, reference, room, dates, nights, total, their message, and a link that opens the request
Unpaid reminder2, 4 and 8 days after you approve, then no moreEvery request still awaiting payment, with the nights each one is holding

One email per event, however many rooms or requests it covers: a six-room enquiry is one email, and three unpaid requests coming due together are one digest rather than three messages.

The reminder schedule

Your number sets the first reminder; the second and third follow at double and quadruple that. With the default 2 you get day 2, 4 and 8, counted from the day that request was approved — each request has its own schedule. After the third, Foxlendar stops.

Set it to 0 for no reminders. You still get the new-request email.

Replies

Mail comes from Foxlendar's own address, but the reply-to is the guest — so your team can answer them straight from the inbox without opening the app.

Good to knowNothing is sent to guests here. These emails are for your team. The guest's invoice goes out through Shopify, under your own branding.
TipNothing arriving? Check the spam folder first and whitelist the sender shown under the Send to field. Mail from a new sender often lands there for the first few messages.

Request a Quote

You price a stay and send the guest a payment link Premium. Under Quotes.

  1. New quote. Pick the accommodation, dates and guests.
  2. Negotiated a figure? Put it in Custom quote price (optional). Blank uses your rate card.
  3. Create quote. A Shopify draft order is created, and the invoice is emailed when you gave an address.
  4. No email? Copy the Quote payment link and send it yourself.
  5. The guest pays, and the booking appears with a unit assigned.
Good to knowA quote does not hold the room. The same dates can still be booked by someone else until the guest pays.

Changing stay dates

Find your situation, then read that part. Which buttons the booking offers depends on two things: whether anyone checked the guest in, and whether the money is collected.

What happenedUseAvailable
The guest left before the booked check-outRecord departureFrom the booked arrival date onwards
The plan changed and the stay is movingReschedule stayUntil the guest is checked in
A checked-in guest is staying on, unpaidChange check-outWhile checked in and unpaid
A checked-in guest has paid and is staying onA new booking for the extra nightsAlways

Checking a guest in

The Arrival card records when the guest actually turned up. Pick the date and time, then Check in. For today the time defaults to now; for an earlier day it defaults to your check-in time, since you will rarely know the minute.

  • Checking in locks the arrival date, because moving it would reprice nights already slept. Only the check-out can still change. Clear check-in unlocks it.
  • You can check a guest in before the booked date, and record a departure from that day.
  • An arrival cannot be in the future, after the booked check-out, or after a recorded departure.
TipChecking in is optional, and skipping it keeps both dates editable. Past the booked arrival the change screen notes that nobody recorded the guest, but never blocks you.

Checking in never moves availability or money. A guest arriving two days late does not hand back the first two nights: the room was held and could not have been sold.

Guest leaves early

Use Record departure and pick the day they actually left. The unused nights go back on sale at once, on the calendar and on your connected channels. The booked dates are not rewritten: they stay as the record of what was agreed, with the departure beside them, which is what lets you undo it.

Money
PaidNothing changes. Unused nights are not refunded. To refund as a gesture, do it on the Shopify order.
Approved, not paid yetRecalculated for the nights stayed, and a new invoice is emailed. The old payment link stops working.
Not approved yetRecalculated. Nothing is sent, and the guest sees the new figure when you approve.
Good to knowA shorter stay can cost more, and this is the one to watch. Your long-stay rate has a minimum nights figure, so a stay that drops below it stops matching that rate altogether and reprices on the shorter one.

Say your 31-plus-nights rate is $60 and your 1–30 night rate is $90. A guest booked 35 nights and leaves after 28:

Booked — 35 nights × $60$2,100.00
Stayed — 28 nights × $90, no longer a long stay$2,520.00
Seven nights fewer, and the bill goes up+$420.00

On an unpaid stay the screen puts the old total beside the new one and flags the band change before you save, so you see this coming. Not the bill you meant to send? Put your own figure in Room total (optional).

TipCharging your own figure? Put it in Room total (optional). Extras are added on top and the guest’s discount still comes off it. Blank uses your rate card. This is also the way through when no rate covers the shorter length.

Manage early departure clears a mistake, and an unpaid total returns to the full booked stay. Clearing asks for those nights back, so it is refused once somebody else has booked them.

Moving a stay rather than shortening it is a different job, in Moving or extending a stay.

Moving or extending a stay

Moving the dates

Reschedule stay moves both dates. Change check-out moves one, for a checked-in guest who has not paid. Either way you are writing a new agreement, so use it when the plan changed, not when the guest simply left.

  1. Open the booking and choose Reschedule stay.
  2. Enter the New dates.
  3. Read What changes. Nothing is saved yet.
  4. Clear anything it flags, or tick the box to override it.
  5. Save. The guest’s invoice is reissued if they have not paid.

Before you save, that panel shows:

  • Nights before and after, the old total beside the new one, and each night’s price with where it came from.
  • The guest’s discount, re-applied to the new nights. A member rate survives the move.
  • A warning when the new length crosses a rate plan band.
  • Any booking rule the new dates break, and any night another booking already holds, listed by date.

Tick Book these dates anyway to override a broken rule; the override goes into the booking’s history. A night another booking holds cannot be overridden, because that sells the room twice.

What happens to the money
Not paid yetThe price follows the dates. On an approved request the old invoice is deleted and a new one emailed, so nobody pays yesterday’s figure for tomorrow’s stay.
PaidThe amount collected does not move. Cheaper new dates on a non-refundable plan owe nothing; any other difference must be waived explicitly before the change saves, and who waived it is recorded.

Worked example, on a paid booking

The guest paid $900 and wants different dates. What the screen asks of you depends only on what those dates are worth:

New dates worth $900Nothing to settle
New dates worth $720, non-refundable plan$180 absorbed by the plan
New dates worth $1,050Tick Waive the difference ($150)

The third row is the one to read twice. Ticking Waive the difference does not collect the $150, it records that you chose to let it go, with your name against it. Actually want the money? Take it on the Shopify order or raise a separate quote, then come back and move the dates.

Every change lands in the booking’s history: check-ins, departures, old and new dates, amounts before and after, rules overridden, differences waived, and whether the invoice went out again.

Good to knowFoxlendar never moves money on its own. To collect or return a difference on a paid booking, do it on the Shopify order or raise a separate quote. If Shopify refuses the new invoice, the date change is still saved and the screen warns you the guest is holding the old payment link. Resend it from the booking.

Guest wants to stay longer

Not paid, or not checked in: move the check-out from the booking. The gap you keep between stays is measured against the next booking, not against the guest’s own nights. Paid and checked in: make a new booking for the extra nights, in the same room if it is free.

When a change is refused

  • The stay has ended. Those dates are history now. Create a new booking.
  • The guest is checked in. The arrival date is locked. Clear the check-in if it was recorded by mistake.
  • An early departure is recorded. Clear it first, then move the dates.
  • Cancelled, declined or refunded. There is no stay left to change.
  • No price for those dates. Add a nightly rate for that length, or enter a room total when recording a departure. Saving with no price would set the total to zero.

Managing bookings

Dashboard

Tabs: All, Confirmed, Cancelled. Search by guest name, email, phone or order number. A Needs unit badge flags oversold bookings.

Calendar

Three controls decide what you are looking at. Layout is Timeline or Month grid. Range is Month, Week or Day. Rows is Accommodation types or Units, and the Unassigned row holds bookings still waiting for one.

Click a bar for guest details, the total, and links to the booking and the Shopify order. On the timeline you can also click a rate or rule cell to edit it in place.

BarMeans
ConfirmedPaid, with a unit assigned.
Awaiting reviewAn unanswered booking request, holding its room until you decide.
Closed by youA range you took off sale. Striped.
Booked on a channelImported over iCal. Read-only here.
Balance to collectA deposit booking with money still owed. The bar carries a Due marker for the amount.

Collecting a deposit balance

A deposit rate leaves money to take at your property. The booking shows it as Due at the property, and the calendar marks the bar until it is settled.

When the guest pays, open the booking and choose Mark balance as collected. The amount is printed on the button, because pressing it asserts the whole balance arrived. Took only part of it? Leave it alone until the rest is in. Undo reverses it if you tapped it on the wrong booking.

Good to knowThis records what your desk collected. It moves no money, and Shopify is not told. Card payments at the property belong on your terminal, not here.

Closing dates

You never need a reservation to take a night off sale.

  1. Drag across the days on an accommodation’s row. For a range running past the month on screen, use Close dates instead.
  2. Check First closed night and Last closed night, and the Reopens on date it works out for you.
  3. Add a Reason, and a Note only you see.
  4. Close dates to save.
  • Closed ranges appear as striped bars. Click one to change its dates or note, or to reopen it.
  • Dates booked on a connected channel appear too, in a different colour, and are read-only here — reopening one would put a sold night back on sale. Change those on the channel.
  • The end date is a check-out date. To close only the night of the 15th, choose the 15th as the first night and the 15th as the last; the calendar shows you which day it reopens.
  • Seasonal closure, lower down the page, closes every active accommodation for a range in one step.
TipA closure longer than 12 months is flagged. Usually that means a year was mistyped — and because closures are published to your channel feeds, a wrong year stops the room selling everywhere at once.

Manual booking

Add booking for phone or walk-in. Creates a paid Shopify order (offline payment) and a confirmed booking.

Cancelling & refunds

  • Cancelling releases the unit. Foxlendar never auto-refunds.
  • Issue refunds from the Shopify order.
  • Audit history records every change and who made it.

Channel sync (iCal)

Keep availability in step with Airbnb, Vrbo and other iCal channels Premium. Open Channel sync.

  1. Add connection, then set Accommodation or unit — what this calendar represents.
  2. Pick the Channel: Airbnb, Vrbo, TripAdvisor, HomeAway, Booking.com or Generic iCal for anything else.
  3. Name it under Connection name, for example “Airbnb - Ocean Villa”, so a list of six is readable later.
  4. Set Auto-sync interval, from every 15 minutes to daily.
  5. Paste their link into Import iCal URL. Their reservations then arrive as closed dates. Leave it empty if you only want to hand out an export feed.
  6. Copy the export URL Foxlendar gives you and paste that into the other channel.
Connection showsMeans
Two-way syncYou import theirs and they import yours.
Export onlyNo import URL set, so nothing comes in.
Not syncedConfigured but never run. Use Sync now.

One calendar per room. Airbnb and Vrbo give one calendar per listing, so each maps directly to one accommodation or unit. The Manual blocks card lower down covers maintenance and owner stays: these publish to your export feed, so a room you take off sale stops selling on every channel at once.

Imported dates read Booked on a channel on your calendar and cannot be reopened here, because reopening one would put a sold night back on sale. Change the reservation on the channel instead. To take nights off sale yourself, use Close dates.

Good to knowBooking.com does not work over iCal. It stopped accepting iCal links from stores and personal sites, and now takes them only from a short list of large travel sites. Reach Booking.com through a channel manager with a direct connection, such as Sirvoy, Guesty Lite or Beds24.

Discounts

Open Discounts in the menu Standard. Each discount is one offer with its own rules.

Create a discount

New discount, then work down the five cards. Only the first two are compulsory.

The offer

FieldMeaning
NameWhat the guest reads on their quote and invoice.
DescriptionOptional, shown beside the discount on the invoice.
Discount typePercentage, fixed amount, or Free nights. Free nights waives the cheapest nights of the stay, so pair it with a minimum-nights condition.
ValueThe percent, the amount, or the number of nights.
Applies toRoom only, or room plus add-ons. Most hotel offers discount the room only.

Who can get it

How guests obtain itWhat happens
AutomaticAny stay meeting the conditions gets it, with nothing for the guest to do.
Promo codeThe guest types your Promo code on the booking form. Case and dashes are ignored.
MembershipTied to a Membership tier. Only members with an approved, unexpired membership in that tier qualify.
Staff onlyNever appears on the storefront. You apply it by hand when approving a request. For goodwill and negotiated rates.

Conditions

Leave anything blank to place no restriction. Everything you do set must be met. The two date windows are the pair people mix up:

FieldMeaning
Offer window: Bookable from, Bookable untilWhen the discount may be booked. Checked against today, so this is your campaign period.
Travel window: Stays from, Stays untilWhich stays qualify. Checked against the check-in date, so this is your low season.
Minimum nights, Maximum nightsBlank for any stay length.
How far ahead: At least (days ahead), At most (days ahead)Days between today and check-in. A minimum makes it early-bird, a maximum makes it last-minute.
Check-in daysSelect none to allow any weekday.
AccommodationsSelect none to include every room.
Rate plansSelect none to include every plan.
TipA March campaign for summer stays wants Bookable until 31 March and Stays from 1 June. Putting both dates in one window is the usual mistake, and it either kills the offer or leaves it running all year.

Usage caps, stacking and worked numbers are in Discount limits & combining.

Discount limits & combining

Limits

FieldMeaning
Total uses allowedBlank for unlimited. A cancelled or declined booking gives its use back.
Uses allowed per guestCounted by email address.

Combination

FieldMeaning
CombinesTicking Allow this to combine with other combinable discounts lets it stack with others that also allow it. Off, the default, means the discount runs alone.
ExclusiveThe state when that box is off.
PriorityHigher runs first when discounts combine, and breaks the tie when two save the same amount.

Whatever you set, a guest is always given whichever outcome saves them the most. Combining is an option you make available, not a result you force. The shop-wide member-plus-promo switch is separate and lives in Settings.

Good to knowDelete discount is refused once a discount has been used. Deactivate it instead, so past bookings keep their record of what the guest was given. Deleting an unused one is permanent.

Two member rates, no duplicate rate plans

You give ASOR members 10% and students 15%, on stays up to 30 nights. Create two discounts, set both to Membership, point each at its tier, and set max nights to 30. That is all. You do not duplicate your standard rate plan to hold a second price.

Worked example

A five-night stay at $100, $100, $120, $200 and $200, so $720 of room. The guest holds a 10% member rate and types a SPRING20 code worth 20%. You also run a free-nights offer giving one night on five.

Member 10% alone−$72.00
SPRING20 alone−$144.00
One free night — the cheapest, not the dearest−$100.00
Member then code, stacking on: 10% off $720, then 20% off $648−$201.60
Guest pays$518.40

Stacking off, which is the default, the guest gets SPRING20 alone at $144 because it saves the most. Stacking on, the pair still has to beat every single offer, and here it does.

Two details worth knowing before a guest finds them. Stacked percentages are not added: 10% and 20% is not 30%, because the second applies to what the first left, which is why this comes to $201.60 rather than $216. And a free night waives your cheapest night, the industry norm, so a guest cannot aim the offer at your $200 Saturday.

Good to know

  • A cancelled or declined booking always returns its use.
  • A discount that has been used on bookings cannot be deleted. Deactivate it instead.
  • Exclusive (default): when several qualify, the guest gets whichever saves the most.
  • Combinable: stacks with other combinable discounts, each applied to what the last left.

Membership tiers

A tier defines a group of people and what rate they get Premium. Discounts are attached to tiers, not to individual members.

Create a tier

  1. Open Memberships, then New tier.
  2. Name it: “Student”, “ASOR member”, “Corporate”.
  3. Save, then open Discounts and create one with Membership pointed at this tier. A tier on its own is worth nothing until a discount hangs off it.
FieldMeaning
NameWhat members and your staff call this group.
Short codeOptional prefix for the codes you issue, so a member code reads STUDENT-4K7QP2.
DescriptionOptional.
Valid for (months)Counted from the moment you approve an application. Blank means it never expires.

Verification

How a guest proves they belong. The tier list shows which one is in force: Code only or Email accepted.

MethodHow it worksWhen to use
Code onlyThe member types the code issued when you approved them.The default, and the safe one.
Email acceptedTicking Accept the member’s email address as proof, instead of their code lets a booking from that address through on its own.Only where you review every request before taking payment.
Claim from the formThe guest picks the tier from a list instead of proving anything, and your staff check it before invoicing. Switched on in Settings.Request to book rooms only. It never appears on instant checkout.
Good to knowEmail accepted weakens the credential, and the app says so on the screen. The booking form is not authenticated, so anyone who knows a member’s email address can claim their rate. Reasonable when you review every request before money moves; a hole on instant checkout.
TipDelete tier is refused while members or discounts are attached. Deactivate it instead.

One tier can have multiple discounts with different conditions. For example: a 10% short-stay rate and a 15% long-stay rate, both under "ASOR member". The booking form only shows the tier when at least one of its discounts qualifies for the selected stay.

Membership inbox

Memberships in the menu is where you manage applications and active members.

Review an application

  1. Guest applies from the storefront (or you add them with Add member).
  2. Application shows as Awaiting review.
  3. Click Approve: a code is issued, the member can start booking.
  4. Or Reject: they can apply again later.

Membership statuses

StatusWhat it means
ActiveCode works. Member gets the tier rate.
ExpiredPast the validity period. Code stops working. You can renew.
RevokedYou pulled it. Code stops immediately. Existing bookings keep their discount.
TipNeed to add someone who's already verified? Click Add member. They skip the application step and get a code right away.

Staff discount selector

When approving a booking request, you can verify, change or remove the guest's discount before the invoice goes out.

Step by step

  1. Open a request and click Approve.
  2. You see what discount the guest currently has. If they picked a membership rate from the form, a warning says it hasn't been verified.
  3. Check Change the discount before invoicing.
  4. Pick the correct discounts from the list (all your active discounts are shown, including staff-only ones).
  5. The new total is calculated for you. Click Approve and send invoice.

What each choice does

You doResult
Leave the checkbox uncheckedInvoice the discount the guest already has. No change.
Check it and pick discountsGuest's discount is replaced with what you picked.
Check it and pick nothingGuest's discount is removed. Full price.
TipYour finance manager can use this to apply or remove discounts without manually calculating a revised room price. Staff-only discounts (goodwill, negotiated rates) only appear here.

Combination & settings

Two settings under Settings → Discounts. Both are off by default.

SettingOff (default)On
Let members also use a promo codeGuest gets whichever single discount saves more.Member keeps their rate AND can add a promo code on top.
Let guests pick a membership rate on the booking formGuest must type a member code.A list of tiers appears on the form. Request to book only. Staff verify before invoicing.

How the claim list works

  1. Guest picks dates. Only tiers whose discount qualifies for that stay appear. A 31+ night tier is hidden on a 5-night stay.
  2. Guest selects a tier (e.g. "Student — 15%"). This is a claim, not proof.
  3. The request arrives with a warning: "Nothing has verified this."
  4. You check the guest's eligibility and approve, swap, or remove the discount.

Instant-checkout rooms never show the list, regardless of this setting.

Editable message help text

You can customise the text below the guest message field on the booking form.

  1. Open the Shopify theme editor.
  2. Click the Accommodation page or Reservation form block.
  3. Fill in Message field help text.

Leave it blank to keep the default. Example: "Please include your institutional affiliation, purpose of stay, and any discount eligibility."

Settings reference

Settings in the menu. Changes save from the bar at the top.

GroupWhat you configure
GeneralTimezone, check-in and check-out times.
Guest policyGuest type names, their ages, and whether babies take a place or are charged. See Guest types & capacity.
Booking rulesDefaults for every room: stay length, buffer, advance windows, same-day, required details, request to book and its hold window. See Booking rules.
Multi-room bookingLet a guest book several rooms in one checkout. Off by default. See Multi-room booking.
Search filtersWhich of your own details guests may filter by. Nothing is on until you tick it. See Amenities & attributes.
Price displayCurrency code (240 USD), or the symbol before ($240) or after (240 $).
Pricing defaultsA fallback for rooms with no rate. Weekend and holiday pricing moved to the price calendar.
ServicesSwitch add-ons on storefront-wide, and require at least one per booking.
DiscountsWhether members may also use a promo code, and whether guests can pick a membership rate on the form. Both off by default. See Combination & settings.
TipPer-accommodation values override these defaults. A room with its own minimum stay or its own rate always wins.

Privacy requests

When a customer asks for a copy of their data, Shopify tells Foxlendar and Foxlendar shows you what it holds. The duty to hand it over inside 30 days is yours, not the app’s, so this screen exists to make that quick rather than to do it for you.

There is no menu entry, because the request only exists if someone chose Request customer data on a customer in your Shopify admin. A banner on Bookings appears when one is waiting, with Review requests on it.

  1. Open the request. It lists the customer, when they asked, and whether the scope is all their orders or a few.
  2. Read what Foxlendar holds: every booking for that person, with the guest details and notes on each.
  3. Download JSON, then send it to the customer however you normally reply to them.
Good to knowOpening a request marks it Opened. That records only that you looked, never that you answered, because nothing here can see your outbox. The 30 days are still counting.

The export is built from your bookings the moment you open it, not from a stored copy. It is current, and it is empty once the data has been erased, which is also why a request can honestly show nothing: either they never booked, or the erasure already ran.

Erasing a customer

Ask Shopify to erase a customer and Foxlendar clears their personal fields from your bookings without being asked twice. Booking requests are included even when they never reached checkout, which is the case that normally gets missed: a declined or expired request carries a name, an email and a phone number while having no Shopify customer attached to it at all.

TipNothing on this screen is a legal opinion. If you are unsure what you owe a customer or how long you may keep a booking record, ask someone qualified in your country.

FAQ

Do I need to write any code?

No. Everything is set in the app, and the storefront pieces go in through Shopify's theme editor. Storefront blocks

How do I change the colours or corner style of the booking blocks?

Switch on "Foxlendar appearance" in the theme editor under App embeds. Accent colour, button text, light or dark, corner radius and spacing then apply to every block at once. Leave it off and the blocks inherit your theme. Storefront blocks

Which blocks should I put on a product page?

Either Accommodation page on its own, or the individual blocks. Never both: Accommodation page already contains the form, so you would show two. Availability calendar and Location map sit outside it either way. Storefront blocks

How do guests pay? Do I need Stripe or another provider?

No separate provider. Guests pay through your normal Shopify Checkout, with the price already locked onto the order. How a booking is created

Can two guests book the same room type on the same dates?

Yes, when the accommodation has more than one unit. Each booking takes its own, and the dates close once every unit is gone. Accommodations & units

What stops a customer editing the price or dates at checkout?

Both are written server-side onto a Shopify draft order as fixed line items. The customer cannot change the amount, the quantity or the dates. How a booking is created

How does Request to book differ from Request a Quote?

Request to book is the guest's move: they submit, the room is held, you review. A quote is yours: you build it and send a payment link, and it holds nothing. Vet guests with the first, negotiate a price with the second. Request to book

When is a booking actually created?

When the Shopify order is paid, never before. At checkout for an instant booking, or when the guest pays your invoice for an approved request. How a booking is created

What happens if a date gets oversold?

The paid booking is still created, never lost, and flagged "Needs unit". Assign a free unit, or cancel and refund on the Shopify order. Managing bookings

Does cancelling or refunding the Shopify order update the booking?

Yes. Cancelling cancels the booking and frees the unit, and a full refund marks it refunded. Foxlendar never moves money on its own. How a booking is created

Does creating a quote hold the dates?

No. A quote is an unpaid draft order, so the unit is taken only once the customer pays. Request a Quote

Can I sync with Airbnb, Booking.com or Vrbo?

Airbnb and Vrbo yes, on Premium, over iCal. Booking.com is the exception: it no longer accepts iCal links from stores like this, so you need a channel manager with a direct Booking.com connection, such as Sirvoy, Guesty Lite or Beds24. Channel sync (iCal)

Can a guest use both a promo code and a membership rate?

Not by default: they get whichever single discount saves more. Settings → Discounts can allow stacking, and stacked discounts apply to what the last one left rather than adding up. Combination & settings

Why is a membership tier missing from the booking form?

Its discount failed a condition for that stay. A 31-night tier does not appear on a 5-night booking. Membership tiers

Troubleshooting

The reservation form doesn't appear on my product page

Three things to confirm: the product is connected to an accommodation, the accommodation's Status is Active, and either the Reservation form or the Accommodation page block is on that product template. Getting started → Add Foxlendar blocks to your theme is the quickest way in. Storefront blocks

I see the booking form twice on my product page

You have both Accommodation page and Reservation form on the template, and the first already contains the second. Delete whichever you do not want. Clicking an "Add to theme" button twice does the same thing, because Shopify adds another copy each time. Storefront blocks

A date shows as unavailable when I expect it to be open

Something is holding it: every unit booked or on maintenance, a range you closed, a night imported from a channel, or a booking rule such as no check-in on that weekday. Check the accommodation's units, your closed dates, and your rules. On Request to book, also check the Requests page, because an unanswered request holds its room and shows amber on the calendar. Booking rules

Prices look wrong on the storefront

Open the price calendar under Rates. It shows every night at the price a guest actually pays, and each cell names where that price came from, which usually answers it on sight. Which price wins

“This room can't accommodate that many guests”

The party is larger than the accommodation's capacity. Raise Adults, Children and Total capacity on the accommodation, or book fewer guests. Babies only count toward capacity if you switched that on. Guest types & capacity

I can't add more accommodations

You are at your plan's limit. Open Plans & billing to raise it. Plans & limits

Some of my accommodations disappeared from my storefront

Your plan's allowance is what the storefront sells, so having more accommodations than it covers holds the newest back. This normally follows a move to a smaller plan. Open Accommodations: a banner names exactly which ones, and upgrading puts them back on sale at once. Nothing was deleted, and bookings already taken are untouched. Plans & limits

401 or session errors in the admin

Reinstall the app from your Shopify admin. The embedded session refreshes once it reconnects.

Still need a hand?
Email [email protected] with your store URL and a short description.