Sandbox Training environment — real customers aren't contacted and payments aren't charged. Reset Weekly
Documentation

How everything works.

Every module of ResortStrata, explained in plain English. Use the contents on the left to jump to a topic, or have a question? Send us a note.

01

Getting started

Creating your account and organization

To begin using ResortStrata, visit the registration page and create an account with your email address and a secure password. During registration you will also create your first organization — this is the top-level entity that holds all of your resorts, contacts, invoices, and team members.

After signing up, we send a verification link to your email address. Click the link to activate your account, then sign in and you will be taken to the portal dashboard. You can update your organization name and details at any time from the settings area.

The 30-day free trial

Every new organization starts with a 30-day free trial that gives you full access to all portal features. No credit card is required to start. Before the trial expires you can subscribe to a paid plan from the Billing page to maintain uninterrupted access.

Dashboard overview

The dashboard is your command center. At a glance you will see:

  • Stat cards — quick counts for key metrics such as total resorts, total units, active occupancy windows, and open maintenance jobs.
  • Upcoming arrivals — occupancy allocations whose start date is approaching, so you can prepare units for incoming guests or owners.
  • Open jobs — maintenance jobs that are not yet completed, ordered by priority and due date.
  • Servicing due — housekeeping and servicing tasks that are scheduled or in progress and approaching their due window.
  • Outstanding invoices — invoices that have been sent but not yet paid, helping you keep track of receivables.

Navigating the portal

The portal uses a sidebar menu on the left-hand side, grouped into clear sections. Property covers Resorts, Contacts, and Occupancy. Operations covers Servicing, Email, Jobs, Reservations, and Housekeeping. Finance covers Invoices, Fee assessments, Statements, and Reports. Settings covers Staff, Card payments, Invoicing, Billing (your portal subscription), Audit log, My account, and Permission groups. Support covers tickets. On smaller screens the sidebar collapses into a hamburger menu.

All data in the portal is scoped to your current organization context. If you belong to more than one organization you can switch between them using the organization switcher at the top of the sidebar.

02

Resorts & units

Adding a new resort

Navigate to Resorts in the sidebar and click Add Resort. You will need to provide:

  • Name — the display name for the resort (e.g. "Oceanview Residences").
  • Address — the street address of the property.
  • City — the city or town.
  • Country — select from the country list.
  • Timezone — used for scheduling servicing, jobs, and occupancy dates in the correct local time.
  • Fiscal year start — month and day on which the annual maintenance-fee period begins. Default 1 January. Change this if the resort bills on a seasonal cycle (e.g. 1 November or 1 April). See Annual Fee Assessments for how this feeds the assessment creation defaults.

Managing units within a resort

Each resort contains one or more units — these represent individual rooms, apartments, villas, or lots. When viewing a resort, click Add Unit to create a new unit. Each unit has:

  • Unit identifier — a label such as "Unit 4A", "Villa 12", or "Room 301".
  • Primary owner — the contact picked on creation is automatically given a 100% ownership stake. For joint or fractional ownership, edit the unit afterwards and add extra owners (see below).
  • Annual fee amount — the yearly maintenance / levy amount for this unit (in the organization's currency). Used by the Fee Assessment feature to generate invoices.
  • Notes — optional free-text notes about the unit (e.g. "Ground floor, wheelchair accessible").

Units are the fundamental building blocks of the system. Reservations, servicing tasks, maintenance jobs, housekeeping status, fee assessments, and invoices are all linked to specific units.

Information only units

A unit can be flagged as Information only on its edit page. Use this for units you want to record — typically to track owners and weeks — without managing day-to-day operations or billing them. An information-only unit still supports its owners and ownership/weeks records and ordinary edits, but it is deliberately excluded from everything operational and financial:

  • It is never invoiced and is left out of fee assessment runs.
  • It does not appear on statements.
  • It is not counted toward your subscription — you are not charged for information-only units.
  • It cannot be selected for housekeeping, maintenance jobs, servicing tasks, occupancy allocations, or reservations — it is hidden from those pickers.

Because information-only units don't affect billing, the annual fee and fee weight fields are hidden while the flag is set. Clearing the flag brings the unit back into invoicing, statements, the subscription count, and operational pickers.

Joint, fractional, and timeshare ownership

Every ownership stake on a unit is tracked as its own record with a share and an effective date range. The share is captured either as a percentage or as a number of weeks, depending on whether the resort is flagged as Timeshare on its edit page:

  • Standard (percentage) resorts — shares are entered as percentages. A single owner is one record at 100%; joint owners use two or more records that add to 100% (e.g. 50% + 50%, or 60% + 40%).
  • Timeshare resorts — shares are entered as a number of weeks. Each week-holder gets their own record (e.g. one owner with 1 week, another with 4 weeks). The total should add up to the resort's operational weeks for any given date range (52 by default — see below). Internally each week is treated as 1 ÷ (operational weeks) of the annual fee, so fees prorate exactly the same way as percentage shares.

To switch a resort between modes, use the Timeshare resort checkbox on the resort edit page. Existing ownership records keep working in either mode — switching only changes how new shares are entered.

Operational weeks. Timeshare resorts that close for annual maintenance run fewer than 52 weeks a year. Set the resort's operational weeks (e.g. 50 for a two-week shutdown) on its Finance page. This value is the denominator for all week-to-share maths: owners who between them hold every operational week then reconcile to exactly 100% of the operating budget, instead of the ~96% you would get if the system always divided by 52. Changing it re-computes the stored share of every weeks-based ownership in that resort.

To add, edit, or transfer ownerships, open the unit edit page and use the Ownership section. Only contacts whose kind is owner can hold an ownership stake — the picker offers owner contacts only. The list shows every current and historical stake with its share and effective dates; a footer row shows whether the active stakes today sum to 100% (or the resort's operational weeks for timeshare resorts) — if not, a warning appears, double-check it's intentional. When a unit changes hands mid-year, use the Transfer action on the existing ownership row: it closes the seller's stake on the transfer date and opens the new owner's stake the same day (optionally splitting the share across several new owners). The fee assessment then bills the old owner for their days and the new owner for theirs automatically.

How unit count affects billing

ResortStrata uses a per-room pricing model. Your subscription cost is based on the total number of units across all resorts in your organization, excluding any units flagged as information only. There is a minimum of 5 units — if you have fewer than 5 chargeable units, you will be billed for 5. This keeps pricing fair for small and large properties alike.

Editing and updating resort details

Click on any resort from the list to view its details. From the resort detail page you can edit the resort name, address, city, country, and timezone. You can also add, edit, or remove units from this page.

Tip: Keep timezone settings accurate — they affect how due dates and scheduling windows are interpreted throughout the portal.

03

Contacts & tags

Adding contacts

Contacts represent the people associated with your properties — typically owners, tenants, and members (e.g. holders of club / scheme membership rights without freehold ownership). Navigate to Contacts and click Add Contact to create a new record.

Contact fields

  • Account number — a per-organization reference for the client (see Account numbers below). Leave it blank when adding a client and one is generated automatically; type a value to keep a number carried over from another system.
  • First name and Last name — the contact's full name.
  • Kind — owner, tenant, or member (see below).
  • Email — used for sending invoices, broadcast emails, payment links, and the owner portal invite.
  • Phone — optional phone number for the contact.
  • Marketing opt-in — a flag indicating whether the contact has consented to receive marketing communications. This is respected by the email broadcasting feature.
  • Postal address — optional. Address line 1 & 2, city, county / state, postcode, and country. Capture this for any contact who can't receive invoices and statements by email.
  • Posted Invoice — a checkbox marking the contact as a postal-only recipient. Email-based invoice and statement delivery actions skip these contacts so they don't receive duplicate copies; the contacts list shows a Postal badge next to them. The contact edit page shows a warning if this is set without an address recorded. A client saved without an email address has this turned on automatically, since post is the only way to reach them.
  • Tags — one or more free-form labels you define (e.g. "VIP", "Club Member", "Legacy Owner"). See below.

Account numbers

Every client (owners, tenants, and members) carries an account number that's unique within your organization. There are two kinds:

  • System-generated — when you add a client and leave the account number blank, ResortStrata assigns the next number in sequence: ACC-1, ACC-2, and so on. Numbers are per-organization, so two different organizations can each have their own ACC-1 without any clash.
  • Imported / custom — if you're moving across from another system, the account number comes from your imported data and is kept exactly as-is. You can also type your own value in the Account number field when adding or editing a client. After that, any further clients you create are system-generated again.

The account number is shown wherever client data appears — the clients list, the client detail page, invoices and statements (including their PDFs), reservations, reports, and the owner's self-service portal — and you can search by it in every list that shows clients. Staff accounts don't carry a client account number, and clients created before this feature was switched on get a system-generated number the next time they're saved.

Tags

Tags let you categorize contacts beyond simple owner / tenant. Create tags on the fly by typing a new name, or pick existing ones from the dropdown. Tags are organization-scoped, so tags created in one organization are never visible to another.

  • Tags can be added when creating or editing a contact.
  • On the contact list you can filter by tag to find everyone in a given segment.
  • Tags can be managed (renamed or deleted) from Contacts > Tags. Deleting a tag removes it from every contact it was attached to.
  • Mailing lists can be bulk-populated from a tag; broadcasts then send to that list.

Browsing and searching

The Clients list is sorted alphabetically by last name. Use the search box at the top of the list to filter by first name, last name, email address, or account number — the search matches any part of those fields, case-insensitive. Multi-word queries (for example, "Jane Smith") are matched as separate terms, so each word can land in a different field, and order doesn't matter. Clear the search to return to the full list.

Client detail view

Click View next to any client on the list to open their detail page. This is the all-in-one summary used for account queries and reception/billing conversations. It includes:

  • Header card — name, kind, contact details, postal address (when set), and quick status flags (postal-only, portal account, marketing opt-out, email delivery problems).
  • Financial summary — outstanding balance, total billed, total paid, count of overdue invoices. Quick links to download a statement PDF or open the full statement view.
  • Ownerships — every unit ownership held by the contact, current and historic, with the share (% / weeks / points) and effective dates. Each row links straight to the unit edit page for quick changes.
  • Invoices — every invoice billed to this contact with status chip, amount, and per-row PDF / Email actions. The Email button is hidden when the contact is marked Postal.
  • Reservations — every booking the contact owns, with type (owner / rental / blocked / maintenance), stay window, and status.

The page is read-mostly — use Edit in the top-right to change any contact field, or click into the unit / invoice / reservation links for the relevant edit page.

Email deliverability flags

When a broadcast or invoice email bounces or is reported as spam, the affected contact is automatically flagged on the Clients list with a red label next to their email address — Hard bounce (address permanently rejected), Soft bounce (temporary rejection — will clear itself on the next successful delivery), or Marked spam (recipient reported a broadcast as spam; marketing opt-in is automatically turned off). Opening the contact shows a more detailed banner and a Mark delivery as resolved button — use it once you've confirmed the address with the contact or cleared the underlying problem. The flag will re-apply on the next bounce if the issue recurs.

Linking contacts to resorts and units

When creating or editing a contact, you can associate them with specific resorts and units. Separately, each unit has a primary owner — that's the contact who receives the unit's annual fee invoice and who sees that unit in the owner self-service portal.

Contact kinds

Contacts are classified as owner, tenant, or member. This distinction is important for:

  • Owner — holds title to one or more units. Receives the unit's annual fee invoice and can be the primary owner of a unit. Can be invited to the owner self-service portal.
  • Tenant — rents a unit (long-term or short-term). Used to record rental usage on reservations and to target rent-related broadcasts.
  • Member — has membership / use rights via a club or points scheme rather than a freehold stake — common in timeshare arrangements where a managing club holds the deeds. Members are useful for clubs that bill subscriptions or for picking a club entity as the primary owner of a timeshare unit.
  • Email broadcasting — build a mailing list (optionally by bulk-adding everyone with a given tag) and broadcast to that list.
  • Invoicing — ensuring bills go to the correct party.
  • Reservations — recording owner usage versus rental usage.

Inviting a contact to the portal

You can invite any contact to create a user account linked to their contact record. The contact receives an email with a secure invitation link; when they set a password they are automatically signed in. Invited contacts land on the owner self-service portal, scoped to only their own units, bookings and invoices. See Owner Self-Service Portal for details.

Tip: Keep email addresses up to date. Invoice delivery, payment links, broadcast emails, and owner portal invites all depend on accurate contact email addresses.

04

Mailing lists

Why mailing lists

Mailing lists let you curate groups of contacts for broadcast email campaigns. A contact can belong to any number of mailing lists. Unlike tags — which are free-form labels — mailing lists are explicit membership collections you build and maintain for sending to.

Creating a list

Navigate to Email > Mailing Lists and click New List. Give it a name (e.g. "2026 Annual Owners") and an optional description. Once created you can add or remove members at any time.

Adding members

  • Pick contacts individually from the contact picker.
  • Bulk-add everyone with a selected tag.

Members are deduplicated — if a contact is already on the list, adding them again has no effect.

Sortable, searchable member view

The list detail page shows all members alphabetically, with a search box to filter by name or email. You can remove members one at a time or in bulk.

Using lists for broadcasts

When composing a broadcast email, choose a mailing list as the audience. Only contacts who are on that list and have opted into marketing will receive the email. See Email Broadcasting for the full workflow.

The built-in Test Group (trial accounts)

Every organization has an auto-created mailing list called Test Group. On a free trial, this is the only list broadcasts can be sent to, and it is capped at 5 activated staff members. The Test Group is a safety net — it lets you practise sending without any risk of reaching real contacts before you're paying. Add members to it by inviting staff from Settings > Staff; they appear in the Test Group automatically once they activate their invite. Once you subscribe to a paid plan, the Test Group stays available and you can also send to any other mailing list.

Tip: Keep lists small and focused. A list that covers every owner will hit deliverability limits harder than targeted lists based on tenure, location, or opt-in campaign.

05

Reservations & PMS

What a reservation represents

A reservation records who is using a unit, when, and how. Reservations cover the full property management lifecycle — owner usage, paid rentals, blocks for owner friends or family, and maintenance downtime.

Reservation types

  • Owner — the unit's primary owner (or a linked contact) is staying in the unit themselves. No charge.
  • Rental — a paid booking for a guest. Tracks guest details, price, and can be linked to an invoice.
  • Blocked — the unit is held out of availability without a guest (e.g. for owner's personal hold, renovation planning, inter-owner arrangements).
  • Maintenance — a deliberate block for a known maintenance window.

Reservation status workflow

  • Confirmed — the reservation is booked but the guest has not yet arrived.
  • Checked in — marked automatically when you check the reservation in. Records the check-in timestamp.
  • Checked out — marked automatically on check-out. Records the check-out timestamp and flips the unit's housekeeping status to dirty.
  • Cancelled — the reservation was cancelled before arrival.
  • No-show — the guest did not arrive within the expected window.

Creating a reservation

Navigate to Reservations and click New Reservation. You can filter and view reservations by resort, type, date range, and status. Each reservation requires:

  • Unit — the resort unit being reserved.
  • Type — one of owner / rental / blocked / maintenance.
  • Owner contact — the contact responsible for the booking (for rentals this is usually the booker; for owner usage it's the primary owner).
  • Start date and End date — the check-in and check-out dates.
  • Guest name, email, phone — for rentals or owner-guest stays, the details of the person actually staying.
  • Guest count — how many people are staying.
  • Total — for rentals, the price charged. Used to generate an invoice.
  • Notes — free-text operational notes visible to staff.

Overlap detection

The system automatically checks for date conflicts when you create or edit a reservation. If the dates overlap with an existing confirmed reservation for the same unit, you'll see a warning. This prevents double-booking.

Check-in and check-out

From a reservation's detail page, use the Check in button to mark the guest as arrived. The reservation's status moves to checked in and the unit's housekeeping status moves to in progress.

Use Check out when the guest leaves. The reservation moves to checked out and the unit's housekeeping status automatically flips to dirty, queueing it up for the housekeeping team.

Cancelling a reservation

Click Cancel on a reservation to mark it as cancelled. Cancelled reservations remain in the history but are removed from overlap detection, freeing the dates for new bookings.

Generating a rental invoice

For reservations with a rental total, you can generate an invoice directly from the reservation. The reservation is linked to the invoice so payment status is visible from the booking record.

Tip: Use reservation type filters to quickly separate your paid rental pipeline from owner weeks, and combine with the housekeeping board to plan turnovers between bookings.

06

Housekeeping

Housekeeping status board

Each unit has a persistent housekeeping status so your team can see at a glance what needs attention. Navigate to Housekeeping for the grid view of every unit, its current status, last-cleaned timestamp, and any upcoming arrivals.

Statuses

  • Clean — ready for the next guest.
  • Dirty — needs cleaning. A unit automatically moves here on check-out.
  • In progress — housekeeping has started on the unit.
  • Out of service — the unit is deliberately unavailable (deep repair, renovation, etc.). Prevents it being rented.

Automatic status changes

  • Checking a reservation in moves the unit to in progress.
  • Checking a reservation out moves the unit to dirty.

Staff can override at any time — e.g. flip from dirty to clean once a clean is done, or mark a unit out of service ahead of works.

Bulk actions

Select multiple units from the housekeeping board to mark them clean in one action. Useful after a synchronised housekeeping shift.

Notes and last-cleaned record

Each status change records the team member and timestamp. Optional notes can be added — e.g. "replaced towels, reported hairdryer broken" — to give the next person visiting the unit context.

Tip: Combine the housekeeping board with the Reservations calendar to spot same-day turnovers and plan staffing.

07

Servicing tasks

Creating servicing tasks

Servicing tasks cover all routine unit preparation work — cleaning between guests, inspections, repairs, and deep cleans. Navigate to Servicing and click Add Task. Choose from the following task types:

  • Cleaning — standard housekeeping clean.
  • Inspection — a walkthrough to check unit condition.
  • Repair — minor fix work that does not warrant a full maintenance job.
  • Turnover — full preparation of a unit between occupancy windows (typically combines cleaning and inspection).
  • Deep clean — thorough, intensive cleaning beyond the standard scope.
  • Other — any servicing work that doesn't fit the categories above.

Task fields

  • Unit — the resort unit to be serviced.
  • Status — the current state of the task (see below).
  • Task type — one of the types listed above.
  • Due start and Due end — the window during which the task should be completed.
  • Assignee — the team member responsible for carrying out the task.

Checklists

Each servicing task can have a checklist — a list of individual line items that staff can work through and tick off as they complete each step. This is especially useful for turnovers and deep cleans where multiple steps must be followed in order.

Add checklist items when creating or editing a task. Staff members can then mark each item as complete from the task detail view.

Task statuses

Tasks progress through the following statuses:

  • Scheduled — the task has been created and is awaiting its due window.
  • In progress — work has begun on the task.
  • Completed — the task is finished.
  • Cancelled — the task has been cancelled and will not be carried out.

Tip: Assign tasks to specific team members so they appear in each person's workload. Use checklists to standardize quality across your housekeeping team.

08

Maintenance jobs

Logging reactive maintenance

Maintenance jobs track reactive work that needs to be done on your properties. Navigate to Jobs and click Add Job. Each job includes:

  • Title — a short summary of the issue (e.g. "Leaking kitchen tap").
  • Description — detailed information about the problem and any relevant context.
  • Category — the type of maintenance work required.
  • Priority — how urgently the job needs attention.
  • Status — the current stage in the job workflow.

Categories

Jobs are organized into the following categories:

  • Plumbing — pipes, taps, drains, water heaters, toilets.
  • Electrical — wiring, outlets, switches, lighting, circuit breakers.
  • HVAC — heating, ventilation, air conditioning, thermostats.
  • Structural — walls, roofing, foundations, windows, doors.
  • Cleaning — specialist cleaning beyond routine housekeeping.
  • Landscaping — grounds, gardens, paths, exterior maintenance.
  • Appliance — kitchen appliances, washers, dryers, refrigerators.
  • Pest control — insect, rodent, or wildlife issues.
  • Other — anything that does not fit the above categories.

Priority levels

  • Low — cosmetic or non-urgent issues that can be addressed when convenient.
  • Normal — standard maintenance that should be completed within a reasonable timeframe.
  • High — important issues that affect guest or owner experience and should be prioritized.
  • Urgent — critical problems that require immediate attention (e.g. burst pipe, power failure, security issue).

Status workflow

Jobs follow this lifecycle:

  • Open — the job has been logged and is awaiting action.
  • Scheduled — the job has been assigned a date and/or team member.
  • In progress — work is actively being done.
  • Completed — the job is finished.
  • Cancelled — the job is no longer needed.

Assigning jobs to team members

When creating or editing a job you can assign it to any team member in your organization. Assigned members can see their jobs from the dashboard and the jobs list.

Due dates and completion tracking

Set a due date on each job to ensure timely resolution. The dashboard highlights overdue and upcoming jobs so nothing falls through the cracks.

Tip: Use the priority system consistently across your team. Reserve "Urgent" for genuine emergencies so it retains its meaning.

09

Recurring maintenance (job series)

Creating recurring maintenance templates

For maintenance that happens on a regular schedule — such as monthly HVAC filter checks or weekly pool inspections — you can create a job series. A series acts as a template: you define the job details once, and the system creates individual jobs automatically on schedule.

Frequency settings

Job series support the following frequencies:

  • Weekly — a new job is created every week on a specified day of the week.
  • Monthly — a new job is created every month on a specified day of the month.

How jobs are materialized from series

The system automatically generates individual maintenance jobs from each active series according to the configured schedule. These materialized jobs appear in the regular jobs list and follow the same status workflow (open, scheduled, in progress, completed, cancelled).

Day of week / day of month settings

For weekly series, you choose which day of the week the job should be created (Monday through Sunday). For monthly series, you choose which day of the month (1 through 31) the job should appear — stick to 1–28 if you need the job to land on the same date every month, since higher days shift forward in shorter months.

Tip: Recurring maintenance helps you stay on top of preventive work. It is far cheaper to maintain equipment on schedule than to repair it after a failure.

10

Annual fee assessments

What fee assessments do

Strata schemes, timeshare operators, and vacation clubs typically charge owners an annual maintenance levy. ResortStrata's Fee Assessment feature lets you issue a whole year's worth of these invoices in one operation, billed to each unit's primary owner. When an owner holds shares in several units of the same resort, those units are combined onto a single invoice (one line per unit) rather than separate invoices.

Prerequisites

Before running an assessment, each unit you want billed must have:

  • At least one active ownership stake covering some portion of the assessment period.
  • A fee source — either a per-unit annual fee on the unit record, or an annual operating budget on the resort's Finance page that the unit's fee weight draws from.

Units missing both are skipped when the draft is created. If a unit has multiple owners, one fee-assessment line is generated per owner, proportional to their share and their days held during the period. If a unit has instalments enabled, those lines are further split.

Two ways to price a unit

You can drive each unit's annual fee one of two ways. Pick whichever matches how your HOA already budgets:

  • Per-unit fees (default). Enter each unit's annual maintenance fee directly on the unit edit page. This is the simplest setup and what existing organizations have always used.
  • Resort budget + fee weights. On the resort's Finance page, enter the resort's total annual operating budget. On each unit, set a fee weight — a relative size factor (1 for a studio, 2 for a 2-bedroom, 4 for a penthouse). The unit's annual fee is then computed as budget × unitWeight ÷ Σ weights. A 4-unit resort with weights 1, 1, 2, 4 and a £240,000 budget produces unit fees of £30k / £30k / £60k / £120k. Switching modes only changes the input form — no historic data needs to be migrated. Clear the resort budget to revert to per-unit fees.

The budget approach is closer to how real-world HOAs work: you budget operating costs, reserves, and amenities once, then let the system apportion across the units. Mid-period transfers are still prorated by days held; instalments still split evenly with rounding remainders carried on the earliest instalments.

Season weighting (fixed-week timeshares)

On fixed-week timeshare resorts where peak weeks are worth more than off-season weeks, you can configure a per-week multiplier table on the resort's Finance page — 52 numbers, one per week, with 1.0 meaning "average week". A typical Florida coastal resort might leave weeks 1–25 and 35–52 at 1.0 and bump weeks 26–34 to 2.5. Two owners holding 1 week each, one in week 27 and one in week 4, will then be billed in a 2.5:1 ratio from the same operating budget.

To take advantage of season weighting, an owner's record needs to know which weeks they hold. On the unit edit page, when you add an ownership, enter the specific week numbers (e.g. 12, 13, 30) in the optional "Specific week numbers" field. Owners that only record a count (floating-week or unspecified) fall back to the average multiplier across the table — so a 3-week floating owner pays exactly 3× the average per-week share, regardless of when those weeks land. Disable season weighting at any time by clicking the "Clear the multiplier table" checkbox on the Finance page.

Points-based ownership

For Marriott-, Hilton-, or Wyndham-style points clubs where owners hold a points balance against a resort or program, set the resort's ownership model to Points on the resort edit page. On the Finance page, enter the per-point billing rate (e.g. 0.12 GBP per point). On each unit's owners, enter the owner's annual points balance instead of a percentage or weeks count.

Each owner's annual fee is then pointsBalance × pointsRate. A 5,000-point owner at 0.12 GBP / point is billed 600 GBP a year; a 10,000-point owner is billed 1,200 GBP. Mid-year transfers prorate by days held in the period exactly like the other models. The resort budget and unit fee weights are not used in points mode — the per-point rate is the single lever.

Special assessments (one-off levies)

For unbudgeted events — hurricane damage, refurbishment, litigation — click Special assessment from the Fees list. Enter a reason ("Hurricane Iris repairs"), a total levy amount, and a due date. The total is apportioned across all units in the org by their fee weight, and within each unit by the resort's ownership strategy (percentages, week multipliers, or points). Mid-period transfers prorate by days held; instalments split exactly the same way as annual runs.

Special-assessment invoice lines carry a Special category label so owners and bookkeepers can distinguish them at a glance from regular maintenance fees on statements and reports.

Itemising the operating, reserve, and tax components

Real-world HOA budgets are often split across multiple funds — operating costs, capital reserves, pass-through property tax. ResortStrata can show owners that breakdown on every annual-fee invoice. On the resort's Finance page, define one or more Budget categories with a key, label, and amount (e.g. operating / Operating fund / 200,000 + reserve / Reserve fund / 40,000). When you next issue an annual assessment, each owner's invoice line is automatically split proportionally — a 1/8 share of the £240,000 budget appears as "Operating £25,000" plus "Reserve £5,000" instead of a single bundled £30,000.

Categories don't have to sum to the resort budget exactly; the panel flags any mismatch but doesn't block saving (real budgets evolve through the year). Leave the categories empty to keep invoices as a single line per owner.

Seasonal / fiscal-year billing

Each resort has a fiscal year start configured on the resort edit page (default: 1 January). For timeshares that bill on a 1 November – 31 October cycle, or a 1 April – 31 March fiscal year, set the month and day accordingly. When you create an assessment, the period dates default from the first resort's fiscal year configuration — so a resort on 1 Nov will auto-fill a 2026-11-01 to 2027-10-31 period when you pick year 2026. You can override these dates per assessment if a specific run covers a shorter or non-standard window.

Fee invoice due dates (timeshare resorts)

For timeshare resorts, you can choose how fee-assessment invoices are dated. The setting is on each resort's Finance settings page under the Fee invoice due date control:

  • Fixed date (default). Every invoice uses the due date you enter on the assessment, including any instalment spacing. This is the unchanged behaviour for all resorts that have not opted into the alternative.
  • Before first week. Each owner's fee becomes a single payment due a chosen number of weeks before their first owned week in the assessment period. Instalments do not apply to resorts using this model. An owner's "first week" is their lowest owned season-week number, where week 1 is the assessment period's start date. If an owner holds no specific week number, the system falls back to their earliest booking in the period.

When generating invoices with the Before first week model, any owner whose first week cannot be determined — because they have no owned week number and no booking in the period — is skipped and named in a warning for your review. The assessment stays in draft until every owner has been billed. To resolve a warning, add the owner's week numbers on the unit's ownership record, or ensure they have a booking in the period, then generate again.

Creating a fee assessment run

Navigate to Fees and click New Assessment. Provide:

  • Year label — the calendar year the period starts in (e.g. 2026). The system derives the display label automatically: a 1 Nov 2026 – 31 Oct 2027 period shows as 2026–2027; a 1 Jan – 31 Dec 2026 period just shows as 2026.
  • Period start and period end — the exact service window this assessment covers. These pre-fill from your first resort's fiscal year but can be edited.
  • Issue date — the date invoices should be dated.
  • Due date — when the first instalment is expected.
  • Instalments and cadence — split each owner's annual share across multiple invoices. The default is 1 × annual (one invoice per owner on the due date); choosing e.g. 4 × quarterly generates four invoices per owner with due dates 3 months apart starting from the due date you entered. Rounding remainders land on the earliest instalment so the owner's share always totals exactly their billable amount.
  • Currency — defaults to your organization currency.
  • Notes — optional internal notes about this run.

Each generated invoice's line-item description includes the period explicitly — e.g. "Annual maintenance fee 2026–2027 (1 Nov 2026 – 31 Oct 2027) — Unit 4A" — so owners can see exactly what window they're paying for. The run starts in draft status. You can review the computed total, which units are included, and which owners will receive invoices before committing.

Issuing the run

Click Generate invoices on a draft run. The system creates one invoice per owner, per resort — every unit that owner holds in that resort appears as its own line item on the same invoice, instead of arriving as separate invoices. (An owner with units in more than one resort still gets one invoice per resort, since currency, branding, and bank details are configured per resort. With instalments, each instalment is its own invoice.) Each invoice is auto-numbered using your organization's invoice sequence.

Generation runs in the background, so a large assessment (hundreds or thousands of invoices) won't tie up your browser. The run page shows a "generating…" indicator and updates on its own the moment it finishes — you can safely navigate away and come back. If some owners can't be billed (no first week can be determined), the run stays draft and lists who was skipped so you can fix them and generate again.

Once issued, the run is locked — you can no longer edit its contents. The generated invoices appear in the regular Invoices list and behave like any other invoice: PDF download, email, pay link, Stripe checkout.

Send-all

From the run detail page, click Send all to email every generated invoice in a single batch. Each recipient gets their own personalised email and secure pay link.

Tracking collection

The Reports area includes a Fee Collection Rate report that, per assessment run, shows how many invoices are paid versus outstanding, the dollar value collected versus billed, and a per-unit grid of payment status.

Tip: Run a small test assessment on one or two test units before issuing the full year. Verify the invoice totals, numbering, and email content end-to-end before sending to everyone.

11

Invoicing

Creating draft invoices with line items

Navigate to Invoices and click Create Invoice. Invoices start in draft status, allowing you to build them up before sending. Add one or more line items to each invoice, specifying the service or charge.

Invoice fields

  • Bill-to contact — the client who will receive and pay this invoice.
  • Resort — the resort the charges relate to.
  • Unit — the specific unit, if applicable.
  • Description — free-text description for each line item.
  • Quantity — the number of items or units of service.
  • Unit amount — the price per item or unit of service.
  • Tax — the tax amount or percentage applied to the line item.

Invoice numbering

Each invoice is assigned a number automatically in the form INV-1, INV-2, INV-3, and so on. Numbering is sequential per organization — every organization has its own independent counter that starts at 1, so two different organizations can each have their own INV-1 without any clash. Numbers are monotonic (never reused, never go backwards), which means that if an invoice is later deleted, the next new invoice still gets the next number up — you will not see duplicates, and the sequence stays stable for audit.

Invoice lifecycle

Invoices move through three stages:

  • Draft — the invoice is being prepared. You can add, edit, or remove line items freely.
  • Sent — the invoice has been delivered to the client. It appears in your outstanding invoices until paid.
  • Paid — payment has been received and confirmed.

Generating PDFs

You can generate a PDF of any invoice for your records or to attach to correspondence. The PDF includes your organization details, the bill-to contact, all line items, and the total amount due. Once an invoice is paid the PDF also shows the payment date, so it doubles as a receipt.

For clients marked Posted Invoice, the PDF positions the recipient's address in a UK DL window-envelope zone so a folded A4 can be posted without re-addressing. The Invoices page has a Print all postal action that bundles every outstanding invoice for a client you can't email — those marked Posted Invoice or with no email address on file — into one PDF, ordered by surname, ready to print and stuff. Because a large batch can take a while to render, this runs in the background: you'll land on a status page that updates live, and we'll email you a download link when the PDF is ready. The generated file is kept for 7 days. Tip: do a test print against your own DL envelopes first and, if the address sits slightly off, adjust the two window margins in the PDF template.

Emailing invoices to clients

From the invoice detail page, click Send Invoice to email it directly to the bill-to contact. The email includes a secure payment link that allows the client to view the invoice and pay online. This link is HMAC-signed and time-limited for security.

On the Invoices list you have three ways to send: the per-row Email button for a single invoice; tick the checkboxes against several invoices and use Email selected; or Send all outstanding to email every unpaid invoice in the current view at once (it skips paid, void, postal-only, and no-email contacts). Bulk sending runs in the background, so a large batch won't tie up the page — you'll see a confirmation and the emails go out as the worker processes them.

Tip: Review each invoice carefully while it is in draft. Once sent, the client will see exactly what you have entered, including descriptions, quantities, and amounts.

Recording a manual payment

Invoices paid online by card are marked paid automatically by the Stripe webhook. For payments received another way — bank transfer, cheque, or cash — use the Mark as paid button next to any sent or overdue invoice on the Invoices list. A short prompt asks whether to issue a payment receipt; the option is ticked by default.

When you confirm with the receipt option ticked: if the client has an email address and is not marked Posted Invoice, the receipt is emailed to them in the background. If the client is postal-only or has no email address, the receipt instead opens as a PDF in a new tab, ready to print and post, while the list refreshes to show the invoice as paid. Untick the option to mark the invoice paid without issuing any receipt.

Customising system emails

Under Settings → System emails you can rewrite the subject and wording of the transactional emails your clients receive. Four emails are editable: the invoice email, the account statement email, the payment receipt (sent automatically when an invoice is paid), and the overdue reminder. Each is separate from the marketing broadcast composer — these go out one per transaction, not to mailing lists.

Edit the body in the same rich-text editor used for broadcasts, and drop in merge tags — written like *|INVOICE_NUMBER|* — that are filled in for each recipient when the email is sent. Alongside the shared tags (*|NAME|*, *|LIST:COMPANY|*, the current date) each email offers its own: the invoice email, for example, has *|INVOICE_TOTAL|*, *|DUE_DATE|*, *|ACCOUNT_NUMBER|*, a ready-made *|PAY_BUTTON|*, and a *|BANK_DETAILS|* block. The editor lists exactly which tags that email supports. Use *|IF:DUE_DATE|*…*|END:IF|* to show wording only when a value is present.

The invoice, overdue-reminder, and payment-receipt emails also offer *|FEE_PERIOD|*, which fills in the fee assessment period the invoice covers — for example 2026 for a single year or 2026–2027 for a cross-year season. It is left blank for manual invoices that were not raised from a fee assessment.

Leave an email untouched and it keeps its standard default wording. Send test to me emails a preview filled with sample data so you can check it before going live, and Reset to default reverts your changes at any time. The statement PDF is always attached automatically, whatever wording you use. Editing these requires the fees.manage permission.

VAT

If your management company is VAT registered, enter your VAT registration number under Settings → Invoicing to switch VAT on across your invoices. Leave it blank if you are not VAT registered — invoices then show no VAT and behave exactly as before.

  • Rate — set your VAT rate (for example 20%); it applies to all invoices.
  • Inclusive vs exclusive — choose, per resort, whether the figures you enter already include VAT (gross) or have VAT added on top (net). Resorts follow your organization default unless overridden on the resort's Finance page.
  • Exempt contacts — tick VAT exempt on an owner's contact record to issue their invoices without VAT.
  • On the invoice — when VAT is active, invoices show your VAT registration number and a Net / VAT / Total breakdown.
12

Statements

The Statements page under Finance lets you produce a statement of account for any contact, or for every active contact in scope, across any date range. A statement is a single running-balance ledger that combines invoice charges, credit notes, and payments received — useful for chasing outstanding balances, sending owners a year-end summary, or reconciling against an external accounting system.

Generating a statement

Open Finance > Statements and pick:

  • ScopeSingle contact for one client, or All contacts to bulk-generate one statement per active contact.
  • Contact — required when the scope is single. Lists every contact in the current organization.
  • Resort (optional) — when scope is All contacts, restrict the run to clients who have invoices linked to that resort.
  • From / To — the period for the statement. Leave either blank to mean "from inception" or "up to today". Activity before the start date is rolled into an opening balance; activity after the end date is excluded.

Click Generate to view the result on screen, then Download PDF for the single-contact version or Download combined PDF for the bulk run (one contact per page in a single document).

What is on a statement

Every statement has the same structure:

  • Opening balance — the net of charges, credits, and payments before the period start.
  • Transactions — invoice charges on issue date, credit notes on issue date, and payments received on the date funds cleared, ordered chronologically with a running balance after each line.
  • Closing balance — opening + period charges − period credits and payments. Positive balances are highlighted to make outstanding amounts easy to spot.

Void invoices are excluded. Bulk runs only include contacts who actually had activity (or a non-zero balance) in the window, so the combined PDF stays compact.

Permissions

statements.view controls who can see the page and download statements. The Administrators group includes it automatically; for other groups you may need to add the permission explicitly under Settings > Permission groups.

13

Payments

Connecting your Stripe account

To accept card payments through ResortStrata, you need to connect your own Stripe account. Navigate to Settings > Payments and enter:

  • Publishable key — your Stripe publishable API key (starts with pk_).
  • Secret key — your Stripe secret API key (starts with sk_). This is stored encrypted in our database.
  • Webhook secret — the signing secret for your Stripe webhook endpoint (starts with whsec_). This is also stored encrypted.

How card payments work

When a client clicks the payment link in their invoice email, they are taken to a payment page hosted by ResortStrata. If you have Stripe configured, the client can pay by card. Clicking "Pay now" creates a Stripe Checkout session and redirects the client to Stripe's secure hosted payment page. After successful payment, the client is redirected back and the invoice is marked as paid.

When Stripe is enabled, a Pay Now button also appears on the invoice PDF itself — useful for owners who open the attached PDF before the email body, or who save the PDF and come back to it later. The button opens the same secure, HMAC-signed pay link.

Per-resort finance & branding

Bank-transfer details and the invoice logo are configured per resort, not per organization. Open a resort from Resorts, click the Finance & branding tab, and you can set:

  • Invoice logo — a PNG, JPEG, SVG, or WebP image (max 512 KB). Appears at the top of the invoice PDF, on the public pay page, and in the invoice email. Each resort can have its own brand on its invoices.
  • Invoice currency — the ISO-4217 currency used for invoices, fee assessments, and statements billed under this resort. Choose from USD, GBP, EUR, CAD, or AUD. Currency is per-resort so multi-resort organizations can bill different sites in different currencies; manual invoices default to the selected resort's currency, and fee-assessment invoices use the unit's resort currency at issue time.
  • Bank transfer on / off — toggle to show or hide the bank-transfer block on this resort's invoices.
  • Heading — a short title above the bank instructions (e.g. "Bank Transfer Details").
  • Instructions — the free-text block containing account name, sort code / routing / IBAN, reference format, and any other payer guidance.

Bank-transfer instructions display on the PDF, the public pay page, and the invoice email — alongside the Pay Now button when Stripe is enabled.

Permission: payments.bank_instructions controls access to the per-resort Finance tab, the same permission that used to gate the old organization-level bank form.

Payment page

The payment page is a public page — clients do not need a ResortStrata account to view it. The link is unique to each invoice, HMAC-signed, and has an expiry time for security. On this page the client can see the invoice details and choose to pay by card or bank transfer.

Webhook configuration

For payment confirmations to be processed automatically, you must set up a webhook endpoint in your Stripe dashboard pointing to your ResortStrata webhook URL. When Stripe confirms a successful payment, the webhook handler automatically marks the corresponding invoice as paid. The same webhook also listens for refunds: when a charge is refunded in Stripe, a matching credit note is created automatically against the original invoice.

Credit notes and refunds

To credit a client back against an invoice — whether for an overpayment, a correction, or a write-off — click the Credit button next to a sent or paid invoice on the Invoices page. Enter the amount to credit (capped at the invoice total) and an optional reason. A credit note is issued with its own monotonic per-organization number (CN-1, CN-2, …) and linked to the original invoice.

Refunds processed in Stripe automatically create a matching credit note — no manual action required. The credit is recorded with the Stripe refund ID so duplicate webhook deliveries don't double-credit the account.

The owner's statement of account shows credit notes in the transaction log as negative rows and subtracts them from the outstanding balance. For accounting exports, credit notes are included as ACCRECCREDIT rows in the Xero-compatible CSV.

Late fees and automatic reminders

Staff with the fees.manage permission can configure a late-fee policy from Settings > Invoicing:

  • Grace period — number of days past the due date before a fee is applied (default 7).
  • Flat late fee — a fixed amount added as a "Late fee" line to the invoice.
  • Interest rate — an optional percentage of the outstanding total, added on top of the flat fee.

When late fees are enabled, the nightly command app:invoices:apply-late-fees finds invoices that are past their grace period, adds the computed "Late fee" line to each, emails the bill-to contact a reminder, and marks the invoice as reminded so it is not charged twice. Run the command from your cron at a quiet time each day (early morning is typical). Use --dry-run to preview what would happen without applying anything.

Accounting export

Reports > Accounting export downloads a CSV of every non-draft invoice and credit note issued in a date range, in the column layout Xero (and most other tools that accept a Xero-shaped invoice import) expect. Each line item is a separate row with the same InvoiceNumber; credit notes appear with InvoiceType = ACCRECCREDIT and negative amounts. The AccountCode column defaults to 200 ("Sales") — the accountant typically remaps this on import to match their own chart of accounts.

Tip: Test your Stripe integration using Stripe's test mode keys before going live. This lets you verify the full payment flow without processing real charges.

14

Email broadcasting

Composing broadcast emails

Navigate to Email and click New Broadcast. The composer includes a rich text editor that supports formatting such as bold, italic, headings, links, lists, and a Small text size for fine print like copyright, disclaimers, and terms. Content pasted from Word or Google Docs is automatically sanitised to remove stale styles and hidden markup.

Audience selection

Every broadcast is sent to a mailing list. Pick the list from the dropdown at the top of the composer. Only contacts on that list with valid email addresses and marketing opt-in enabled will receive the email. See Mailing Lists for how to build and manage them.

Starting from a template

If you have email templates set up, the composer shows a "Start from template" picker at the top. Choosing a template prefills the subject and body; you're free to edit either before sending. Templates save time for recurring messages like welcome notes, reminders, and annual fee notifications.

Merge tags

Subjects and bodies support MailChimp-style merge tags that are expanded per recipient at send time:

  • *|FNAME|* (or *|FIRSTNAME|*) — the recipient's first name.
  • *|LNAME|* (or *|LASTNAME|*) — the recipient's last name.
  • *|EMAIL|* — the recipient's email address.
  • *|ORGNAME|* (alias *|LIST:COMPANY|*) — your organization's name.
  • *|UNSUB|* — the recipient's unsubscribe URL (the link text in the email reads "Unsubscribe").
  • *|CURRENT_YEAR|* — the current year, handy for footers and copyright lines.

You can also use conditional blocks so the email reads well when a field is missing. For example:

*|IF:FNAME|*Hi *|FNAME|*,*|ELSE:|*Hello,*|END:IF|*

The matching *|IFNOT:TAG|* … *|END:IFNOT|* form renders its block only when the field is empty. Unknown tags render as nothing, so a template pasted from MailChimp never leaks raw *|…|* tokens.

Always hit Send Test to Me first to confirm merges render the way you expect.

Default Reply-To

Your organization has a default reply-to email address configured in Email > Settings. When owners reply to any broadcast, their replies land in that inbox rather than a no-reply address.

Attachments

Drag and drop files directly into the attachments area in the composer (or click to browse). Each file uploads in the background immediately — you'll see a per-file progress bar that completes with a green ✓ when the file is stored on the server. The Send, Save draft, and Send test to me buttons are disabled while any upload is still in flight, so you cannot accidentally dispatch a broadcast before its attachments are fully received.

Total attachment size is capped at 5 MB across all files. Supported types include PDF, DOCX, XLSX, JPG, PNG, GIF, WEBP, TXT, and CSV. Remove an attachment at any time with the × button next to it.

When you edit an existing draft, attachments that have already been saved to that draft appear in the same drop zone with a green ✓ marker, so you don't re-upload duplicates.

Test emails

Before sending, use Send Test to Me to email the broadcast to your own address. Attachments, merge tags, and unsubscribe links are all included so you see exactly what recipients will see. Test sends bypass the normal queue and go out immediately.

Draft saving and editing

Broadcasts can be saved as drafts and edited later. You can also delete a draft or a completed broadcast from your broadcast history. Attachments you uploaded in a compose session but didn't save are discarded when you reload or navigate away — only a saved draft preserves them.

Email templates

Navigate to Email > Templates to create and manage reusable email templates. Each template has a name, subject, and body, all of which support the same rich-text editor and merge tags as a broadcast. When composing, choose a template to prefill the subject and body. Templates belong to your organization and are shared across your staff.

Sending to hundreds of recipients

Large broadcasts are dispatched asynchronously via a background worker, so the UI never hangs while emails are being sent. You can navigate away from the page as soon as you click Send; progress continues in the background.

Delivery, open, bounce, and complaint tracking

Every outgoing email is tracked through Amazon SES. Your broadcast detail page shows:

  • Sent — dispatched to the mail provider.
  • Delivered — accepted by the recipient's mail server.
  • Bounced — permanently (invalid address) or temporarily (mailbox full). Permanent bounces automatically clear the contact's marketing opt-in so they will not be retried.
  • Complained — marked as spam by the recipient. This also clears marketing opt-in.
  • Opened and Clicked — captured via SES open/click tracking on the outgoing messages.
  • Send failed — the mail provider rejected the message at the point of send (e.g. invalid address format). These are listed in the delivery log with the error message so you can follow up individually; they do not count towards the recipient total on the broadcast summary.

Reliability of large broadcasts

If the background worker crashes or is restarted mid-send, the broadcast is automatically put back into draft status rather than being stuck in "sending" forever, and the next run only emails recipients who were not already processed — nobody gets two copies. This means you can safely re-issue a broadcast that got interrupted without needing to rebuild the audience list.

Unsubscribe

Every broadcast email includes a one-click unsubscribe link keyed to an unguessable token unique to the recipient. Clicking it immediately clears the contact's marketing opt-in; they won't receive future broadcasts. The email also sets the standard List-Unsubscribe header so mail clients like Gmail show a prominent unsubscribe button.

Trial accounts

To prevent platform misuse, broadcasts on a free trial can only be sent to your built-in Test Group — a mailing list capped at up to 5 activated staff members (see Mailing Lists). You can still compose, save drafts, send test emails to your own address, and send real deliveries to your Test Group. Sending to any other mailing list is blocked server-side until you subscribe. Only staff who have clicked the activation link in their invite email count toward the Test Group — invited-but-not-activated staff do not receive trial broadcasts.

Tip: Always send a test email first. Check it on both desktop and mobile, and click the unsubscribe link to confirm it lands on the expected page.

15

Owner self-service portal

What the owner portal is

Owners can log in to their own limited portal at /portal/my to see only the information that relates to them. They never see other owners, internal operational data, or your staff tools. This reduces phone calls to your office for routine "what do I owe?" and "when's my next week?" questions.

Inviting an owner to the portal

Open a contact record and click Invite to portal. The contact receives an email with a secure invitation link. When they follow it they set their own password and are signed in immediately. From that point forward they can log in at the normal portal login URL using their email address and password.

What an owner sees

The owner portal is automatically scoped to the contact record linked to their user account. An owner sees:

  • My dashboard — a summary of their units, upcoming bookings, and unpaid invoices.
  • My bookings — every reservation on any of their owned units, with dates, type, status, and guest details.
  • My invoices — every invoice billed to them, with pay links for anything unpaid.
  • Statement of account — a running-balance view with outstanding-by-age breakdown (current / 1–30 / 31–60 / 61–90 / 90+ days), paid year-to-date, all-time totals, and every charge and payment line ordered by date.
  • My profile — edit their name, email, and phone.

Data isolation

Owner portal queries are always filtered by the signed-in user's linked contact record. An owner physically cannot retrieve, view, or modify records belonging to other owners, even by altering URLs. This is enforced at the query level, not merely via UI hiding.

Owners who are also staff

A single user account can be both an owner (linked contact) and a staff member (linked to a permission group). Such users see a toggle in the sidebar letting them switch between the full staff portal and the owner self-service view.

Payments from the owner portal

The Pay now button on an owner's invoice uses the same secure, HMAC-signed pay link flow as invoice emails. Payment is processed through your connected Stripe account exactly as it would be on the public pay page.

Once the payment clears (Stripe webhook confirms it), the invoice is automatically marked paid and an itemised receipt email is sent to the bill-to address — referencing the invoice number, amount, and payment date, and listing the line items. Receipts are queued asynchronously and are idempotent, so a webhook retry from Stripe will not produce a duplicate email.

Tip: Consider inviting a handful of friendly owners to the portal first and asking for feedback before rolling out a bulk invite. This helps you catch anything surprising in your specific tenancy before it reaches everyone.

16

Reports

Reports library

ResortStrata ships with five pre-built reports covering the operational and financial questions most resort teams need to answer routinely. Four — occupancy, aged receivables, maintenance, and fee collection — have an on-screen view with filter form and summary KPIs plus one-click CSV export; the fifth is a direct accounting CSV export for your finance software.

Occupancy by resort / period

Navigate to Reports > Occupancy. Filters: date range, resort (optional). Output: per-resort breakdown of nights booked by type (owner, rental, blocked, maintenance). Useful for understanding utilisation and the owner-vs-rental mix.

Aged receivables

Reports > Receivables. Filters: as-of date (defaults to today). Output: unpaid invoices bucketed by age — current, 0-30 days overdue, 31-60, 61-90, and 90+. Each bucket totals by currency so you can see exactly what's outstanding and how stale it is.

Maintenance & servicing stats

Reports > Maintenance. Filters: date range. Output: total jobs, breakdown by category, status, and priority, plus average days-to-complete for finished jobs. Helps spot recurring problem areas and measure team response times.

Fee collection rate

Reports > Fee Collection. Select an assessment run (year) to see paid vs outstanding counts and dollar amounts, the collection percentage, and a per-unit grid showing owner, amount, invoice number, and payment status. Essential for AGM reporting and provisions planning.

Accounting export

Reports > Accounting export streams every non-draft invoice and credit note in a date range as a Xero-compatible CSV. See Payments for the column layout and how credit notes are represented.

CSV export

Every report has an Export CSV button that streams the full detail rows as a CSV file. The file opens directly in Excel, Google Sheets, or any accounting package that accepts CSV input.

Tip: Schedule a recurring calendar reminder (monthly or quarterly) to export the Receivables and Fee Collection reports — this makes trend-spotting far easier than relying on ad-hoc reviews.

17

Staff & permissions

Inviting staff

Navigate to Settings > Staff and click Invite Staff. Enter their first name, last name, email address, and pick one or more permission groups to assign on invitation. The person receives an invitation email with a secure activation link. They click the link, set their own password, and at that point become an activated member of your organization with the selected permissions.

Until they click their activation link, invited staff appear as pending — they can't log in, and they don't count toward the Test Group for trial broadcasts. You can re-send an invite from the staff list if their original email was lost.

Editing existing staff

From the staff list click Edit next to any person to update their first name, last name, and permission group assignments. Changes take effect immediately on their next request.

Permission groups

Access within ResortStrata is controlled through permission groups. A permission group is a named collection of permissions that can be assigned to staff. Typical examples:

  • Housekeeping — servicing.view/edit, housekeeping.view/edit.
  • Reservations desk — reservations.view/edit, contacts.view, occupancy.view.
  • Finance — invoices.view/send, fees.manage, statements.view, reports.view, billing.manage.
  • Manager — broad access across the entire organization.

Available permissions

The following permissions can be included in a group:

  • resorts.view / resorts.edit — view or manage resorts and units.
  • contacts.view / contacts.edit — view or manage contacts and tags.
  • occupancy.view / occupancy.edit — view or manage base occupancy allocations.
  • reservations.view / reservations.edit — view or manage the reservation / PMS workflow (check-in, check-out, cancellation).
  • housekeeping.view / housekeeping.edit — view or change the housekeeping status board.
  • servicing.view / servicing.edit — view or manage servicing tasks.
  • jobs.view / jobs.edit — view or manage maintenance jobs.
  • fees.manage — configure and issue annual fee assessments.
  • invoices.view — view invoices.
  • invoices.send — send invoices to clients.
  • statements.view — generate statements of account for individual contacts or all clients.
  • email.broadcast — compose and send broadcast emails, and manage email templates and mailing lists.
  • reports.view — access the reports library and CSV exports.
  • billing.manage — access billing settings and manage the subscription.
  • users.manage — invite, edit, and remove staff, and assign permission groups.
  • groups.manage — create, edit, and delete permission groups.
  • members.assign_groups — assign permission groups to staff without the broader users.manage rights (e.g. a team lead who only manages who is in which group).
  • payments.stripe_credentials — view and update Stripe API credentials.
  • payments.bank_instructions — edit bank transfer instructions.
  • support.manage — create and manage support tickets.

Creating and editing permission groups

Go to Settings > Permission Groups and click Create Group. Give the group a name and select the permissions it should include. You can edit or delete groups at any time — changes take effect immediately for everyone assigned to that group.

Assigning groups to staff

From the staff list, click Edit on a person. Check one or more permission groups and save. A staff member's effective permissions are the union of all permissions from all assigned groups.

Note: New permissions introduced in recent releases (fees.manage, reservations.*, housekeeping.*, reports.view, statements.view) are not added to existing groups automatically. Review your groups and add the new permissions where appropriate before users will see the corresponding sidebar items.

Resort-scoped access

By default every staff member can see every resort in the organization. For multi-resort organizations, the staff edit page has a Resort access section — tick "Restrict to specific resorts" and choose which resorts this member should work in. Regional concierges, per-site housekeeping crews, and single-resort reservation desks are the common use cases.

When a restriction is active, the following pages automatically filter themselves to only the allowed resorts:

  • Resorts — list + edit + delete (staff can't open a resort they aren't scoped to; they get a 403).
  • Units — all unit pages nested under a resort.
  • Reservations list and the "new reservation" unit picker.
  • Occupancy allocations list and the "new allocation" unit picker.
  • Servicing task list and the "new task" unit picker.
  • Maintenance jobs list and the "new job" resort picker.
  • Housekeeping status board.

Not yet filtered by resort restriction (visible to any staff member with the relevant permission): the Invoices list, Fee assessments, Reports, and Dashboard stats. Those areas are intentionally cross-resort for now — finance and admin roles typically need a whole-org view. This is a planned follow-up.

Changes to a staff member's resort access are recorded in the audit log as staff.resort_access_changed with before/after lists.

Removing staff

To remove a staff member from your organization, go to their profile in the staff list and click Remove. This revokes their access to all organization data immediately.

Tip: Follow the principle of least privilege — give staff only the permissions they need for their role. This reduces risk and keeps your data secure.

18

Billing & subscription

Trial period

New organizations receive a 30-day free trial with full access to all features. You can see how many days remain on your trial from the Billing page.

Per-room pricing model

Pricing is based on the total number of units across all resorts in your organization. There is a minimum of 5 units for billing purposes. As you add or remove units your subscription quantity is updated automatically — no manual step is needed. The Billing page shows your live billed quantity, and admins can press Sync now there if it ever looks out of step.

Supported currencies

ResortStrata supports subscriptions in USD, GBP, and EUR. Choose your preferred currency when subscribing.

Payment methods

ResortStrata accepts two payment methods for your subscription:

  • Card payment (Stripe) — available in GBP, USD, and EUR. Charges are processed instantly.
  • Direct Debit (GoCardless) — available in GBP only (UK BACS scheme). Mandate setup takes 2–5 working days; once active, payments take roughly 3 working days to clear.

From the Billing page, click Subscribe on the method that suits you. Card payments redirect to a Stripe Checkout session; Direct Debit redirects to a GoCardless mandate-authorisation page where you confirm bank details and authorise future payments.

Switching payment methods

You can switch between Card and Direct Debit at any time from the Billing page. To prevent double-billing, the new payment method takes effect at your next renewal date: your current method will be charged once more on that date, and the new method takes over from the cycle after.

If you initiate a Direct Debit setup close to your renewal date, the new method may take an extra cycle to become active — bank mandates need a few working days to authorise. The Billing page shows your switch status while it is in flight, including the renewal date the new method takes effect on.

You can cancel a pending switch at any time before the renewal date by clicking the link in the in-progress banner on the Billing page.

Cancelling your subscription

From the Billing page, the Current subscription card shows your active payment method (Card or Direct Debit) and the next billing date. Click Cancel subscription to schedule cancellation at the end of the current paid period — you will keep full access through to that date and no further payments will be taken. The card then displays the end date and a Reactivate subscription button so you can change your mind any time before the period closes.

For Card subscriptions, cancellation is registered with Stripe immediately (the subscription is set to end at period close). For Direct Debit, the next scheduled payment is skipped and the subscription closes on the upcoming billing date — your bank mandate is left in place so you can resubscribe later without re-authorising.

What happens when your subscription expires

If your trial ends without subscribing, or if your paid subscription lapses, portal access is restricted to the Billing page only. You will not lose any data — it remains safely stored — but you will need to subscribe or renew before you can access other portal features again.

Tip: Subscribe before your trial ends to avoid any disruption. You can cancel at any time from the Billing page.

19

Support tickets

Creating support tickets

If you need help or encounter an issue, navigate to Support and click New Ticket. Provide the following information:

  • Subject — a brief summary of your issue or question.
  • Description — detailed information about what you are experiencing, including steps to reproduce if applicable.
  • Urgency — how urgently you need a response.
  • Category — the area of the platform the issue relates to.

Viewing ticket details and message history

Click on any ticket in your support list to view its full details and the complete message history. All communication between you and the support team is recorded in the ticket thread.

Replying to tickets

Use the reply form at the bottom of the ticket detail page to send additional messages. Provide any requested information or follow-up details to help resolve your issue quickly.

Closing tickets

Once your issue is resolved, you can close the ticket. Closed tickets remain in your history for reference but are no longer active.

Tip: Include as much detail as possible when creating a ticket — screenshots, error messages, and steps to reproduce all help the support team resolve issues faster.

20

Audit log

Every money-touching action in ResortStrata is recorded to a per-organization audit log. Staff with the users.manage permission can view it under Settings > Audit log. The log is append-only — entries cannot be edited or deleted from the UI.

What's recorded

Each entry captures the who, what, and when:

  • Actor — the staff member who performed the action (or system for automated events like Stripe webhooks and the late-fee job). The actor's name and email are snapshotted so the entry remains readable even if the user is later removed.
  • Action — a dotted identifier such as invoice.sent, invoice.resent, invoice.receipt_sent, invoice.paid, invoice.deleted, invoice.late_fee_applied, credit_note.issued, credit_note.stripe_refund, late_fees.policy_changed, ownership.add / ownership.edit / ownership.transfer / ownership.remove, statement.emailed, staff.invited, staff.removed, staff.resort_access_changed, or 2fa.enabled / 2fa.disabled.
  • Target — the entity the action affected, plus a human label (e.g. invoice number, credit-note number, contact name).
  • Summary — one-line plain-English description.
  • IP address — the request IP that initiated the action, when available.
  • Details — structured JSON context for forensic replay (e.g. before/after values for policy changes, Stripe refund IDs, fee-cents and days-overdue for late fees).

Filtering and browsing

The log page shows the most recent 50 entries, newest first, paginated. Filter by action prefix (e.g. invoice. to see every invoice event, credit_note. for credits) or target type (e.g. Invoice, Membership).

21

Security

Password requirements

All user passwords must be at least 8 characters long. We recommend using a strong, unique password that combines letters, numbers, and symbols.

Password reset flow

If you forget your password, click Forgot password on the sign-in page. Enter your email address and you will receive a password reset link. This link is time-limited for security — use it promptly.

Two-factor authentication (2FA)

Every user can opt into time-based one-time password (TOTP) 2FA from Settings > My account. Click Enable 2FA, scan the QR code with any compatible authenticator app (Google Authenticator, 1Password, Authy, Bitwarden), and enter a code to confirm setup.

On future sign-ins, after the correct password is entered, you'll be asked for the current 6-digit code from your app. If the code matches (±30 seconds of clock drift), you're signed in; otherwise the sign-in is rejected.

Recovery codes are generated when you enable 2FA — a set of 10 one-time codes you should save somewhere safe (print them, store them in a password manager). If you lose access to your authenticator device, enter one of these codes instead of a 6-digit TOTP code on the 2FA prompt. Each code works once. Once you run out of codes, turn 2FA off and on again (while still logged in) to generate a new set.

To turn 2FA off, open Settings > My account while signed in and click Turn off 2FA. This reverts the account to password-only. Turning 2FA on and off is captured in the audit log as 2fa.enabled / 2fa.disabled.

Session security

Your portal session is secured with industry-standard practices. Sessions expire after a period of inactivity, and all session cookies are transmitted over HTTPS only.

Login throttling

To protect against brute-force attacks, the system enforces login throttling: after 5 failed login attempts within a 15-minute window, further attempts are temporarily blocked. Wait for the cooldown period to pass before trying again.

CSRF protection

All forms in the portal are protected with CSRF (Cross-Site Request Forgery) tokens. This prevents malicious websites from submitting actions on your behalf.

Encrypted storage for Stripe credentials

Your Stripe API keys and webhook secrets are stored using encryption at rest. They are never displayed in full after initial entry and are only decrypted when needed to process a payment.

HMAC-signed invoice payment links

Payment links sent to clients are signed using HMAC (Hash-based Message Authentication Code). Each link includes a signature and an expiry timestamp. This ensures that links cannot be forged or tampered with, and that they become invalid after a set period.

Organization data isolation

All data in ResortStrata is strictly isolated by organization. Users in one organization can never see or access data belonging to another organization. This isolation is enforced at the application level across all queries and actions.

Tip: Use a unique, strong password for your ResortStrata account and do not share your login credentials with others. Use the team invitation system to grant access to colleagues instead.

22

Multi-organization

Switching between organizations

If you belong to more than one organization — for example, if you manage properties for multiple companies — you can switch between them using the organization switcher in the portal sidebar. Clicking on a different organization changes your context immediately.

How organization context works

When you select an organization, all portal data — resorts, contacts, invoices, jobs, and everything else — is scoped to that organization. The sidebar, dashboard, and all list views reflect only the data belonging to your currently selected organization.

Data isolation between organizations

Each organization's data is completely separate. Contacts, resorts, invoices, team members, and settings from one organization are never visible when you are working in another. This ensures privacy and prevents cross-contamination of data between different business entities.

Tip: Check which organization you are viewing before creating records. The organization name is displayed in the sidebar so you always know your current context.