A paid-status column gives a shared Google Sheet a clear checkpoint: the expense is logged, the receipt is present, and reimbursement is still open or settled. Build one row per expense, then keep each person's share and actual payments visible.

That separation matters. Paid By identifies who covered the merchant charge; Paid Status shows whether the people who owe money have reimbursed them. A $200 grocery run can look simple and still create confusion if those fields get mixed together.

Keep it boring. That is a feature.

Build the transaction log first

Create a tab called Transactions. Use one row for each expense, not one row for each person involved.

Column What it records Example
Date Date of the expense 2026-07-15
Description What the group bought July utilities
Category Useful reporting label Utilities
Amount Total merchant charge $120
Paid By Person who paid upfront Alex
Paid Status Reimbursement state Unpaid
Receipt Status Whether proof is available Receipt OK
Split Method Rule used for the split Equal
Alex Owes Alex's share $40
Jamie Owes Jamie's share $40
Taylor Owes Taylor's share $40
Notes Short context or follow-up Payment pending

The payer can still owe part of the expense. Alex may have paid the full bill and owe only Alex's own share.

Use a separate column for every regular participant. If the group changes often, add a new share column instead of burying names in Notes. One row, one expense. Keep doing that.

Add paid and receipt status dropdowns

Set the validation before anyone types. Select F2:F100, choose Data > Data validation, and create a dropdown with Unpaid, Partial, and Paid.

Use the same approach for G2:G100, with Receipt OK, Receipt Missing, and Photo Attached. The menu labels can vary slightly by Sheets interface.

Use the status values consistently:

  • Unpaid means no reimbursement has been recorded for the expense.
  • Partial means some money has been returned, but the row is not settled.
  • Paid means the group considers the reimbursement complete.

Paid Status should describe reimbursement. It should not describe whether the store, landlord, or utility company received the original payment.

Keep headings and formulas out of the entry area. Protect those ranges if several people will edit the file.

Agree on the split rule before entering shares

A three-way equal split is easy to audit. In I2:K2, enter =$D2/3 and copy the formula across the three share columns.

For percentage splits, use the agreed percentage of the total, such as =$D2*40%. A custom split might assign $80 to one person and $60 to each of two others on a $200 expense.

The share columns should add up to the Amount column. Check that sum before changing the reimbursement status.

Equal splits fit shared utilities and common groceries. Usage-based splits can fit household supplies or meals that not everyone used. Room-size or nights-stayed rules may make more sense for rent or lodging. Income-based contributions can work for a household budget, but the group needs to agree to that approach first.

Turns out, a written rule prevents more arguments than a clever formula. Put the rule in Notes or on a separate Rules tab.

Add a Payments tab for partial reimbursements

A single Paid Status cell cannot show several different transfers. Add a second tab named Payments when people pay back in stages.

Column What it records Example
Payment Date Date money was sent 2026-07-20
From Person who sent money Jamie
To Person who should receive it Alex
Amount Reimbursement amount $40
Related Expense Expense being settled July utilities
Method How the group identifies it Bank transfer
Notes Confirmation or context First installment

Record the payment first. Then update the related transaction from Unpaid to Partial or Paid.

For a single bill with several people owing money, mark the row Paid only after every required share has been settled. If that level of detail matters, the Payments tab is the more reliable record.

Create a running tally by person

A running tally per person is easier to read than a balance hidden inside every transaction row. On a Summary tab, put each participant in column A.

Use these headings in row 1:

Person, Paid to Merchants, Share Owed, Payments Sent, Payments Received, and Current Balance.

Summary column Formula in row 2 Use
Paid to Merchants =SUMIF(Transactions!$E$2:$E$100,A2,Transactions!$D$2:$D$100) Total the person paid upfront
Share Owed =SUM(Transactions!I2:I100) Alex's total share
Payments Sent =SUMIF(Payments!$B$2:$B$100,A2,Payments!$D$2:$D$100) Reimbursements sent
Payments Received =SUMIF(Payments!$C$2:$C$100,A2,Payments!$D$2:$D$100) Reimbursements received
Current Balance =B2-C2+D2-E2 Remaining net position

The Share Owed formula shown uses Alex's column, I. Use J for Jamie and K for Taylor. Add another share column and matching formula when you add a participant.

A positive Current Balance means the group still owes that person. A negative balance means that person still owes the group. That is the useful number.

For a simple view of Alex's shares on fully unpaid rows, use =SUMIFS(Transactions!I2:I100,Transactions!F2:F100,"Unpaid"). That shortcut does not calculate the exact remainder of a partial payment, so use the Payments tab for detailed settlement work.

Add simple dashboard views

Keep summaries on a separate Dashboard tab. The raw transaction list stays easier to audit that way.

To show only unpaid transactions, use =IFERROR(FILTER(Transactions!A2:L100,Transactions!F2:F100="Unpaid"),"No unpaid items").

To list expenses above $100, use =IFERROR(FILTER(Transactions!A2:L100,Transactions!D2:D100>100),"No expenses over $100").

For category totals, use =QUERY(Transactions!A1:D100,"select C, sum(D) where C is not null group by C label sum(D) 'Total'",1). This groups the Category column and adds the Amount column.

These views are for review, not data entry. Keep the original rows untouched.

Highlight status with conditional formatting

Select A2:L100, then choose Format > Conditional formatting. Add custom formula rules that apply to the full row.

Use =$F2="Unpaid" for a red or pink fill. Use =$F2="Partial" for a yellow fill. For missing proof, use =$G2="Receipt Missing" with an orange fill.

The dollar sign locks the status column while the row number changes. Start each rule with row 2 because row 1 contains the headings.

Test every rule by changing one sample row. A color that never changes is usually a range or row-reference problem.

Follow the same review workflow every time

Status labels drift unless the group has a clear handoff. Use this sequence:

  1. Log the expense, date, category, payer, and total amount.
  2. Add the receipt status and store a useful note about missing proof.
  3. Apply the agreed split method and check that shares equal the total.
  4. Set Paid Status to Unpaid.
  5. Add each reimbursement to the Payments tab as it happens.
  6. Change the transaction to Partial or Paid after checking the recorded amounts.

A simple reminder can say, Check Paid Status: Unpaid items over 30 days get a note. For roommates, a weekly bill check and a monthly pre-rent tally are practical starting points.

Share the sheet deliberately

Share the file with specific email addresses when possible. Give edit access to the people who enter expenses or confirm payments, and give view access to occasional reviewers.

A link set to Editor can let trusted group members update the ledger, but it also increases the chance of accidental changes. Use Viewer for people who only need to inspect the record.

Protect formula ranges and headings. Protection reduces accidental edits; it does not make a tab private from someone who can open the spreadsheet.

Review sharing settings before sending the link. Remove access when someone leaves the household, trip, club, or committee.

Fix the mistakes that cause bad tallies

Common problem Better practice
Paid By is treated as the reimbursement status Keep the payer and status in separate columns
A partial payment has no payment record Add every transfer to the Payments tab
Share columns do not equal the total Check the row before marking it Paid
People overwrite formulas Protect formula cells and headings
Several expenses sit in one row Give each charge its own row
Receipts exist only in private messages Record the receipt state and a short note in the sheet

Do not mark a row Paid just because someone says they sent money. Record the amount and related expense first.

Know where Sheets stops

Google Sheets records the arrangement. It does not move money, verify a transfer, scan receipts, or send payment reminders by itself.

Thing is, a manual tracker is often enough for a small informal group. Keep the workflow clear: the sheet tracks the obligation, a payment service handles any transfer the group chooses to use, and the Payments tab preserves the record.

If receipts affect a tax, business, landlord, or legal matter, keep the original documents and get advice for the relevant situation. The spreadsheet alone is not formal proof of every underlying transaction.

Test the tracker before sharing it

Enter one sample $200 grocery expense. Mark Alex as the payer, split the amount among the participants, set the row to Unpaid, and add a matching receipt status.

Check four things: the share columns total $200, the unpaid filter shows the row, the conditional formatting changes, and the Summary balance makes sense. Add a sample reimbursement and confirm that the balance moves in the expected direction.

Delete the test row or label it clearly. Then log the next real bill, set it to Unpaid, and follow the same review sequence.