Skip to content
FindSaunaPlunge

API & data access

The full dataset behind this site — 548 hand-checked venues — is published as a static JSON feed. No key, no rate limit beyond ordinary politeness, licensed CC BY 4.0 (use it freely, attribute with a link).

The venue feed

GET /api/v1/venues.json

Static JSON, regenerated on every site build, edge-cached for an hour. Served with open CORS, so it can be fetched directly from a browser.

Envelope

  • version — "v1". Fields are only ever added within v1; a breaking change would ship as /api/v2/ with v1 kept alive.
  • generatedAt — ISO timestamp of the build that produced the file.
  • counts — venues, cities, states in this feed. The feed carries every live venue, including cities too thin to be browsable on the site, so these counts can exceed the ones the homepage states. Both are honest about their own scope.
  • venues — the array documented below.

Venue fields

  • id — stable slug, also the venue's page URL segment.
  • status — how the record was checked. "verified" means corroborated across multiple current sources of different kinds; "community" means checked against the venue's own published material; "brand_import" means imported from a brand's own location data and dated.
  • lastVerified — ISO date a person or supervised agent last read the venue's own pages. Surface it whenever you surface a fact.
  • address, geo — street address always; coordinates only where the address resolves (an absent geo is a venue we would not pin rather than guess).
  • modalities — array of {value, label}. Values: cold_plunge, traditional_sauna, infrared_sauna, steam_room, cryotherapy, red_light, pemf, compression, float.
  • access — physical layout: private_suite, communal, mixed, or unpublished (the venue does not state it).
  • tempsplungeF / saunaF as [min, max] °F ranges, only where the venue publishes an operating figure. Bounds hedged with "up to" / "starting at" are not recorded as operating temperatures.
  • pricing — dropIn, dayPass, membershipMo, classPack, intro, guestFee (USD) plus a prose note carrying conditions the numbers alone would misstate (founding rates, expiries, conflicting published figures).
  • hours, website, bookingUrl, phone, summary, featured.

The one rule that matters: absent fields mean unknown, never zero or none. A venue without tempspublishes no temperature; treating that as "no sauna" or averaging around it will produce wrong conclusions. Every roll-up we publish states its denominator for this reason.

MCP server

For AI assistants and agent tooling, the same dataset is exposed over the Model Context Protocol (Streamable HTTP) at /mcp — tools for searching venues, fetching one venue, listing cities, per-city statistics, and dataset freshness. llms.txt carries the current tool list.

License & contact

The dataset is CC BY 4.0: use, reproduce, and build on it, with attribution linking here. Facts and dates travel together — if you republish a figure, keep itslastVerified date with it. Questions, bulk needs, or corrections: submit@findsaunaplunge.com.