Game Fees Without Chasing Anyone

· updated · organizers · dues · group chat

You booked the pitch and paid for it up front. Now eleven people owe you, and getting that money back is the job nobody signed up for. Almost nobody refuses; they just forget, and reminding them costs you more than the money does. Ask once and it's fine. Ask twice and you're the guy who nags about money in a chat that exists for football.

Who paid for the pitch: the game fees list is visible right in the team chat, no spreadsheet and no roll call

The honest answer to "how do I collect money from my team for the pitch" has two halves, and only one of them is about payments. Moving the money is easy: everyone has a banking app. Remembering who moved it, for whom, and how much is left is what actually eats your week.

What collecting fees looks like right now

The standard setup is a pinned message: the amount, your card number, maybe the date. Everyone who pays writes one word back.

And that word is the same in every chat: "transferred". Sometimes with a tick. No amount, no name, no indication of who it covers.

That word is carrying far more than it can hold:

  • It doesn't say how much. Next to it lives "transferred for two": somebody brought a friend and covered both. Which friend? You scroll up and guess.
  • It doesn't say the money arrived. Only your banking app knows that, and matching a transfer to a chat nickname is your evening, not anyone else's.
  • It doesn't survive the scroll. A week of arguing about who's playing pushes the pinned message out of sight, and somebody asks a bare "550?", just checking the amount.
  • It doesn't handle real life. "Transferred in two goes", part in cash, part by card, days apart. Whatever tally you were holding in your head just broke, and nothing in the chat records that it did.

So the organizer becomes the ledger. And that ledger runs alongside two other standing jobs: keeping the roster straight and splitting the teams. Teams that notice this usually reach for one of two fixes.

A second pinned message, a debtors list next to the sign-up list. By week three the two disagree. Someone dropped out in the thread and the money list wasn't updated. Someone paid cash in the changing room and it's written down nowhere. Two sources of truth are the same as none.

A spreadsheet. This genuinely works, for the one person who owns it. That person is now the only one who can answer "did Dan pay?", and they retype the roster into it every week. The spreadsheet doesn't fail. It relocates the work instead of removing it, and it lives outside the chat where the conversation actually happens.

Neither outcome is a discipline problem. Keeping two lists in sync by hand is a job of its own, and nobody has room for it between the roster, the split and the game itself.

What changes when the chat keeps the ledger

The vocabulary doesn't change. A player still types "transferred" into the same chat, with no new app and no new habit. What changes is what happens to that word after it's sent.

How to track game fee payments in a group chat: players type "paid", the bot marks it and names who is still pending

A transfer is recorded, not believed. "Transferred" marks the fee as claimed: the player is stating they sent it. It stays claimed until you confirm it against your bank. That gap between "he says he paid" and "the money is here" is where trust quietly leaks in manual tracking, and making it a visible state is most of the fix. One message can also cover several people: Dan writing "paid for me and Max" records both in a single claim, with both names read back so he can see who got matched.

Confirming stays yours, and that's deliberate. Opening a banking app and matching a transfer to a person is human work. Recording the outcome is one line: confirm the ones that landed, reset a wrong mark back to unpaid, or waive the fee for someone playing free this week.

Requisites are set once. Card number, bank, whatever instructions your team actually follows: one free-text field, stored exactly as you typed it, instead of being retyped every Thursday. It carries provenance, who set it and when, so "wait, is this still Alex's card?" has an answer. Amounts and debts are shown in the group's currency, roubles by default. If the text contains a payment link on an allowlisted host, the game card grows a pay button. Any other link stays plain text on purpose: a chat where any member could turn their own URL into an official-looking payment button is a phishing surface, not a feature.

The count sits on the card people already read. The event card in the chat carries a money line: the fee, and paid X of Y. Not a report you go and run; it's on the same card everyone opens to check the roster.

Debts outlive the game. Outstanding fees from finished games can be reviewed by player. A claimed transfer remains unconfirmed and counts as outstanding until the organizer checks it against the bank. Before reminding a player to pay, check whether their claim is waiting for your confirmation.

How to remind the team about unpaid game fees: the bot posts the reminder to the chat instead of you messaging people

The bot does the reminding, not you. The app can open a prepared request asking Rocky to remind players about dues. It is a draft: review it and send it to the assistant. Rocky can then write a reminder and post it to the linked chat. Opening the request alone sends nothing to the team.

What this deliberately doesn't do

The money never touches us. Transfers go player to organizer, exactly the way they already do. We keep the ledger, not the cash. This is not a payment gateway, and no one at TeamUp is a party to your team's money.

There is no half-price button. For a partial payment, the organizer records the total received from that player for the game. After another transfer, update that total rather than entering just the latest instalment. The remainder stays outstanding until paid or waived. There is no automatic discount for playing only part of a match.

A debt does not roll over by itself. It isn't added to next week's fee, isn't deducted from a future transfer, and doesn't quietly expire. It's remembered: it stays on the debts list until someone confirms the payment or waives it, and it comes back up when the chat talks about money. The bot names the debtors instead of you digging through a month of messages. Nobody's balance moves without a human decision behind it.

A claim is a statement, not proof. Any member can claim for anyone, on purpose: paying for a friend shouldn't require the friend to be online. It also means "claimed" never means "paid" until you've confirmed it.

If you like spreadsheets, keep them; the point was never to take the spreadsheet away. A live CSV link feeds Google Sheets or Excel, and dues and the cash ledger are among the feeds, but only on links created with the money feeds switched on: see the sheets export docs. Treat that link like a password: anyone holding it can read the feed.

What actually changes

Nothing about how your team pays. The transfer is the same transfer, to the same person, in the same app. What changes is that three weeks later, "did Dan pay?" stops depending on whether anyone happened to remember.

It's the same shift as trading a hand-counted plus column for an exact roster, applied to money instead of headcount, and for the same reason: the chat is already the team's app, so the record belongs where the conversation is. Less to hold in your head, not more for players to do.

If you want to set this up for your own chat, the get started guide walks through adding the bot and running the first game.

← All posts