Any group · any expenses · one settle-up

Group Expense Tracker

Every expense is priced by day, split among the groups around on that day, and — when one group has sub-groups leaving or joining at different times — split again inside that group by headcount. Costs one sub-group alone incurs land on that sub-group, not the whole group or everyone else.

Storage: Local only

1Groups

Arrival / departure = the days this row is around. To split one group into sub-groups (e.g. some leaving earlier than others), add another row and give it the exact same group name — start typing to see existing names suggested. Rows sharing a name get priced separately day-by-day but are automatically recombined for totals and the true-up below, and are tagged "sub-group" so they're easy to spot.

GroupPeopleArrivesDepartsDays

2Expenses

Total cost ÷ days it applies = the daily rate charged to whoever's around that day.

DescriptionTotal costStart dateEnd dateDays$ / dayAlready paid by

3Split method

"Per group" divides each day's cost across whole groups (a pair and a group of five pay the same daily share) — sub-groups within one group then split that group's share by headcount. "By headcount" skips the group step and just divides every day's cost across everyone present.

4Fair share by group

Groups with sub-groups can be expanded to show how their total is split across date ranges and people counts.

GroupDays presentFair share
Show day-by-day breakdown

5Group totals vs. already paid

Rows sharing a group name are combined here, then checked against what that group already fronted.

GroupFair shareAlready paidNet
Total expense cost: — Allocated: —

6True-up: who pays whom

A minimal set of transfers that settles every balance (greedy — usually optimal, not guaranteed the theoretical minimum).