Spreadsheet export
Every group can expose its data as live CSV feeds made for spreadsheets: paste one formula into Google Sheets and the sheet keeps itself up to date. No code, no OAuth — a single revocable link.
Getting the link
Ask the assistant in your group chat — for example “give me the spreadsheet export link” — or use the group settings on the web. Organizer role required. The reply contains per-feed URLs of the form:
https://team-up.tgmbot.com/export/<your-link>/attendance.csv
In Google Sheets, put a feed URL into IMPORTDATA:
=IMPORTDATA("https://team-up.tgmbot.com/export/<your-link>/attendance.csv")Google refreshes imported data roughly hourly; the feeds themselves are cached for five minutes.
Feeds
All feeds are tidy, long-format tables with stable English snake_case headers — that is the public contract. New events only ever add rows; columns never move, so your formulas and pivots keep working.
| Feed | Contents | Columns |
|---|---|---|
events.csv | One row per event: id, date, title, whether it finished, confirmed sign-up count. | event_id, date, title, finished, confirmed_count |
attendance.csv | One row per sign-up: who registered for which event and with what status. | event_id, event_date, user_id, player, status |
stats.csv | One row per player per logged event type: goals, assists, aces — whatever the group tracks. | user_id, player, type_id, label, count |
dues.csvmoney | One row per dues entry: how much each player owes and has paid per event. | event_id, event_date, user_id, player, amount, paid, status |
ledger.csvmoney | One row per cash-ledger entry: the group treasury in and out. | date, kind, label, amount, event_id |
Feeds marked money exist only on links created with money access — the assistant asks the organizer explicitly. Without it, those URLs return 404.
Security model
The link slug is the credential — anyone holding the URL can read the feeds (Google fetches them server-side, so there is no session to present). Accordingly:
- One live link per group; requesting it again returns the same link.
- Revoking (“revoke the export link”) kills every copy of the URL immediately, including formulas already pasted into sheets. The next request mints a fresh link.
- Unknown, revoked and permission-blocked feeds are indistinguishable from outside — all return 404.
- Requests are rate-limited per IP.