Skin Over SteelSupport

Near me · methodology · v2 · 2026-10-03

How the map is built

A map of businesses that treat, supply, or support men's metabolic and hormonal health. Every state is covered by the public registries; 20 metros are also mapped at street scale. Each hexagon gets a Metabolic Infrastructure Index from 0 to 100. This page is the whole method, stated plainly enough that you can hold us to it.

What it is not

  • Not about people. Every layer describes a business or a building. No layer uses, infers, or stores anything about residents: no census person data, no voter data, no demographics, no one's health status.
  • Not a referral. A listing means a public registry says the business exists under a relevant category. Reviewed providers live in the directory, where the trust criteria are published.
  • Not a legal opinion. Compounding, telehealth, and controlled-substance rules differ by state. The pharmacy layer asserts licensure or FDA registration only, never that a particular prescription is lawful in a particular state.
  • Not for housing, lending, or insurance. The index must not be used in, or marketed toward, any decision about a person's housing, credit, or insurability. The data license (CC BY-NC 4.0) and this page say so.

Coverage

  • National overview · TRT, GLP-1, pharmacy · H3 r4–r5 · scored against the national distribution.
  • Every state · the registry layers, plus gyms inside metros · H3 r6–r7 · scored nationally.
  • 20 metros · all four layers · H3 r7–r9 · scored against the metro's own distribution, with the national score alongside.

Metros: Dallas–Fort Worth, Houston, Austin, San Antonio, Phoenix, Atlanta, Miami–Fort Lauderdale, Tampa Bay, Las Vegas, Nashville, Los Angeles, New York, San Francisco Bay Area, Seattle, Boston, Washington, DC, Denver, Salt Lake City, Chicago, Minneapolis–St. Paul. The gym layer and the OpenStreetMap pharmacy candidates exist only inside these boxes; outside them the index uses the three registry layers with their weights renormalised, and the hex says so.

Sources (public, business-level)

TRT clinics

NPI registry, monthly NPPES file, all states: endocrinology 207RE0101X, urology 208U00000X, preventive medicine 2083X0100X; family and internal medicine only on a name-keyword hit (testosterone, hormone, low T, men's health, andropause, anti-aging, longevity). Deactivated NPIs skipped.

Keep: Practice-location address, organization name, taxonomy codes.

Drop: Individual practitioners' names (a solo office is labelled by specialty only), mailing addresses, phone numbers.

GLP-1 prescribers

NPI obesity medicine 207RB0002X and weight-loss name keywords; CMS Open Payments general payments from Novo Nordisk and Eli Lilly tied to Ozempic, Wegovy, Mounjaro, Zepbound, Rybelsus, Saxenda, Victoza, grouped to distinct business addresses per state.

Keep: Practice address, specialty.

Drop: Recipient name, NPI, payment amounts, payment nature.

Compounding pharmacies

FDA registered outsourcing facilities (503B), all states; state boards of pharmacy license exports (503A), one CSV per state as operators add them; OpenStreetMap name search inside metros for candidates.

Keep: Name, address, license class.

Drop: Nothing hidden: an unlicensed candidate is shown at low confidence, never as licensed.

Gyms

OpenStreetMap fitness centres and sport tags inside metro boxes; optional Google Places text search.

Keep: Name, address, coordinates, tag words (CrossFit, powerlifting, barbell, strength, strongman; independent fitness centres at lower confidence).

Drop: Big-box chains, reviews, photos.

Zips resolve to Census ZCTA centroids (2023 Gazetteer), with GeoNames filling names and non-ZCTA zips. Street geocoding uses the Census Bureau batch geocoder; rows it cannot match stay at their zip centroid and are labelled as such wherever they appear. Inside metros, Nominatim fills some gaps under its usage policy. Distances are great-circle miles from the zip centroid.

Confidence

  • 0.85 and up · licensed or verified: a TSBP/FDA license, or a specialty match plus a name keyword.
  • 0.6 to 0.85 · specialty match: the registry taxonomy alone.
  • 0.3 to 0.6 · keyword match: a generalist whose name says hormones or weight loss, or an unlicensed pharmacy candidate.

Rows under 0.3 are not published. Confidence weights the index and breaks distance ties. It is never moved by money.

The index

For each H3 hexagon and each layer that covers it:

raw_k  = Σ confidence inside the hex + 0.5 × Σ confidence in the 6 neighbours
comp_k = min(1, ln(1 + raw_k) / ln(1 + P95_k))     P95 over the scoring region
MII    = 100 × Σ w_k·comp_k / Σ w_k                 w: TRT clinic 0.30, GLP-1 prescriber 0.25, Compounding pharmacy 0.20, Gym 0.25

P95 is taken over the whole country for national and state layers and over the metro itself for metro layers; every hex also carries the nationally scored value. The log compresses the top so one medical tower does not flatten the rest of the map. The neighbour term smooths single-listing noise. Empty hexes are not drawn. Weights are a published judgment call, revisited each quarter.

Programmatic pages

A city gets a TRT page only with five or more TRT listings and a GLP-1 page only with eight or more GLP-1 listings. Below that it is reachable through the lookup and the state map but has no page of its own: a page with two rows is noise for readers and search engines alike. Current build: 259 TRT city pages, 7 GLP-1 city pages.

Prices

A listing shows a member price range only once three or more approved reports exist, as the interquartile range so one outlier cannot move it. Below three, the published range for the category is shown and attributed. Reports never include names, emails, or phone numbers; the API rejects them.

Submissions and moderation

Members can report a price, a correction, a closure, or a missing business. Every report is created as pending and reaches the site only after a moderator approves it and the dataset is rebuilt. A report stores an account id and the form fields. IP addresses and user agents are never read or stored. Share your experience, don't prescribe to others.

Snapshots

The dataset is rebuilt and frozen once a quarter. Openings, closings, counts per city, and median reported prices are appended to a time series. A business id is a hash of its name, address, and zip, so a move or rename reads as a closure plus an opening.

Money

There is no paid placement on the map. If sponsored pins or verified-pricing badges ever ship, they will be labelled, kept out of the ranking and the index, and described here first. Any paid relationship follows the directory rule: disclosed at the link, never changes a rank, a score, or a grade.

Limits

  • Registries lag; a clinic can close months before NPPES notices.
  • Keyword match is exactly that. A wellness clinic's name is not a workup.
  • Open Payments is a prescribing proxy, not a prescribing record.
  • State board exports are manual, so 503A coverage grows state by state; until a state's file exists, its licensed compounders appear only as FDA 503B facilities or OpenStreetMap candidates.
  • The gym layer is metro-only. A state hex's score outside a metro says nothing about gyms.
  • About one registry row in ten sits at its zip centroid rather than its street; those rows say so.

Current build: TRT clinic 11,725 · GLP-1 prescriber 88,970 · Compounding pharmacy 197 · Gym 2,050 · 51 states · 20 metros · 92,491 rows at street level. Pipeline: standalone Python scripts in the repository's /etl directory. Hex layers: compact JSON under /data/nearme/ (us, states, metros; one row per hex; CC BY-NC 4.0). Back to the lookup · the map.