How we built an experiences-commerce platform on Shopify for a busy farm attraction

A child riding a tractor at a family farm attraction

TLDR: A busy farm attraction needed to keep selling on Shopify but treat tickets, events, experiences and memberships as one connected business. We built four pieces that share a single source of truth: a unified ticketing admin inside Shopify, a gate scanning app for the day of the visit, a membership platform that puts season tickets on a member's phone, and an insights layer that lets the team see the season clearly enough to act on it.

The unusual thing about selling experiences online

The unusual thing about running a busy attraction is that the sale and the visit are two different transactions. Most ecommerce businesses ship a box and the relationship ends at the doormat. An attraction sells a ticket online and then has to make good on that promise weeks or months later, in the middle of half-term, with hundreds of other families turning up at the same gate that day. The cart is the easy part. Everything that happens after the cart is where it gets interesting.

The brief from a busy family farm attraction was simple in summary and rich in detail. Keep selling on Shopify, because the storefront, the checkout and the customer accounts are already where their visitors are comfortable. But stop forcing day tickets, season tickets, time-slotted events, seasonal experiences, gift cards and accommodation to live in four different tools that disagree with each other by Saturday lunchtime. Put it all on one platform that the team behind the gate, the team in the office and the family in the car park are all reading from at the same time.

So we built that platform. It has four moving parts, and the value lies in how they fit together rather than in any one of them on its own.

One admin, every kind of ticket

The first piece is an embedded Shopify admin app that lets the team add a ticket, an event or an experience without leaving the Shopify backend they already know. Day tickets, time-slotted events, seasonal experiences, gift cards and waitlist-only releases all flow through the same screens. Pricing, capacity, scarcity rules, discount eligibility, lead-time windows, regional behaviour and waitlist logic live in one place rather than a folder of spreadsheets and a wall of Shopify discount codes.

The reason that matters is unglamorous. Operators at attractions usually carry three or four mental models of "what kind of thing am I selling" because each kind sits in a different tool. A day ticket is a Shopify product, a pumpkin experience is a separate booking app, a season ticket is a third-party fulfilment, and an in-park event is a calendar invite the front desk has to remember. Every separate model is a chance for the numbers to disagree at the end of the day. Unifying the model means the admin only ever asks one question: what is the thing, who is it for, and when. The shape of the storefront and the gate falls out of that.

The storefront talks to the admin app live. When a visitor opens a ticket landing page, the booking flow on the storefront calls back to the admin to check what is actually available right now, reserve a slot for the next seven to fifteen minutes while the visitor checks out, validate any discount being applied, and add the visitor to the waitlist if their date is already full. Reservations expire automatically if checkout is abandoned, so capacity never quietly leaks. Discounts are configured once and travel everywhere they apply.

The same admin also owns the booking flow itself as a content management system. Copy, themes, modal content, icon sets, form fields and split-test variants are editable without a developer. When the team wants to test a new urgency message during half-term, change the wording on the gift card path, or add a modal explaining a particular event, they do it from the same place they manage the events. The storefront does not need to be touched.

A scanner on the gate, reading the same source of truth

A ticket sale is a promise. The day of the visit is when the promise gets honoured. So we built a companion gate scanning system the team uses on the day, on iPads and phones at the entrance.

The scanner reads a ticket on arrival, checks it against the order and the member record, marks the party as checked in, and writes that fact back to the platform against the variant the ticket came from. The team on the gate sees who is expected, who has arrived, who has not, and which timeslot is currently inside the park. They can search by name, email or order number when a customer turns up without their ticket. They can fix the inevitable mix-ups without leaving the screen they are on. And because the system writes check-ins back as structured data rather than scribbled notes, the rest of the platform knows the difference between a ticket sold and a ticket actually used.

The deliberate part is that nothing about the scanner is a separate world. It reads the same orders the merchant admin manages and the same membership records the season ticket platform owns. There is no second login, no second customer database, no parallel inventory. A child on the season ticket gets recognised the same way as a day ticket holder. A guest staying in accommodation gets recognised against their booking. A pumpkin experience attendee gets recognised against their timeslot. The gate is just another surface on the same platform.

Season tickets that live on a member's phone

A day ticket is a transaction. A season ticket is a relationship. The two need to be treated differently, and the team had spent years trying to make a transactional Shopify checkout behave like a year-long membership system. So we built a dedicated app to own the membership side of things.

Once a season ticket order arrives, the membership app takes over. It sets up the membership, creates a record for every named member of the household, schedules a welcome pack through the email platform, and produces a wallet pass for each member that adds to Apple Wallet or Google Wallet. From that moment, the member's "ticket" is the pass on their phone. They do not need to remember a card, log into an account on arrival, or queue at the front desk on every visit. They walk up, the gate scanner reads the pass, and they are in.

Members manage their own onboarding from a page on the storefront. They upload a photo for each person, pick their card numbers from a managed pool, and rename or replace members as the family changes through the year. If a pass ever gets lost or fails to update, the membership app has a recovery flow that rebuilds it cleanly. There are dry-run audits before any major change so the team can see what would change before it does. Welcome packs trigger automatically. Expired memberships are swept and notified on a schedule rather than going stale in the background.

The point of all of it is that the member never has to think about the plumbing. They buy a season ticket once, the pass lands on their phone, and from then on the whole platform recognises them as the same person at the gate, in their account, in the booking flow, in the email programme and in the analytics.

Insights that close the loop

The last piece is the part that makes the rest of the platform worth running, which is being able to see what is happening clearly enough to do something about it.

The platform feeds a live operational view of the season. Capacity by day and by timeslot, with the difference between sold and actually arrived. Funnel views that show where in the booking flow visitors drop off, broken down by entry point, date and device. Live and historical heatmaps of which dates and timeslots are filling, which are quiet, which are at risk of selling out. Past-capacity tables so the team can see what last year looked like at the same point in the season. Week-average tables so a Tuesday in October can be compared to a Tuesday in October the year before, not to a sunny Saturday in August that distorts everything.

Underneath that there is a customer intelligence layer that builds a real picture of each visitor. Order history across day tickets and memberships and events. Household relationships. Predictive scores for likelihood of renewing or booking again. Demographic and geographic context from their postcode, with weather and travel-time signals layered on top. Segments built on that picture sync straight into the email platform, so the right people get the right message at the right time without anyone having to maintain a separate audience list.

On its own, every one of those numbers is just a number. Together they let the team answer the questions an attraction actually has to answer week after week. Are we going to hit our target this half-term. Which dates need a push. Which customers are due a renewal nudge. Which timeslot is consistently underused. Which discount is actually moving capacity, and which one is just giving margin away. Those are the decisions the platform exists to serve.

Why all four pieces matter together

It would have been possible to bolt three or four off-the-shelf tools together and approximate this. We have seen plenty of attractions try. The pattern always breaks in the same way: the booking app does not know about the season tickets, the scanner does not know about the booking app, the analytics does not know about either, and the team ends up with four screens open and a cup of cold tea on top of all of them.

The benefit of building the four pieces as one platform is that the data lives in one place and the relationships between things are real. A pass scanned at the gate updates the same record the booking flow read when the ticket was sold. A discount used at checkout shows up in the same analytics that drove the decision to run it. A new member onboarded today appears in the same customer view the team will use to send the renewal email next August.

If you are running an attraction on Shopify and the platform you have started to feel small, this is the kind of build we like doing most. Tell us what you sell, how you scan, and what your year actually looks like, and we will tell you what it would take to put it all on one platform that respects your team's time.

Photo by Troy T on Unsplash.

More from the blog

Circular lounge with a central fireplace and red sofas, sophisticated members club interior

This week's highlights: a multi-brand reporting platform for a luxury beauty group

Read →
An ornate gold chandelier on a white coffered ceiling in a luxury hotel interior

This week's highlights: a multi-brand reporting platform for a luxury beauty group

Read →
A woman in a robe sitting in a sunlit window seat in a luxury hotel room

This week's highlights: a multi-tenant reviews platform for a luxury skincare and devices group

Read →

Like what you've read?

Tell us about your project. A team member will reply within one business day.