Industry guide · Booking & Scheduling

Ski Resort Software: Passes, Lessons, Rentals and Lift Access That Actually Reconcile

The short answer

Build only the layer your competitors cannot copy: the entitlement engine, the instructor assignment board, the rental evidentiary record and the guest identity graph. Keep buying card processing, gates and your PMS. Based on Digital Heroes delivery experience across 2,000+ projects, a focused first release runs $60k to $130k and ships in 12 to 16 weeks, and a full resort platform runs $150k to $400k phased over 6 to 12 months. If you run one base area, under roughly 150,000 skier visits and no alliance settlement, stay on accesso RTP|ONE or Siriusware and spend the money on snowmaking instead.

Why this software makes or breaks a ski resort

Your revenue arrives in a handful of four-hour windows: MLK Saturday, Presidents' weekend, the first real storm after Christmas. Everything else is fixed cost. Lift mechanics, snowmaking power, patrol, the groomer payment, the seasonal housing you are carrying whether it snows or not. The systems that sell a pass, assign an instructor, hand over a pair of skis and open a gate are doing the actual work of the resort during the four hours that pay for the year.

The stack is almost always the same. accesso RTP|ONE or accesso Siriusware for POS (Point of Sale), ticketing and rentals. Aspenware Commerce bolted on top because the native web store could not sell the bundle marketing invented. Inntopia for lodging and CRM (Customer Relationship Management). Axess or SKIDATA gates and handheld readers at the lift line, each with its own controller and its own idea of what a valid ticket is. Then the shadow stack: WhenToWork or a Google Sheet for instructor scheduling, Smartwaiver for the rental release, Toast at the mid-mountain lodge, and a banker's box in the back of the rental shop holding the paper your lawyer will eventually ask for.

7:40am Saturday, 14 inches overnight. Will-call is 90 people deep because the online sale created an order but not printable media, so every pre-purchase still costs a window transaction. Ski school has 220 kids checked in against 180 booked slots, because the booking engine sold lesson product inventory and never looked at instructor supply. The fitters are calling heights and weights across a counter and writing DIN settings on a form. At 9:05 the Mid-Mountain gate admits 40 Ikon holders whose allotment days were already spent, because the hot list only pushes to controllers every 15 minutes. By Monday the GM knows revenue was up. Nobody can say by how much per guest, per product, or where it leaked.

Problem: your pass, your ticket and your gate disagree on what "valid" means

Take one ordinary product: Local's Midweek with three holiday days, blacked out December 26 to January 1, 20 percent off food and beverage, one $59 buddy ticket per month, non-transferable, family price if two adults and two kids under 12. That is one line on your rate card and five records in RTP: a pass product, a blackout table, a discount profile, a voucher and a buddy code your ticket seller issues by hand. The gate knows almost none of it. It knows a media ID and a validity window that was downloaded to the controller at some point this morning.

Off-the-shelf cannot fix this because the entitlement model is a fixed set of fields somebody chose years ago. Marketing invents a new pass every spring, the system supports two thirds of it, and ops closes the gap with a spreadsheet plus a rule the seller is supposed to remember at 7:40am with 90 people in line.

A custom build makes entitlement the single source of truth. One rule object per product covering date ranges, lift subsets, day counts, transferability, party composition and reciprocal tiers, evaluated identically at purchase and at scan. Controllers receive a signed entitlement push on change instead of a batched hot list. Gates and handhelds hit a validation service against a 200ms budget with a local cache and an explicit offline policy for the six-minute network drops at the top station. Every scan writes an event carrying media ID, lift, timestamp, entitlement version and the specific rule that granted or denied, so the lift attendant can tell the guest why, instead of pointing them back down to guest services.

Problem: ski school capacity is instructor-shaped, and your booking engine sells lesson-shaped inventory

You publish "Kids Full Day Group, ages 4 to 6, 9:30am" with 60 slots. Real capacity is how many PSIA Level 1 and above instructors are cleared for that age band, are actually on the schedule, actually showed up, and can teach in Spanish for the three families from Mexico City. Your snowsports director builds the assignment board at 6:30am on a whiteboard, from a printed roster and the callout texts on her phone.

RTP's ski school module and Siriusware track a product and a class. Staff scheduling lives in WhenToWork or Deputy with no shared identity. Nothing in the stack can join "instructor 4127 is Level 2, children's specialist, speaks Spanish, has a six-hour pay guarantee and is already committed to a private at 10" to "this booking, right now".

Build it and the instructor becomes a first-class record: certification level, children's and adaptive endorsements, languages, pay band, availability, guarantee terms. Sellable slots are computed continuously from assignable instructor supply per age band per meeting location, so the product sells out at the point the next booking would break ratio, not at an invented number. When an instructor texts out at 5:50am, the board re-solves and the director gets the rebalance on her phone by 6:05 with exactly what broke and which privates to convert. AI earns its keep here as an assignment solver: hard constraints (ratio, certification, language) and soft ones (instructor requests, the guest who asked for the same instructor as last February, guarantee cost) resolved in seconds instead of ninety minutes of marker and eraser.

Problem: the rental shop's liability record is paper in a banker's box

8:15am, 400 walk-ins. The fitter takes height, weight, age, boot sole length and skier type, calculates a setting per ASTM F1063, writes it on the agreement, the guest signs, the form goes in the box. Three seasons later a demand letter names a specific day. You now need: the signed release with its exact form version, the calculated DIN, the value actually tested on the calibrator, the tech who set it, and the calibration record for that jig on that date. What you have is a box, a Smartwaiver export of signatures that does not join to anything, and a Siriusware rental line with the ski serial but not the tested value.

Rental modules were built to track an asset out and back and to book revenue. Waiver tools store a signature, not fitting parameters. Nothing links the test jig's calibration log to the transaction, which is the exact link that matters.

One custom rental record carries all of it: verified guest identity, height, weight, boot sole length, skier type, calculated DIN, tested DIN, tester ID, jig ID and its last calibration date, ski serial and mount history, and the release with its form version hash, retained for your state's statute of limitations. In the builds we have shipped, fitters work on a handheld that pre-fills a returning guest's profile, which turns a four minute counter transaction into well under a minute on the busiest morning of the year. Fleet side, serial-level history (days out, mount count, base grinds, retirement date) means next season's buy is driven by utilization per model per length, not the number the shop manager guesses in April. AI does two unglamorous jobs well here: after-hours reservation intake by chat that captures fitting data before the guest ever reaches the counter, and extraction of vendor pack lists and invoices into serial-level inventory at receiving, instead of two people scanning for a day.

Problem: alliance settlement is a monthly archaeology dig in Excel

Ikon, Mountain Collective, Indy Pass, plus your own reciprocal deals with two neighboring hills and the state college. Every one has different redemption logic: allotment days versus unlimited tiers, two days plus a discounted third, blackout carve-outs. Every one sends a settlement file in its own format on its own calendar. Your controller exports scans out of Axess, opens the partner file next to it, finds a variance, and cannot tell whether it is a duplicate scan, a foot passenger, or a redemption you were never paid for. A gap he cannot explain, on a material program, every month, forever.

RTP and Siriusware ledger the products they sold. An alliance redemption is a revenue event created in someone else's system and matched to a scan in a third system. No off-the-shelf resort product owns that three-way join, and none of the vendors is going to build it for you.

Custom looks like this: a per-partner ingestion layer over SFTP drop or API, a canonical redemption record, and automated matching that pushes only exceptions into a queue with reason codes: no matching scan, scan without claim, duplicate inside window, wrong product tier. Your controller works forty exceptions, not four thousand rows. The same clean data is what makes real window pricing possible: price by day, product and lead time against your actual sell-through curve, the lodging book, and the forecast.

Problem: nobody can answer "what happened yesterday" until Wednesday

Monday morning the GM wants skier visits, revenue per visit, lesson conversion split by lodging guest versus day tripper, rental attach rate on lesson bookings, and window wait time. Instead: RTP reports run against production and time out, Aspenware holds its own order data, Inntopia holds the lodging stay, Axess holds the scans, Toast holds the burger, and someone in finance stitches a workbook by Wednesday afternoon, at which point it is a history lesson.

The root cause is that the same human is four records with no shared key. Fix that first: a warehouse plus identity resolution across media ID, pass ID, email, phone, lodging reservation and card token, so a guest is one person across the mountain. Then the useful things become cheap. Yield dashboards by 8am instead of Wednesday. A staffing forecast that says at 4pm today "tomorrow prints 6,400 visits, put 14 lifties on the north side, open the second rental counter", using the snow forecast, the reservation book and your own pace curve. A lesson demand model per age band so the director publishes the instructor call list Thursday, not Friday at 9pm. And an after-hours assistant that answers "can I move my Saturday lesson", checks real instructor capacity, moves it and issues the credit, without a rep on shift.

What this costs and how long it takes

Digital Heroes delivery experience across 2,000+ projects: a focused first release, one problem solved end to end, typically lands at $60k to $130k and ships in 12 to 16 weeks. A full platform, meaning entitlement plus commerce plus ski school plus rentals plus the reporting layer, runs $150k to $400k phased over 6 to 12 months. In this category, four things push you toward the top of the band.

Hardware you do not control. Axess and SKIDATA gates, controllers, handhelds and RFID encoders at the window are each a vendor relationship, a protocol and an on-mountain test window. Budget for the trip, not just the code. The season itself. You cannot cut over in February. Your integration window is a dry mountain in October and November, your real load test is opening weekend, and that cadence has a price. Legacy extraction. Ten years of pass history out of RTP|ONE or Siriusware, deduped against Inntopia guests, against a schema nobody documented for you. And PCI scope: card-present at nine windows plus e-commerce. Keep card data out of your application on a validated point-to-point encrypted path through Shift4 or Elavon and scope stays sane. Try to touch a card number and the number doubles. Each additional partner settlement integration adds real weeks too, because each one is a bespoke file.

Build versus buy, and where the line actually sits

Buy is the right answer more often than agencies admit. One base area, under roughly 150,000 skier visits, one rental shop, pass products you can each describe in a single sentence, no alliance settlement: RTP|ONE or Siriusware with Aspenware Commerce and your gate vendor's stack will cost less than anything you build, and the money belongs in snowmaking. Do not build a POS. Do not build a payment gateway. Do not build a lodging PMS. Those are commodities and you will lose that race.

Build when the signals are concrete. You employ a person whose real job is a spreadsheet the resort cannot open the gates without. Marketing's spring pass plan gets vetoed by "the system can't do that" more than once a season. You run two base areas or two mountains on one pass and roll them up by hand. Your reciprocal and alliance revenue is material and reconciled in Excel. Or your vendor's answer for the thing you need has been "next release" for two consecutive seasons, or the module you depend on quietly went into maintenance after an acquisition.

The position: the right build is almost never "replace RTP". It is to build the four layers nobody can copy from you, entitlement, instructor assignment, the rental evidentiary record and guest identity, and keep renting the plumbing. Own the data model, rent the pipes.

How to choose a developer for ski resort software

Make them model your ugliest pass in the first meeting. Hand them the midweek local's with holiday days, blackouts, buddy tickets and the family plan. If they reach for a boolean and a date range, they have built booking systems, not entitlement systems. The shop you want asks, unprompted, what happens to a scan at 3:58pm on December 25, whether the buddy ticket is an entitlement or a product, and which time zone the blackout boundary lives in.

Ask what they have shipped against hardware they do not own. Gate and handheld integration is a vendor relationship plus an offline story plus a 48-hour window on a cold mountain in November. Ask specifically: what does the lift attendant see when a controller has been offline 20 minutes, and who eats the ride that should not have happened. "We would queue and retry" is not an answer, it is a shrug.

Check they can read your legacy without your vendor's cooperation. Ten seasons of pass history out of RTP|ONE or Siriusware, deduped against Inntopia and your marketing lists. Ask for their identity resolution approach before you ask for a number. If they cannot describe how they collapse four records into one guest, the reporting layer they sell you will be a prettier version of the Wednesday workbook.

Get compliance and ownership in writing on day one. PCI scope for card-present plus e-commerce, evidentiary retention for rental releases and patrol incident records matched to your state's statute of limitations, and whatever your tramway authority requires, whether that is the Colorado Passenger Tramway Safety Board or your state's equivalent. Then the ownership clause: your repository, your infrastructure as code, your cloud accounts, and the explicit right to hire a different team next October without asking anyone's permission.

Research & sources

The evidence behind this guide

Independent findings on why this investment pays off. Every link goes to the primary source.

  1. Across ten outpatient clinics the mean no-show rate was 18.8%, and the marginal cost of no-shows reached $14.58 million per year for those clinics, at roughly $196 per missed appointment (2008 figures). Source: BMC Health Services Research / PubMed Central (Kheirkhah et al.) (2015) →
  2. Only 15.6% of patients had actually used online appointment booking even though 45.1% were aware their practice offered it, with a steep decline in uptake among patients over 75 and in the most deprived areas. Source: BMC Primary Care / PubMed Central (McKinstry et al.) (2024) →
  3. The median annual wage for U.S. software developers was $133,080 in May 2024, and employment is projected to grow 15% from 2024 to 2034 - a core input to any in-house build-vs-buy TCO model. Source: U.S. Bureau of Labor Statistics (2024) →
  4. The average number of formal learning hours used per employee fell to 13.7 in 2024, down from 17.4 in 2023, a decline the report attributes partly to a shift toward informal and on-the-job learning not captured in the formal-hours metric. Source: Association for Talent Development (ATD) (2025) →
Rohan Malhotra · Enterprise Software Consultant

Rohan advises mid-market and enterprise teams on ERP, CRM and custom software, and has led delivery on dozens of business-software builds.

Writes for Digital Heroes, shipping business software for 2,000+ brands across 55+ countries since 2017.

FAQ

Frequently asked questions

How much does custom ski resort software cost for a resort doing 400,000 skier visits?
At that volume you are usually looking at $150k to $400k for a full platform, phased over 6 to 12 months, based on Digital Heroes delivery experience across 2,000+ projects. Most resorts that size start with one focused release at $60k to $130k over 12 to 16 weeks, typically the entitlement and gate layer or ski school assignment, because it pays for itself inside a season. Price climbs with each gate vendor integration, each alliance settlement partner and the depth of your legacy pass history.
Should we replace accesso RTP|ONE or build around it?
Build around it. RTP is doing the boring, hard, regulated work of POS and ledgering, and replacing it is a multi-year project with no competitive payoff. The value sits in the layers RTP was never designed to own: a real entitlement engine, instructor-aware ski school capacity, alliance settlement matching and a guest identity graph, all reading and writing to RTP through its integration surface.
Do we still need Aspenware Commerce if we build our own booking layer?
Usually no, if the custom layer covers the products Aspenware was bought to sell. Most resorts adopted Aspenware because the native web store could not handle bundles, dynamic pricing or will-call fulfillment, and a custom commerce layer with a proper entitlement model handles all three. Keep Aspenware if you rely heavily on its lodging package tie-ins with Inntopia and you are not ready to rebuild that flow.
Can we get custom pass and lift access software live before next season?
Yes for a focused first release if you start by roughly April or May. A 12 to 16 week build puts you in integration testing on a dry mountain in October and November, which is the only realistic window because you cannot cut over mid-season. Starting in September means opening weekend is your first real test, and that is not a risk worth taking on lift access.
How do we migrate ten years of pass history off Siriusware without losing passholders?
Run extraction and identity resolution as a discrete workstream before any cutover, not as a final-week task. The hard part is not moving rows, it is collapsing the same human across Siriusware, Inntopia, Aspenware orders and gate media into one guest record, then proving renewals, credits and grandfathered pricing survived. Plan a shadow period where the old and new records reconcile nightly and finance signs off before you switch.
Do we own the code if an agency builds our resort platform?
You should, and it belongs in the contract before kickoff, not after. Ask for the repository under your organization, infrastructure as code in your own cloud accounts, your own gate and payment vendor credentials, and the explicit right to hire a different team next season. If any of that is conditional on paying a retainer, you are buying a lease, not a platform.
What compliance do we actually have to worry about if we build our own ticket window POS?
Two things: PCI scope on the payment side and evidentiary retention on the liability side. Keep card data out of your application entirely by using a validated point-to-point encrypted path from your processor, which keeps your scope small even across nine card-present windows plus e-commerce. Separately, your rental releases, DIN settings, tester and jig calibration records, and patrol incident reports need to be retained and retrievable for your state's statute of limitations.
How do we fix Ikon and Indy Pass reconciliation without doing it in Excel?
Build a per-partner ingestion layer that pulls each settlement file into one canonical redemption record, then match it automatically against your Axess or SKIDATA scan events. The reconciliation should surface only exceptions with reason codes: no matching scan, scan without claim, duplicate inside the window, wrong tier. Your controller works dozens of exceptions instead of auditing thousands of rows, and the gap stops being a number you quietly absorb every month.
Is AI actually useful at a ski resort or is it a gimmick?
It is useful in four specific places and a gimmick everywhere else. Instructor assignment solving against certification, ratio, language and pay guarantees; next-day visit and staffing forecasts from your own pace curve plus the snow forecast; document extraction of vendor pack lists into serial-level rental inventory; and after-hours guest changes to lessons and rentals that check real capacity before confirming. Anything that requires the model to invent a rule your entitlement engine should already own will cost you at the gate.
How much does it cost to build a custom booking system for my business?
Most custom booking systems cost $15,000 to $60,000 to build, based on what Digital Heroes has delivered across service businesses from salons to clinics. The low end covers a single-service scheduler with payments and automated reminders; the high end adds multi-staff calendars, memberships, packages, and a client mobile app. The single biggest cost driver is how many scheduling rules your business runs on: staff availability layers, buffer times, room or equipment conflicts, and cancellation policies.
Can we migrate years of data out of our current system into new custom software?
Almost always yes, through CSV exports or the vendor's API, and migration should be scoped as its own workstream with field mapping, a dry run, and a planned cutover window rather than an afterthought. The real time sink is rarely moving the data; it is cleaning it, since years of duplicates, free-text fields, and inconsistent formats surface all at once. Pull a full export from your current vendor before committing to anything new, because some SaaS plans restrict exports on lower tiers.
How hard is it to move my client and appointment data out of Mindbody or Acuity?
Both platforms export clients and appointment history as CSV files, so the core migration is routine, typically 1 to 2 weeks of cleanup, field mapping, and import testing. The genuinely hard parts are stored payment cards, which cannot be exported directly and need a PCI-compliant token transfer through your payment processor, and future recurring bookings, which usually get rebuilt by script. Schedule the cutover for your slowest week and run both systems in parallel for a few days.
How many people should be working on my software project?
Three to five for a typical focused build: a project lead, one or two engineers, a designer, and part-time QA, which is the standard shape across 2,000+ Digital Heroes projects. Larger platforms justify 6 to 10, but a ten-person team on a small first version usually signals bill padding rather than horsepower. What predicts success is whether a senior engineer is writing your code daily, not the headcount on the proposal.
Can I build my product on a no-code tool like Bubble instead of hiring developers?
For testing whether anyone wants the product, yes, and Bubble's paid plans start at $29 a month, which is the cheapest validation you will ever buy. The ceiling arrives with complex data relationships, heavy integrations, performance at a few thousand users, and the fact that you cannot export a Bubble app to servers you control. A path many Digital Heroes clients take: prove demand on no-code, then rebuild custom once revenue justifies it, treating the no-code version as a paid prototype rather than a foundation.
How much should a small business budget for its first custom app or website?
For a focused first build, most small businesses land between $8,000 and $60,000: roughly $8,000 to $45,000 for a custom website and $25,000 to $60,000 for an internal tool or simple web app, based on Digital Heroes delivery across 2,000+ projects. Customer-facing products with payments, logins, or a mobile app start around $40,000. Quotes far below these bands usually mean a template with your logo on it, not software shaped around your workflow.
How do I vet a software agency for a booking system project?
Ask to see a live booking system they built and break it yourself: try booking overlapping slots, cancelling inside the penalty window, and switching time zones mid-booking. An agency that has shipped scheduling before will talk unprompted about double-booking prevention, calendar sync conflicts, and no-show handling; one that has not will only talk about screens. Also ask who writes the booking-rules specification, because at Digital Heroes that document is the single best predictor of a project landing on budget.
Keep reading
let's build

Build something worth launching.

A plan, a team, a timeline, within 24 hours. No decks, no discovery calls. Tell us what you're building and we'll come back with a real scope and a real number.

message us directly · we reply within one business day

mission briefing

Monthly dispatch

Playbooks, real build costs, and what we're shipping. One email a month. No fluff.

visit us

New York HQ

1140 Broadway, Suite 704 · New York, NY 10001

Get directions
Online now

Hey there 👋 How can we help you today?