Show a number from a web address or JSON API

A Web Address meter fetches an http or https URL every 5 minutes (as often as every 30 seconds) and shows the number in the reply. For JSON, a key path like data.amount picks the value. Works in every version of Multimeter.

How-to. Updated October 25, 2026, for Multimeter 1.0.

Add the meter

  1. Choose Add Meter… and pick Web Address.
  2. Paste the URL. Check it first with curl -s URL to see what comes back.
  3. Add a key path for JSON, set a range, and pick a refresh interval the API is happy with.

How it fetches

  • A plain GET with a 15 second timeout, no cookies, and the User-Agent Multimeter (Mac menu bar app).
  • Up to 256 KB of the reply is read.
  • An error status shows as “The server answered 404” (or whichever code); a network failure as “Couldn’t reach the address”.
  • Refresh Now in the meter’s menu fetches immediately.

What the reply can look like

Web addresses, files and scripts all read the same two formats.

A plain number, or any text with a number in it. Multimeter takes the first number it finds, and drops thousands separators between digits, so 1,284 stars reads as 1284.

JSON. Either a bare number, or an object with value and any of these extras:

meter.json
{
  "value": 38,
  "min": 0,
  "max": 50,
  "label": "DEPLOY",
  "unit": "today",
  "formatted": "38 of 50"
}

Pointing at bigger JSON you don’t control, like an API response? Give the meter a key path. Dots walk into objects and numbers pick array items: data.items.0.count. Numbers inside strings work too ("67012.45"), and true/false count as 1 and 0.

Without min and max the range is 0 to 100, so for bigger numbers set a range in Customize This Meter… or send max.

Examples

Public endpoints that need no key (checked October 2026)
WhatURLKey path
GitHub starshttps://api.github.com/repos/OWNER/REPOstargazers_count
Open GitHub issues and PRshttps://api.github.com/repos/OWNER/REPOopen_issues_count
Bitcoin in USDhttps://api.coinbase.com/v2/prices/BTC-USD/spotdata.amount
Polymarket odds of “Yes” (0 to 1)https://gamma-api.polymarket.com/markets?slug=MARKET-SLUG0.outcomePrices

GitHub allows 60 unauthenticated requests an hour from one address, so refresh those every 5 minutes or slower.

For the Polymarket row, the slug is the last part of the market’s address on polymarket.com. outcomePrices is a string like ["0.53", "0.47"]; Multimeter takes its first number, the price of Yes. Set the range to 0 to 1 so a Ring or Level Bar fills to the odds.

Your own endpoint: the easiest format to serve is the value object, so the meter gets its label and range too:

Any server: GET /meter.json
{ "value": 3, "max": 10, "label": "QUEUE" }

APIs that need a token

Web Address meters don’t send headers. For an API that needs a token, use a Script meter with curl -H and jq, and keep the token in a file rather than in the command.

Check it worked

The meter shows the same number curl showed you, and Refresh Now updates it.

Troubleshooting

What the meter says, why, and what to do
SymptomCauseFix
No number found in the responseThe key path doesn’t match, or the reply is HTML.Look at the JSON with curl -s URL | jq . and build the path from there; array items use numbers (items.0.count).
The server answered 403 or 429The API wants a token or you hit its rate limit.Refresh less often, or switch to a Script meter that sends a token.
The bar is always fullThe number is bigger than the default range of 0 to 100.Set a range in Customize This Meter…, or use a text face.

Next

Put it in your menu bar

$19.99 one-time. No subscription. 30-day refund. Needs macOS 13 Ventura or later.