Back to Blog
developmentSeptember 13, 20268 min read

Bobby Has No Web App: How to Track Subscriptions From Your Mac Desktop

The short answer: Bobby ships as a mobile app backed by iCloud sync, and there is no official web dashboard to log into from a browser. If you want your

NexaSphere Team

Author

Bobby Has No Web App: How to Track Subscriptions From Your Mac Desktop

The short answer: Bobby ships as a mobile app backed by iCloud sync, and there is no official web dashboard to log into from a browser. If you want your subscriptions in front of you while you work on a Mac, you have four realistic options, in increasing order of control:

  1. Run the iPhone app itself on an Apple silicon Mac, if the developer has opted in to distributing it there.
  2. Use iPhone Mirroring to drive the app on your Mac screen.
  3. Stop treating the app as the source of truth and push renewal dates into your calendar, which is already on your Mac.
  4. Keep the real list in a plain text file you own, and let the phone app be a convenience layer.

Options 3 and 4 are the ones that actually survive. The rest of this is how to do each one, and what breaks.

Why there is no web app, and why that is partly good

A web dashboard means a server, which means accounts, password resets, a session store, a billing relationship, and a database full of other people's financial habits. That is a permanent operational and liability cost. An app that syncs through the user's own iCloud account has none of it. The developer never holds your data, so there is nothing to breach and nothing to subpoena.

That is a genuinely defensible design choice, and it is the same one I make in my own tools. The honest cost is exactly what you are running into: no desktop surface, no browser access, no API, and no easy way to get your list out and into something else. You traded portability for privacy. Most people do not notice the trade until the day they want a Mac window.

Route 1: run the iPhone app on your Mac

Apple silicon Macs can run iPhone and iPad apps natively, but only when the developer leaves that option enabled. It is opt-in per app, and many developers turn it off because a touch-first interface behaves awkwardly with a cursor.

To check: open the Mac App Store, search for the app, and look at the results filter for "iPhone & iPad Apps". If it appears there, install it and you are done in thirty seconds. If it does not appear, no workaround exists, and you should skip to route 3 rather than hunting for one.

Even when it works, temper expectations. These apps run in a fixed window that does not resize like a real Mac app, widgets and some system integrations are unavailable, and anything depending on iPhone hardware degrades or fails. It is a viewer, not a desktop experience.

Route 2: iPhone Mirroring

Recent versions of macOS can mirror a nearby, locked iPhone onto your desktop, letting you use any installed app with your keyboard and trackpad. Both devices need to be signed in to the same Apple Account with Bluetooth and Wi-Fi on, hardware requirements apply, and feature availability has varied by region since launch, so confirm it is present on your machine before planning around it.

This is fine for a monthly review. It is not a dashboard. Your phone is locked and unusable while mirroring is active, and the window is a phone-shaped rectangle you will close within a minute. Treat it as remote access, not as a Mac client.

Route 3: make your calendar the desktop view

This is the first option that is actually good, and it takes about twenty minutes once.

Create a dedicated calendar in iCloud called Subscriptions. For each recurring charge, add an all-day event on the renewal date with a repeat rule matching the billing cycle, and set an alert for three days before. Put the amount in the title, like Adobe CC 59.99 or Hetzner 4.51. Put the cancellation URL in the event notes.

What you get: renewals appear in the Mac Calendar app, in the notification center, in the menu bar, on the iPhone lock screen, and in any CalDAV client you use. Nothing is proprietary. Nothing depends on one vendor staying in business.

The three-day alert matters more than the event itself. It is the only window in which cancelling is still free. An alert on the renewal day is a receipt, not a decision.

The honest weakness is manual entry, plus annual plans whose price changes at renewal and quietly invalidates your title. Fix that during the quarterly reconcile below.

Route 4: own the list as a plain file

If you are comfortable in a terminal, keep the canonical list as a CSV in iCloud Drive or a private git repository. One row per subscription:

name,amount,currency,cycle,first_charge,payment_method,cancel_url,notes
Figma,15.00,USD,monthly,2024-03-11,visa-4821,https://figma.com/settings,team plan
Hetzner,4.51,EUR,monthly,2023-08-02,visa-4821,https://console.hetzner.cloud,cx22 box
1Password,35.88,USD,yearly,2022-01-19,amex-1007,https://my.1password.com,family

The cancel_url column is the highest-value field in the file and the one every tracker app leaves out. Cancelling is hard because finding the cancel page is hard. Write the URL down once, at signup, while you are already on the page.

Then a short script turns that file into an answer:

#!/usr/bin/env python3
"""Print what renews in the next 45 days, plus the true monthly cost."""
import csv
from datetime import date
from dateutil.relativedelta import relativedelta  # pip install python-dateutil

PER_MONTH = {"monthly": 1, "quarterly": 3, "yearly": 12}
today, rows, total = date.today(), [], 0.0

with open("subs.csv", newline="") as f:
    for s in csv.DictReader(f):
        months = PER_MONTH[s["cycle"]]
        nxt = date.fromisoformat(s["first_charge"])
        while nxt < today:
            nxt += relativedelta(months=months)
        total += float(s["amount"]) / months
        rows.append((nxt, (nxt - today).days, s["name"], float(s["amount"]), s["cancel_url"]))

for nxt, days, name, amount, url in sorted(rows):
    if days <= 45:
        print(f"{nxt}  in {days:>3}d  {name:<20} {amount:>8.2f}  {url}")

print(f"\nNormalized monthly total: {total:.2f}")

Two caveats, stated plainly. It sums mixed currencies as if they were one, so either keep a single currency or add a conversion step. And it assumes your cycle vocabulary stays in the PER_MONTH map, so a weekly or biennial plan needs a new entry.

Run it from your shell, or wire it to a launchd job that posts a notification every Monday morning. That is a Mac desktop subscription tracker, built out of parts that cannot be discontinued.

Reconcile against reality once a quarter

Every tracker, including the one you build, only knows what you told it. The list drifts. Once a quarter, spend fifteen minutes on the sources that cannot lie:

  • On a Mac, open the App Store, click your account name, and open Manage under Subscriptions. This covers only App Store purchases, which is often more of your total than you expect.
  • Export the last ninety days of card statements as CSV and sort by merchant. Recurring charges surface immediately.
  • Search your mail for receipt, your subscription, renews, and trial ends. Free trials that converted silently are the single most common leak.

Add whatever you find, and correct any price that changed. Reconciliation is the part people skip, and it is the part that makes the whole system worth having.

Which route should you pick

If you just want to glance at the app occasionally, check the Mac App Store for the iPhone build and stop there. If you want renewals to reach you without opening anything, use the calendar. If you want a number you trust and a cancel link you can click, own the CSV. The calendar plus the CSV is roughly forty minutes of setup and then nothing, which is the correct amount of maintenance for a problem this small.

FAQ

Does Bobby have a Mac or web version? No official web dashboard or native Mac app. On an Apple silicon Mac you may be able to install the iPhone build from the Mac App Store if the developer enabled it, and iPhone Mirroring works regardless. Check the developer's own site before assuming either way, since app availability changes.

Can I export my data out of the app? Look in the app's settings for an export or backup option first. If none exists, assume you will re-enter the list by hand. Data synced to your private iCloud container is not stored in a documented format you can parse, and that is the direct consequence of the privacy model.

Is a spreadsheet really good enough? For twenty or thirty subscriptions, yes, and it beats most apps because you control the columns. A dedicated app wins on one thing only: a pleasant interface for adding entries on your phone. It does not know your charges any better than your file does.

Should I connect a tracker to my financial accounts for automatic detection? That requires granting an aggregation service broad read access to your transaction history, held on someone else's server indefinitely. Automatic detection is genuinely convenient and it also misses annual charges outside the sync window. Decide with the trade clearly in view, and if you decide against it, the quarterly statement export gets you ninety percent of the benefit for fifteen minutes a quarter.

What is the one field most people forget? The cancellation URL. Write it down at signup. It is the difference between cancelling in ten seconds and postponing for another billing cycle.

One useful thing a week. Nothing else.

I test these tools on real work and write up what actually held up. No roundups I have not used, no affiliate padding. Unsubscribe in one click.