This is the whole platform in one pass, followed end to end on a real race: Kampala 7Hills Dry-Run, run by Laces Marathon. Every screenshot below is that race, and the entry that appears in the organizer’s dashboard at the end is the one bought a few sections earlier. The example is a running race, and the steps are the same for any kind of event.
It is written to be read by someone deciding whether to put their event on Laces. If you are already set up and want the depth on one topic, read Getting your event live or Taking payments and getting paid instead.
Two things worth knowing before the detail:
- The organizer works in the Admin App, on a phone. There is no laptop version to miss out on.
- The participant never installs anything. They open a link, type their details, approve a mobile-money prompt, and get a ticket.
Part one: the organizer
1. Create an account
Sign up with email and password, Google, or Apple. On Android the Apple button hides itself, so you will see Google and email.
The form asks for your name, email and password, and that is genuinely all. You are not asked for the event yet, or the organization, or anything about money.
2. Open an organization
First sign-in with no organization puts you on a Get started screen with exactly two doors: create an organization, or join one with an invite code from someone who already has it.
Creating one asks for two things:
- A name. What runners will see: “Laces Marathon”.
- A web address. The short name at the end of your link:
laces-marathon.
That address becomes your page at laces.run/org/laces-marathon. Race links
are separate and do not depend on it — each race gets its own short link the
moment you create it.

Some rules that are easier to know now than to discover later:
| Rule | What it means |
|---|---|
| 3–30 characters | Lower case, numbers and hyphens. No spaces, no leading or trailing hyphen |
| Globally unique | First organization to take a name keeps it |
| Changeable, slowly | Once every 7 days, and old links keep redirecting |
| Never released | A name you retire is not handed to somebody else |
One account creates one organization. If you run events under two genuinely separate brands, that is two accounts today.
3. Get cleared for payments
This is the step people skip, and it is the one that stops a race selling.
A new organization is not cleared to take money. Laces has to enable it, and until it does, your race page renders in full (distances, prices, route, FAQ, the lot) and the Register button does not work.
You apply from the Earnings tab in the Admin App. Do it early. The race page is worth nothing to you while the pay path is closed, and clearance is a person at Laces making a decision, not a switch you can flip yourself.
Two details that matter:
- Only an owner or admin can apply. Finance sees an explanation instead.
- A rejection is private. It is never published to your race page or shown to a runner.
4. Create the event
A race needs four things before it exists: which organization it belongs to, a name, a start and an end. There is no web address to choose — the race’s link is generated for you.
Everything else (description, cover image, venue, terms, waiver, refund policy) is optional and can follow later.
Then you add distances. Each one needs a name and a price, and nothing else is required:
- A price of 0 is valid. Free entry is a supported thing, not a workaround.
- Capacity is optional. Leave it empty and the distance is uncapped. Kampala 7Hills is uncapped, which is why its page shows no “places left” counter.
- A distance does not need a distance. A flat-fee entry with no kilometres attached is fine.
The race’s link cannot be changed — it is not something you set, so there is nothing to reconsider. The organization’s address can change, weekly; the race’s short link never moves, whatever you do to your organization’s address.
A race goes live once it has at least one distance to sell. Try to open one with nothing on it and Laces refuses, “This event has nothing to sell yet”, which is the one thing standing between you and a public page with no way in.
5. Share the link
Every race gets one link the moment it is created:
laces.run/46k6xK
Six characters, minted once and never reassigned. It is the whole address — there is no separate “full link” to distinguish it from — and it is what belongs on a poster.
The Admin App’s event Overview tab shows the link on a card. Tap the card to copy it; the share icon beside it opens WhatsApp, SMS, email and the rest.
The race page itself also carries a QR code and the link as selectable text, so anyone can scan or copy from the page without you sending anything.

One caution on the short code: it is case-sensitive. 46k6xK and 46K6XK
are different codes, and it can contain characters that look alike in some
fonts. Send it as a link. Do not read it down a phone.
Part two: the runner
Everything from here is what somebody sees after you send the link. No account, no app, no card.
6. The race page
The page leads with the race and puts registration beside it: visible without scrolling, on a 360px phone as much as a laptop.

The form asks for a name, a phone number, an email twice, and a distance. Next of kin is optional.
The email is asked for twice deliberately. It is where the ticket and receipt go, and a mistyped address means no ticket, no receipt, and nothing that tells anyone it bounced. The second field costs the runner three seconds and removes the most common way an entry goes quietly wrong.
Validation stays quiet until a field has been visited once, then corrects live. Ugandan numbers are checked against real MTN and Airtel prefixes.

The subtotal sits above the button and says “Fees calculated at checkout.” That is honest rather than coy: the fee is computed by the server on the next screen, and the page will not guess at a number it does not own.

7. Checkout
Submitting holds a place for 15 minutes and moves to the payment page.

Every number is itemised before anyone is asked to pay:
| Line | This order |
|---|---|
| Subtotal | UGX 500 |
| Laces service fee | UGX 925 |
| Total | UGX 1,425 |
The fee is UGX 900 + 5%, and the runner pays it on top. You receive the full ticket price: the UGX 500 here, not a penny less.
The proportions above are misleading because this is a dry run priced at UGX 500, so a flat fee more than doubles it. On a realistic entry the fee is a small fraction. A UGX 50,000 entry carries a UGX 3,400 fee on mobile money (MTN and Airtel Money alike), so the runner pays UGX 53,400, and you receive UGX 50,000. The exact total is always shown before the runner confirms.
Free entries are free. A zero-priced distance carries no fee at all, not even the flat portion.
Runners pay by mobile money (MTN MoMo and Airtel Money). The runner types their number and the network is detected from the prefix; this dry run was paid from an MTN number, which is why the fee above is the MTN one.

Then a prompt arrives on the handset and they enter their Mobile Money PIN. Nothing leaves their account until they do.

While it settles, Laces watches for the result three ways at once: polling, a live subscription, and a re-check when the runner returns to the tab. Whichever answers first wins, so the page updates the moment the money lands rather than on a fixed timer.
If the prompt is never approved, the page says timed out, not failed. That distinction is deliberate: the charge may still land, so the screen offers to check again rather than to pay again. Paying again is how somebody gets debited twice.
8. The ticket

The runner gets an order code, 3VT4 GZ9H, and a QR, immediately.
The code is eight characters drawn from an alphabet with no O or 0, and no I, 1 or L, because it gets read aloud on support calls and typed at a kit tent in the dark.
Their entry lives at laces.run/o/3VT4GZ9H and works without an account:

Each runner gets their own QR, and it is signed. It verifies offline, which is the point: kit collection happens in a marquee with no signal, and a scanner with no bars still has to work.
The same page carries the receipt and what to bring:

The kit tent can also find an entry from the order code alone if a scanner will not read a cracked screen.
9. The emails
Two emails go out on a successful entry, and they are sent separately rather than as one message with a copy.
The runner receives “You’re in: Kampala 7Hills Dry-Run (3VT4GZ9H)”, with a PDF attached. The PDF holds one page per runner on the order, each with its own QR, ready to print or show.
The organizer receives “New entry, Kampala 7Hills Dry-Run (3VT4GZ9H)”. It goes to the owner, copied to admins, event managers, finance and station leads. Volunteers are deliberately left off, because the notice states revenue.
That separation is not tidiness. The two were once a single message, and one bad address on the copy list bounced the whole thing, costing a runner the confirmation they had paid for. They have been separate envelopes ever since.
If the runner’s own email fails, the organizer’s subject changes to “Entry not delivered”, so you find out from your inbox rather than from the runner at registration.
Part three: the organizer sees it land
Nothing here needs a refresh. The Admin App streams from the same database the checkout writes to, so a paid entry appears while the runner is still looking at their order code.
The two entries below are the ones bought earlier in this guide: both on the Dry run distance, UGX 1,520 each.
On the race
A race opens on four tabs, and each answers a different question.
Overview is the glance: what you have earned, how many kits have gone out,
and the shape of registrations and orders over time. The LIVE badge at the top
is the race’s status, and the short link sits further down the same screen.

The +2 today on the orders chart is the two entries bought earlier in this guide.
Orders is the money view: one row per order, what was paid, and where it got to.

Both entries from this guide are here, NWT357BJ today and 3VT4GZ9H
yesterday, UGX 1,520 each, both PAID.
The amber banner at the top is worth more than it looks. Not every runner finishes paying: a prompt times out, a wallet is short, someone puts their phone down. Laces keeps those orders instead of discarding them, totals what they are worth, and gives you a Nudge button to chase them, and a Send pay link on the individual row. An expired order is a runner who wanted in, not a lost cause, and the money is usually still recoverable.
Runners is the people view: who is coming, on which distance, and whether they have collected their kit. This is the list the kit tent works from, and it is searchable by name, phone, bib or order code.

The two tabs are deliberately separate. One order can carry several runners, a group signing up together pays once, so an order count is not an entry count. Orders answers “what was paid”; Runners answers “who is coming”.
The money
Earnings is the organization-wide view, filterable to a single race.

Four things worth understanding about these figures:
- You see the entry price, not the total charged. Look at the transaction rows: each reads +500, not +1,520. The runner paid UGX 1,520; UGX 500 of that is yours and the rest is the platform fee, which never touches your ledger. The fee is not deducted from you; it was added on top for the buyer.
- MTN entries are available as soon as they are confirmed. An MTN payment is not held: it lands in Available and you can withdraw it immediately, weekends included. Airtel Money entries sit in Pending for a little longer — usually about a day and a half — because Airtel is collected through Flutterwave, which holds it until its own settlement process confirms it. The two figures are shown separately so you always know which is which.
- The rows marked “Test payment” are not counted. The two entries from this guide were made in test mode, and test money never reaches a balance or a statement: it is listed in the history so it is visible, and excluded from every total. The UGX 5,700 above is real money from earlier activity, not these two orders.
- Withdrawing needs payment clearance: the same approval from step 3, and the first withdrawal per organization is free.
Your first withdrawal is free, once per organization, and Laces absorbs it.
What this costs
| Who | Pays |
|---|---|
| Organizer | Nothing. No setup fee, no monthly fee, no per-race fee |
| Runner | UGX 900 + 5% by mobile money (MTN or Airtel Money), at checkout and shown before they pay |
You receive the full ticket price. The fee is charged to the buyer, on top, and itemised on screen before anyone commits.
Cash at the desk costs nothing. Record a walk-up in the Admin App and they land on the same manifest as everyone else. No money went through the platform, so Laces charges nothing on it.
The honest limits
Things worth knowing before you commit, rather than after:
- Payment clearance gates selling, not just withdrawing. Until Laces enables your organization, the page shows everything and sells nothing. Apply early.
- A race’s link is automatic and permanent — there’s nothing to choose. The organization’s own address can change weekly; a race’s short link never moves, whatever you do to that address.
- SMS is not live. The ticket travels by email and the entry page. This is why the form asks for the email twice.
- The short code is case-sensitive. Share it as a link, not as characters read aloud.
- The kit shop is not finished. Distances and entries work; selling t-shirts alongside them does not yet.
The whole thing, in one list
- Sign up with email, Google or Apple
- Create an organization and claim your web address
- Apply for payment clearance from the Earnings tab
- Create the race: name, start, end
- Add distances with prices
- Share the link or the QR
- A runner opens it, enters their details, pays by mobile money
- They get an order code, a QR and an emailed ticket
- You get an email, and the entry appears in your dashboard
Questions this did not answer go to support@laces.run.
