Near me · methodology · v2 · 2026-10-03
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.
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.
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.
Rows under 0.3 are not published. Confidence weights the index and breaks distance ties. It is never moved by money.
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.
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.
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.
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.
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.
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.
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.