What you need
- Multimeter for macOS 13 or later, $19.99 once.
- The direct download version of Multimeter from this site (the Script source isn’t in the Mac App Store version).
- A Stripe restricted key with read-only access: Stripe Dashboard, Developers, API keys, Create restricted key, then Read on Subscriptions and None on everything else.
jqfor picking numbers out of JSON. It comes with macOS 15 and later; on macOS 13 or 14 runbrew install jq.
Set it up
- Save the restricted key in your login Keychain, so it never sits in the command or a file. Run this in Terminal; it asks for the value and hides what you type.Terminal (once)
security add-generic-password -U -a "$USER" -s stripe-read -w - Try it in Terminal:Command
curl -s -m 8 -u "$(security find-generic-password -s stripe-read -w):" -G https://api.stripe.com/v1/subscriptions -d status=active -d limit=100 | jq '[.data[].items.data[] | .price.recurring as $r | (.price.unit_amount // 0) * (.quantity // 1) * (if $r.interval == "year" then 1 / 12 elif $r.interval == "week" then 52 / 12 elif $r.interval == "day" then 365 / 12 else 1 end) / ($r.interval_count // 1)] | add // 0 | . / 100 | round' - Add a Script meter with it, refreshing every 15 minutes.
- Set the range to 0 to your MRR goal and choose the XP Bar or a Level Bar.
Multimeter settings
In Customize This Meter… (from the meter’s menu):
| Setting | Value |
|---|---|
| Source | Script |
| Command | the curl … | jq line above |
| Refresh every | 15 minutes |
| Range | 0 to your goal, like 2000 |
| Label | MRR |
| Face | XP Bar, Level Bar or Arc Gauge |
Tested: Run on October 29, 2026 on our live account: printed 203 in under a second.
Script meters need the direct download version of Multimeter from this site, which is the one on sale now. How commands run, the PATH they see and the 10 second limit are in the Script meters guide.
Limits
- It uses list prices: coupons and discounts aren’t subtracted, and trials count as active only once they convert. For an exact figure matching Stripe’s billing analytics, those need adding.
- Reads up to 100 active subscriptions in one call.
Troubleshooting
| Symptom | Cause | Fix |
|---|---|---|
| The script didn’t print a number | The command failed or printed an error message instead. | Run the exact command in Terminal. If it works there, check for tools that live outside the meter’s PATH and use their full path (which tool). |
| The script took longer than 10 seconds | A slow network call. Multimeter stops scripts after 10 seconds. | Keep the -m timeout on curl, and refresh less often. |
| Scripts need the version from multimeterapp.com | This copy of Multimeter came from the Mac App Store, which can’t run scripts. | Use the direct download version, or run the command from cron or launchd and point a File meter at its output. |
| Prints 0 when you know there were sales | The key lacks read access to that resource, so Stripe answered with an error and jq added nothing. | Run the curl part alone and read the error; give the key Read on the resource it names. |
Questions
Is it safe to keep the token in the Keychain?
It is the safest place on a Mac for it: encrypted, unlocked with your login, and never written into the command, a dotfile or your shell history. The meter reads it with the security tool each time it runs.
Does this work in the Mac App Store version?
Script meters need the direct download version from multimeterapp.com, because the App Store sandbox doesn’t let apps run your commands. Web Address, File and Sent Value meters work in every version.