Site changelog
246 logged changes, rendered from the append-only operational log this site’s daily routine writes to. Not curated for appearance — this is the record.
Log lines below sometimes name KinesteX, the AI motion SDK that funds this site — the log records that relationship the same way the affected pages disclose it.
For changes in the ecosystem rather than on this site, see API changes & deadlines. For how entries get verified, see methodology.
2026-10
- fixmigrate
/migrate/fitbit-web-api-to-google-health
source-quotes.yml failing on PR #38 and on main's scheduled run of 2026-10-21; sources re-read 2026-10-22 (raw GitHub live; others via source-snapshot runs, logs deleted after reading)
Evidence only: Thryve's Fitbit-shutdown post left its home page; quote re-pointed to thryve.health/blog, where it still appears. Page text unchanged.
- fixalternatives
/alternatives/sency-alternatives
source-quotes.yml failing on PR #38 and on main's scheduled run of 2026-10-21; sources re-read 2026-10-22 (raw GitHub live; others via source-snapshot runs, logs deleted after reading)
Sency's Android demo README now documents SMKit Android 1.9.6 and no longer calls itself a release candidate; RC claim and row removed, version updated (also quotes on kinestex-alternatives, quickpose-vs-sency, kinestex-vs-sency, ai-workout-tracking-apis). Stamps unchanged.
- fixintegrate
/integrate/withings-api /integrate/terra-api /integrate/coros-api
source-quotes.yml failing on PR #38 and on main's scheduled run of 2026-10-21; sources re-read 2026-10-22 (raw GitHub live; others via source-snapshot runs, logs deleted after reading)
Withings: Withings+ notice (from 2026-10-12) gone from developer.withings.com by 2026-10-22; claims rewritten as an announcement cited to the Internet Archive capture of 2026-10-16, with a confirm-with-Withings caveat; Advanced Research API dropped from the solutions list. Terra spec version 2026.10.08.1 -> 2026.10.21.1. COROS 'Submit an API Application' last updated 2026-10-20 (was 2026-10-12). Stamps unchanged.
- fixpricing
/pricing/health-data-aggregator-pricing /pricing/thryve-api-pricing
source-quotes.yml failing on PR #38 and on main's scheduled run of 2026-10-21; sources re-read 2026-10-22 (raw GitHub live; others via source-snapshot runs, logs deleted after reading)
FAQ: Sahha's free plan -> free trial. Thryve inconsistency paragraph replaced: both card texts now say €0.50 per additional user. Stamps unchanged.
- fixfitness-apis
/fitness-apis/health-data-aggregator-apis /fitness-apis/smart-ring-apis
source-quotes.yml failing on PR #38 and on main's scheduled run of 2026-10-21; sources re-read 2026-10-22 (raw GitHub live; others via source-snapshot runs, logs deleted after reading)
Sahha pricing line now the 30-day trial. RingConn's app-features page no longer renders the 'friends and family' sharing sentence; claim removed from body and FAQ. Stamps unchanged.
- fixcompare
/compare/terra-vs-sahha /compare/terra-vs-thryve
source-quotes.yml failing on PR #38 and on main's scheduled run of 2026-10-21; sources re-read 2026-10-22 (raw GitHub live; others via source-snapshot runs, logs deleted after reading)
Sahha 'Free start' cell now the 30-day trial; retention quote re-anchored. Thryve feature list now reads '€0.50 per additional user' (was '0,50ct'); wording updated. Stamps unchanged.
- fixpricing
/pricing/sahha-api-pricing
source-quotes.yml failing on PR #38 and on main's scheduled run of 2026-10-21; sources re-read 2026-10-22 (raw GitHub live; others via source-snapshot runs, logs deleted after reading)
Sahha's pricing page dropped the Free plan ($0 for 30 days, 25 dev users, sandbox) for a 30-day free trial of any plan, card required. Whole page re-verified against today's sources; stamp and sources moved to 2026-10-22. Free row, 10K webhooks and Free retention removed. Historical Free plan cited from the Internet Archive capture of 2026-10-17. ChangeEvent added.
- fixchanges
/changes
Garmin restructured its developer program (source snapshot 2026-10-22): program-faq 404, FAQ moved to /enterprise/program-faq/ with Starter and Enterprise Access, new Personal API; Garmin is the site's #2 click cluster
ChangeEvent added (first seen 2026-10-22, absent from the 2026-10-17 snapshot); the Garmin sign-ups watch item removed as resolved.
- fixreport
/state-of-fitness-apis-2026 /cost-planner
Garmin restructured its developer program (source snapshot 2026-10-22): program-faq 404, FAQ moved to /enterprise/program-faq/ with Starter and Enterprise Access, new Personal API; Garmin is the site's #2 click cluster
Garmin row of the cost model and dataset rewritten; report revision note of 22 October 2026 added (an update, not a correction; no figure moved); datasets regenerated.
- fixpricing
/pricing/are-fitness-apis-free /pricing/fitness-api-free-tiers-compared /pricing/how-much-does-a-fitness-api-cost
Garmin restructured its developer program (source snapshot 2026-10-22): program-faq 404, FAQ moved to /enterprise/program-faq/ with Starter and Enterprise Access, new Personal API; Garmin is the site's #2 click cluster
Garmin fee wording replaced (no published price for Starter, Enterprise terms tailored); Garmin stays free to call under the dataset's no-fee-documented definition; stamps stay.
- fixfitness-apis
/fitness-apis/wearable-data-apis /fitness-apis/fitbit-api-vs-garmin-api /fitness-apis/garmin-connect-iq-vs-health-api /fitness-apis/corporate-wellness-wearable-apis
Garmin restructured its developer program (source snapshot 2026-10-22): program-faq 404, FAQ moved to /enterprise/program-faq/ with Starter and Enterprise Access, new Personal API; Garmin is the site's #2 click cluster
Garmin access, fee and activity-count claims brought in line; Personal API linked; stamps stay.
- fixcompare
/compare/apple-watch-vs-garmin /compare/strava-vs-garmin-connect /compare/whoop-vs-garmin
Garmin restructured its developer program (source snapshot 2026-10-22): program-faq 404, FAQ moved to /enterprise/program-faq/ with Starter and Enterprise Access, new Personal API; Garmin is the site's #2 click cluster
Garmin access, cost and activity-count claims brought in line with the 2026-10-22 pages (over 30 activity types is gone from the overview; the Activity API page names running, cycling, swimming, yoga and strength training); stamps stay.
- fixalternatives
/alternatives/fitbit-api-alternatives /alternatives/oura-api-alternatives /alternatives/strava-api-alternatives /alternatives/whoop-api-alternatives
Garmin restructured its developer program (source snapshot 2026-10-22): program-faq 404, FAQ moved to /enterprise/program-faq/ with Starter and Enterprise Access, new Personal API; Garmin is the site's #2 click cluster
Garmin business-only and licence-fee wording replaced with approval, Starter/Enterprise and Enterprise-only features; stamps stay.
- fixalternatives
/alternatives/garmin-api-alternatives
Garmin restructured its developer program (source snapshot 2026-10-22): program-faq 404, FAQ moved to /enterprise/program-faq/ with Starter and Enterprise Access, new Personal API; Garmin is the site's #2 click cluster
Personal section now leads with the Personal API; business-only, two-business-days and fee sentences replaced; stamp stays.
- fixfix
/fix/garmin-api-approval
Garmin restructured its developer program (source snapshot 2026-10-22): program-faq 404, FAQ moved to /enterprise/program-faq/ with Starter and Enterprise Access, new Personal API; Garmin is the site's #2 click cluster
Garmin claims rewritten to the restructured program and Personal API; Terra, HealthKit and Strava routes not re-checked, so the stamp stays.
- fixintegrate
/integrate/garmin-api
Garmin restructured its developer program (source snapshot 2026-10-22): program-faq 404, FAQ moved to /enterprise/program-faq/ with Starter and Enterprise Access, new Personal API; Garmin is the site's #2 click cluster
Re-verified whole page; stamp to 2026-10-22. Starter vs Enterprise, Enterprise-only features, new /enterprise/ API page URLs, removed claims no longer on Garmin's pages (two business days, integration call, throttled access, over 30 activity types, cloud-to-cloud/Health SDK line).
- fixpricing
/pricing/garmin-api-pricing
Garmin restructured its developer program (source snapshot 2026-10-22): program-faq 404, FAQ moved to /enterprise/program-faq/ with Starter and Enterprise Access, new Personal API; Garmin is the site's #2 click cluster
Re-verified whole page against the 2026-10-22 pages; stamp to 2026-10-22. No price published for Personal or Starter; Enterprise commercial terms tailored; old no-licensing-fee sentence cited to a Wayback capture of 2026-10-17.
- spokefix
/fix/garmin-api-personal-use
Garmin restructured its developer program (source snapshot 2026-10-22): program-faq 404, FAQ moved to /enterprise/program-faq/ with Starter and Enterprise Access, new Personal API; Garmin is the site's #2 click cluster
New page: Garmin Connect Personal API (self-generated key, 24-hour tokens, not for multi-user commercial apps), written from the 2026-10-22 snapshots; evidence ops/sources/evidence/fix-garmin-api-personal-use.json; inbound links from the Garmin pages, libraries and vendor menu.
- fixpricing
/pricing/fitness-api-free-tiers-compared
GSC 2026-09-22 to 2026-10-19: exercise-database cluster is the top earner (exercise-database-api-pricing 11 clicks, exercisedb-alternatives 11, exercisedb-vs-wger 5, exercise-database-apis 4); 2026-10-22 source snapshot found exercisedb.dev rebranded as AscendAPI with free tiers and API Ninjas adding premium images
Partial update, stamp unchanged: ExerciseDB free-tier bullet and FAQs restated from AscendAPI docs; costModel exercisedb row rewritten, datasets, kit and package data regenerated.
- fixfitness-apis
/fitness-apis/free-fitness-apis
GSC 2026-09-22 to 2026-10-19: exercise-database cluster is the top earner (exercise-database-api-pricing 11 clicks, exercisedb-alternatives 11, exercisedb-vs-wger 5, exercise-database-apis 4); 2026-10-22 source snapshot found exercisedb.dev rebranded as AscendAPI with free tiers and API Ninjas adding premium images
Partial update, stamp unchanged: free-exercise-db 876 counted, wger count removed, ExerciseDB and API Ninjas free tiers restated, links to the new pages.
- fixintegrate
/integrate/exercisedb-api
GSC 2026-09-22 to 2026-10-19: exercise-database cluster is the top earner (exercise-database-api-pricing 11 clicks, exercisedb-alternatives 11, exercisedb-vs-wger 5, exercise-database-apis 4); 2026-10-22 source snapshot found exercisedb.dev rebranded as AscendAPI with free tiers and API Ninjas adding premium images
Partial update, stamp unchanged (RapidAPI listing could not be re-read): AscendAPI V1 free endpoint and V2 quickstart request added, free-tier FAQ and step updated.
- sectioncompare
/compare/exercisedb-vs-wger
GSC 2026-09-22 to 2026-10-19: exercise-database cluster is the top earner (exercise-database-api-pricing 11 clicks, exercisedb-alternatives 11, exercisedb-vs-wger 5, exercise-database-apis 4); 2026-10-22 source snapshot found exercisedb.dev rebranded as AscendAPI with free tiers and API Ninjas adding premium images
Re-verified, stamp 2026-10-22: AscendAPI V1/V2, free tiers and rate limits; the unsourced wger 520+ count removed.
- sectionalternatives
/alternatives/exercisedb-alternatives
GSC 2026-09-22 to 2026-10-19: exercise-database cluster is the top earner (exercise-database-api-pricing 11 clicks, exercisedb-alternatives 11, exercisedb-vs-wger 5, exercise-database-apis 4); 2026-10-22 source snapshot found exercisedb.dev rebranded as AscendAPI with free tiers and API Ninjas adding premium images
Re-verified, stamp 2026-10-22: ExerciseDB is AscendAPI; alternatives are free-exercise-db, wger, API Ninjas and stock video libraries; correction logged for API Ninjas metadata-only claim.
- sectionfitness-apis
/fitness-apis/exercise-database-apis
GSC 2026-09-22 to 2026-10-19: exercise-database cluster is the top earner (exercise-database-api-pricing 11 clicks, exercisedb-alternatives 11, exercisedb-vs-wger 5, exercise-database-apis 4); 2026-10-22 source snapshot found exercisedb.dev rebranded as AscendAPI with free tiers and API Ninjas adding premium images
Re-verified, stamp 2026-10-22: retitled to Exercise Database APIs, video section now points to exercise-video-apis; AscendAPI, API Ninjas images and free plan, free-exercise-db 876; wger count removed (unreadable); correction logged.
- sectionpricing
/pricing/exercise-database-api-pricing
GSC 2026-09-22 to 2026-10-19: exercise-database cluster is the top earner (exercise-database-api-pricing 11 clicks, exercisedb-alternatives 11, exercisedb-vs-wger 5, exercise-database-apis 4); 2026-10-22 source snapshot found exercisedb.dev rebranded as AscendAPI with free tiers and API Ninjas adding premium images
Re-verified, stamp 2026-10-22: AscendAPI free V1 and V2 tiers, rate limits, API Ninjas plan prices and storage rule; correction logged. Evidence file added.
- spokecompare
/compare/exercisedb-vs-free-exercise-db
GSC 2026-09-22 to 2026-10-19: exercise-database cluster is the top earner (exercise-database-api-pricing 11 clicks, exercisedb-alternatives 11, exercisedb-vs-wger 5, exercise-database-apis 4); 2026-10-22 source snapshot found exercisedb.dev rebranded as AscendAPI with free tiers and API Ninjas adding premium images
New page: hosted ExerciseDB (AscendAPI) vs public-domain free-exercise-db, 876 exercises counted. Evidence file added.
- spokealternatives
/alternatives/wger-alternatives
GSC 2026-09-22 to 2026-10-19: exercise-database cluster is the top earner (exercise-database-api-pricing 11 clicks, exercisedb-alternatives 11, exercisedb-vs-wger 5, exercise-database-apis 4); 2026-10-22 source snapshot found exercisedb.dev rebranded as AscendAPI with free tiers and API Ninjas adding premium images
New page: wger alternatives with per-image licence detail; ExerciseDB and API Ninjas sections written to the 2026-10-22 sources. Evidence file added.
- spokefitness-apis
/fitness-apis/exercise-video-apis
GSC 2026-09-22 to 2026-10-19: exercise-database cluster is the top earner (exercise-database-api-pricing 11 clicks, exercisedb-alternatives 11, exercisedb-vs-wger 5, exercise-database-apis 4); 2026-10-22 source snapshot found exercisedb.dev rebranded as AscendAPI with free tiers and API Ninjas adding premium images
New page: which exercise APIs serve video (ExerciseDB V2 MP4, wger self-hosted, GIF and still-image APIs, GymVisual stock licence). Evidence file added. Roundup retitled away from Video to avoid cannibalisation.
- link/pricing
fitness-api-free-tiers-compared
Inbound links for /pricing/polar-api-pricing
One pointer sentence under the free-tier table. updated left as is.
- link/pricing
whoop-api-pricing
Inbound links for /pricing/polar-api-pricing
'How it compares' links the Polar page. updated left as is.
- link/pricing
oura-api-pricing
Inbound links for /pricing/polar-api-pricing
'How it compares' links the Polar page. updated left as is.
- link/fitness-apis
wearable-data-apis
Inbound links for /pricing/polar-api-pricing
Polar section links the pricing page. updated left as is.
- link/integrate
polar-api
Inbound links for /pricing/polar-api-pricing
Access table 'What does it cost?' row links the pricing page. updated left as is.
- link/pose-keypoints
openpose-body-25
Inbound links for /alternatives/openpose-alternatives; 'openpose body_25' 5 impressions at position 6
Scheme page links the alternatives page under 'Models that output it' (SCHEME_ALTERNATIVES in src/data/poseKeypointPages.ts).
- link/guides
camera-pose-tracking
Inbound links for /compare/mediapipe-vs-movenet
Model-choice section links the comparison page. updated left as is.
- link/guides
ai-workout-tracking-web
Inbound links for /compare/mediapipe-vs-movenet
Intro pointer now links the comparison page. updated left as is.
- link/compare
kinestex-vs-mediapipe
Inbound links for /compare/mediapipe-vs-movenet
MediaPipe-vs-MoveNet pointer now links the comparison page. updated left as is.
- link/alternatives
mediapipe-alternatives
Inbound links for the three new motion pages
MoveNet paragraph now links /compare/mediapipe-vs-movenet; YOLO and OpenPose bullets link /compare/mediapipe-vs-yolo-pose and /alternatives/openpose-alternatives. updated left as is.
- link/motion
rtmpose-models
Inbound links for /alternatives/openpose-alternatives
'When it fits' links the alternatives page. updated left as is.
- link/motion
pose-estimation-model-licenses
Inbound links for /alternatives/openpose-alternatives
OpenPose section links the alternatives page. updated left as is.
- link/motion
openpose-models
Inbound links for /alternatives/openpose-alternatives
'When it fits' and related link the alternatives page. updated left as is.
- link/motion
multi-person-pose-tracking
Inbound links for /compare/mediapipe-vs-yolo-pose
Single-user bullet links the comparison. updated left as is.
- link/motion
yolo-pose-models
Inbound links for /compare/mediapipe-vs-yolo-pose
'When it fits' links the comparison. updated left as is.
- link/motion
mediapipe-pose-landmarker-models
Inbound links for the two new MediaPipe comparisons
related: the overview anchor entry replaced by /compare/mediapipe-vs-movenet; /compare/mediapipe-vs-yolo-pose added. updated left as is.
- link/motion
movenet-models
Inbound links for /compare/mediapipe-vs-movenet
Opening sentence now links /compare/mediapipe-vs-movenet instead of the overview anchor. updated left as is.
- fix/motion
pose-estimation-models-compared
GEO one question, one page: /compare/mediapipe-vs-movenet now owns 'movenet vs mediapipe'
'MediaPipe vs MoveNet, head to head' cut to a three-sentence summary using only claims already on the page, linking /compare/mediapipe-vs-movenet; FAQ 'Should I pick MoveNet or MediaPipe for a fitness app?' kept with a short answer pointing to the comparison page; 'How to decide' now links the comparison page; links to /compare/mediapipe-vs-yolo-pose and /alternatives/openpose-alternatives added. No new facts. updated left as is.
- new/pricing
polar-api-pricing
Google Search Console + Bing, window 2026-09-22 to 2026-10-19: 'polar flow api' 4 impressions at position 8, 'polar accesslink api' 3 at 10; 46 impressions across 24 Polar queries on Google and Bing (counted per engine, not added as one figure)
Polar's API licence agreement (free of charge 'at the moment', fees reserved), self-serve client registration, rate limits that scale with registered users, read 2026-10-22. Evidence: ops/sources/evidence/pricing-polar-api-pricing.json. polar.com is not reachable from the dev environment; quotes are checked by source-quotes.yml.
- new/alternatives
openpose-alternatives
Google Search Console, window 2026-09-22 to 2026-10-19: 'openpose alternatives' 2 impressions at position 38, 'openpose body_25' 5 at 6
Why teams leave OpenPose (noncommercial licence, no phone build, last release 1.7.0) and the options by licence, with a BODY_25 point crosswalk to Halpe26, BlazePose 33 and COCO 17. firstParty disclosure. Evidence: ops/sources/evidence/alternatives-openpose-alternatives.json; PDF-sourced rows stay backed by the page's sources list.
- new/compare
mediapipe-vs-yolo-pose
Google Search Console, window 2026-09-22 to 2026-10-19: 'mediapipe vs yolo' 9 impressions at position 10.6, 'yolo pose vs mediapipe' 6 at 9.3
Single user vs group, Apache-2.0 vs AGPL-3.0, from Google's model cards and Ultralytics' docs and repository, read 2026-10-22. firstParty disclosure. Evidence: ops/sources/evidence/compare-mediapipe-vs-yolo-pose.json; PDF-sourced rows stay backed by the page's sources list.
- new/compare
mediapipe-vs-movenet
Google Search Console, window 2026-09-22 to 2026-10-19: 'movenet vs mediapipe' 11 impressions at position 3.5, 'mediapipe vs movenet' 5 at 2.8, landing on /motion/pose-estimation-models-compared
Third-party head-to-head of two Google pose models from the model cards, google-ai-edge/mediapipe and tensorflow/tfjs-models, read 2026-10-22. firstParty disclosure (KinesteX funds the site; neither model is ours). The overview's head-to-head section was cut to a summary linking here (one question, one page). Evidence: ops/sources/evidence/compare-mediapipe-vs-movenet.json; PDF-sourced rows stay backed by the page's sources list.
- fixcompare
/compare/apple-watch-vs-garmin
Follow-up to the Garmin re-verification of 2026-10-17: the integration guide already says Garmin's overview gives the Activity API 'over 30 activity types' and that 100-plus sports is not a figure Garmin's pages state
Garmin's Activity API count changed from 100-plus sport types to over 30 activity types, the figure on Garmin's developer program overview (2 places). An update, not a correction: Garmin's partner-only API reference may list more, and we cannot read it. Polar's 100-plus sports line left as is: AccessLink's FIT sport-mapping table names 171 Polar Flow sports. UPDATED left at 2026-08-12. Evidence: compare-apple-watch-vs-garmin.json.
- fixcompare
/compare/whoop-vs-garmin
Follow-up to the Garmin re-verification of 2026-10-17: the integration guide already says Garmin's overview gives the Activity API 'over 30 activity types' and that 100-plus sports is not a figure Garmin's pages state
Garmin's Activity API count changed from 100-plus sport types to over 30 activity types, the figure on Garmin's developer program overview (3 places). An update, not a correction: Garmin's partner-only API reference may list more, and we cannot read it. Polar's 100-plus sports line left as is: AccessLink's FIT sport-mapping table names 171 Polar Flow sports. UPDATED left at 2026-07-23. Evidence: compare-whoop-vs-garmin.json.
- fixcompare
/compare/strava-vs-garmin-connect
Follow-up to the Garmin re-verification of 2026-10-17: the integration guide already says Garmin's overview gives the Activity API 'over 30 activity types' and that 100-plus sports is not a figure Garmin's pages state
Garmin's Activity API count changed from 100-plus sport types to over 30 activity types, the figure on Garmin's developer program overview (2 places). An update, not a correction: Garmin's partner-only API reference may list more, and we cannot read it. Polar's 100-plus sports line left as is: AccessLink's FIT sport-mapping table names 171 Polar Flow sports. UPDATED left at 2026-07-23. Evidence: compare-strava-vs-garmin-connect.json.
- fixfitness-apis
/fitness-apis/garmin-connect-iq-vs-health-api
Follow-up to the Garmin re-verification of 2026-10-17: the integration guide already says Garmin's overview gives the Activity API 'over 30 activity types' and that 100-plus sports is not a figure Garmin's pages state
Garmin's Activity API count changed from 100-plus sport types to over 30 activity types, the figure on Garmin's developer program overview (4 places). An update, not a correction: Garmin's partner-only API reference may list more, and we cannot read it. Polar's 100-plus sports line left as is: AccessLink's FIT sport-mapping table names 171 Polar Flow sports. UPDATED left at 2026-10-12. Evidence: fitness-apis-garmin-connect-iq-vs-health-api.json.
- fixfitness-apis
/fitness-apis/fitbit-api-vs-garmin-api
Follow-up to the Garmin re-verification of 2026-10-17: the integration guide already says Garmin's overview gives the Activity API 'over 30 activity types' and that 100-plus sports is not a figure Garmin's pages state
Garmin's Activity API count changed from 100-plus sport types to over 30 activity types, the figure on Garmin's developer program overview (2 places). An update, not a correction: Garmin's partner-only API reference may list more, and we cannot read it. Polar's 100-plus sports line left as is: AccessLink's FIT sport-mapping table names 171 Polar Flow sports. UPDATED left at 2026-07-08. Evidence: fitness-apis-fitbit-api-vs-garmin-api.json.
- fixfitness-apis
/fitness-apis/wearable-data-apis
Follow-up to the Garmin re-verification of 2026-10-17: the integration guide already says Garmin's overview gives the Activity API 'over 30 activity types' and that 100-plus sports is not a figure Garmin's pages state
Garmin's Activity API count changed from 100-plus sport types to over 30 activity types, the figure on Garmin's developer program overview (2 places). An update, not a correction: Garmin's partner-only API reference may list more, and we cannot read it. Polar's 100-plus sports line left as is: AccessLink's FIT sport-mapping table names 171 Polar Flow sports. UPDATED left at 2026-07-08. Evidence: fitness-apis-wearable-data-apis.json.
- links/motion
how-rep-counting-works, how-form-feedback-works, /motion hub
EXPANSION-3 2.3
Link-only additions to the two concept pages (no stamp moved) and a new 'Exercise by exercise' hub section with its own ItemList. Burpee skipped: only one study we read measured burpees (Sousa et al. 2026, nine videos), its burpee is a composition of modules the squat, deadlift, plank and push-up pages already cover, and the other studies that name burpees either did not test them or carry the name only in markup a quote check cannot match.
- spoke/motion
overhead-press-pose-estimation
EXPANSION-3 2.3 (one page per exercise for camera tracking), studies read 2026-10-18 through source-snapshot runs; evidence in ops/sources/evidence/
Shoulder press states and the hands-above-head check from Sousa et al. 2026, hand-height counting of seated presses from Hwang et al. 2023, and a shoulder-angle caution from Baldinger et al. 2025. Engineering guidance only; numbers labelled as one study's result to calibrate.
- spoke/motion
pull-up-counter-computer-vision
EXPANSION-3 2.3 (one page per exercise for camera tracking), studies read 2026-10-18 through source-snapshot runs; evidence in ops/sources/evidence/
Pull-up bar-height estimation from the hands, mouth-over-bar and 150-degree elbow thresholds and 96.6% counting accuracy from Lei et al. 2025, and Sousa et al. 2026 pull-up phases with 100% on 30 videos. Engineering guidance only; numbers labelled as one study's result to calibrate.
- spoke/motion
sit-up-counter-pose-estimation
EXPANSION-3 2.3 (one page per exercise for camera tracking), studies read 2026-10-18 through source-snapshot runs; evidence in ops/sources/evidence/
Sit-up elbow-to-knee distance and body-to-horizontal angle from Lei et al. 2025 (one-person demonstration, no sit-up accuracy reported) and sit-up recognition by camera view from Gu et al. 2026 (95.0% side, 88.5% front, 25.7% behind). Engineering guidance only; numbers labelled as one study's result to calibrate.
- spoke/motion
jumping-jack-counter-pose-estimation
EXPANSION-3 2.3 (one page per exercise for camera tracking), studies read 2026-10-18 through source-snapshot runs; evidence in ops/sources/evidence/
Jumping jack hand and feet distance cycles (Cho et al. 2022) and wrist and ankle measures normalised by height, sliding-window recognition and boundary correction (Hocking et al. 2022); both used a Kinect depth camera and neither reports counting accuracy, which the page states. Engineering guidance only; numbers labelled as one study's result to calibrate.
- spoke/motion
bicep-curl-counter-pose-estimation
EXPANSION-3 2.3 (one page per exercise for camera tracking), studies read 2026-10-18 through source-snapshot runs; evidence in ops/sources/evidence/
Curl elbow angle or hand height from Chen et al. 2022 and Hwang et al. 2023 (larger counting errors for curls, median filter, zero-crossing), camera set-ups from Hwang, Noteboom et al. 2022 and Peres et al. 2025, and Fieraru and Goedemé 2026 on upright exercises. Engineering guidance only; numbers labelled as one study's result to calibrate.
- spoke/motion
deadlift-pose-estimation
EXPANSION-3 2.3 (one page per exercise for camera tracking), studies read 2026-10-18 through source-snapshot runs; evidence in ops/sources/evidence/
Deadlift torso and elbow states from Sousa et al. 2026 (95%), the single-hip-keypoint and spine limits and camera placement from Mercadal-Baudart et al. 2024, and Shoaib et al. 2026 deadlift form classification (89.5% on the training lifters, about 50 to 74% on a held-out lifter). Engineering guidance only; numbers labelled as one study's result to calibrate.
- spoke/motion
plank-detection-pose-estimation
EXPANSION-3 2.3 (one page per exercise for camera tracking), studies read 2026-10-18 through source-snapshot runs; evidence in ops/sources/evidence/
Plank as a hold timer: Sousa et al. 2026 holding state and alignment check (9 of 9, CI 69.2 to 100%) and Kim et al. 2026 classroom MediaPipe program (time-based rule, ready-posture gate, no formal benchmark). No study tested camera placement for planks; the page says so. Engineering guidance only; numbers labelled as one study's result to calibrate.
- spoke/motion
lunge-detection-pose-estimation
EXPANSION-3 2.3 (one page per exercise for camera tracking), studies read 2026-10-18 through source-snapshot runs; evidence in ops/sources/evidence/
Lunge knee and hip angles, Baldinger et al. 2025 four-camera OpenPose study against Vicon (RMSE by view, peak knee angle 51.5 to 99.3 degrees at one instant, back views best, Savitzky-Golay smoothing) and Sousa et al. 2026 two-knee phases and lunge results. Engineering guidance only; numbers labelled as one study's result to calibrate.
- spoke/motion
push-up-counter-computer-vision
EXPANSION-3 2.3 (one page per exercise for camera tracking), studies read 2026-10-18 through source-snapshot runs; evidence in ops/sources/evidence/
Push-up landmarks, camera placement, the Lei et al. 2025 state machine and thresholds (140-degree elbow, 15-degree torso, 140-degree waist, keypoint correction), Oliosi et al. 2026 phone positions, Sousa et al. 2026 phases, Gu et al. 2026 views and Fieraru and Goedemé 2026 on floor-level poses. Engineering guidance only; numbers labelled as one study's result to calibrate.
- spoke/motion
squat-detection-pose-estimation
EXPANSION-3 2.3 (one page per exercise for camera tracking), studies read 2026-10-18 through source-snapshot runs; evidence in ops/sources/evidence/
Squat landmarks, phone placement and rep thresholds from Oliosi et al. 2026 (12 phone positions, 22 adults), Sousa et al. 2026 (rule-based state machines, 95% squat counting), Iizuka et al. 2026 (browser MoveNet against motion capture, projection bias) and Gu et al. 2026 (recognition by camera view). Engineering guidance only; numbers labelled as one study's result to calibrate.
- section/workout-types
workout-types, workout-types/healthkit, workout-types/health-connect, workout-types/wear-os, workout-types/google-health-api, and 9 activity pages
EXPANSION-3 1.8 (one metric across platforms), owner request 2026-10-17 to fill out the clusters; no published crosswalk of HKWorkoutActivityType, Health Connect EXERCISE_TYPE_, Wear OS ExerciseType and Google Health API exerciseType exists
Generated reference: scripts/fetch-workout-types.mjs reads Apple’s HKWorkoutActivityType index and 84 per-case docs JSON, Google’s ExerciseSessionRecord, ExerciseSegment, ExerciseSessionType and Health Services ExerciseType references, the Health Connect data-types guide and the androidx source those references link, plus healthkitIdentifiers.ts and googleHealthApi.ts. Crosswalk by name identity only (87 rows, 28 on all four); no source-stated mapping found on 9 pages searched; 6 places where Google's pages disagree published as flags; 6 same-name Health Connect/Wear OS pairs with different integers; all 61 Health Connect types numbered differently on the platform API. Activity pages only where a row joins 3+ platforms and the sources give 2+ facts beyond names (9). Dataset workout-types-crosswalk-2026 (412 rows). Linked from /healthkit-identifiers, /health-connect, /wear-os-data-types and /google-health-api; the per-type pages were left to the builder working on them.
- spoke/data
swimming-data-api
EXPANSION-3 1.8 Part B: a metric that at least two platforms expose as a type and no /data guide covered; primaryQuery "swimming data api"
Platforms: Google Health API, HealthKit, Wear OS; Health Connect has none. 1119 words, 4-5 FAQs, By platform block and reverse links from metricTypeMap. Facts only from this site's generated references (Google Health API 2026-10-17, HealthKit identifiers 2026-10-02, HealthKit metadata keys 2026-10-04, Health Connect 2026-10-03, Wear OS Health Services 2026-10-04, Bluetooth GATT 2026-10-17), quoted with each type page linked, plus existing on-site pages; no vendor accuracy figures, thresholds or medical claims of our own.
- spoke/data
running-metrics-api
EXPANSION-3 1.8 Part B: a metric that at least two platforms expose as a type and no /data guide covered; primaryQuery "running metrics api"
Platforms: HealthKit, Wear OS, Health Connect, Bluetooth; Google Health API has none. 1152 words, 4-5 FAQs, By platform block and reverse links from metricTypeMap. Facts only from this site's generated references (Google Health API 2026-10-17, HealthKit identifiers 2026-10-02, HealthKit metadata keys 2026-10-04, Health Connect 2026-10-03, Wear OS Health Services 2026-10-04, Bluetooth GATT 2026-10-17), quoted with each type page linked, plus existing on-site pages; no vendor accuracy figures, thresholds or medical claims of our own.
- spoke/data
cycling-power-api
EXPANSION-3 1.8 Part B: a metric that at least two platforms expose as a type and no /data guide covered; primaryQuery "cycling power api"
Platforms: HealthKit, Health Connect, Wear OS, Bluetooth; Google Health API has none. 1112 words, 4-5 FAQs, By platform block and reverse links from metricTypeMap. Facts only from this site's generated references (Google Health API 2026-10-17, HealthKit identifiers 2026-10-02, HealthKit metadata keys 2026-10-04, Health Connect 2026-10-03, Wear OS Health Services 2026-10-04, Bluetooth GATT 2026-10-17), quoted with each type page linked, plus existing on-site pages; no vendor accuracy figures, thresholds or medical claims of our own.
- spoke/data
heart-rate-zones-api
EXPANSION-3 1.8 Part B: a metric that at least two platforms expose as a type and no /data guide covered; primaryQuery "heart rate zones api"
Platforms: Google Health API, Bluetooth; HealthKit, Health Connect and Wear OS have none. 1025 words, 4-5 FAQs, By platform block and reverse links from metricTypeMap. Facts only from this site's generated references (Google Health API 2026-10-17, HealthKit identifiers 2026-10-02, HealthKit metadata keys 2026-10-04, Health Connect 2026-10-03, Wear OS Health Services 2026-10-04, Bluetooth GATT 2026-10-17), quoted with each type page linked, plus existing on-site pages; no vendor accuracy figures, thresholds or medical claims of our own.
- spoke/data
active-minutes-api
EXPANSION-3 1.8 Part B: a metric that at least two platforms expose as a type and no /data guide covered; primaryQuery "active minutes api"
Platforms: Google Health API, HealthKit, Health Connect; Wear OS and Bluetooth have none. 1106 words, 4-5 FAQs, By platform block and reverse links from metricTypeMap. Facts only from this site's generated references (Google Health API 2026-10-17, HealthKit identifiers 2026-10-02, HealthKit metadata keys 2026-10-04, Health Connect 2026-10-03, Wear OS Health Services 2026-10-04, Bluetooth GATT 2026-10-17), quoted with each type page linked, plus existing on-site pages; no vendor accuracy figures, thresholds or medical claims of our own.
- spoke/data
floors-elevation-api
EXPANSION-3 1.8 Part B: a metric that at least two platforms expose as a type and no /data guide covered; primaryQuery "floors climbed api"
Platforms: Google Health API, HealthKit, Health Connect, Wear OS. 1085 words, 4-5 FAQs, By platform block and reverse links from metricTypeMap. Facts only from this site's generated references (Google Health API 2026-10-17, HealthKit identifiers 2026-10-02, HealthKit metadata keys 2026-10-04, Health Connect 2026-10-03, Wear OS Health Services 2026-10-04, Bluetooth GATT 2026-10-17), quoted with each type page linked, plus existing on-site pages; no vendor accuracy figures, thresholds or medical claims of our own.
- spoke/data
distance-tracking-api
EXPANSION-3 1.8 Part B: a metric that at least two platforms expose as a type and no /data guide covered; primaryQuery "distance tracking api"
Platforms: Google Health API, HealthKit, Health Connect, Wear OS. 1156 words, 4-5 FAQs, By platform block and reverse links from metricTypeMap. Facts only from this site's generated references (Google Health API 2026-10-17, HealthKit identifiers 2026-10-02, HealthKit metadata keys 2026-10-04, Health Connect 2026-10-03, Wear OS Health Services 2026-10-04, Bluetooth GATT 2026-10-17), quoted with each type page linked, plus existing on-site pages; no vendor accuracy figures, thresholds or medical claims of our own.
- spoke/data
ecg-api
EXPANSION-3 1.8 Part B: a metric that at least two platforms expose as a type and no /data guide covered; primaryQuery "ecg api"
Platforms: Google Health API, HealthKit; Health Connect, Wear OS and Bluetooth have none. 1244 words, 4-5 FAQs, By platform block and reverse links from metricTypeMap. Facts only from this site's generated references (Google Health API 2026-10-17, HealthKit identifiers 2026-10-02, HealthKit metadata keys 2026-10-04, Health Connect 2026-10-03, Wear OS Health Services 2026-10-04, Bluetooth GATT 2026-10-17), quoted with each type page linked, plus existing on-site pages; no vendor accuracy figures, thresholds or medical claims of our own.
- spoke/data
body-temperature-api
EXPANSION-3 1.8 Part B: a metric that at least two platforms expose as a type and no /data guide covered; primaryQuery "body temperature api"
Platforms: Google Health API, HealthKit, Health Connect, Bluetooth; Wear OS has none. 1497 words, 4-5 FAQs, By platform block and reverse links from metricTypeMap. Facts only from this site's generated references (Google Health API 2026-10-17, HealthKit identifiers 2026-10-02, HealthKit metadata keys 2026-10-04, Health Connect 2026-10-03, Wear OS Health Services 2026-10-04, Bluetooth GATT 2026-10-17), quoted with each type page linked, plus existing on-site pages; no vendor accuracy figures, thresholds or medical claims of our own.
- section/data + type pages
src/data/metricTypeMap.ts; By platform block on /data/<guide>; reverse links on /google-health-api, /healthkit-identifiers, /health-connect, /wear-os-data-types and /bluetooth-fitness type pages
EXPANSION-3 1.8 Part A
Hand-maintained metric-to-type map: 24 /data guides, 178 type pairings (HealthKit 59, Google Health API 39, Health Connect 38, Wear OS 24, Bluetooth 18; 172 distinct type pages), each with an evidence quote copied verbatim from the generated module (27 also cite a verified matrix row); no name-only matches, no workout or exercise types. /data guides render a By platform block from it and every mapped type page links its guide back. The four guides without a matrix row (blood glucose, blood pressure, respiratory rate, menstrual cycle) now show their Health Connect records in the derived facts block. qa: METRIC-MAP-EVIDENCE, METRIC-MAP-NO-PAGE, METRIC-MAP-LINK.
- fixstandalone
/corrections
Wearable re-verification follow-through: Garmin, Strava, Oura, WHOOP and Polar pages re-read on 2026-10-17 (ops/sources/evidence/integrate-* and pricing-*); site-wide sweep for 'reportedly', 'paused', 'on hold', 'Oura for Organizations', 'partner tier' and '(verify)' near those vendors
List keys include the index (two corrections for one page on one day duplicated the key). Four new 2026-10-18 entries: free tiers, cost planner, Apple Watch vs Garmin, Strava vs Garmin. Evidence: corrections.json, 9 -> 18 rows.
- statusstandalone
/changes (src/data/changes.ts)
Wearable re-verification follow-through: Garmin, Strava, Oura, WHOOP and Polar pages re-read on 2026-10-17 (ops/sources/evidence/integrate-* and pricing-*); site-wide sweep for 'reportedly', 'paused', 'on hold', 'Oura for Organizations', 'partner tier' and '(verify)' near those vendors
Strava Standard Tier subscription: reported -> confirmed from Strava's own words, linked to /pricing/strava-api-pricing (which quotes them), title loses '(reported)' so its RSS guid changes, date kept at 2026. WHOOP membership restructuring: kept as the dated report, link kept on /pricing/whoop-api-pricing, summary notes WHOOP's re-verified pages do not mention it. Garmin watch item: pause restated as could-not-verify plus the Stay tuned banner. verifiedOn 2026-10-17 on the two changed entries. npm run datasets (fitness-api-changes-2026 regenerated, manifest) and bundle-package-data run. Evidence: changes.json, 12 rows.
- correctionstandalone
/cost-planner
Wearable re-verification follow-through: Garmin, Strava, Oura, WHOOP and Polar pages re-read on 2026-10-17 (ops/sources/evidence/integrate-* and pricing-*); site-wide sweep for 'reportedly', 'paused', 'on hold', 'Oura for Organizations', 'partner tier' and '(verify)' near those vendors
Prose and two FAQ answers no longer say Garmin publishes no pricing, settles terms privately or needs a sales call (Garmin's FAQ: no licensing or maintenance fees; licence fee or minimum order for some metrics, amounts unpublished); 'roughly half of a market is contact-sales' dropped (the dataset had 4 of 25 when the planner launched); Strava sentence restated from its 2026 terms. CORRECTIONS entry. UPDATED constant left at 2026-08-11. Evidence: cost-planner.json, 8 rows.
- fixstandalone
/alternatives
Wearable re-verification follow-through: Garmin, Strava, Oura, WHOOP and Polar pages re-read on 2026-10-17 (ops/sources/evidence/integrate-* and pricing-*); site-wide sweep for 'reportedly', 'paused', 'on hold', 'Oura for Organizations', 'partner tier' and '(verify)' near those vendors
Hub FAQ: Garmin 'reportedly paused for new signups' -> partner-approval-only and business use only. Update. Evidence: alternatives.json, 2 rows.
- fixstandalone
/ai-fitness-app
Wearable re-verification follow-through: Garmin, Strava, Oura, WHOOP and Polar pages re-read on 2026-10-17 (ops/sources/evidence/integrate-* and pricing-*); site-wide sweep for 'reportedly', 'paused', 'on hold', 'Oura for Organizations', 'partner tier' and '(verify)' near those vendors
Decision 4: Garmin pause removed (business use only). Cost shape: WHOOP, Oura and Strava 'reportedly' membership claims restated from their own pages, dated 2026-10-17. Updates. UPDATED constant left at 2026-08-11. Evidence: ai-fitness-app.json, 6 rows.
- fixmigrate
/migrate/adapt-to-strava-api-changes
Wearable re-verification follow-through: Garmin, Strava, Oura, WHOOP and Polar pages re-read on 2026-10-17 (ops/sources/evidence/integrate-* and pricing-*); site-wide sweep for 'reportedly', 'paused', 'on hold', 'Oura for Organizations', 'partner tier' and '(verify)' near those vendors
Intermediary routing ('reportedly no longer supported') and the subscription row settled from the API Policy (effective June 1, 2026) and the getting-started guide, quoted; one-subscription webhook row no longer '(verify)'; answer, step 7, HowTo step and aggregator FAQ follow. Updates. UPDATED left at 2026-07-20. Evidence: migrate-adapt-to-strava-api-changes.json, 13 rows.
- fixalternatives
/alternatives/whoop-api-alternatives
Wearable re-verification follow-through: Garmin, Strava, Oura, WHOOP and Polar pages re-read on 2026-10-17 (ops/sources/evidence/integrate-* and pricing-*); site-wide sweep for 'reportedly', 'paused', 'on hold', 'Oura for Organizations', 'partner tier' and '(verify)' near those vendors
Fitbit/Garmin alternative: Garmin 'reportedly hard to get into for new signups' -> business use only, per Garmin's FAQ. Update. UPDATED left at 2026-07-09. Evidence: alternatives-whoop-api-alternatives.json, 9 -> 11 rows.
- fixalternatives
/alternatives/fitbit-api-alternatives
Wearable re-verification follow-through: Garmin, Strava, Oura, WHOOP and Polar pages re-read on 2026-10-17 (ops/sources/evidence/integrate-* and pricing-*); site-wide sweep for 'reportedly', 'paused', 'on hold', 'Oura for Organizations', 'partner tier' and '(verify)' near those vendors
Single-wearable watch-out: Garmin 'reportedly hard to get into (verify)' -> business use only; Oura and WHOOP caps restated (10 users until approval; Sandbox tier of 10 members; developer membership). Updates. UPDATED left at 2026-07-09. Evidence: alternatives-fitbit-api-alternatives.json, 5 rows.
- fixengagement
/engagement/social-features-fitness-app
Wearable re-verification follow-through: Garmin, Strava, Oura, WHOOP and Polar pages re-read on 2026-10-17 (ops/sources/evidence/integrate-* and pricing-*); site-wide sweep for 'reportedly', 'paused', 'on hold', 'Oura for Organizations', 'partner tier' and '(verify)' near those vendors
Strava 'reportedly restrict how athlete data may be displayed' settled from the API Policy in the answer and the provider-terms section. Updates. UPDATED left at 2026-08-22. Evidence: engagement-social-features-fitness-app.json, 3 rows.
- fixengagement
/engagement/leaderboards-and-challenges
Wearable re-verification follow-through: Garmin, Strava, Oura, WHOOP and Polar pages re-read on 2026-10-17 (ops/sources/evidence/integrate-* and pricing-*); site-wide sweep for 'reportedly', 'paused', 'on hold', 'Oura for Organizations', 'partner tier' and '(verify)' near those vendors
Strava 'reportedly' display, AI and paid-subscription claims settled from the API Policy (data shown only to the user who provided it, AI prohibition) and the getting-started guide. Updates. UPDATED left at 2026-08-22. Evidence: engagement-leaderboards-and-challenges.json, 7 rows.
- fixcompare
/compare/fitbit-vs-oura
Wearable re-verification follow-through: Garmin, Strava, Oura, WHOOP and Polar pages re-read on 2026-10-17 (ops/sources/evidence/integrate-* and pricing-*); site-wide sweep for 'reportedly', 'paused', 'on hold', 'Oura for Organizations', 'partner tier' and '(verify)' near those vendors
Oura PAT deprecation settled from Oura's spec in the answer, bullets, table (plus V2 as the only integration point), section, fine print and FAQ. Updates. UPDATED left at 2026-07-23. Evidence: compare-fitbit-vs-oura.json, 7 rows.
- fixcompare
/compare/oura-vs-whoop
Wearable re-verification follow-through: Garmin, Strava, Oura, WHOOP and Polar pages re-read on 2026-10-17 (ops/sources/evidence/integrate-* and pricing-*); site-wide sweep for 'reportedly', 'paused', 'on hold', 'Oura for Organizations', 'partner tier' and '(verify)' near those vendors
Oura PAT deprecation settled from Oura's spec (December 2025, no longer available for use) in the answer, table, section, fine print and FAQ. Updates. UPDATED left at 2026-07-23. Evidence: compare-oura-vs-whoop.json, 5 rows.
- fixcompare
/compare/apple-watch-vs-whoop
Wearable re-verification follow-through: Garmin, Strava, Oura, WHOOP and Polar pages re-read on 2026-10-17 (ops/sources/evidence/integrate-* and pricing-*); site-wide sweep for 'reportedly', 'paused', 'on hold', 'Oura for Organizations', 'partner tier' and '(verify)' near those vendors
'roughly 10-member cap (verify)' -> WHOOP's Sandbox tier of 10 members and reviewed tiers (answer, section, table, trade-off, pick list, fine print, FAQ); no-charge API Terms cited. Updates (the tiers first appeared on the site on 2026-10-18). UPDATED left at 2026-08-11. Evidence: compare-apple-watch-vs-whoop.json, 18 rows. Not changed: the unsourced 'WHOOP has restructured its membership recently' sentences.
- correctioncompare
/compare/apple-watch-vs-garmin
Wearable re-verification follow-through: Garmin, Strava, Oura, WHOOP and Polar pages re-read on 2026-10-17 (ops/sources/evidence/integrate-* and pricing-*); site-wide sweep for 'reportedly', 'paused', 'on hold', 'Oura for Organizations', 'partner tier' and '(verify)' near those vendors
'No confirmation the program is free... commercial terms settled privately' and the developer-cost row restated from Garmin's FAQ; pause reports removed from the answer, section, table, pick list and FAQ ('could not be verified' line kept in the section). CORRECTIONS entry: the site's 2026-07-08 pages already called Garmin free. UPDATED left at 2026-08-12. Evidence: compare-apple-watch-vs-garmin.json, 17 rows. Not changed: PKCE/userAccessToken and '100-plus sport types' claims.
- fixcompare
/compare/whoop-vs-garmin
Wearable re-verification follow-through: Garmin, Strava, Oura, WHOOP and Polar pages re-read on 2026-10-17 (ops/sources/evidence/integrate-* and pricing-*); site-wide sweep for 'reportedly', 'paused', 'on hold', 'Oura for Organizations', 'partner tier' and '(verify)' near those vendors
Garmin 'terms not public', 'no confirmed fee' and pause reports replaced from Garmin's FAQ (no licensing or maintenance fees, business use only, licence fee for some metrics including enhanced beat-to-beat interval, two business days). Updates (hedged at publication). UPDATED left at 2026-07-23. Evidence: compare-whoop-vs-garmin.json, 21 rows.
- correctioncompare
/compare/strava-vs-garmin-connect
Wearable re-verification follow-through: Garmin, Strava, Oura, WHOOP and Polar pages re-read on 2026-10-17 (ops/sources/evidence/integrate-* and pricing-*); site-wide sweep for 'reportedly', 'paused', 'on hold', 'Oura for Organizations', 'partner tier' and '(verify)' near those vendors
Strava subscription, AI and display claims settled from Strava's API Agreement, API Policy and getting-started guide; Garmin pause and 'terms not public' replaced from Garmin's FAQ; webhook scope and rate limits settled. CORRECTIONS entry for the pick-list claim that an aggregator can sidestep Strava's per-source rules (the API Policy prohibits aggregators re-exposing its API; the migrate guide already warned on 2026-07-20). Rest are updates. UPDATED left at 2026-07-23. Evidence: compare-strava-vs-garmin-connect.json, 63 rows.
- fixfix
/fix/strava-api-401-unauthorized
Wearable re-verification follow-through: Garmin, Strava, Oura, WHOOP and Polar pages re-read on 2026-10-17 (ops/sources/evidence/integrate-* and pricing-*); site-wide sweep for 'reportedly', 'paused', 'on hold', 'Oura for Organizations', 'partner tier' and '(verify)' near those vendors
'a reported paid Strava subscription now gating Standard tier access' (body and FAQ) -> the API Policy (effective June 1, 2026) subscription requirements and the getting-started guide's prerequisite; intermediary restriction restated from the policy. Update. UPDATED left at 2026-08-12. Evidence: fix-strava-api-401-unauthorized.json, 7 rows.
- fixfix
/fix/garmin-api-approval
Wearable re-verification follow-through: Garmin, Strava, Oura, WHOOP and Polar pages re-read on 2026-10-17 (ops/sources/evidence/integrate-* and pricing-*); site-wide sweep for 'reportedly', 'paused', 'on hold', 'Oura for Organizations', 'partner tier' and '(verify)' near those vendors
Page premised on the reported pause: answer, description, intro, 'what's going on', suspended section, reasons list, steps, triage, summary, FAQs, HowTo steps and pitch restated from Garmin's FAQ (business use only, two business days, integration call, 1-4 weeks, Stay tuned banner); says plainly the pause reports could not be verified on Garmin's own pages. FAQ 'How long does Garmin approval take once the form is open?' -> 'How long does Garmin approval take?'. H1 and metaTitle unchanged. Updates (the July Garmin guide said the same at the time). UPDATED left at 2026-07-09. Evidence: fix-garmin-api-approval.json, 40 rows.
- fixfitness-apis
/fitness-apis/corporate-wellness-wearable-apis
Wearable re-verification follow-through: Garmin, Strava, Oura, WHOOP and Polar pages re-read on 2026-10-17 (ops/sources/evidence/integrate-* and pricing-*); site-wide sweep for 'reportedly', 'paused', 'on hold', 'Oura for Organizations', 'partner tier' and '(verify)' near those vendors
Garmin gate row, section heading ('sign-ups reportedly paused' -> 'business use only'), section text and FAQ restated from Garmin's FAQ, including the device-count question for issued-device programs; a line says earlier versions passed on the pause reports, which Garmin's pages do not support; related-link label updated. Updates. UPDATED left at 2026-10-12. Evidence: fitness-apis-corporate-wellness-wearable-apis.json, 6 -> 18 rows.
- fixfitness-apis
/fitness-apis/garmin-connect-iq-vs-health-api
Wearable re-verification follow-through: Garmin, Strava, Oura, WHOOP and Polar pages re-read on 2026-10-17 (ops/sources/evidence/integrate-* and pricing-*); site-wide sweep for 'reportedly', 'paused', 'on hold', 'Oura for Organizations', 'partner tier' and '(verify)' near those vendors
Garmin pause removed from the answer, access row, access bullet, FAQ and subscribe pitch; access facts attributed to Garmin's FAQ read 2026-10-17; 'last verified July 9' clauses now say 'as verified on July 9, 2026'. Updates. UPDATED left at 2026-10-12. Evidence: fitness-apis-garmin-connect-iq-vs-health-api.json, 10 rows. Not changed: '100-plus sports' and PKCE bullets, which the re-verified Garmin guide withdrew.
- fixfitness-apis
/fitness-apis/fitbit-api-vs-garmin-api
Wearable re-verification follow-through: Garmin, Strava, Oura, WHOOP and Polar pages re-read on 2026-10-17 (ops/sources/evidence/integrate-* and pricing-*); site-wide sweep for 'reportedly', 'paused', 'on hold', 'Oura for Organizations', 'partner tier' and '(verify)' near those vendors
Garmin pause removed from the answer, table, section, pick list, fine print and FAQ; 'Can I still sign up' FAQ now answered from Garmin's FAQ (requests invited, two business days) and says the pause reports could not be verified on Garmin's pages. Updates. UPDATED left at 2026-07-08. Evidence: fitness-apis-fitbit-api-vs-garmin-api.json, 14 rows.
- fixfitness-apis
/fitness-apis/wearable-data-apis
Wearable re-verification follow-through: Garmin, Strava, Oura, WHOOP and Polar pages re-read on 2026-10-17 (ops/sources/evidence/integrate-* and pricing-*); site-wide sweep for 'reportedly', 'paused', 'on hold', 'Oura for Organizations', 'partner tier' and '(verify)' near those vendors
Garmin 'sign-ups reportedly on hold (verify)' removed from the table, section, pick list and FAQ; Garmin pricing cell from its FAQ; Oura, WHOOP and Polar '(verify)' cells settled from their own pages; WHOOP's hard 10-member cap restated as the Sandbox tier and reviewed tiers. Updates. UPDATED left at 2026-07-08. Evidence: fitness-apis-wearable-data-apis.json, 27 rows.
- fixpricing
/pricing/how-much-does-a-fitness-api-cost
Wearable re-verification follow-through: Garmin, Strava, Oura, WHOOP and Polar pages re-read on 2026-10-17 (ops/sources/evidence/integrate-* and pricing-*); site-wide sweep for 'reportedly', 'paused', 'on hold', 'Oura for Organizations', 'partner tier' and '(verify)' near those vendors
Wrinkle row: 'Garmin (unlisted partner terms)... Some report setup fees' -> Garmin's FAQ (no licensing or maintenance fees, business use only, licence fee or minimum device order for some metrics, amounts unpublished); Strava's no-charge API Agreement and subscription prerequisite. Update, not a correction (hedged report). UPDATED left at 2026-07-23. Evidence: pricing-how-much-does-a-fitness-api-cost.json, 9 rows.
- correctionpricing
/pricing/fitness-api-free-tiers-compared
Wearable re-verification follow-through: Garmin, Strava, Oura, WHOOP and Polar pages re-read on 2026-10-17 (ops/sources/evidence/integrate-* and pricing-*); site-wide sweep for 'reportedly', 'paused', 'on hold', 'Oura for Organizations', 'partner tier' and '(verify)' near those vendors
Figures and quoted cells now match public/datasets/fitness-apis-2026.json (checked by script): free to call 12 (48%) -> 14 (56%), free tiers 5 -> 4, both-fields-null 6, gated 7, user-side 6; metaTitle '14 of 25 Free', description 155 chars. Garmin, Oura, WHOOP, Strava and Polar cells re-quoted from the regenerated dataset; Strava moved from the free-tier list to the free-to-call table with its display and AI rules; dated note beside the figure. CORRECTIONS entry (the page inherited the report's Garmin and Strava misclassifications). UPDATED left at 2026-08-12. Evidence: pricing-fitness-api-free-tiers-compared.json, 37 rows.
- spokefitness-apis
/fitness-apis/smart-ring-apis
EXPANSION-3 1.7 (smart rings roundup)
Oura (cloud API, OAuth, 10-user gate, membership 403), Ultrahuman (UltraSignal API, personal tokens plus in-app sharing codes, 7-day ranges), Galaxy Ring through the Samsung Health Data SDK, RingConn (no developer API found on its site). Evidence: ops/sources/evidence/fitness-apis-smart-ring-apis.json.
- spokeintegrate + apis
/integrate/withings-api, /integrate/samsung-health-api, /integrate/suunto-api, /integrate/coros-api, /integrate/wahoo-api, /integrate/dexcom-api, /integrate/concept2-api, /apis/withings, /apis/suunto, /apis/wahoo
EXPANSION-3 1.4 (new vendor hubs)
Seven guides from snapshot runs of each vendor's own pages, fetched 2026-10-17. Directory entries only where every cost field is sourced (Withings, Suunto, Wahoo; noindexed under the NOINDEX_APIS rule until they show demand); Dexcom, Concept2, COROS and Samsung state no developer fee on a fetchable page, so no entry. Withings reaches three pages and joins VENDOR_HUBS. Huawei Health Kit skipped: its developer docs render client-side and the snapshot held no content. New integrate hub group Health devices & CGM.
- sectionintegrate + pricing + alternatives
/integrate/strava-api, /integrate/whoop-api, /integrate/oura-api, /integrate/garmin-api, /integrate/polar-api, /pricing/strava-api-pricing, /pricing/whoop-api-pricing, /pricing/oura-api-pricing, /pricing/garmin-api-pricing, /alternatives/{strava,garmin,oura,whoop}-api-alternatives
EXPANSION-3 1.3; tracked queries garmin api, strava api, whoop api, oura api; /apis/polar flagged due a re-check
Rewrote the five guides and four pricing pages from source-snapshot runs of each vendor's developer pages (fetched 2026-10-17) with access, auth and scopes, data, webhooks, rate limits and what-changed sections; updated stamps 2026-10-17. Alternatives pages: hub-vendor facts only (Garmin approval, Oura and WHOOP gates, Strava subscription and aggregator ban), stamps unchanged. Fitbit, Terra and ExerciseDB from item 1.3 not covered here. costModel re-sourced for garmin, oura, whoop, strava, polar. Evidence: ops/sources/evidence/{integrate,pricing,alternatives}-*.json.
- sectionlibraries
/libraries/python, /libraries/react-native, /libraries/flutter, /libraries/capacitor-cordova
EXPANSION-3 4.6; SERP-30 #16 and #17 ("fitness api python", "react native health data library", "flutter health package")
Four language landings generated from src/data/libraries.ts and src/data/librariesEditorial.ts (src/data/librariesLandings.ts, shared renderer src/app/libraries/_landing.tsx); no new facts, every version/date/licence interpolated and every data-dependent sentence asserted at build. Python 7 packages, React Native 5, Flutter 4, Capacitor and Cordova 4 (its own page: as many packages, notes and comparisons as Flutter, and its plugins do not run in React Native). Platform rules link /integrate/healthkit, /integrate/google-health-connect, /google-fit-shutdown, /fitbit-api-shutdown (turn-off date read from GHAPI_TIMELINE) and the vendor guides. Hub, package and comparison pages link their landing; sitemap, llms.txt, llms-full.txt, answers.json, search index, site-index and routeLabel registered; qa LIBS-LANDING-ROWS. Libraries refresh tried 2026-10-17 and not kept: health_kit_reporter 3.0.0 rewrote the README its notes quote, so the 2026-10-03 data stays until re-verified; no stamp moved. Also published bluetooth-fitness-gatt-2026, google-health-api-data-types-2026, health-mcp-servers-2026 and pose-keypoint-maps-2026 through /api/v1 (13 collections).
- fixsitewide
ClusterPage disclosure banner, /compare, /alternatives, /pricing hubs, /cost-planner, /ai-fitness-app
EXPANSION-3 2.4 (motion SDK pricing, alternatives and head-to-heads; KinesteX disclosed, never first)
The firstParty banner now reads for pages that cover KinesteX or its competitors and names the vendors' own pages as a source; hub groups list the six new motion pages (third-party pages first); two cost-planner sentences and one ai-fitness-app sentence no longer say all motion SDK pricing sits behind a form. No stamps moved on those pages.
- correctionstandalone, apis
/state-of-fitness-apis-2026, src/data/costModel.ts (sency, kinestex, quickpose, apple-vision)
EXPANSION-3 2.4 follow-through: Sency's pricing packages page publishes per-user prices, so 'contact-sales' (no public price) no longer fits
Sency devCost contact-sales -> usage-based and approval gate restated from its pages and Terms of Use (contact form that leads to a call; separate paid service agreement), recorded as an update in the report's 18 October revision note, alongside Spike and Terra: contact-sales 3 (12%) -> 2 (8%), usage-based 5 -> 6, approval-gated unchanged at 13 (52%); the three motion SDK rows re-verified 17-18 October, 18 rows keep 11 August. Datasets, manifest and kit regenerated. Notes and provenance of KinesteX, QuickPose and Apple Vision re-pointed to sentences now on the pages (no figures). Evidence rows appended to ops/sources/evidence/state-of-fitness-apis-2026.json.
- reverify/motion
mediapipe-pose-landmarker-models, pose-estimation-models-compared, multi-person-pose-tracking
EXPANSION-3 2.4 (motion SDK pricing, alternatives and head-to-heads; KinesteX disclosed, never first)
Landmarker models: num_poses ('The maximum number of poses can be detected by the PoseLandmarker', default 1) quoted with the model card's single-person scope; .task Last-Modified (April 27/28, 2023) and byte sizes re-read; Google's Android sample pins /1/. Models compared: YOLO11 to YOLO26 from Ultralytics' pose docs, OpenPose body models from doc/02_output.md, PoseNet's multi-pose and deprecation wording, MoveNet MultiPose licence gap; links to the five model pages. Both bumped to 2026-10-18. Multi-person tracking: consistency fixes only (YOLO26, num_poses, MoveNet MultiPose, RTMPose), updated not moved.
- reverify/guides
evaluate-motion-sdks
EXPANSION-3 2.4 (motion SDK pricing, alternatives and head-to-heads; KinesteX disclosed, never first)
Apple's body-pose framing guidance and AVCam Simulator note (Apple docs JSON) and the Android emulator's PNG/JPEG virtual-scene import re-read 2026-10-18; the procurement section now says QuickPose and Sency publish prices; KinesteX's 97.2% FAQ figure beside the README's 90%; QuickPose platforms corrected. updated 2026-10-18.
- reverify/fitness-apis
ai-workout-tracking-apis
EXPANSION-3 2.4 (motion SDK pricing, alternatives and head-to-heads; KinesteX disclosed, never first)
KinesteX moved from first to last in the table and the details, page flagged firstParty; removed the unverifiable Sency '60 fps', 'no credit card' and QuickPose 'no watermark' claims; QuickPose and Sency prices, Kemtai's regulatory and validation claims and the vendors' on-device statements from their own pages; ML Kit added to the primitives. Cost-model provenance phrases kept or re-pointed. updated 2026-10-18.
- reverify/alternatives
kinestex-alternatives
EXPANSION-3 2.4 (motion SDK pricing, alternatives and head-to-heads; KinesteX disclosed, never first)
Rewritten from sources read 2026-10-17/18: Kemtai and Exer AI now described from their own pages (Kemtai's 111 vs 113 body points noted), Sency and QuickPose prices, KinesteX's two on-device statements and no-price FAQ. Dropped the unverified VAY, Onyx, Sportsbox and Asensei claims. updated 2026-10-18.
- reverify/compare
kinestex-vs-sency, kinestex-vs-quickpose, kinestex-vs-mediapipe
EXPANSION-3 2.4 (motion SDK pricing, alternatives and head-to-heads; KinesteX disclosed, never first)
Every vendor fact re-checked against repos, registries and the vendors' pages: Sency's published plans, server-downloaded models, iOS 16/15 floors and FAQ on-device claim; QuickPose's Android (API 26), React Native plugin and price list; KinesteX's security page (all camera and vision processing on-device) beside its READMEs' 'optional edge processing', its FAQ's 97.2% claim beside the README's 90%, its per-active-user pricing model with no figures, Apache LICENSE.txt now in the Kotlin repo; camera and motion-sensor (not microphone) permissions; MediaPipe num_poses. updated: kinestex-vs-sency 2026-10-18, kinestex-vs-quickpose 2026-10-17, kinestex-vs-mediapipe 2026-10-18; sources arrays added.
- spoke/compare
quickpose-vs-sency
EXPANSION-3 2.4 (motion SDK pricing, alternatives and head-to-heads; KinesteX disclosed, never first)
Third-party head-to-head: MediaPipe toolkit vs assessment SDK, bundled vs server-downloaded models, per-device vs per-user prices (both published, Sency's on two pages that disagree), platforms, licences, keys. KinesteX only in a labelled closing pointer. Evidence: ops/sources/evidence/compare-quickpose-vs-sency.json.
- spoke/alternatives
quickpose-alternatives, sency-alternatives, mediapipe-alternatives
EXPANSION-3 2.4 (motion SDK pricing, alternatives and head-to-heads; KinesteX disclosed, never first)
Alternatives by reason for leaving, each from the vendors' repos, registries and pages read 2026-10-17/18: MediaPipe (num_poses quoted with its default of 1, not overstated; distance and depth; frozen April 2023 weights), QuickPose (MediaPipe directly, Apple Vision, ML Kit, Sency, Kemtai) and Sency (web, cheaper first paid plan, models in the app, clinical scope, open licences). KinesteX appears last and labelled. Links the five pose-model pages and /pose-keypoints rather than repeating them. Evidence files per page in ops/sources/evidence/.
- spoke/pricing
quickpose-pricing, sency-pricing
EXPANSION-3 2.4 (motion SDK pricing, alternatives and head-to-heads; KinesteX disclosed, never first)
The two motion SDKs that publish prices. QuickPose: plans by monthly active device from its SDK pricing page (free for 10, $25 to $1,000 a month up to 100,000, every feature on every plan), billing, services, and its JointTrack page's older tier answer. Sency: plans by monthly active user from its pricing packages page (Starter free up to 100, Growth from $499 a month up to 3,800, Customized), and its main pricing page, which describes the first 100 users as a paid tier after a trial. Both firstParty with KinesteX last in the comparison. KinesteX (no published prices; /pricing 404), Kemtai and Exer publish none, so no page. Sency pages read through r.jina.ai in source-snapshot runs; quotes re-checked live by source-quotes.yml. Evidence: ops/sources/evidence/pricing-quickpose-pricing.json, pricing-sency-pricing.json.
- spoke/pricing
mindbody-api-pricing
EXPANSION-3 4.1: Mindbody's developer FAQ is the only gym-platform page we read that prints a per-call API price
1,000 calls a day, then a third of a cent per call, with the sandbox free and also held to 1,000 calls a day; what the API Terms of Use add on monthly billing (from 30 days after first access to a business's data), call limits and fee changes. The FAQ still describes the SOAP/XML web services, so the page tells readers to confirm the current fee schedule; /Resources/Pricing answered with an error page on 2026-10-17 and 2026-10-18. Evidence pricing-mindbody-api-pricing.json (19 rows). New "Gym & studio software" group on /pricing. No src/data/apis.ts entry: no cost-model category fits studio software.
- spoke/integrate
mindbody-api, teamup-api, mariana-tek-api, wodify-api, glofox-api
EXPANSION-3 4.1; tracked query "mindbody api"
Five integration guides with HowTo steps, one per platform whose developer documentation was readable: Mindbody (developer account, go-live approval, per-business activation, API-Key header, HMAC-signed webhooks), TeamUp (OAuth, M2M tokens, Direct Authentication after review, 250 requests a minute), Mariana Tek (credentials from its Integrations team, sandbox tenant, technical review, OAuth with PKCE or API keys, webhooks on request), Wodify (x-api-key from Wodify Core or the Developer Portal, 5 requests a second, bursts of 20, 500,000 a month) and ABC Glofox (branch ID, API key and API token headers behind a server-side proxy, reference v2.3.0). Evidence files integrate-<slug>.json (94, 50, 63, 41 and 60 rows). New "Gym & studio software" group on /integrate.
- spoke/fitness-apis
gym-management-software-apis
EXPANSION-3 4.1, approved 2026-10-17, settles SERP-30 #21 (gym-software pricing pages rank for "fitness api pricing"); tracked queries "mindbody api" and "fitness api for gym app"
Roundup of gym and studio management software APIs for "gym management software API" and "fitness studio booking API": who issues credentials, authentication, published limits and API prices, and webhooks for Mindbody, TeamUp, Mariana Tek, Wodify and ABC Glofox, plus rows for the ABC Fitness partner program, ABC Trainerize, ClubReady, Zen Planner, PushPress, Virtuagym, Exercise.com and Sportivity. Written only from source-snapshot runs (vendor hosts are blocked here) read 2026-10-17, with 13 pages re-read 2026-10-18; evidence ops/sources/evidence/fitness-apis-gym-management-software-apis.json (98 rows). Linked from the /fitness-apis category grid.
- linkscompliance, migrate, hubs
is-fitness-data-phi, fda-fitness-app-regulation, migrate/fitbit-research-studies-after-turndown, /compliance, /fitness-apis
EXPANSION-3 3.1 and 3.4 (link the new pages from related existing pages)
Related links and one pointer sentence on is-fitness-data-phi, a related link on fda-fitness-app-regulation; the turndown guide's platform paragraph now points at the research-platform comparison instead of saying no platform could be verified (evidence: ops/sources/evidence/migrate-fitbit-research-studies-after-turndown.json); both hubs list the new pages. No stamps moved.
- sectionfitness-apis
corporate-wellness-wearable-apis
EXPANSION-3 3.1 (corporate wellness exists: extend only with sourced facts)
Added "Which privacy rules can reach a wellness vendor" from the FTC's tool and HBNR guide, linking the HIPAA, FTC and Washington pages. updated not moved. Evidence: ops/sources/evidence/fitness-apis-corporate-wellness-wearable-apis.json.
- sectioncompliance
hipaa-compliance-fitness-app
EXPANSION-3 3.4 (HIPAA covered-entity tests); Bing "in what situation would a health app or fitness tracker be considered a covered entity under the hipaa privacy rule?" (4 and 3 impressions for two phrasings, position 9 to 10)
Added "The covered-entity test, in the regulation's words" from 45 CFR 160.103, CMS's covered-entity page and the FTC's Mobile Health Apps Interactive Tool; the HBNR bullet now quotes 16 CFR 318.2; one FAQ; links to the new FTC and Washington pages. hhs.gov refused the runner (403), so HHS's app scenarios are named as unread. updated not moved (the page's other claims were not re-checked). Evidence: ops/sources/evidence/compliance-hipaa-compliance-fitness-app.json.
- spokefitness-apis
wearable-data-to-ehr-fhir
EXPANSION-3 3.1 (getting wearable data into health records); Google "evaluate rook on ehr/emr data integration" (8 impressions, position 8.6)
FHIR R4 Observation's required elements and rules, the Vital Signs profile's mandatory elements, LOINC codes, UCUM units and search requirements, and a worked mapping from a wearable reading. Sources: hl7.org R4 observation.html and observation-vitalsigns.html, the Personal Health Device IG home page, read 2026-10-17 from source-snapshot runs, logs deleted after reading. Evidence: ops/sources/evidence/fitness-apis-wearable-data-to-ehr-fhir.json.
- spokefitness-apis
wearable-research-data-platforms
EXPANSION-3 3.1; Google "is there a platform that gives me a single api to pull all my participants' fitbit data at once?" (5 impressions, position 2.8), "should i build my own fitbit api integration or use a research platform? which companies offer this?" (4, position 2), "google is retiring the fitbit web api. what research platforms will still support fitbit data collection?" (1, position 7), data/gsc/latest.json 2026-09-12 to 2026-10-09
Fitabase, Labfront, Empatica and Ametris (formerly ActiGraph): devices, data resolution, export, APIs, hosting and pricing model, plus Fitabase's Google Health API migration notes. Sources: 25 vendor pages read 2026-10-17 from source-snapshot runs, logs deleted after reading. Evidence: ops/sources/evidence/fitness-apis-wearable-research-data-platforms.json.
- spokecompliance
remote-patient-monitoring-device-requirements
EXPANSION-3 3.1 (remote patient and therapeutic monitoring)
CMS's eligibility conditions (FDA device definition, digital upload, data at least 2 days every 30), the three billed components, same-rate payment, and where consumer wearables, HIPAA and FHIR fit. Remote therapeutic monitoring is out: no CMS page describing its device rules was found. Sources: CMS remote patient monitoring page, CMS covered-entities page, CMS-1848-P page, FDA general wellness page, FTC tool, 45 CFR 160.103, read 2026-10-17 from source-snapshot runs, logs deleted after reading. Evidence: ops/sources/evidence/compliance-remote-patient-monitoring-device-requirements.json.
- spokecompliance
washington-my-health-my-data-act
EXPANSION-3 3.4 (state health-privacy laws)
Who the Act covers, what counts as consumer health data, consent, homepage link, rights deadlines, sale authorization, geofencing, enforcement and exemptions. Sources: chapter 19.373 RCW in full, RCW 19.86.090 and the Washington Attorney General's FAQ, read 2026-10-17 from source-snapshot runs, logs deleted after reading. No other state's law was fetched. Evidence: ops/sources/evidence/compliance-washington-my-health-my-data-act.json.
- spokecompliance
ftc-health-breach-notification-rule
EXPANSION-3 3.4; Bing "how is personal data protected in fitness apps that are not covered by hipaa" (data/gsc/bing-latest.json)
Who the rule covers, what counts as a breach (including an unauthorized disclosure), notice timing, method and content, penalties, HIPAA and state law, the 2024 amendment and the FTC's 2026-09-09 rescission of its 2021 health-app policy statement (also a ChangeEvent in src/data/changes.ts). Sources: 16 CFR part 318 through eCFR's renderer API, the FTC business guide, Mobile Health Apps Interactive Tool, rule page and press release, read 2026-10-17 from source-snapshot runs, logs deleted after reading. Evidence: ops/sources/evidence/compliance-ftc-health-breach-notification-rule.json.
- correctionstandalone
/fitbit-api-shutdown
site-wide search for 'Thryve/Sahha' while fixing the migrate pages
Same 'Thryve/Sahha' error in the aggregator section and an FAQ answer; same fix as the migrate pages (Thryve stays on the reported list, Sahha gets its own sentence from its integrations page). UPDATED left at 2026-08-11. CORRECTIONS entry added; evidence in ops/sources/evidence/fitbit-api-shutdown.json.
- fixstandalone
/no-code-fitness-app
found 2026-10-17 while re-reading Terra's supported-integrations table
One sentence: Oura is 'Managed' in Terra's integrations table (your own credentials optional), while WHOOP, Strava and Garmin are 'Required', with Terra's homepage claim about its own Garmin partnership noted. Recorded as an update, not a correction: no copy of the table from the page's 2026-08-14 publication. UPDATED left at 2026-08-14.
- correction/fix
wearable-data-delayed
found 2026-10-17 while re-reading Terra's historical-data docs
The backfill step paired terra-reference with terra-signature; Terra's docs match the request's terra-reference to the webhook event's terra-reference. One sentence changed, updated stamp left at 2026-07-09. CORRECTIONS entry added. Not changed and worth a separate check: the step's curl still uses api.tryterra.co/v2, while Terra's OpenAPI spec now lists access.tryterra.co/api/v2.
- correction/migrate
fitbit-web-api-to-google-health, migrate-off-a-deprecated-fitness-api
found 2026-10-17 while writing the aggregator pages
'Thryve/Sahha' written as one vendor in three sentences; now two companies. Thryve stays among vendors reported to be preparing for the Google Health move (its docs list a Google Health source and mark Fitbit deprecating on 2026-10-29); Sahha gets its own sentence from its integrations page (Fitbit data on Android reaches its SDK through Health Connect). updated stamps left at 2026-07-20 (pages not re-verified). CORRECTIONS entries for both pages.
- correctionstandalone
/state-of-fitness-apis-2026, /apis/terra
EXPANSION-3 3.2 follow-through; coordinator decision: revise in place, no 2026.2 edition
Report revised in place with a dated note ('Revised 17 October 2026') after the aggregator rows were re-verified: contact-sales 4 (16%) -> 3 (12%), usage-based 4 -> 5, approval-gated 12 (48%) -> 13 (52%), every figure re-derived from the regenerated fitness-apis-2026 dataset. Spike's move to usage-based is recorded as an update (no August copy of its pricing page); Terra's missing gate is a correction (our own 2026-08-02 Terra pages already documented it), logged in CORRECTIONS for the report and /apis/terra. 'Updated 11 August 2026' stays as the stamp for the 21 rows not re-checked; datePublished 2026-08-11, dateModified 2026-10-17. Evidence in ops/sources/evidence/state-of-fitness-apis-2026.json and corrections.json.
- fixapis
src/data/costModel.ts (terra, junction, rook, spike), src/data/changes.ts
EXPANSION-3 3.2 follow-through
Cost-model notes and provenance rewritten to sentences now on the refreshed pages (no dollar figures). Reclassified from the vendors' own pages: Spike contact-sales -> usage-based (its pricing page shows a Sandbox starting price and calls pricing usage-driven); Terra gains an approval gate (its docs name providers needing special setup); Rook's gate text made specific. This moves the fitness-apis-2026 dataset to 3 contact-sales, 5 usage-based and 13 gated items, while the State of Fitness APIs 2026 report (edition 2026.1) still prints 4, 4 and 12: the report needs a new edition or a note. New /changes entry: Terra legacy widget endpoint deprecation, 2026-11-03, confirmed. Datasets, package data and kit regenerated.
- spoke/alternatives
human-api-alternatives
EXPANSION-3 3.2: humanapi.co now redirects to LexisNexis
What Human API is now (LexisNexis Health Intelligence and LexisNexis Human API, no public price) and alternatives by data type: aggregators for wearables, Metriport for covered-entity record access, Junction and Terra for lab ordering, Rook and Spike for lab-report parsing.
- spoke/compare
terra-vs-thryve, terra-vs-sahha, terra-vs-open-wearables
EXPANSION-3 3.2: head-to-heads against the market leader
From both vendors' own pages (Open Wearables also from its README and licence) fetched 2026-10-17. Each carries a 'what we could not verify' section; the Open Wearables page notes that its own pages disagree on outbound webhooks and that its comparison page's Terra claims do not match Terra's pricing page.
- spoke/pricing
sahha-api-pricing, thryve-api-pricing
EXPANSION-3 3.2: both vendors publish full price sheets
Plan tables, our own arithmetic labelled as such, BAA tier, retention and credential caveats from sahha.ai, docs.sahha.ai, thryve.health and docs.thryve.health snapshots of 2026-10-17. Flags Sahha's undefined 'user' and Thryve's 0,50ct vs EUR 0.50 inconsistency rather than resolving them.
- refresh/fitness-apis /pricing /compare /alternatives /integrate
health-data-aggregator-apis, terra-vs-vital, health-data-aggregator-pricing, terra-vs-rook, terra-vs-spike, rook-vs-spike, terra-alternatives, terra-api
EXPANSION-3 3.2; /apis/terra, /apis/junction and /apis/spike flagged 'due a re-check' (sources 2026-07-08)
Every vendor fact re-read from Terra, Junction, Rook and Spike pages and docs fetched by source-snapshot runs on 2026-10-17; stamps bumped and Sources checked lists added. Corrections: Terra now publishes pricing and sells lab tests; Terra's widget moved to access.tryterra.co/api/widget/session (legacy endpoint deprecation planned 3 November 2026); Junction's Launch plan is a flat monthly fee rather than per-user with a minimum; Rook publishes active-user tiers and sells device and lab-report APIs; Spike publishes a Sandbox starting price and announces an acquisition by Raintree Systems; Human API is now a LexisNexis product. Evidence files in ops/sources/evidence/.
- sectionbluetooth-fitness
/bluetooth-fitness, /bluetooth-fitness/<characteristic>
EXPANSION-3 4.3
Generated Bluetooth GATT reference from the Bluetooth SIG public Bitbucket repository (main at 408f4a0, committed 2026-10-14, read 2026-10-17): 13 services, 97 in-scope characteristics (55 chosen for fitness and health device categories, the 39 on the SIG User Data list, 3 referenced by those structures), 90 with a gss structure, 44 byte-layout pages (thin-page rule: two fields or a flags field), 7 with no structure in the repository (FTMS Feature, Training Status, Control Point, Status; PLX x3). Characteristics tied to a service only where a permitted-characteristics file says so. Dataset bluetooth-fitness-gatt-2026 (structural facts and evidence lines, not the SIG descriptions; the files say they are proprietary to Bluetooth SIG and grant no licence). Gates BT-GATT-*. Link-only edits to nine /devices guides; devices hub links the reference.
- spokeai + standalone
/health-mcp-servers, /ai/connect-wearable-data-to-ai-assistants
EXPANSION-3 2.5 and 2.6; tracked query "mcp server health data"
Generated MCP-server directory: scripts/fetch-mcp-health-servers.mjs reads every page of the official MCP Registry v0.1 listing (452 pages, 45,161 latest-version entries; the registry search matches names only) and keeps 176 servers whose name, title or description names a health or fitness data source, with npm/PyPI package facts; none is under a vendor domain namespace. New dataset health-mcp-servers-2026, gates MCP-SERVER-ROWS/-OFFICIAL/-EVIDENCE, workflow mcp-health-servers.yml (schedule paused like libraries.yml). Guide from the MCP specification 2026-07-28, the registry read and the compliance pages; @aifitnessapi/mcp described with a disclosure (not in the registry, npm 404).
- spoke/google-health-api
(hub + scopes + fitbit-web-api-mapping + access-and-limits + webhooks + errors + 44 data-type pages)
EXPANSION-3 1.1; the Fitbit Web API turns off 2026-10-30 (Google's About page, read 2026-10-17); data-type ids, scope strings and method names are exact developer strings
Generated by scripts/fetch-google-health-api.mjs from Google's v4 and v4beta discovery documents (revision 20261014) and 12 developers.google.com/health pages, all fetched 2026-10-17: 44 data types, 18 documented scopes, 27 methods, 151 v4 schemas (101 rendered), 32 Fitbit data-type mappings, 63 error reasons, 8 release notes. 31 disagreements between Google's own pages published as flags, never corrected. CC BY dataset google-health-api-data-types-2026; qa gates GHAPI-TYPE-COVERAGE, -HUB-TABLE, -TYPE-FACTS, -FLAG-SHOWN, -EVIDENCE, -TOPIC-ROWS; .github/workflows/google-health-api.yml ships paused like the other PR bots. Linked from /fitbit-api-shutdown, /migrate/fitbit-web-api-to-google-health, /integrate/fitbit-api, /alternatives/fitbit-api-alternatives and /pricing/fitbit-api-pricing, no stamp moved. Correction: the pricing and shutdown pages said the successor's quota model was not public; Google's Quotas and Rate Limits page (last updated 2026-05-18, read 2026-10-17) publishes it. Pricing stays could-not-verify; logged in corrections.ts.
- referencegenerated
healthkit-identifiers/<slug>, wear-os-data-types/<slug>
EXPANSION-3 1.8
Per-type pages generated only from existing data (healthkitIdentifiers, healthkitWritability, healthkitMetadataKeys, matrix; healthServicesDataTypes): 127 HealthKit identifier pages (113 of 121 quantity, 14 of 30 category, 0 of 6 characteristic) and 25 of 65 Wear OS DataType pages. Thin-page rule: a type needs Apple's abstract (Google's description) and availability (declared type) plus at least two evidence-backed facts of its own; the other 30 and 40 stay table rows with no page or sitemap row. Table pages, group pages and Health Connect record pages link the new pages. qa gates TYPE-PAGE-RULE/EVIDENCE/UNLINKED recompute the rule from the generated files. No facts written by hand; no source re-read, so no stamp moved.
- spokemotion
/pose-keypoints, /pose-keypoints/<scheme> (9), /motion/movenet-models, /motion/ml-kit-pose-detection, /motion/yolo-pose-models, /motion/rtmpose-models, /motion/openpose-models
EXPANSION-3 2.1 and 2.2. /motion is the best non-commercial section in GSC 2026-09-12 to 2026-10-09; motion queries there include movenet vs mediapipe (16 impressions, position 3.6), movenet model (position 41), openpose alternatives (34) and mediapipe pose 33 landmarks official (23).
New generator scripts/fetch-pose-keypoints.mjs -> src/data/poseKeypoints.ts: 9 keypoint schemes, 321 points, read 2026-10-17 from MediaPipe, TF.js, MMPose, Ultralytics and OpenPose source files on raw.githubusercontent.com (branch and SHA-256 recorded), ML Kit's PoseLandmark reference and Apple's Vision docs JSON, with exact per-scheme counts and cross-source checks. Hub /pose-keypoints with a name-identity crosswalk (53 rows, 127 points unmapped by rule), one page per scheme, dataset pose-keypoint-maps-2026, qa gates POSE-KEYPOINT-ROWS/-CROSSWALK/-MAPPING. Five new /motion model pages written only from sources fetched the same day; MediaPipe lite/full/heavy and Apple Vision 2D/3D already had pages, which now link their keypoint maps.
- sectionsitewide
/developers, /api/v1 (index, 9 collections, 727 items), /api/v1/openapi.json, /mcp
ops/EXPANSION-3-2026-10-17.md 4.2 (SERP-30 #27)
The open datasets served as a static, read-only JSON API with an OpenAPI 3.1 document generated from the same collection list (src/lib/publicApi.ts), and the stdio MCP server's four tools hosted at /mcp over Streamable HTTP, stateless, from one shared module (mcp/src/tools.js). Every response carries source, CC-BY-4.0 licence, attribution and a verified date; 11 API-*/MCP-* gates. mcp/server.json for the MCP Registry (schema 2025-12-11), not published: npm and registry steps need the owner. No new claims.
- linkssitewide
src/data/vendorHubs.ts + components/VendorHubMenu: 14 vendor menus, 169 page placements
EXPANSION-3 item 1.2: Google splits 'garmin api' between /fix/garmin-api-approval and /integrate/garmin-api, and 'fitbit api' across /fitbit-api-shutdown, /integrate/fitbit-api and /migrate/fitbit-web-api-to-google-health
One menu per vendor, grouped by intent with the current page marked, leading its hub and closing every other page before the CTA. Hubs on /integrate for Garmin, Fitbit, Strava, WHOOP, Oura, HealthKit, Health Connect (with the Google Fit pages), Terra, ExerciseDB and Nutritionix; on /apis for Junction, Rook, Spike and Edamam, which have no guide. Link text is each page's own H1; 13 hand-built pages now render theirs from src/data/pageTitles.ts. Polar and Withings are under the three-page bar; KinesteX gets no menu. No new claims, no stamps moved. qa: VENDOR-HUB-PAGE, -MENU, -LINK, -LABEL, -UNLISTED.
- processops
scripts/check-source-quotes.mjs, .github/workflows/source-quotes.yml, ops/sources/evidence/
EXPANSION-3 4.8
Quote check: pages written from blocked hosts carry claim/url/quote evidence; a runner re-fetches each source on PRs, weekly and on demand, and fails when a quoted passage is missing.
- processops
.github/workflows/source-snapshot.yml, scripts/source-snapshot.mjs, ops/sources/
EXPANSION-3 4.8
Source-snapshot workflow: fetches public vendor and regulator pages from a GitHub runner and uploads a 14-day artifact, so pages can be written from primary sources the dev environment cannot reach. Snapshots are never committed.
- processops
ops/EXPANSION-3-2026-10-17.md
owner approval 2026-10-17
Three expansions (vendor developer hubs, AI motion and computer vision, B2B health-data buyer's guides) plus every other row of the list, each tagged A/CI/B/O by where its primary sources can be fetched. Eleven tracked queries added.
- fixapis
/apis/<id>
SERP-30 #26 follow-up
The vendor-page header's 'last verified' date now renders ContentAge: elapsed time, plus the amber 'due a re-check' flag past 90 days, as cluster pages do. Flags junction, polar, spike and terra (sources verified 2026-07-08); their vendor hosts are blocked by the environment's network policy, so no stamp was bumped.
- sectionsitewide
/fitness-apis hub, /apis/<id>, /datasets, /compare, /alternatives, /pricing, homepage hero, OG cards
SERP-30 batch 2 (#11, #12, #15, #23, #25, #26)
Pillar jobs name their products from the cost model; vendor pages show their source page and its verification date; Dataset creator/publisher inline per Google's Dataset docs (read 2026-10-12); count-bearing hub descriptions; hero stat 'fitness APIs in the directory'; own OG cards for /blog, /glossary, /tools, /changes. No new claims.
- processops
scripts/gsc-report.mjs, ops/gsc/tracked-queries.txt
SERP-30 #9/#10
npm run gsc prints the www. URLs still in Google (46 pages, 7%) and the 31 tracked queries per engine. Study written up in ops/SERP-30-2026-10-12.md.
- fixsitewide
69 JSX text runs in 41 files
Found while checking /apis on mobile: 'and 5carry a cost'; also '22unit families', 'Disclosure:KinesteX', '10metrics'
Next's compiler drops the leading space of a JSX text run that contains an HTML entity and spans lines (reproduced with its bundled SWC). Each run now has an explicit {" "}; new qa gate JSX-ENTITY-SPACE fails the build if one returns.
- processsitewide
favicon.ico, logo, manifest icons, WebSite/Organization markup
SERP-30 #6/#7/#8: /favicon.ico answered 404; Organization had no logo; the brand never matched 'ai fitness api'
scripts/build-icons.mjs draws the ICO and PNGs from src/app/icon.svg; alternateName 'AI Fitness API'; Organization logo 512 px.
- meta-fix/fitness-apis
wearable-data-apis, free-fitness-apis
SERP-30 #13/#14: 'fitness tracker api' at 72.8; free-fitness-apis had no Google impressions in 28 days
Titles only; stamps unchanged.
- meta-fixhubs
/alternatives, /compare, /pricing, /learn, /blog, /migrate, /glossary, /apis
SERP-30 #3: eight hubs titled 'Fitness & Health API …'; Google tested them for 'fitness api' (positions 29.8 to 94.8) and ranked none
Intent-first <title>s; H1s unchanged. /apis is now 'Fitness API List' with free-to-start (17) and no-approval (12) boxes computed from the cost model; breadcrumb label 'Fitness API list'.
- meta-fix/
homepage
SERP-30 #1/#2/#6: Google ranks the homepage best for 'fitness api' (18.5, 56 impressions) while 15 other pages split the term; the ranking results lead with a definition and a list
Title 'Fitness API Guide: Compare 24 Wearable, Health & Motion APIs' (count from the directory), description with the brand spelled out, eyebrow 'AI Fitness API', and a 'Fitness APIs at a glance' section: the /learn definition capsule plus a 24-row table from the cost model with the funding note. No new claims.
- linkssitewide
109 never-shown pages (21 under 6 in-body inbound links)
GROWTH-30 #21: 58% of pages with 3-5 in-body inbound links have appeared in Google vs 88% with 11+; /healthkit-versions/ios-12, ios-14, ios-15 had none
93 contextual links in 86 one-sentence additions across 74 source entries (max 3 per source), each checked against the target page; the hiking-app altimeter sentence narrowed to what /phone-sensors/cmaltimeter shows. Rebuilt site: every never-shown page now has 6+ in-body inbound links. Stamps unchanged.
- regenerategenerated
published.ts, apiDemand.ts, public/datasets, mcp/data, packages/health-data/data, public/kit
Pages removed or moved in this wave
backfill-published drops the 12 posts and mediapipe-vs-movenet; datasets carry the MoveNet sourceHref and change-row page moves.
- processsitewide
/opensearch.xml
GROWTH-30 #29: /opensearch.xml appeared in Google results
X-Robots-Tag: noindex on the route, held by new qa gate MACHINE-FILE-INDEXABLE (described on /gates). The 'long titles' were an HTML-escaping artifact; decoded, none over 60.
- processops
scripts/search-pull.mjs, scripts/gsc-report.mjs, ops/DAILY-CONTENT.md
GROWTH-30 #24-#26: snapshot was July's; US desktop is 42% of Google impressions at 0.26% CTR; Bing names the query behind nearly every click
Live weekly pull (Google query, page, query x page, country x device; Bing pages, queries, partial query-page pairs; sensitive query text withheld); report prints CTR with and without US desktop and reads only the newest CSV per engine; playbook rungs read Bing queries as evidence, never added to Google; §6 ships via PR. Weekly routine Mondays 05:58 UTC, notifications off.
- fold/blog
12 never-shown posts
GROWTH-30 #20: 25 posts, 0 clicks; these 12 never appeared in Google
Findings moved, dated with each post's own date, into /matrix, /methodology, /tools/aggregation-checker, /healthkit/nutrition, /healthkit/mobility (+1 FAQ), /google-fit-shutdown, /pricing/are-fitness-apis-free, /build/fitness-app-tech-stack (2 posts), /changes, /healthkit-category-values; react-native-health-stale had nothing new for /libraries/react-native-health. Each post and its .md 308. Counts re-checked against costModel.ts and healthkitIdentifiers.ts. HK modified dates for nutrition, mobility, healthkit-category-values moved to 2026-10-12.
- faq/build
running-app
Contradiction found while retitling: the FAQ said iOS needs Always authorization, the body says When In Use
FAQ corrected to the body and to Apple's 'Handling location updates in the background' (developer.apple.com docs JSON, read 2026-10-12: a CLServiceSession requiring whenInUse or always, created in the foreground). Stamp unchanged.
- meta-fix/build
all 24 guides
GROWTH-30 #19: 0 clicks, 15 of 24 never shown, hub at 78.6; 'how to build an X app' results belong to agencies
metaTitle, h1 and metaDescription lead with the problem each body solves, each checked against a quoted body sentence; stamps unchanged. EXPANSION-MAP /build items closed.
- merge/motion
mediapipe-vs-movenet -> pose-estimation-models-compared
GROWTH-30 #18: 1 click on 229 impressions at 5.3 over 56 days while the roundup took 9 clicks on the same queries
Head-to-head section in the roundup with the spoke's facts and their check date; every link repointed to #mediapipe-vs-movenet-head-to-head; 308 for the page and its .md.
- section/apis
all 24 vendor pages (template)
GROWTH-30 #17: 70% shared text, 0 clicks, about 5 impressions per page; live pull 2026-09-12 to 2026-10-09
Opening 'What developers search for about <vendor>' from src/data/apiDemand.ts (scripts/build-api-demand.mjs; Google and Bing never added; query text with URLs, identifiers or code left out). NOINDEX_APIS: junction, rook, nutritionix, edamam, usda-fdc, open-food-facts, wger, kinestex, sency, quickpose, apple-vision (bar: 20 Google or 10 Bing product-named impressions plus one other page surfaced). Sitemap lists 13 vendor pages.
- noindex/questions
/questions and the 25 cluster question hubs
GROWTH-30 #16: about 75% of a hub's text repeats its spokes' FAQs; 16 of 26 never shown in Google; 1 click in 28 days
robots noindex, follow; dropped from the sitemap (SITEMAP-NOINDEX holds it). Reverses GROWTH-50-2026-10 item 43. Pages stay for readers, site search and the machine surfaces.
- regenerategenerated
public/datasets (fitness-api-changes-2026), mcp/data, packages/health-data/data, public/kit
The changes dataset still graded the Fitbit dates 'reported' after #16 confirmed them
npm run datasets (only the changes dataset changed; manifest rotated), scripts/bundle-package-data.mjs (the changes JSON in both packages), scripts/build-kit.mjs (watch-app checklist caught up with pages added since its last build).
- statussitewide
exercisedb-alternatives, exercisedb-api, exercisedb-vs-wger, exercise-database-apis, free-fitness-apis, exercise-database-api-pricing, /ai-fitness-app, /no-code-fitness-app
Follow-up to GROWTH-30 #7: pages still called exercisedb.dev free and self-hostable, contradicting the corrected pricing page
git clone of github.com/ExerciseDB/exercisedb-api on 2026-10-12: main holds exactly README.md and LICENSE (AGPL-3.0), history from 2025-11-25, the only PR ref also README/LICENSE only; README presents a hosted API with pricing plans, terms of use and a non-production v2 playground. Every self-host claim rewritten to match, dated in prose; updated stamps unchanged (partial re-check).
- statussitewide
Fitbit passages: alternatives (5 pages), compare (2), fitness-apis (2), fix (3), integrate fitbit-api, migrate (2), fitbit-api-pricing, google-fit-shutdown
Google's Google Health API about page publishes the Fitbit Web API timeline (read 2026-10-12); today's new pages state it, so the 'reported, not confirmed as of Oct 2' passages had to go
88 replacements, drafted by script and reviewed sentence by sentence: end of support 2026-09-30 and turn-off 2026-10-30 attributed to Google's page and dated in prose; token non-transfer and account linking from the migration guide; mid-May consolidation date, end-of-May target, 120+ endpoints and aggregator readiness stay reported. Updated stamps unchanged (partial re-check). Also links the migration playbook to the research page and the wearable roundup to the corporate wellness page. Part of GROWTH-30 #23.
- status/changes
fitbit-api-shutdown, changes.ts, homepage tile
Google's Google Health API about page now publishes the timeline (read 2026-10-12); needed so today's new pages do not contradict the site
Fitbit Web API end of support 2026-09-30 and turn-off 2026-10-30 graded confirmed with Google's words quoted on /fitbit-api-shutdown; token non-transfer and account linking confirmed from the migration guide; mid-May consolidation date stays reported. UPDATED stamp unchanged (partial re-check, dated in prose). Part of GROWTH-30 #23; the remaining 'reported' passages on other pages follow in the next commit.
- section/devices
ftms-fitness-machine-service
GROWTH-30 #15: Bing 'open source fitness app treadmill bluetooth ftms', 'github open source treadmill app bluetooth ftms android'; page 64 impressions at 6.6
Six projects from their READMEs/LICENSE files and PyPI/pub.dev records (2026-10-12): QZ, Auuki, OpenRowingMonitor fork, Zwack, pycycling, flutter_ftms; one FAQ added.
- section/data
gps-activity-api
GROWTH-30 #14: 'strava developers site route suggestion api endpoint' at 2.8, 14 impressions, no click
PARTIAL: developers.strava.com unreachable. Section reports what stravalib's client wraps (routes list/get/streams, read 2026-10-12) and says a route-suggestion endpoint could not be checked.
- meta-fix/integrate
whoop-api
GROWTH-30 #13: 'whoop api developer integration' at 8.8 on /compare/apple-watch-vs-whoop; integrate page 0 clicks on 741 impressions
Developer-integration phrasing in title/H1; top-of-page link from the comparison.
- meta-fixpillar
no-code-fitness-app
GROWTH-30 #12: 'ai fitness app builder' at 5.8 and 'fitness app builder' at 7.3; page moved 72.9 -> 23.1
Title/H1 plus a builder section that ranks no tools, keeps the KinesteX disclosure and does not crown it. UPDATED unchanged.
- meta-fix/motion
apple-vision-body-pose
GROWTH-30 #11: 'vndetecthumanbodyposerequest' at 8.6, 12 impressions
VNDetectHumanBodyPoseRequest in title and H1; added the iOS 18 DetectHumanBodyPoseRequest (detectsHands) from Apple's docs JSON, 2026-10-12. Stamp unchanged.
- meta-fix/libraries
garminconnect (+ all package pages)
GROWTH-30 #10: 160 impressions at 7.3, 1 click; queries 'python-garminconnect', 'garminconnect python'
Retitled 'garminconnect: Unofficial Garmin Connect API for Python'; library template header now leads with language and registry install name on every package page. LIBRARIES_VERIFIED_ON unchanged.
- section/fix
garmin-api-approval
GROWTH-30 #9: 'garmin api access application suspended' at 10.4, 33 impressions; clicks 14 -> 9
Title/H1/description plus a 'suspended' section that says plainly what could not be verified (developer.garmin.com unreachable).
- meta-fix/alternatives
garmin-api-alternatives
GROWTH-30 #8: 'garmin connect api private use alternative 2025' at 3.4, 41 impressions, 0 clicks
Title, H1, description and an opening personal-projects section linking /libraries/garminconnect, carrying the approval page's terms-of-service caution; one FAQ replaced.
- section/pricing
exercise-database-api-pricing
GROWTH-30 #7: fourth-biggest earner (9 clicks); Bing ~28 impressions of plan questions (rate limits, free tier, RapidAPI cost, 'completamente free')
PARTIAL: RapidAPI and exercisedb.dev pricing hosts unreachable, so no prices or limits. Section from the exercisedb-api README (2026-10-12); corrected the stale exercisedb.dev self-host/$0 claims on this page. Other ExerciseDB pages still describe exercisedb.dev as self-hostable — needs re-verification.
- spoke/fitness-apis
corporate-wellness-wearable-apis
GROWTH-30 #6: 'which wearable health data api is best for corporate wellness programs?' at 2.0 with no owning page; Bing HRIS/benefits integration queries at positions 2 and 4
Reuse page: facts from on-site wearable, aggregator, build, MDM and Garmin pages plus Google's Fitbit dates (2026-10-12); no prices, no HRIS vendors. Build guide links to it.
- spoke/migrate
fitbit-research-studies-after-turndown
GROWTH-30 #5: research-platform queries in Google (Fitabase prompt, 'a single api to pull all my participants' fitbit data'); Fitbit is Bing's largest theme (307 impressions)
Google Health API about, migration, data-types, research policy and research pledge pages fetched 2026-10-12; HowTo steps; no research-platform claims (sites unreachable).
- spoke/fitness-apis
garmin-connect-iq-vs-health-api
GROWTH-30 #4: 'garmin connect iq api vs health api unterschied' at 5.7, 17 impressions; no page mentioned Connect IQ
Connect IQ facts from garmin/connectiq-apps, connectiq-companion-app-sdk-ios and connectiq-android-sdk READMEs plus Maven Central (2.4.0), fetched 2026-10-12; Health/Activity API facts reused from /integrate/garmin-api (2026-07-09), so no sources field.
- section/fitness-apis
exercise-database-apis
GROWTH-30 #3: 'workout video api' at 32.7 landing on the homepage, 'exercise video api' at 41.3 landing on /learn
Retitled for video; new video section from the exercisedb-api README (v2 videoUrl, playground warning) and wger's ExerciseVideo model and router, fetched 2026-10-12. ExerciseDB-alternatives FAQ aligned (wger supports video). Stamp unchanged.
- spoke/motion
pose-estimation-model-licenses
GROWTH-30 #2: Bing 'movenet license apache 2.0'; Google 'mediapipe vs yolo' (7 impr) and 'yolo pose vs mediapipe' (6) landing on the roundup
LICENSE files (mediapipe, tfjs-models, ultralytics, openpose, mmpose), BlazePose GHUM 3D and MoveNet model cards, ML Kit pose page and terms, Apple Vision docs JSON — all fetched 2026-10-12; roundup's licensing section links to it.
- processops
DAILY-CONTENT.md, EXPANSION-MAP.md
GROWTH-30 #1: clicks per page over 28 days to 2026-10-10 — /alternatives 2.50, /pricing 2.08, /motion 1.29, /fitness-apis 1.27 vs 0-0.04 across 146 reference-format pages
Commercial-investigation formats are the default for new work; no new reference cluster before the 2026-10-31 day-28 review.
- spoke/data
resting-heart-rate-api
EXPANSION-MAP Tier-1 top unchecked item (GSC snapshot 62 days old, so backlog rung per DAILY-CONTENT §1/§2c)
Apple restingHeartRate, heartRate and HKHeartRateMotionContext docs JSON plus Google RestingHeartRateRecord reference, data-types page and vitals guide fetched 2026-10-04; sources recorded on the entry. Vendor rows reuse on-site facts only. Links in from /data hub group, /data/heart-rate-api and /healthkit/vital-signs (links only, no stamp moves).
- ciinfra
.github/workflows/libraries.yml
main requires PR + green gates
Weekly library refresh now opens a PR with auto-merge instead of pushing to main.
- referencegenerated
healthkit-metadata-keys, wear-os-data-types
GROWTH-OCT-2026-B wave D #22-24
Generated by scripts/fetch-healthkit-metadata-keys.mjs (67 keys) and scripts/fetch-health-services-data-types.mjs (65 types, 26 with a table permission); CC BY datasets healthkit-metadata-keys-2026 and wear-os-health-services-data-types-2026 bundled into mcp/ and packages/health-data; qa gates HK-METADATA-ROWS/EVIDENCE, WEAR-DATATYPE-ROWS/PERMS/EVIDENCE, HCAPI-EQUIV-BACKLINK.
- spoke/data
state-of-mind-api, medications-api, mental-health-assessments-api, clinical-records-api, health-connect-medical-records-api
GROWTH-OCT-2026-B wave D #17-21
Entries updated 2026-10-04 (HKStateOfMind, HKMedicationDoseEvent/HKUserAnnotatedMedication, HKGAD7Assessment/HKPHQ9Assessment, HKClinicalRecord, Health Connect MedicalResource), fact-checked by the main session; new /data hub group; /compliance/app-store-health-data-rules links clinical-records-api (no stamp move).
- cluster/health-connect-api
hub + readrecords-pagination, aggregate-request, aggregategroupbyduration-vs-period, getchanges-incremental-sync, insertrecords-clientrecordid-upsert, deleterecords, permissioncontroller-request-permissions, read-health-data-in-background, read-health-data-history, metadata-recording-method, getfeaturestatus-feature-availability, exercise-route-consent, planned-exercise-session-training-plans, permission-ui-guidelines, healthkit-vs-health-connect-api-equivalents
GROWTH-OCT-2026-B wave D #1-16; exact-string pattern
Cluster 25, Android twin of /healthkit-queries; developer.android.com guides and Jetpack reference fetched 2026-10-04. Wired: registry, next.config CLUSTERS, llms/llms-full, search, header/footer/homepage, uptime/responsive. Links in from /integrate/google-health-connect, /health-connect hub, /fix/health-connect-changes-token-expired, /healthkit-queries hub and 8 spokes (equivalents), both wave D posts; glossary 'Changes token' repointed. No stamp moves.
- postblog
health-connect-219-permissions
GROWTH-OCT-2026-B wave D #27
every number computed from src/data/healthConnectRecords.ts
- postblog
health-connect-sdk-release-history
GROWTH-OCT-2026-B wave D #26
every number computed from src/data/hcReleases.ts
- spokecompliance
apple-health-icon-works-with-apple-health
GROWTH-OCT-2026-B wave D #25; exact-string pattern
HIG HealthKit icon rules + Works with Apple Health badge page, quotes verified against pages fetched 2026-10-04
- correction/learn,/data,/glossary
learn/what-is-rpe (correction); data/menstrual-cycle-api (links to HealthKit rows and HC record pages, no stamp move); glossary terms for the new clusters
GROWTH-OCT-2026-B #22-24
what-is-rpe said no health API exposes perceived effort; HealthKit has workoutEffortScore and estimatedWorkoutEffortScore (iOS 18) with no abstract, scale or unit documented. Corrected and logged in corrections.ts. Glossary terms point at the specific new spokes.
- spoke/watch-apps,/engagement
watch-apps: workoutkit-customworkout-swift, hkworkoutsession-lifecycle-swift, hkworkoutsession-mirroring-api, wear-os-exerciseclient-kotlin, wear-os-passive-monitoring-measureclient; engagement: activitykit-live-activity-workout, app-intents-start-workout, android-live-updates-workout
GROWTH-OCT-2026-B #18-21
Apple and Google developer docs fetched 2026-10-03; hub groups updated; watch-apps entries link /health-connect and /audio-coaching.
- spoke/fix
health-connect-securityexception, health-connect-not-available, health-connect-changes-token-expired, health-connect-rate-limit
GROWTH-OCT-2026-B #6-9
From Google's read/write exception tables, SDK status values and changes-token guidance fetched 2026-10-03. health-connect-securityexception links /health-connect/permissions; /error-codes links ERROR_SECURITY and ERROR_RATE_LIMIT_EXCEEDED to their fix pages.
- spoke/compliance
app-store-guideline-5-1-3-health-research, -5-1-1-data-collection-storage, -5-1-2-data-use-sharing, -1-4-1-physical-harm, -2-5-1-healthkit-software-requirements, -3-1-3-d-person-to-person-fitness, -2-5-4-background-services, -2-5-11-sirikit-shortcuts; google-play-health-connect-publishing-requirements
GROWTH-OCT-2026-B #16-17 and Wave C #26-28; guideline numbers are exact strings
Guidelines quoted verbatim from the App Store Review Guidelines page fetched 2026-10-03; /compliance stays the overview. Hub GROUPS updated.
- spoke/error-codes,/health-connect-releases
error-codes (hub), error-codes/health-connect, health-connect-releases
GROWTH-OCT-2026-B Wave C #22-25; HealthConnectException ERROR_* constants and connect-client versions are exact developer strings
Generated by scripts/fetch-error-codes.mjs (Apple HKError.Code JSON, Android HealthConnectException + Jetpack HealthConnectClient) and scripts/fetch-hc-releases.mjs (androidx release notes), both fetched 2026-10-03 with row guards. /error-codes/healthkit deliberately not shipped (duplicate of /healthkit-errors, which gained fix-guide links). Gates ERROR-CODES-ROWS, HC-RELEASES-ROWS.
- spoke/healthkit-versions
(one page per iOS major: /healthkit-versions/ios-N)
GROWTH-OCT-2026-B Wave C #24; 'healthkit ios N new types' queries
Computed from the existing identifier dataset (src/lib/hkVersions.ts); no new facts. Sitemap lastmod = HK_VERSION_PAGES_PUBLISHED, the pages' dateModified.
- spokephone-sensors
(hub + 10 spokes)
GROWTH-OCT-2026-B Wave C #11-21; Core Motion classes and Android sensor constants are exact developer strings
Cluster 24; Apple Core Motion docs and developer.android.com fetched 2026-10-03. Linked from data/step-counting-api and guides/track-workouts-without-wearables; Android pages link /health-connect/permissions (links only).
- spokehealthkit-queries
(hub + 9 spokes)
GROWTH-OCT-2026-B Wave C #1-10; HealthKit query class names are exact developer strings
Cluster 23; Apple HealthKit docs JSON fetched 2026-10-03; where Apple is silent the pages say so. Linked from integrate/healthkit, fix/healthkit-background-delivery-not-working, cookbook/incremental-sync-anchor and the /healthkit hub (links only).
- spokeaudio-coaching
(hub + 12 spokes)
GROWTH-OCT-2026-B #14; exact-developer-string pattern from GSC
cluster 22; Apple/Google docs fetched 2026-10-03; no framework-plugin claims. Linked from glossary audio terms, build/hiit-app, build/meditation-app, watch-apps/hkworkoutsession-lifecycle-swift and accessibility/haptics-when-audio-is-busy (links only, no stamps moved). Gate AUDIO-EVIDENCE.
- spoke/libraries
(hub + 20 package pages + 5 comparisons)
GROWTH-OCT-2026-B #10-13; package names are exact developer strings
Registry facts generated by scripts/fetch-libraries.mjs from npm, pub.dev and PyPI (row guard 20) and refreshed weekly by .github/workflows/libraries.yml with monthly hold-back for stars/issues/activity; GitHub repo signals null until the first CI run. Editorial notes quote READMEs fetched 2026-10-03. Linked from /sdk-releases, integrate/healthkit, integrate/google-health-connect, integrate/garmin-api, google-fit-shutdown, fix/oura-personal-access-token-deprecated and the react-native-health-stale post. Gates LIBS-ROWS, LIBS-FRESH.
- spoke/health-connect
(hub + permissions + aggregate-metrics + 42 record pages)
GROWTH-OCT-2026-B #1-5; exact-developer-string pattern from GSC (record class names, android.permission.health strings, AggregateMetric constants)
Generated by scripts/fetch-health-connect-records.mjs from Google's data-types page and Jetpack references fetched 2026-10-03 (42 records, 219 framework permissions, 92 aggregate metrics); one Google-internal disagreement (READ_EXERCISE_ROUTE vs READ_EXERCISE_ROUTES) shown, not resolved. /health-connect-records 308s to /health-connect; its calorie FAQ and two traps moved to /matrix verbatim; HealthKit group rows and the /matrix Android column link record pages for verified matrix pairs only. New datasets health-connect-records-2026 and health-connect-permissions-2026 (CSV/JSON, CC BY) bundled into mcp/ and packages/health-data. Gates HC-RECORD-COVERAGE, HC-PERM-ON-PAGE, HC-PERMISSION-ROWS.
- seo/site-index,/fix,/tools,/healthkit-identifiers,/health-connect-records,/changes
site-index (noindex,follow); fix hub description; tools sibling nav x6; healthkit-identifiers + health-connect-records tool links; changes: 402 outage entry
GSC 2026-07-06..08-02 re-read against a position-aware curve: 44 of 234 queries split across our own URLs (450 of 1,220 query-page impressions); 'fitness api' spread over 13 of them at position 40-90. /site-index averaged position 156, 102 impressions, 0 clicks while bidding on four head terms. /fix outranked its own fitbit-401 spoke (282 imp, pos 9.6, 0 clicks).
Consolidation, not new content. /site-index noindex,follow keeps its crawl role without the bid. /fix description made hub-shaped so the spoke can take the exact-match query back; reversible via npm run gsc -- --compare 2026-10-02. New CANNIBAL-QUERY gate (295 queries, 0 contested) locks the clean state. Bing: bingbot named in robots.txt and now gated in qa + the uptime probe, msvalidate.01 from BING_SITE_VERIFICATION, IndexNow --all on outage recovery; ops/BING.md has the owner steps. Correction: an earlier claim of 44 orphaned pages came from a stale .next; the real number was 3 and the footer already linked /tools, /questions and /healthkit.
- reverify/fitness-apis,/fix,/integrate,/compliance,/test
fitness-apis/apple-healthkit-vs-google-health-connect, fix/health-connect-no-data, fix/healthkit-no-data, integrate/google-health-connect, integrate/healthkit, compliance/app-store-health-data-rules, test/health-connect-test-data
npm run stale: oldest verification stamps (85-86d) approaching the 90-day flag; picked the entries whose primary sources (developer.apple.com, developer.android.com) were reachable
Every claim re-checked against primary sources fetched 2026-10-02; updated moved to 2026-10-02 only on these 7. Each carries a new sources field (URL, what it backs, date) rendered as 'Sources checked', listed in the .md mirror and emitted as TechArticle citation. Factual fixes include HKQuantityType(_:) iOS 15+ (was 16+), HealthKit capability available to free accounts, Health Connect 42 record types (was 'over 50'), Health Connect on Android 9+, write-then-empty-read is a query bug not a read denial, connect-testing alpha04. Entries blocked on unreachable vendor hosts were left unstamped.
- correction/healthkit-status,/healthkit,/healthkit-errors,/datasets,/blog
healthkit-status; healthkit hub; healthkit/environment-and-hearing, healthkit/workout-activities; healthkit-errors; posts healthkit-240-types-ios-8, healthkit-newest-types-roadmap; healthkit-type-identifiers dataset
Re-check of /healthkit-status for the 241-identifier refresh: Apple's docs JSON records deprecation as a deprecatedAt version on platform entries while its deprecated flag is false on all of them, so the site's 'nothing is deprecated' claim was wrong
Generator reads deprecatedAt and stores Apple's note and rename target per row; 4 deprecated identifiers (audioExposureEvent iOS 14.0 renamed to environmentalAudioExposureEvent; dance 14.0; danceInspiredTraining 10.0; mixedMetabolicCardioTraining 11.0) plus HKError.noError (iOS 27.2, renamed unknownError). Dataset gains iosDeprecated/deprecationNote/renamedTo, and appleDocs now uses each row's own family path (the 120 non-quantity links were 404s). /healthkit-status rewritten and re-stamped 2026-10-02; group pages and posts not re-stamped, posts got dated correction notes. 5 corrections.ts entries. Package types and README document the new fields. manifest-prev.json re-rotated from the committed manifest so /datasets/diff.json compares against what is live.
- refresh/healthkit,/healthkit-identifiers,/matrix,/data,/blog,/glossary,/architecture
HealthKit corpus re-read (240 -> 241: heartRateVariabilityRMSSD, iOS 27.0); HRV claims; derived counts
Apple's docs JSON listed 241 identifiers on 2026-10-02; the new HKQuantityTypeIdentifier.heartRateVariabilityRMSSD has a declaration only (no abstract, no discussion); the two iOS 27.0 reproductive types lost their beta flags
Regenerated identifiers, datasets, kit and package data. RMSSD placed on /healthkit/vital-signs by a per-identifier override (Apple files it under a generic 'Type Properties' topic); aggregation and unit stay null. HRV copy now says Apple Watch records SDNN and iOS 27 adds an RMSSD identifier Apple has not described (as of 2026-10-02), with no claim that Apple Watch writes it. Hard-coded 240/120/'four unstated'/'beta pair' in code now derive from the dataset; dated posts got dated notes, not rewrites. updated moved to 2026-10-02 only on pages fully re-checked (vital-signs, reproductive-health, healthkit-versions, healthkit-category-values, healthkit-units); healthkit-status not re-stamped because its deprecation claims fail (the generator reads p.deprecated, Apple records deprecatedAt). Five published errors found while re-checking are logged in corrections.ts.
- expand/cookbook,/integrate
cookbook/dedupe-health-samples, cookbook/incremental-sync-anchor; 'strings you will paste' tables on integrate/healthkit and integrate/google-health-connect
/architecture has the best median position (6.3) but no runnable companion; exact developer strings are the query type that ranks
Recipes are Node-only (cookbook-ci runs node --test), tests use the architecture page's own worked example (6,000/7,500/2,500); native API names and the 30-day changes-token expiry quoted from developer.apple.com / developer.android.com fetched 2026-10-02. Permission/entitlement/Info.plist strings copied verbatim from Apple and Android docs JSON with URLs.
- retitle/integrate,/pricing,/guides,/alternatives,/migrate,/apis,/blog
nutritionix-api, terra-api, strava-api-pricing, garmin-api-pricing, ai-workout-tracking-web, terra-alternatives, adapt-to-strava-api-changes, /apis/* template, 5 post metaTitles
Only pages with attributed July queries (Nutritionix endpoint, Strava cost/free variants, 'garmin api free', PoseLandmarker constants, Terra/crypto SERP collision, brand+API navigational searches); every other page-one zero-click page left untouched as the control cohort
Treated paths listed in ops/gsc/retitled.txt; gsc-report --compare splits retitled vs control. No new facts in any title; no stamps bumped. /apis titles avoid cost/approval wording (owned by /pricing and /fix).
- linkssite-wide
items 23-32 of ops/GROWTH-OCT-2026.md
July GSC: 'fitbit error code 401' family (~345 imp at ~9.6) landed on the /fix hub, not the dedicated page; 'fitbit api deprecation' on pricing; 'movenet vs mediapipe' on the roundup; the site's own Oura PAT sentence quoted in search; 09-04 pages (/healthkit groups, /tools, /questions) at 1-2 inbound links
/fix 'Common fixes' block (neutral label) + unlisted released slugs render under 'Other'; Fitbit 401 / deprecation-status / Oura PAT / MediaPipe-vs-MoveNet / learn->data / data->HealthKit-row links; 240 identifier rows link their group page; prev/next on group pages; homepage + footer surface /healthkit, /tools, /questions, /accessibility; tool CTAs on 41 spokes by slug map; vendor pages link /apis/<id> near the top. New gates HUB-LINK, FRAGMENT-NO-PAGE, FRAGMENT-DEAD.
- refresh/fix,/integrate,/pricing,/alternatives,/compare,/migrate,/fitness-apis,/compliance,/fitbit-api-shutdown,/google-fit-shutdown,/changes,/blog
Fitbit turndown + Google Fit end-of-support copy (items 41-42 of ops/GROWTH-OCT-2026.md)
Copy still presented the reported Sept 2026 Fitbit turndown as upcoming/scheduled and called the Fit sunset 'firm'; the event hubs render elapsed time, so it would show the moment the site returns
Source fetched 2026-10-02: developer.android.com/health-and-fitness/health-connect/migration/fit (last updated 2026-09-10): Fit supported until end of 2026 (end of support, no switch-off date); Google Health API for cloud integrations, Health Connect for steps/mobile-first, Health Services for Wear OS, no replacement for Goals; Fitbit Web API -> Google Health API 'Available', no turndown date. Fitbit status stays 'reported', outcome-proof past tense. May 1 2024 sign-up closure now attributed to the 2026-07-31 check (guide no longer repeats it). changes.ts Google Fit verifiedOn -> 2026-10-02; /google-fit-shutdown UPDATED -> 2026-10-02 (every claim re-checked or attributed). No other stamps moved.
- technicalsite-wide
wave A of ops/GROWTH-OCT-2026.md: items 9-22, 44-46, 49
402 DEPLOYMENT_DISABLED since 2026-09-27; hosting audit (open image proxy, free-text /api/og, star-only redeploys, 8 GB/month uptime probe); technical audit (homepage canonical inherited by every route, .md.md alternate, 101 undated sitemap rows, 404 robots conflict)
No copy changed. HealthKit group/standalone pages now carry `updated` = the date of the data they render (HK_FETCHED_ON 2026-08-28 for Apple-derived pages) — provenance, not a bump. datePublished now comes from src/data/published.ts (first commit per entry, from git history). 16 new qa gates (126 total). July GSC baseline snapshotted to data/gsc/snapshots/2026-10-02.json before any new import.
2026-09
- expand/architecture
15 hand-drawn mechanism diagrams
item 42 of ops/GROWTH-50-UPDATES.md — the 15 architecture patterns had no visual; each diagram draws the page's own worked example, no invented figures
Every numeric value in a diagram transcribed from its page's text and re-verified (dedup 6,000/7,500/2,500; the LAX-LHR midnights; the two-device merge). Gate: all /architecture pages must carry the figure, none outside may.
- expand/fix,/build,/tools,/paths,/gates
10 HealthKit fix pages; 6 build guides (cycling, swimming, hiking, hiit, triathlon, kids); 6 tools + hub; 58-title CTR pass; reading paths; command-K palette; hub freshness; bookmarks; gates page (108 refusals, parity-asserted); GSC csv pipeline; stat cards; copy-as-markdown
items 9-21, 26-28 partial, 33, 36-39, 41, 44, 48-49 of ops/GROWTH-50-UPDATES.md
Fix pages grounded solely in Apple's error corpus (undocumented cases stated as undocumented). Every widened title carries a differentiator verified against the entry's own body; spot-checked 5/5 including a manual recount of the WHOOP scope table. Tools emit only symbols established in verified on-site content; the query generator refuses to generate for the 3 types Apple leaves unstated.
- expand/healthkit,/questions
12 group pages + hub, 5 standalone references (versions, status, category-values, units, health-connect partial), 21 question indexes + hub, /changelog, /corrections
240 identifiers and 1188 FAQs sat on single URLs; group pages are the middle layer between the flagship table and the thin-page trap, question indexes make existing answers addressable
Every identifier appears on exactly one group page (gate-asserted, 240/240); 1188 FAQ deep links resolve (gate-asserted). New healthkitWritability.ts derives 14 explicitly read-only types from the same cached Apple corpus, evidence sentences stored. Writers' numbers locked to generated fact packs.
- blog/blog
20 posts: healthkit-240-types-ios-8, healthkit-58-silent-types, healthkit-sum-or-average, healthkit-nutrition-is-biggest, healthkit-mobility-types-unused, healthkit-newest-types-roadmap, healthkit-error-that-never-fires, hrv-sdnn-vs-rmssd, ten-metrics-two-platforms, no-data-means-four-things, fitness-api-approval-gates, wearable-api-user-side-cost, free-fitness-apis-are-expensive, fitness-api-talk-to-sales, fitness-api-integration-order, react-native-health-stale, google-fit-timeline, confirmed-vs-reported, how-we-verify, building-the-healthkit-dataset
the site holds datasets nobody else has (240 HealthKit identifiers, a 24-product directory, a 10-metric verified matrix, an SDK release tracker, 13 graded ecosystem changes) and had never published a finding from any of them
Every post is anchored on a number computed from the site's own data and checked against a generated FACTS.md; a verifier rejects any numeral not in it. Blog also gained md mirrors, answers.json records, llms-full entries, FAQPage + TechArticle + speakable, and placement on 37 reference pages.
- expand/build
weight-loss-app,meal-planning-app,sleep-tracking-app,recovery-app,meditation-app,cycle-tracking-app,step-challenge-app,senior-fitness-app
the /build cluster already was the B2C app-category cluster but covered ten types; weight loss, sleep, recovery, meditation, cycle tracking, meal planning, step challenges and senior fitness were uncovered search intent with distinct API stacks
Each carries an AppStack block joined from the generated HealthKit dataset + API directory. No unsourced numbers: directional market claims carry the (reported, verify) hedge. cycle-tracking makes no contraception/fertility/accuracy claim and senior-fitness no frailty or fall-risk claim; both route regulatory questions to /compliance.
2026-08
- cluster/accessibility
12 spokes + hub
gap analysis: no developer-grade fitness accessibility content exists; Apple + Google a11y docs reachable while nutrition/file-format/framework sources are not
Cluster 21. Cites no WCAG (w3.org unreachable) and makes no legal claims by design.
- section/datasets,/badges,/embed,/compare-apis,/s
Open-data program (4 CC BY datasets + DataCatalog), embeddable widgets and badge, compiled cluster downloads, shareable picker results with a dynamic OG card, and the side-by-side API comparison tool.
- section/alerts,/digest
Change alerts (watch products, filtered sends) and the monthly digest archive generated from the changes tracker plus page review dates.
- section/apis
API directory: 24 product entity pages derived from the provenance-tracked cost model, with computed coverage and change lists.
- cluster/watch-apps
watchos-workout-app-anatomy,healthkit-on-apple-watch,apple-watch-background-execution,workoutkit-scheduled-workouts,mirroring-workouts-to-iphone,wear-os-app-anatomy,wear-os-exercise-tracking,wear-os-tiles,wear-os-phone-sync,watch-platform-differences,watch-app-battery,testing-watch-apps
source-availability research: only Apple and Google developer docs are reachable from this environment, which ruled out nutrition (USDA/OpenFoodFacts), workout file formats (GPX/Garmin FIT) and gym platforms (Mindbody); monetization failed our own cluster boundary rule; watch-app development is fitness-specific, in demand, and fully verifiable
Cluster 20, 12 spokes + hub. Primary sources fetched this session: HKWorkoutSession, HKLiveWorkoutBuilder, WKExtendedRuntimeSession, WorkoutKit, WidgetKit, Wear OS Health Services, Tiles, Data Layer, standalone-app rules, Glance. Boundary defined against /devices (watch as data source) and /engagement (re-engagement surfaces). No battery/performance/accuracy numbers anywhere, enforced by verifier over entries + rendered prose (0 hits). Bodies by 3 Opus writers; main session audited links, version strings against the fact sheet, quoted-fact survival, review-outcome claims, and FAQ collisions. Also added: empty clusters now publish nothing (hub 404s, omitted from sitemap/nav/homepage).
- cluster/engagement
push-notifications-fitness-app,live-activities-workout-tracking,widgets-and-complications,wear-os-ongoing-activity,engagement-sdks-compared,streaks-and-habit-loops,leaderboards-and-challenges,social-features-fitness-app,gamification-in-fitness-apps,camera-coaching-engagement,measuring-retention-fitness-app,ab-testing-engagement-features,engagement-metrics-that-matter,notification-fatigue-and-optout
user request: which SDKs drive engagement, how to use them, examples; no cluster covered retention, and fitness apps have engagement surfaces (long-running workouts, glanceable progress) most apps do not
Cluster 19, 14 spokes + hub. Verified primary sources fetched this session: Apple ActivityKit, WidgetKit, GameKit, UNAuthorizationOptions; Google POST_NOTIFICATIONS, Wear OS Ongoing Activity, Play Games leaderboards, Jetpack Glance. Third-party engagement vendor docs (OneSignal/Braze/Airship/CleverTap/Iterable/FCM) and Mindbody all proxy-blocked -> named nowhere and characterized nowhere; the SDK page says so explicitly. Cluster-wide ban on engagement/retention percentages, enforced by a custom verifier over the entries and re-checked against rendered prose (0 hits). camera-coaching-engagement is firstParty with body-markdown disclosure + competitor-wins. Bodies by 3 Opus writers from a fact sheet; main session audited links, bans, meta, FAQ collisions vs all site FAQs.
- fix/
responsive-audit
measured audit: header nav pushed every page 233px wider than every phone viewport; /matrix overflowed via grid/flex min-width:auto on long type identifiers
Mobile nav disclosure (closes on route change, Escape, outside tap; inline nav from md up), markdown tables get their own scroll container, global overflow-wrap for long API identifiers, min-w-0 on grid/flex items, touch targets >=24px in nav/footer/cards, viewport export with color-scheme + per-scheme theme-color. Verified 377 page/viewport combos across 13 viewports (320px-4K) x light/dark: zero overflow. Added scripts/responsive-audit.mjs + responsive.yml CI so it cannot regress.
- geo/
geo-overhaul-15
llms.txt spec names <page>.md + rel=alternate/describedby as THE discovery mechanism (we used a non-standard /md path and no link relations); Claude-SearchBot and ~45 other citation-producing agents unlisted; no structured answer index; hubs had no CollectionPage
15 programmatic GEO changes: spec-conventional .md addresses via rewrites (+hub/index mirrors, YAML front matter), rel=alternate+describedby in HTML and HTTP Link headers, robots.txt as a commented route with 58 named agents advertising every machine surface, llms.txt restructured to spec + md links, TechArticle+WebPage graph (lastReviewed on WebPage per its declared domain), glossary DefinedTerm entity graph (30 pages emit about), honest citation-vs-mentions split, answers.json structured index (214 records + FAQ deep links + first_party flags), changes.xml RSS, CollectionPage+ItemList on all 18 hubs, Organization knowsAbout+publishingPrinciples, sitemap lastmod on hubs/indexes, per-answer #faq-N anchors, 13 new GEO gates. Sources fetched this session: llms.txt spec (AnswerDotAI repo), schema.org vocabulary 29.1 (all 49 terms + domains verified), ai.robots.txt registry, Anthropic crawler docs via search, GEO survey. 14 live server checks + 1076 JSON-LD blocks parsed.
- cluster/devices
bluetooth-heart-rate-monitor,cycling-sensors-power-cadence,ftms-fitness-machine-service,treadmill-app-integration,indoor-bike-trainer-integration,rowing-machine-data,apple-watch-live-heart-rate,wear-os-health-services,ant-plus-vs-bluetooth,web-bluetooth-fitness,ios-ble-fitness-devices,testing-ble-fitness-devices
market gap: no coherent developer coverage of live device connectivity (BLE HR, FTMS, watch-as-sensor); existing content is hobbyist repos and forum posts; zero overlap with our 17 clusters
Cluster 18 Connected Devices: 12 spokes + hub. UUIDs verified against Bluetooth SIG assigned-numbers registry (official bitbucket); Core Bluetooth + HKWorkoutSession via Apple docs JSON API; Health Services via developer.android.com; Web Bluetooth matrix via caniuse dataset; ANT+ wind-down graded reported (official page proxy-blocked) + added to /changes tracker. Bodies by 2 Opus subagents from a session-verified fact sheet; main session audited both batches programmatically (UUID whitelist, link whitelist, hedging checks, cross-batch FAQ dedup) and spot-read prose. Wired: registry, seed 17, sitemap, search-index, llms surfaces, footer, homepage.
- pillar/
no-code-fitness-app
user-requested flagship: no-code + APIs worked example centered on KinesteX; no owning page for the no-code fitness app query family
Hand-built first-party flagship /no-code-fitness-app: HomeForm worked example, three integration patterns (product-in-an-embed, hosted handshake, key-in-header), KinesteX WebView/iframe embed + Terra Connect widget + Nutritionix natural-language + ExerciseDB + scheduled LLM recap; disclosure above fold, competitor-wins (Sency/QuickPose/MediaPipe), four honest no-code seams named; FlutterFlow REST docs fetched this session (official GitHub docs repo), all KinesteX/Terra/Nutritionix/ExerciseDB claims reused from adversarially-reviewed on-site pages; wired into sitemap, search-index, footer, /ai-fitness-app related
- enhance/
motion-system
static site felt generic next to dev-tool competitors; animation is the standard trust cue for API products
Zero-dependency motion system: ApiTerminal hero typewriter (3 scenes, SSR renders full scene), Reveal scroll-reveal (server HTML never hidden), StatCounter, ClusterHero packet-flow + hub pulse on every content page, nav underline, gradient pan, upcoming-deadline ping on /changes; prefers-reduced-motion global kill switch; 15 Playwright checks across normal/reduced-motion/no-JS contexts, run twice
- revamp/
homepage
landing page predated the flagship, tools, report, cookbook — sold a site that no longer exists; conversion goal is the Decision Kit signup
Full homepage rewrite: conversion hero with live-derived stats, start-where-you-are paths, 12 popular API/SDK tiles, 4-tool row, 17-cluster grid with counts, honest trust section with funding disclosure, report+dataset band, deadline band from changes.ts, Decision Kit newsletter block; Header nav → Fitness APIs/Picker/Cookbook/Changes; site.ts title/description/tagline repositioned
- spoke/cookbook
refresh-rotation,webhook-receiver,rate-limit-fetcher,day-boundary-rollup,rep-counter,backfill-checkpointer
zero runnable code on a 230-page developer site
New cluster 17: 6 dependency-free recipes, 72 node:test tests run by main session (72/72), byte-verbatim page/file check enforced, cookbook-ci.yml runs on every change; llms surfaces + registry + sitemap wired
- backlogfunnel
decision-kit
signups had no incentive and no deliverable
public/kit bundle (2 new checklists + scorecard + dataset, CC BY) unlocked on signup success screen; works without Resend
- spokehub
changes
the subscribe promise had no public surface; recurring-freshness GEO signal
Changes & Deadlines tracker seeded with 12 corpus-verified events + 3 watch items; routine appends via DAILY-CONTENT 2d
- spokewave20-batch
menstrual-cycle-api,blood-glucose-api,blood-pressure-api,respiratory-rate-api,strava-api-401-unauthorized,healthkit-background-delivery-not-working,polar-api,what-is-rpe,apple-watch-vs-garmin,rook-vs-spike,usda-fooddata-central-vs-open-food-facts,fitness-api-free-tiers-compared,webhooks-vs-polling-for-fitness-data,what-are-oauth-scopes,structured-output-for-workout-plans,caching-fitness-api-responses
doubling program day 1 (ops/EXPANSION-MAP.md tier 1)
16 pages, 8 Opus writers, every page fact-verified in main session; global FAQ check 0 collisions across 1001 keys; gates green first run
- spoke/guides
evaluate-motion-sdks
no evaluation protocol exists in the category; funnel play, disclosed
Bake-off protocol + scorecard CSV; firstParty banner; scored criteria exclude anything shaped like our product; Apple claims verified against live docs this session
- spokehub
state-of-fitness-apis-2026
no citable original research exists in the niche; LLM-citation play
Annual access-structure report, all numbers computed from dataset (5/5 enumeration diffs exact), CC BY 4.0 JSON+CSV, Dataset JSON-LD, disclosure aside up top
- spokehub
fitbit-api-shutdown
migrate/fitbit-web-api-to-google-health at pos 8 pre-spike; reported ~Sep 2026 deadline
Event hub, on-site synthesis only, confirmed-vs-reported table, all dates hedged; 8/8 claim traces + 4/4 link checks passed
- spokehub
ai-fitness-app
'ai workout app development'/'build an ai gym app' theme ~40i at pos 40-90, no owning page
Flagship decision-map hub, 3.9k words, 99 verified internal links, synthesis-only sourcing (7/7 spot-checks passed), 2 KinesteX mentions with verbatim disclosure
- backlogtool
cost-planner
/pricing cluster = highest CTR on site
Cost-structure planner, zero dollar figures by design, every field provenance-traced to published pages
- spoke/compare
apple-watch-vs-whoop
aggregator/wearable H2H = best CTR pattern; backlog top comparison
Apple side live-verified; WHOOP side strictly reuses site-verified facts
- spoke/fix
healthkit-authorization-denied
backlog: denied-vs-empty opacity
All Apple claims fetched this session from developer.apple.com JSON docs; limited-authorization + guest-mode edge cases
- spoke/fix
fitbit-error-code-401
'fitbit error code 401' family 330i pos~9 CTR 0%
Exact-error-string page; facts reused from integrate/fitbit-api + fix/401 only; generic 401 spoke retitled provider-neutral to stop cannibalization
- meta-fix/fix
(pillar)
'fitbit error code 401' 330i pos~9 CTR 0% on /fix
Pillar desc now answers the exact query; added unique pillar FAQ; GSC snapshot refreshed 2026-07-06..2026-08-02
- spoke/compare+/alternatives
kinestex-vs-sency,kinestex-vs-quickpose,kinestex-vs-mediapipe,kinestex-alternatives
funnel: picker had zero KinesteX routing
Interactive: first-party vs. cluster, disclosed + adversarially reviewed; firstParty plumbing + FIRSTPARTY qa gate
- spoke/fix
oura-personal-access-token-deprecated
verbatim PAT-deprecation query 9i pos8
Interactive: exact-error-string pattern
- spoke/motion
mediapipe-vs-movenet
query 'movenet vs mediapipe' pos~7
Interactive: 3 pose-model pages (also mediapipe-pose-landmarker-models, apple-vision-body-pose)
- spokeinteractive
glossary
backlog
Routine died mid-write; interactive session completed the 32-term glossary + DefinedTermSet