This guide is for accountants and bookkeepers posting Understory data into a ledger. It covers the accounts to set up, the journal entries for a monthly close, and how to reconcile every balance back to Understory.
If you are the business owner and just want the month-end numbers, start with How to close your books each month instead.
Definitions
Guest — your customer: someone who books an experience, buys a gift card, or similar.
Contract liability (also "deferred revenue" or "unearned revenue") — a debt you owe a guest because they have paid for a service you have not yet delivered. It sits on the balance sheet until the experience is delivered, or the gift card is redeemed or expires, at which point it becomes revenue.
Breakage — the portion of gift cards or punch cards that guests never redeem. Under IFRS 15 it is recognised as revenue either as other cards are redeemed (where breakage is reliably estimable), or once the holder's right to redeem has lapsed.
Why prepayments cannot be booked as revenue
An experiences business collects money before it delivers. That brings it under IFRS 15 — Revenue from Contracts with Customers, the standard used across the EU, which governs how revenue from prepaid services must be recognised.
A guest booking an experience and paying at the time of booking is a service paid for in advance. The payment creates a performance obligation, and revenue can only be recognised as that obligation is satisfied — in practice, when the event has taken place.
This is why Understory's reports are anchored on three different dates, and why the same booking appears in different reports in different months.
Chart of accounts
You need the following accounts. Names will differ by system; the roles matter.
Balance sheet
Account | Role |
Receivables, Understory Pay | Cash and cash equivalents. Understory Pay is a real bank account — once money lands there, it is yours. |
Receivables, Bank account | Your ordinary bank account, for transfers out of Understory Pay. |
Payable, Bookings | Contract liability for guest prepayments. |
Payable, Gift cards | Contract liability for unredeemed gift cards. Kept separate from bookings because VAT and unredeemed balances are treated differently. |
Payable, Punch cards | Contract liability for unused punches. Same reasoning. |
VAT payable | Your existing VAT account(s). Where entries below mention a "VAT code" or "VAT contra-account", they mean these. |
Profit and loss
Account | Role |
Fee, Understory Pay | Transaction fees. Charged by the card issuer, the guest's bank and the payment platform at the moment of the transaction, and not dependent on delivery — a direct cost of taking the payment. |
Fee, Understory | The Understory booking fee, if you want to track it separately. |
Revenue, services with / without VAT | Your existing revenue accounts, unless you want revenue split by experience. |
The reports you will use
All reports come from Marketing → Insights → Reports, download as Excel, and some contain several sheets. The only exception to this, is the Payout reports, which can be found in Settings → Payments → Payout reports.
Report | Sheet | Used for |
Bookings |
| Prepayments received |
Bookings |
| VAT per rate on new bookings |
Bookings |
| Revenue recognition |
Bookings |
| VAT per rate on delivered bookings |
VAT reconciliation |
| Output VAT per rate for a return, refunds netted |
VAT reconciliation |
| The same, line by line, for audit |
Gift cards | — | Gift cards sold |
Gift cards by expiry | — | Breakage |
Transactions | — | Refunds, punch card sales, cash |
Customer debt | — | Closing liability balances |
Payout reports | — | Transfers to your bank |
Refer to columns by name, not by spreadsheet letter. Columns are added to these reports over time, which shifts every letter after the insertion point. A punch card column added to the Transactions report in June 2026 moved eight of its columns one place to the right. Any procedure written against letters will silently read the wrong column after such a change.
Filing a VAT return
The VAT reconciliation report is the single source for a period's output VAT. It takes any date range, so a quarter works as well as a month.
vat-summary gives one row per source and VAT treatment:
Column | What it is |
| What the VAT arose on — |
| The rate, and whether it is standard, zero-rated, exempt or deferred |
| Output VAT charged, and output VAT returned. Refunds are positive magnitudes |
|
|
Sum Net VAT across the rows for the period's output VAT.
Anchoring. Sales are counted on the payment date and refunds on the refund date, so every row is a cash event. That is the VAT-on-receipt basis. If your client is on the delivery basis instead, this report is the wrong instrument — use orderlines-completed from the Bookings report and group by VAT Rate.
Scope. Only money that moved through Understory appears, so unpaid bookings and external / integration settlements are absent by construction — the exclusions under Why an entry does not balance do not apply to this report.
Treatments are not interchangeable. zero-rated is a taxable supply at 0%; exempt is outside the scope; deferred is a multi-purpose voucher sale whose rate is not yet knowable and which belongs on no box of the return. They are kept apart deliberately.
vat-details carries the same figures per ticket line and per refund allocation, with booking, receipt and transaction ids, so any summary figure can be traced back.
Month-end journal entries
Five entries, plus transfers, plus a verification step.
1. Prepaid bookings
Guest prepayments received during the period. Use the Bookings report, bookings sheet, set to the period you are closing.
Account | Amount | |
Dr | Receivables, Understory Pay | Σ |
Dr | Fee, Understory Pay | Σ |
Dr | Fee, Understory | Σ |
Dr | Payable, Gift cards | Σ |
Dr | Payable, Punch cards | Σ |
Cr | Payable, Bookings | Σ |
Cr | VAT payable | Σ |
If your system supports a VAT code on the journal line, apply it to the Payable, Bookings line instead of posting VAT separately. If you operate with more than one VAT rate, either make one Payable, Bookings line per rate — taking the split from the VAT reconciliation report's tickets rows — or post the VAT line manually.
Punch Card Amount Used only appears when a booking in the period was paid with a punch card. If no row used one, the column is absent entirely.
The debit side sums to Paid Amount. The credit side sums to Total (VAT Incl). See Why an entry does not balance below before hunting for a difference.
2. Gift cards sold
Use the Gift cards report for the period.
Account | Amount | |
Dr | Receivables, Understory Pay | Σ |
Dr | Fee, Understory Pay | Σ |
Dr | Fee, Understory | Σ |
Cr | Payable, Gift cards | Σ |
Whether VAT is due now depends on the voucher type, and the VAT reconciliation report resolves it. Under the EU VAT Directive a voucher is single-purpose when the VAT due is already known at issue — in practice, when everything in the catalogue carries one VAT treatment. VAT then falls due on the sale. A multi-purpose voucher could be spent at any of several rates, so VAT waits until redemption.
The report derives this from the catalogue and states the result: a gift-card row carrying a rate is single-purpose, so apply that VAT code to the Payable, Gift cards line. A row showing deferred is multi-purpose, so no VAT code here.
The treatment is derived, not recorded. Understory does not yet capture a voucher's VAT treatment at the point of sale, so the report reads the catalogue as it stands when you run it. A client who adds an experience at a new VAT rate flips from single- to multi-purpose, and a period re-run afterwards will not match what you posted at the time. Keep the report you posted from, and confirm the treatment with the client where their catalogue is close to the boundary.
3. Punch cards sold
Punch card sales are not in the Gift cards report. Use the Transactions report and filter type to punchcard.
Account | Amount | |
Dr | Receivables, Understory Pay | Σ |
Dr | Fee, Understory Pay | Σ |
Dr | Fee, Understory | Σ |
Cr | Payable, Punch cards | Σ |
The same voucher reasoning applies, and the report's punch-card rows state the treatment the same way.
4. Bookings completed — recognising revenue
Once the event has taken place, the prepayment is released into revenue. Use the Bookings report, bookings-completed sheet, which contains every booking whose event finished within the period.
Account | Amount | |
Dr | Payable, Bookings | Σ |
Cr | Revenue, services | Σ |
No VAT line is needed here. VAT was posted when the prepayment was received, so only the VAT-exclusive amount moves from liability into revenue.
If you post to more than one revenue account, split this entry using the orderlines-completed sheet: group Total (Vat Excl) by VAT Rate and create one debit/credit pair per revenue account. If all experiences post to the same account, a single pair on the totals is enough.
5. Expired gift cards — breakage
When a gift card expires unredeemed, the balance can eventually be recognised as breakage revenue. The timing is not always the expiry date, because it depends on how long the holder keeps a right to the money.
Denmark — holders of electronic gift cards may claim the residual value in cash for 12 months after the expiry date. Denmark is the only EU country with this rule. Until that window closes the liability has not gone away; it has changed from an obligation to deliver a service into a potential obligation to refund cash. A card expiring in June 2025 is therefore not breakage until June 2026, and a guest claiming cash inside the window is treated as a refund.
Sweden — the Swedish Consumer Agency recommends 10-year validity, and shorter periods may be deemed unreasonable. Breakage is rare; recognise it once the validity period actually expires.
Norway — where no validity period is set, the issuer may refuse redemption after 3 years. Recognise at expiry, or 3 years after issuance if no expiry was set.
Elsewhere — most EU countries have no post-expiry cash-out right, so breakage can be recognised on the expiry date itself.
Use the Gift cards by expiry report. In Denmark, set the range to cards whose expiry date plus 12 months falls in the period you are closing. Elsewhere, use cards whose expiry date falls in the period.
Account | Amount | |
Dr | Payable, Gift cards | Σ |
Cr | Revenue, services | Σ |
If VAT was remitted when the card was sold (the single-purpose voucher case), that VAT is not reversed on breakage — apply the same VAT code you used at sale so only the net amount reaches revenue. If VAT was deferred to redemption, no VAT arises on breakage, because no service was ever delivered.
6. Refunds
Use the Transactions report and filter type to refund.
Three things to know about refund rows:
Amounts are negative. Use absolute values when posting.
Fees are not returned to you.
paymentFee,holdbarFeeandtotalFeeare all 0 on refund rows. The fees you paid on the original booking stay as expense.The cash returning to the guest is the full transaction amount, in
netPayout.
Do not use paymentTotalExVat or paymentVat. paymentVat is never populated. paymentTotalExVat on a refund row contains the gross refund despite its name. Use paymentTotal for the gross.
Because the liability was credited net of VAT at sale, a refund must be debited net of VAT too. Take the split from the VAT reconciliation report rather than deriving it: its Refunds VAT column gives the VAT to reverse per rate, apportioned across the original booking's rates where a booking carried more than one.
Identify what is being refunded from name and eventStart:
Refund of |
|
|
A booking | the experience name | populated |
A gift card | literally | empty |
A punch card | the punch card type name | empty |
Booking refunds
Account | Amount | |
Dr | Payable, Bookings | net portion of Σ abs( |
Dr | VAT payable |
|
Cr | Receivables, Understory Pay | Σ abs( |
If the original booking was paid with a gift card or punch card, the refund restores that balance rather than returning cash. Rows where giftCardAmountOff or punchCardAmountOff is non-zero indicate this — credit Payable, Gift cards or Payable, Punch cards for that portion and Receivables, Understory Pay only for the cash part. Keep these as their own journal entry, separate from cash-only refunds.
Gift card and punch card refunds follow the same shape, debiting Payable, Gift cards or Payable, Punch cards instead of Payable, Bookings, and reversing the sale VAT only if a VAT code was applied at sale.
Partially refunded bookings. The Bookings report's Total (VAT Excl) is the gross booking amount, not net of refunds. A booking partially refunded in a later period was already booked in full on the original prepayment entry, and this refund entry correctly reverses only the refunded portion. There is no double-counting.
7. Transfers from Understory Pay
Get the payout report from Settings → Payments → Payout reports. It shows the full transactional record between the last payout and the current one.
Find the bankTransfer type to see the amount paid out. The report states it as a negative number; credit the absolute amount.
Account | Amount | |
Cr | Receivables, Understory Pay | the transfer amount |
Dr | Receivables, Bank account | the transfer amount |
Verifying your data
After posting, reconcile your liability accounts against Understory's own records. Download the Customer debt report, dated the last day of the period.
The report is a real-time snapshot of every contract liability Understory is tracking for you: every booking whose experience has not been delivered, every gift card with a balance, and every punch card with punches left. Filter the type column to split it into booking, giftcard and punchcard.
It is a closing balance, not a period movement. Although the report takes a date, that date is only an upper bound — the report has no start date, and includes every outstanding prepayment since the business began. Compare it against the closing balance of your liability accounts, never against the month's movement.
Which column to reconcile against depends on how you posted the liability.
If you posted the liability net of VAT, as the entries above do, compare against
transactionTotalVatExclusiveAmount.If you posted it gross, compare against
value.
value is the more reliable figure. It is built from the sum of captured transactions minus completed refunds as at your chosen date, and does not change retrospectively. The transactionTotal… columns are derived from the order's stored totals, which the system rewrites when an order is refunded — so a historical snapshot taken after a later refund can differ from what those columns showed at the time. If your two figures disagree and refunds occurred after the period end, this is the likely cause.
If the balances do not match, the usual causes are:
A booking has been completed but the Bookings completed entry has not been posted
A gift card has expired but the Expired gift cards entry has not been posted
A refund has been processed but the Refunds entry has not been posted
A new booking or gift card sale has come in since the period closed — the report is real-time, so it reflects everything outstanding today, not as of your period end
To avoid the last one, download the report on the morning after the period closes, before new sales arrive. Alternatively, if your period is the calendar month, filter on dueDate to exclude bookings whose events fall after the period you are reconciling.
Why an entry does not balance
The prepayment entry balances only when Paid Amount equals Total (VAT Incl) across the sheet. Several ordinary situations break that, and none of them are errors:
Bookings with no payment. An empty
Gatewayscolumn andReceipt IDof-mean nobody paid. The row still carries a fullTotal (VAT Incl). Exclude them — there is no prepayment to record.Bookings paid outside Understory.
Gatewaysshowsexternalorintegration— a reseller or OTA booking, or one marked paid by other means. The cash never passed through Understory. Exclude them and post from the reseller's own paperwork.Cancelled bookings. The
bookingssheet includes rows withBooking Statusofcancelled. Check whether they were refunded before counting them. Thebookings-completedsheet already excludes them.Booking fees passed on to guests. If the client passes the Understory booking fee to the guest,
Paid Amountincludes that fee but no column in the Bookings report shows it. The equivalent figures arepassOnBookingFeein the Transactions report and thebooking-feerows in the VAT reconciliation report.Partial refunds already applied. For some bookings the
Totalcolumns already show the post-refund value whilePaid Amountdoes not.
None of these apply to the VAT reconciliation report, which counts only cash events and so never includes an unpaid or externally settled booking.
Known limitations
Worth knowing before you rely on a figure:
VAT comes from the VAT reconciliation report, not the Transactions report.
paymentVatis never populated there andpaymentTotalExVatis unreliable.The VAT report covers the receipt basis only. There is no delivery-basis equivalent yet; use
orderlines-completedfor that.A voucher's VAT treatment is derived, not recorded. It is read from the catalogue at the time you run the report, so it can change as the catalogue changes. See the note under entry 2.
The Revenue summary report does not include punch cards, so it will not reconcile against Customer debt for a business that sells them.
There is no punch cards expiry report. Expired punch cards drop out of the Customer debt report, so breakage on them has to be inferred from the change in balance between two periods.
Recognised revenue can change retrospectively. A refund against an already-delivered event reduces that event's month when the Revenue summary is regenerated. Keep the file you closed from.
The "Bookings by event date" report does not filter by event date — it returns the same rows as the Bookings report in a different order. Use the
bookings-completedsheet for event-dated data.
Did this answer your question? If not, please reach out to us in the chat window at the bottom to the right, and we'll be happy to help 🤗
