Yes, Airtable can do this. The dependable setup uses one Split record for each person on each bill, then calculates that row's share from income and the bill total.
The math is income / total group income * bill amount. The tricky part is the total: a formula field doesn't scan every record in the People table by itself. A linked record and a rollup bring the participants' income into the bill, where the formula can use it. Airtable's formula field functions reference covers the arithmetic, conditional, and rounding functions used here.
This base tracks an agreed contribution. It doesn't decide whether income is the fairest rule for your household, trip, or group.
Decide the splitting rule first
Income-based splitting works when people agree that shared costs should follow ability to pay. It isn't automatically fair for every expense.
| Split rule | Best fit | Question to settle |
|---|---|---|
| Equal | Simple costs and one-off events | Does everyone use or benefit from the expense equally? |
| Usage-based | Utilities, groceries, or supplies | How will you measure different usage? |
| Income-based | Households with uneven earnings | Will you use gross income, take-home income, or another figure? |
| Hybrid | Groups with different rules by expense | Which bills use income, and which use equal or usage-based shares? |
Write the rule before entering a number. For example: "For shared household bills, each adult's share follows their monthly take-home income recorded when that bill is created."
Include the participant rule too. A trip expense might include three people from a six-person group.
Build a three-table Airtable base
Use a People table, a Bills table, and a Splits table. Splits is the junction table: each record connects one person to one bill.
| Table | Fields to add | Purpose |
|---|---|---|
| People | Person as the primary field; Current Income as currency; optional Income Basis |
Stores each person's current reference income |
| Bills | Bill; Amount as currency; Due Date; linked Splits |
Stores each shared expense |
| Splits | linked Bill; linked Person; Income Used as currency; Bill Amount; Group Income; Share |
Calculates one person's obligation for one bill |
Create only one Split record per participant per bill. A $1,000 bill for three people needs three Split records.
Keep Income Used in Splits even if People has Current Income. Copy the agreed income into that field when you create the Split record. That preserves the math for old bills.
Add the linked records and formulas
Follow these steps in order.
- Add each participant to People and enter
Current Incomeusing the group's written rule. - Add a bill to Bills with its amount and due date.
- Create one Split record for every person included in that bill. Link each row to the correct Bill and Person, then copy the person's income into
Income Used. - In Bills, add a
Total Group Incomerollup. Roll up the linked Splits'Income Usedfield withSUM(values). - In Splits, add a
Bill Amountrollup from the linked Bill'sAmountfield. UseSUM(values). - In Splits, add a
Group Incomerollup from the linked Bill'sTotal Group Incomefield. UseSUM(values)again. - Add a formula field named
Sharewith this formula:
IF(OR({Group Income}=0,{Bill Amount}=0),0,ROUND({Income Used}/{Group Income}*{Bill Amount},2))
Airtable formulas use * for multiplication. Don't write the word times in the formula.
Add a check on Bills as well. Create a Total Shares rollup of the linked Splits' Share values, then add a Rounding Difference formula:
ROUND({Amount}-{Total Shares},2)
A zero result means the calculated shares match the bill. A small difference usually comes from rounding to cents.
Test the calculator with sample data
Suppose the group uses a $1,000 bill and records these incomes:
| Person | Income Used | Share |
|---|---|---|
| Alex | $4,000 | $400 |
| Jordan | $3,000 | $300 |
| Casey | $3,000 | $300 |
Total group income is $10,000. Alex's share is $4,000 divided by $10,000, multiplied by $1,000, or $400.
Total Shares should be $1,000. If it isn't, check for a missing Split record, a duplicate participant, or a wrong income value.
Choose between live and snapshot income
Turns out, the biggest design decision isn't the formula. It's whether old bills should change when someone's income changes.
Use snapshot income when a completed bill needs to remain explainable. The Income Used value stays fixed, so updating People.Current Income won't rewrite past obligations.
Use live income when the base should always reflect the latest household position. In Splits, create a Person Income rollup from Person to Current Income. Point the Bills group-income rollup at Person Income, and use {Person Income} instead of {Income Used} in the Share formula.
Live income is convenient. It can also change every linked bill.
For recurring bills, add an Income Period date or month field if the group needs a record of which period the calculation covers. Decide how to handle a mid-month raise, unpaid leave, or irregular income. The base will follow your rule, not infer it.
Track payments separately from amounts owed
Your Share field answers what someone owes. It does not show who paid the merchant.
Thing is, one person may pay the full bill while everyone else reimburses that person later. Keep the calculated obligation and the actual payment as separate records.
| Table | Fields to add | Purpose |
|---|---|---|
| Payments | Payment; linked Bill; linked Paid By; Payment Date; Amount |
Records an actual payment |
| Payment Allocations | linked Payment; linked Split; Allocated Amount |
Assigns part of one payment to one or more obligations |
Payment Allocations is optional. Add it when one payment covers several people's shares or when you need a bill-level audit trail.
In Splits, roll up linked Payment Allocations' Allocated Amount into Amount Credited. Then add a Balance formula:
ROUND({Share}-IF({Amount Credited},{Amount Credited},0),2)
A positive Balance means that obligation still has money assigned to it. A negative result means it has been credited by more than its calculated share.
For a group-level net position, add these optional fields in People:
Owed Total: roll up linked Splits'Sharevalues.Paid Total: roll up linked Payments'Amountvalues.Net Position:ROUND(IF({Paid Total},{Paid Total},0)-IF({Owed Total},{Owed Total},0),2)
A positive Net Position means that person paid more than their calculated share across the records included. A negative result means they still owe. The actual reimbursement happens outside this tracking base.
Make the base useful week to week
Create views that answer one question at a time:
- Bills due: show each bill, its due date, amount, total shares, and rounding difference.
- Shares by person: filter Splits to one person so their obligations are easy to review.
- Unsettled balances: filter Splits where Balance is not zero.
- Payment reconciliation: show Payments beside their allocated and unallocated amounts.
Keep raw income out of a shared summary when the group only needs to see amounts owed. A separate summary view is easier to understand and exposes less sensitive information.
Interfaces can provide a cleaner entry screen, but don't assume that a collaborator can edit only their own row. Review Airtable's interface permissions guidance, then test the actual collaborator role and field visibility before sharing the base.
Common mistakes to avoid
| Mistake | Why it causes trouble | Fix |
|---|---|---|
Using SUM({Income}) in the Share formula |
The formula is not collecting income across People records | Roll up linked Split records first |
| Linking people directly to bills without Splits | There is no separate row for each person's obligation | Create one Split record for each bill-person pair |
| Including every person on every bill | Nonparticipants receive an obligation | Link only the people responsible for that bill |
| Changing a person's income for old bills | Historical shares change unexpectedly | Store a snapshot in Income Used |
| Skipping the Total Shares check | Rounding or missing records can hide a mismatch | Compare Total Shares with Amount |
| Recording only who paid | You can't tell which obligations that payment covers | Add Payment Allocations when needed |
When a spreadsheet may be better
To be honest, Airtable isn't always the right tool. A one-off dinner or short trip may be faster to handle in a simple spreadsheet, especially when the group doesn't want to enter income in a shared base.
Airtable becomes more useful when you have recurring bills, changing participants, payment records, and several linked expenses. The benefit comes from the relationships between records, not from the income formula alone.
If privacy matters more than linked history, use a private calculation sheet and share only the agreed dollar amounts. A tool should fit the group's comfort level.
FAQ
Can one bill include only some members of the group?
Yes. Create Split records only for the participants responsible for that bill. This works for trips, shared meals, utilities, and changing roommate groups.
What happens if total group income is zero?
The formula above returns zero instead of dividing by zero. That is only a safety guard, not a meaningful proportional split. The group needs another rule, such as an equal or manually agreed amount.
Should I use gross income or take-home income?
There is no universal answer. Pick one basis, record it in Income Basis, and use it consistently. Mixed definitions make the results harder to explain.
Do I need Payments and Payment Allocations?
No. The People, Bills, and Splits tables are enough to calculate obligations. Add the payment tables when you need reimbursement records, per-bill balances, or an audit trail.
Can Airtable show who should reimburse whom?
It can show each person's calculated share and net position when payment records are linked correctly. The actual transfer still takes place outside the base.
Start with one sample bill, add one Split row per participant, and confirm that Total Shares matches Amount. Then decide whether future bills should use a fixed Income Used snapshot or a live income rollup.