Running one fantasy league off a spreadsheet is fine. Running eight paid leagues – 48 teams, 48 managers, 220 players, entry fees to chase, a prize pool to protect and trades to approve before Friday’s lock – is where the spreadsheet stops being funny. The Fantasy Sports League Management System Web App is a Google Apps Script console built for exactly that job: one sign-in, five roles, and 12,550 seeded rows in which every number agrees with every other number.
In the demo season the console shows Rs 261,000 collected against Rs 294,000 invoiced, a prize pool of Rs 221,400 after Rs 39,600 of recorded league costs, 29 items waiting on the commissioner, and a Record integrity card that confirms points-for equals points-against in every league table. This walkthrough goes screen by screen, states plainly what the system does not do, and lists the rough edges we found in the shipped build.

Try the Live Demo Before You Buy
We have deployed this web app in our own Google account so you can test every page and every role – with the full seeded season behind it – before spending anything. No signup, no email required.
Test Login Credentials
Sign in as admin for everything including Users, Settings and the Database Archive; as commissioner to approve trades and waivers and run the money; as scorer to enter stat lines and recompute scores, with no access to money, users or settings; as treasurer for the invoices, payouts and fines plus a read-only view of the standings; or as manager for the read-only view a league member gets. All fourteen seeded accounts are below – start with the most restricted one and the permission model explains itself in ten seconds.
These credentials are public on purpose. The demo is one shared instance that resets, seeded with sample managers and sample money – it is not anybody’s live league, and it is not the deployment you buy. After purchase you get the full source (Code.gs + Index.html) and a deployment guide, so you run your own private copy in your own Google account with your own logins.
Key Features of the Fantasy Sports League Management System Web App

- One control room for every league. Active leagues, gameweeks played, fees collected, prize pool, fees outstanding, fines issued, payouts allocated and player pool – eight cards over eight leagues, plus a “Waiting on you” counter that is exactly the pending trades (16) plus the pending waiver claims (13).
- Per-league scoring rulesets. Sixteen priced events – 60+ minutes, goals split GK/DEF, MID and FWD, assists, clean sheets, saves per three, goals conceded per two, cards, penalties saved and missed, own goals, bonus – held separately for each of the eight leagues.
- Starters-only scoring. Eleven-player rosters, exactly seven starters in a 1-2-2-2 shape, captain doubled, bench ignored. The legality banner spells the rule out on the roster screen and the check runs on every save.
- A real draft board. Snake, auction, linear or autopick; 66 picks over 11 rounds per league, with the pick order visibly reversing each round and every pick timestamped and confirmed.
- Roster moves that move rosters. Trades, waiver claims in priority order against a free agent budget, and a free agency log – 180 movements in the demo, 87 players in and 93 out, split by waiver, trade and free agency.
- A money ledger, not a guess. 72 invoices, part payments, receipts, a prize pool defined as fees received minus recorded league cost, payout splits that must total 100%, and 70 penalties with paid, outstanding and waived states.
- Fourteen reports, each filterable by league, gameweek, date range and status, each with Print and CSV.
- Governance built in. Five roles enforced both in the sidebar and again on the server, a 424-entry audit log across 11 action types, 45 announcements in 6 categories with optional email, and a Database Archive that backs up to Drive before trimming closed rows.
Inside the Console – Screen by Screen
Leagues, Managers, Teams and Players
The Leagues screen is the spine: eight head-to-head leagues of six teams, each with its own entry fee (Rs 2,500 to Rs 12,000), recorded league cost, collected total, prize pool, payout split and draft type. The footer totals Rs 49,000 of entry fees, Rs 261,000 collected and a Rs 221,400 pool. Managers holds 48 paying members with contact details and a billed/paid/balance position; Teams holds one team per manager per league with points for, average week and best week; Players holds a 220-strong pool – 40 goalkeepers, 80 defenders, 60 midfielders and 40 forwards, eleven from each of twenty pro clubs.
The season: fixtures, draft, rosters and stat lines

Fourteen gameweeks run from 14 June 2026, ten real fixtures each, with a lineup lock at 18:30 on the first matchday. Eleven are completed and scored, one is live and two are scheduled. The Draft Board records who took whom, round by round. Rosters shows one team’s starting seven and bench for one gameweek with a legality check. Player Stat Lines is where the season actually gets its numbers: 220 rows per gameweek carrying minutes, goals, assists, clean sheets, saves, goals conceded, cards and bonus, entered or imported by a scorer, then turned into points by Recompute scores.
Scores, standings and head-to-head

Weekly Scores lists 66 team gameweek scores per league with starter and bench totals and a Breakdown button. Standings applies three points for a win and one for a tie; in the demo’s Mumbai league, Shadow Legends and Northern Kings both sit on 19 points from 6-4-1 records, and the totals balance exactly – 1,629 points for across the league against 1,629 points against. Head-to-Head lists all 33 played matchups with results and two ties, which is precisely the four tie entries the table shows.
The money screens

Entry Fees & Payments carries the invoice ledger with due dates, amounts, receipts, methods and part-paid balances. Prize Pool & Payouts turns each pool into places: Mumbai’s Rs 22,050 splits 50/30/20 into Rs 11,025, Rs 6,615 and Rs 4,410, all three paid; Delhi’s Rs 49,000 splits 45/30/15/10 and sits scheduled, waiting on a Release. Rs 61,050 of the Rs 221,400 has been released so far, which is exactly what the dashboard card says. Penalties & Fines completes the picture – Rs 36,500 issued, Rs 17,500 collected, Rs 11,750 outstanding and twelve waived.
Fantasy League Web App vs. a Spreadsheet vs. a Paid Fantasy Platform – Feature Comparison
| This web app | Shared spreadsheet | Paid platform (Sleeper Pro, Fantrax Commissioner) | |
|---|---|---|---|
| Cost | One payment, source included | Free | Per league, per season |
| Platform | Google Apps Script in your own account | Google Sheets or Excel | Vendor cloud |
| Setup time | ~15 minutes plus one setup run | Hours per league | Minutes |
| Real-time collaboration | Yes, five roles | Yes, everyone sees everything | Yes |
| Mobile access | Yes, responsive browser | Awkward | Native apps |
| Customisable rules and fields | Yes – source plus 23 dropdown lists | Yes | Vendor’s options only |
| Share with a link | Your own /exec URL | Yes | Yes |
| Year-1 cost at 5 users | Purchase price, once | Free | A fee every season |
| Entry fees, prize pool, fines | Full ledger with part payments | Manual | Often absent or an add-on |
| Live stat feed | No – a scorer enters or imports stat lines | No | Yes, automatic |
| Audit trail | 424 entries, 11 action types | Version history at best | Partial |
| Data location | Your Google Drive | Your Drive | Vendor’s servers |
Who Should Use This Template
Commissioners running more than one paid league; office, society and club competitions that collect entry fees and owe payouts; sports clubs running a fantasy game alongside the real fixtures; and developers who would rather own the Apps Script source than rent a seat. If you want automatic stat lines from a data provider, in-app payments, public self-signup or a native mobile app, this is not the tool – and none of those are things it claims.
Real-World Use Cases
The multi-league commissioner. Ananya runs all eight leagues. Her morning starts on the dashboard: 29 approvals waiting, Rs 33,000 of fees still to chase, two leagues already completed and paid out. She works the trade queue, where each row states who gives what to whom from which gameweek, and approval performs the swap rather than reminding her to do it.
The treasurer who never touches lineups. Priya signs in to invoices, payouts, fines, reports, the audit log and a read-only view of the leagues and standings. She cannot edit a roster or a scoring rule, which is the whole point of giving her an account instead of the commissioner’s password.
The scorer on match night. Devendra enters the round’s stat lines – or imports them – presses Recompute scores, and the weekly scores, standings, head-to-head results and the reports all update from the same rows, with his name against each action in the audit log.
Advantages of the Fantasy Sports League Management System Web App
- The numbers reconcile. We checked them: 220 players = 40+80+60+40 = 204 owned + 16 free agents; 66 picks x 8 leagues = 528 draft picks; 16 rules x 8 leagues = 128; a Wild Chargers gameweek of 19.0 starter points adds up rule by rule; and the archive screen’s 11,905 transaction rows plus master data equal the seeded total.
- Role separation is real, not cosmetic – 52 / 48 / 23 / 18 / 16 permissions per role, checked again server-side.
- You own the source and the database. It is one Google Sheet in your Drive; passwords are salted SHA-256 hashes; sessions expire after 12 hours; email goes out under your own Google quota and can be switched off entirely.
- Setup is staged and resumable, so a free Gmail account’s execution limit does not strand you halfway through seeding.
- Every list is printable and exportable, with print size configurable at 3 inch, 4 inch or A4.
Opportunities for Improvement
Nothing here blocks a deployment, but an honest review beats a surprise:
- The Entry Fees donut does not sum to the invoiced total. “Where the money is” shows Rs 257,250 settled in full, Rs 3,750 part-paid balance owed and Rs 29,250 with nothing received – Rs 290,250 against Rs 294,000 invoiced. The missing Rs 3,750 is the amount already received on part-paid invoices, which lands in neither slice. The four headline cards above it are correct.
- Head-to-head has no rows for the live gameweek. It reports 33 matchups, 33 played and 0 still to play while gameweek 12 is live, because matchups are written as gameweeks are scored rather than scheduled up front.
- Two money labels read alike but count differently. Waiver Claims shows Rs 15,200 of “bids placed” across all 98 claims; Free Agency shows Rs 14,450 of “fees committed” across completed movements. Both are right; the wording invites a comparison that is not meaningful.
- The seeded clock runs a few days ahead of the build – audit entries dated 4-5 September and transfer rows dated 7 September in a database exported on 2 September. Harmless in demo data, worth knowing before you conclude something is wrong.
- Users shows “never” for last sign-in on thirteen of fourteen accounts while the audit log credits those same users with hundreds of seeded actions.
- A duplicate announcement (“Roster legality checks are automatic”) is seeded twice, ten minutes apart, and the Leagues footer totals entry fees, collected and prize pool but leaves league cost blank.
- Rosters and Matchups archive on gameweek number, not a date column, so the retention-in-months setting does not apply to them the way it does to the dated tables.
Best Practices
- Change the admin password the moment you sign in, and delete or rename the seeded accounts you do not need before handing the URL to your league.
- Set Settings first – currency code and symbol, season label, gameweek count, payout split, fine amounts, roster rules, lineup lock and free agent budget – before you create leagues, so every league inherits the right defaults.
- Record the league cost before you release payouts. The prize pool is fees received minus that cost, and a payout can never exceed the remaining pool.
- Give the scorer a scorer account, not the commissioner’s. The permission map is the audit trail’s backbone.
- Announce rule changes through Announcements with email on, so the notice and its timestamp live in the same database as the rule.
- Back up from Settings > Database before running an archive – the archive copies to Drive first, but a second copy costs nothing.
- Publish the web app as “Anyone” but treat the URL as private; anyone with it still needs an account to get past the sign-in card. See Google’s Apps Script web app documentation for what the deployment settings mean.
Explore Relevant Templates
- Club & Association Membership Management System Web App – dues, members and committees rather than scoring.
- CrossFit Box Management System Web App – memberships, check-ins and coaching.
- Adventure Sports Booking Management System Web App – sessions, instructors and bookings.
- Bowling Alley Management System Web App – lanes, front-desk POS and venue league nights.
- Concert & Ticketing Management System Web App – selling seats to the event itself.
- Expense & Petty Cash Management System Web App – if the league cost side of the ledger is what you really need to control.
Frequently Asked Questions
Can I try it before buying?
Yes – the live demo above runs the complete seeded season, and every credential is listed. It is a shared instance that resets, so treat anything you type into it as public.
Does it fetch player statistics automatically?
No. There is no live sports feed and no provider API. A scorer types or imports each gameweek’s stat lines and presses Recompute scores; everything downstream is derived from those rows.
Does it collect entry fees or pay prize money?
No. There is no payment gateway, no card storage and no transfer of funds. The payment method on an invoice is a label describing money you already received elsewhere.
Is this a betting or gambling product?
No. It records what a league organiser collected and owes. It does not make a paid league legal, licensed or compliant in any jurisdiction, and it gives no advice on the subject – check your local rules before running one.
Can each league score differently?
Yes. Each league owns its own copy of the sixteen priced events, so a midfielder’s goal can be worth five points in one league and something else next door.
Where is the data stored?
In a single Google Sheet the setup routine creates in your own Drive. Nothing is sent anywhere else, and the Database Archive keeps that sheet small by moving closed transaction rows into a dated copy.
What do I actually download?
A ZIP with Code.cs.txt, Index.txt and a user manual PDF. Paste the two files into a new Apps Script project, deploy as a web app, run setup once.
About the Author
Built by PK – Microsoft Certified Professional with 15+ years of Excel, Google Sheets, and Power BI experience. Founder of NextGenTemplates, reaching 300K+ subscribers across YouTube channels. Every template is hand-built and tested before release.
Conclusion
The Fantasy Sports League Management System Web App will not tell you how many minutes a striker played – a person still does that. What it will do is take eight leagues, forty-eight managers, a draft, a trade queue and a prize pool, and keep all of them honest against a single database that you own, with an audit trail showing who did what. Sign in to the live demo as manager and then as commissioner; five minutes with both will tell you more than any feature list. When you are ready, the full source and the manual are on the product page: Fantasy Sports League Management System Web App. More Apps Script systems, dashboards and trackers are at NextGenTemplates, and walkthrough videos are on our YouTube channel.



