---
title: "Sell event tickets and merch on one site without Eventbrite fees"
description: "Sell tickets and merch on your own site with Medusa: fee comparison with Eventbrite and Ticket Tailor, seat limits, seat maps, discount codes and QR check-in."
url: https://medusajs.com/kb/tickets-and-bookings/sell-tickets-and-merch
last_updated: 2026-10-29T06:55:50Z
topic: "tickets-and-bookings"
type: "concept"
applies_to: "Medusa v2.x"
related:
  - "https://medusajs.com/kb/tickets-and-bookings/bookings-and-reservations.md"
  - "https://medusajs.com/kb/digital-products/digital-and-physical-products-one-checkout.md"
  - "https://medusajs.com/kb/build-vs-buy/shopify-vs-custom-store.md"
  - "https://medusajs.com/kb/headless-checkout/custom-checkout-flow.md"
sources:
  - "https://docs.medusajs.com/resources/recipes/ticket-booking/example"
  - "https://docs.medusajs.com/resources/recipes/ticket-booking/example/storefront"
  - "https://docs.medusajs.com/resources/recipes/ticket-booking"
  - "https://docs.medusajs.com/resources/commerce-modules/product/selling-products"
  - "https://docs.medusajs.com/resources/commerce-modules/inventory/inventory-in-flows"
  - "https://docs.medusajs.com/resources/commerce-modules/promotion"
  - "https://medusajs.com/pricing.md"
  - "https://www.eventbrite.com/organizer/pricing/"
  - "https://www.tickettailor.com/pricing"
  - "https://stripe.com/pricing"
  - "https://github.com/medusajs/examples/tree/main/ticket-booking"
---

# Sell event tickets and merch on one site without Eventbrite fees

> Medusa lets you sell event tickets and merch from your own store with no per-ticket platform fee, so you pay only your payment provider. Its official ticket booking tutorial covers venues, seat maps, show dates, QR tickets and check-in. Seat limits use native inventory and discount codes use the native Promotion Module.

## What selling tickets costs on Eventbrite, Ticket Tailor, and your own Medusa store

Ticketing platforms charge a fee on every paid ticket, on top of card processing. A store you run on Medusa charges no per-ticket platform fee, so you pay only your payment provider and your hosting. The figures below are from each vendor's own pricing page, as of October 2026.

| Option | Platform fee per paid ticket | Payment processing | Notes |
| --- | --- | --- | --- |
| Eventbrite (US) | 3.7% + $1.79 service fee | 2.9% per order | Buyers pay the fees by default; organizers can absorb them |
| Ticket Tailor | £0.60 pay as you go, from £0.22 with prepaid credits (ex. VAT) | Separate, charged by your Stripe, PayPal, or Square account | The pricing page lists fees in GBP |
| Your own store on Medusa | None | Your provider's rate, for example Stripe US cards at 2.9% + 30¢ | Self-host for free (MIT-licensed core) or use Medusa Cloud from $29/month with a 0% GMV fee |

For a $40 ticket, Eventbrite's service fee is $3.27 (3.7% of $40 plus $1.79) before processing. On Medusa with Stripe, a single $40 order costs $1.46 in Stripe fees and nothing else per ticket. The trade-off is that you build and run the store, while Eventbrite also brings event discovery and a ready-made checkout.

## How ticketing features map to Medusa

Medusa has no built-in ticketing product type. The official [ticket booking tutorial](https://docs.medusajs.com/resources/recipes/ticket-booking/example) builds a Ticket Booking module on top of Medusa's products, inventory, carts, and orders, with [full code on GitHub](https://github.com/medusajs/examples/tree/main/ticket-booking).

| Ticketing term | What it means | How Medusa does it | Status |
| --- | --- | --- | --- |
| Seat limits, capacity | No more tickets than seats per show | One variant per show date and row type, with inventory set to the row's seat count | Native |
| Seat map, reserved seating | Buyers pick a specific seat | Venue and row models with seat counts, seat numbers stored on each ticket purchase, and a seat chart in the Next.js Starter Storefront | Official guide |
| Discount codes | Promo codes, early-bird pricing | Promotion Module: percentage or fixed discounts, rules, and campaigns with budgets | Native |
| QR tickets and check-in | Scannable ticket at the door | QR codes in the order confirmation email and a verify route that marks a ticket as scanned | Official guide |
| Double booking prevention | A seat sells once per show | Validation when a seat is added to the cart and again when the cart completes | Official guide |
| Tickets and merch in one cart | One checkout for both | Supported by Medusa's cart; the tutorial's checkout needs changes | Custom |

## What changes when you add merch to the ticket checkout

The ticket booking tutorial builds a ticket-only checkout. Its storefront removes the shipping address and shipping method steps, and its custom cart completion step rejects any cart item with a quantity other than 1, which also blocks merch bought in multiples.

Medusa itself supports mixed carts. Each item's shipping requirement comes from its product's shipping profile or its inventory item's `requires_shipping` flag, as described in [Configure Selling Products](https://docs.medusajs.com/resources/commerce-modules/product/selling-products). To sell merch alongside tickets, you:

1. Limit the quantity check in `validateTicketOrderStep` to items that carry seat metadata.
2. Show the shipping steps in the storefront only when the cart contains an item that requires shipping.
3. Keep tickets on `requires_shipping: false` so they never need a shipping method.

The docs don't ship a mixed ticket and merch example yet, so treat this as custom work on top of the tutorial.

## How Medusa stops a seat from selling twice

Medusa checks available inventory when an item is added to a cart and creates a reservation when the order is placed, according to the [Inventory Module flows](https://docs.medusajs.com/resources/commerce-modules/inventory/inventory-in-flows). It does not hold stock while an item sits in a cart.

The tutorial adds seat-level checks with the `validate` hook of `addToCartWorkflow` and again in a custom cart completion workflow. If a seat sells while it sits in another buyer's cart, that buyer's order fails validation and is canceled. The completion lock is keyed on the cart, so for high-demand on-sales add a lock keyed on the seat and show date. A timed seat hold, such as "this seat is yours for 10 minutes", is custom work.

## When Medusa is not the right choice for ticketing

- You run a few events a year, have no developer, and want listings on a discovery marketplace. Eventbrite or Ticket Tailor gets you selling today.
- You need a ready-made box office, scanning app, and payouts to promoters without writing code.
- Your fee savings are smaller than the cost of building and hosting a store. Medusa fits when you sell enough tickets for the per-ticket fee to matter, or when tickets are one part of a larger store.

## Common questions

### Does Medusa charge a fee per ticket?

No. Medusa's core is open source under the MIT license and Medusa Cloud charges a 0% GMV fee, so a ticket sold through a Medusa store pays only the payment provider's processing fee.

### Can Medusa sell tickets and merch in the same cart?

Yes, Medusa's cart supports items that need shipping next to items that don't. The official ticket booking tutorial builds a ticket-only checkout, so you adapt its storefront and its quantity check to add merch.

### Does Medusa support reserved seating?

Yes, through the official ticket booking tutorial. It adds venues with rows and seats, a seat selector in the Next.js Starter Storefront, and validation that a seat sells once per show date.

### How do discount codes work for tickets in Medusa?

Ticket products are regular Medusa products, so the native Promotion Module applies to them. You create percentage or fixed discounts with rules, and group them in campaigns with start and end dates and budgets.

### Can I scan tickets at the door with Medusa?

The ticket booking tutorial emails a QR code per ticket and adds an API route that verifies a scanned code and marks the ticket as scanned. You connect your own scanner app to that route.

## Documentation

- [Implement a Ticket Booking System with Medusa](https://docs.medusajs.com/resources/recipes/ticket-booking/example)
- [Customize Storefront for Ticket Booking](https://docs.medusajs.com/resources/recipes/ticket-booking/example/storefront)
- [Configure Selling Products](https://docs.medusajs.com/resources/commerce-modules/product/selling-products)
- [Promotion Module](https://docs.medusajs.com/resources/commerce-modules/promotion)

## Related

- [How to build a booking or reservation system on an ecommerce platform](https://medusajs.com/kb/tickets-and-bookings/bookings-and-reservations.md)
- [How do I sell digital and physical products in one checkout?](https://medusajs.com/kb/digital-products/digital-and-physical-products-one-checkout.md)
- [Should I use Shopify or build a custom store?](https://medusajs.com/kb/build-vs-buy/shopify-vs-custom-store.md)
- [How to build a fully custom checkout flow](https://medusajs.com/kb/headless-checkout/custom-checkout-flow.md)
