DEV Community

Cover image for How I built a subscription tracker in Google Sheets (formulas to normalize any billing cycle)
Maggie B
Maggie B

Posted on

How I built a subscription tracker in Google Sheets (formulas to normalize any billing cycle)

Subscriptions are sneaky because they bill on different rhythms. A $139/year Prime membership, a $15.49/month Netflix plan and a $9/week meal kit can't be compared until you put them on the same scale. Here's how I built a tracker that does that automatically. It works the same way in Google Sheets and Excel.

1. The columns

One row per subscription on a Subscriptions sheet:

A B C D E F G H I J K
Service Category Cost Billing cycle Monthly cost Yearly cost Next renewal Days left Payment method Status Notes

You type into C, D, G and J. Columns E, F and H are formulas.

2. A lookup table instead of nested IFs

The tempting approach is IF(D2="Weekly",C2*52/12,IF(D2="Monthly",C2,...)). It breaks the moment you add a cycle. Instead, make a small Lists sheet:

Cycle (A) Payments per year (B)
Weekly 52
Monthly 12
Quarterly 4
Every 6 months 2
Yearly 1

Now every cycle is normalized the same way: cost × payments per year ÷ 12.

3. Monthly cost (E2)

=IF(C2="","",IF(J2="Cancelled",0,C2*IFERROR(INDEX(Lists!$B$2:$B$6,MATCH(D2,Lists!$A$2:$A$6,0)),0)/12))
Enter fullscreen mode Exit fullscreen mode

Reading it inside-out:

  • MATCH(D2, Lists!$A$2:$A$6, 0) finds the row of the billing cycle (exact match).
  • INDEX(Lists!$B$2:$B$6, …) returns payments per year.
  • IFERROR(…, 0) keeps a typo or a blank cycle from spraying #N/A across your totals.
  • IF(J2="Cancelled", 0, …) lets you keep cancelled rows for history without counting them.
  • The outer IF(C2="","",…) keeps empty rows blank.

4. Yearly cost (F2)

=IF(E2="","",E2*12)
Enter fullscreen mode Exit fullscreen mode

Once everything is monthly, yearly is trivial. This column is the one that hurts: seeing $14/month as $168/year changes decisions.

5. Days until renewal (H2)

=IF(G2="","",G2-TODAY())
Enter fullscreen mode Exit fullscreen mode

Dates are just numbers, so subtraction gives days. TODAY() recalculates on open, so the countdown is always current.

Add conditional formatting to make it pop: a rule on H2:H101 with a custom formula like =AND($H2>=0,$H2<=7) and a red fill. I also grey out cancelled rows with =$J2="Cancelled".

6. Data validation

Use dropdowns sourced from the Lists sheet (cycles in Lists!A2:A6, categories in D2:D11, statuses in E2:E5). This matters more than it looks, because the MATCH in step 3 needs exact text.

7. The dashboard

A separate Dashboard sheet just aggregates:

Monthly total:            =SUM(Subscriptions!E2:E101)
Yearly total:             =SUM(Subscriptions!F2:F101)
Active subscriptions:     =COUNTIF(Subscriptions!J2:J101,"Active")+COUNTIF(Subscriptions!J2:J101,"Trial")+COUNTIF(Subscriptions!J2:J101,"Review")
Renewing in next 7 days:  =COUNTIFS(Subscriptions!H2:H101,">=0",Subscriptions!H2:H101,"<=7")
Renewing in next 30 days: =COUNTIFS(Subscriptions!H2:H101,">=0",Subscriptions!H2:H101,"<=30")
Marked for review ($/mo): =SUMIF(Subscriptions!J2:J101,"Review",Subscriptions!E2:E101)
Enter fullscreen mode Exit fullscreen mode

And a per-category breakdown, with category names in column E:

=SUMIF(Subscriptions!B2:B101,E2,Subscriptions!E2:E101)
Enter fullscreen mode Exit fullscreen mode

Feed that range into a pie chart and you can see where the money goes.

Dashboard showing monthly and yearly totals, renewal counts, and spend by category

8. Tips

  • The ">=0" condition in COUNTIFS excludes past dates, so stale renewals don't count as "upcoming". Update the date after each renewal.
  • A "Review" status is a gentle middle ground between Active and Cancelled. The dashboard tells you how much per month is riding on those decisions.
  • Excel and Sheets both handle every formula here with no scripts or add-ons.

Wrap-up

That's the whole thing: one lookup table, three formula columns and a summary sheet. Build it yourself in about 20 minutes with the formulas above. If you'd rather skip the setup, I packaged the finished version (Excel + Google Sheets, dashboard and chart included) for $1: https://ailstudio.gumroad.com/l/qkwkix

Top comments (0)