Sell the tickets.
Number every one.

Let a buyer purchase one ticket or a bundle. Number each ticket, send the numbers in the confirmation, and count the quantity purchased against the draw’s stock.

Moonlight raffle 1,000 tickets
Ticket
Single · $5
Buyer
Luna Spellwell

One ticket purchased. Inventory counts ticket quantities across all orders.

Your number MR-0417

Illustrative experience

  • A number for every ticket
  • Stock counted by ticket quantity
  • Orders checked against payment status

The finished experience

Nobody keeps the ticket list by hand.

Each paid order has its ticket numbers together, and the draw list can be checked against completed payments.

A good fit for
Clubs, schools and charities running a paid prize draw.

  1. 1

    Put a price on a ticket

    Give the ticket Product field a price and a Quantity field. A bundle choice must supply the actual ticket quantity, such as five or ten, so stock decreases by tickets rather than orders.

    Gravity Forms

  2. 2

    Issue the number as the entry is created

    Use Unique ID with the Multiple Unique IDs per Submission snippet to generate one number per purchased ticket. Include the numbers in the buyer’s notification; configure payment timing so unpaid orders are not treated as paid draw entries.

    GP Unique ID

  3. 3

    Count tickets against the stock

    Connect Inventory to the ticket quantity and set the draw’s capacity. It checks the quantity still available at submission. Configure how pending payments reserve tickets and show a sold-out message when the stock is exhausted.

    GP Inventory

What you’ll need.

Start with Gravity Forms. Add the capabilities this solution needs, then make the experience your own.

Taking it further

Add these optional plugins when your project calls for more.

Before you start

  • A ticket Product/Quantity setup and a payment integration.
  • GP Unique ID and the Multiple Unique IDs per Submission snippet for multi-ticket purchases. Set the ticket number format before the first sale.
  • GP Inventory configured for ticket quantities. Test payment completion, failure, abandonment and concurrent purchases; Processing does not reserve stock by default.

Free snippets it also uses

Snippets are free, and each one carries its own instructions in the Snippet Library .

Get this built.

A plan covers how many of our plugins you run at once, and on how many sites. Here is what this one needs.

Required

  • GP Unique IDPerks

  • GP InventoryPerks

Optional

Gravity Perks Advanced $169 /year

2 perks need Advanced or above — on up to 3 sites.

Gravity Connect Basic $59 /year

Only if you add GC Google Sheets.

See plans for this solution

Every plan renews at the same price, and you can upgrade any time for the difference.

Make it fit
your project.

What happens to a ticket nobody pays for?

Unique IDs are normally issued at submission; gpui_wait_for_payment can delay issuing them until payment completes. Inventory follows its own payment-status rules: entries with no payment status count, while Processing is excluded by default. Configure temporary holds where needed and test this together with the multiple-ID snippet. Build the draw list from completed paid orders.

Can one purchase buy several numbers?

Yes. Map the number of tickets to the Product’s quantity, let Inventory count that quantity, and use the linked Multiple Unique IDs per Submission snippet to issue each number. Limit Submissions alone would count the purchase as one entry, even if it contains ten tickets.

  • Clay, CTO
  • Dan, Content Sorcerer
  • Dani, Product Manager
  • David, Founder & CEO
  • Matt, Senior Support Wizard
  • Roxy, Support Wizard

Not quite your build?

Tell us what you are making and we will work out which pieces it takes — or tell you straight if this is not something we can do.

Ask the wizards