Skip to content
AF
Python libraries

Python libraries for fitness APIs

7 packages (7 PyPI) · 2 comparisons · registries read 2026-10-03 · README notes checked 2026-10-03

The 7 Python packages this site tracks are clients for fitness vendors' web APIs — Garmin Connect, the Strava API, the Oura API, the Fitbit Web API and the Withings API — for scripts, back ends and personal data exports; none of them reads Apple HealthKit or Android Health Connect, which apps read on the device. For Garmin Connect, garminconnect has handled sign-in itself since version 0.3.0, and garth, which it used before, says in its README that it is deprecated because Garmin changed its auth flow and new logins no longer work. oura-ring documents the OAuth2 flow new Oura integrations need, and python-fitbit's latest release dates from May 2019, for the Fitbit Web API that Google is retiring in favour of the Google Health API.

Every Python package on this list

Read from the registries and repositories by a script, not typed by hand. Release dates are shown as dates, with the gap to our read, rather than as a verdict on whether a project is alive; what each README says about its own status is under How to choose and on each package page.

PackageConnects toRepositoryLatest releaseLicenceRegistry statusLast commit
garminconnectPyPI · PythonGarmin Connectcyberjunky/python-garminconnect0.3.17, 2026-09-294 days before our readMIT—2026-09-29default branch, read 2026-10-03
garthPyPI · PythonGarmin Connectmatin/garth0.8.0, 2026-03-28189 days before our readMITInactive (PyPI classifier)2026-03-28default branch, read 2026-10-03
stravalibPyPI · PythonStrava APIstravalib/stravalib2.6.0, 2026-08-2737 days before our readApache-2.0—2026-09-22default branch, read 2026-10-03
oura-ringPyPI · PythonOura APIhedgertronic/oura-ring1.0.1, 2026-06-22103 days before our readMIT—2026-07-07default branch, read 2026-10-03
ouraPyPI · PythonOura APIturing-complet/python-ouraring1.3.0, 2024-04-23893 days before our readMIT License—2024-04-23default branch, read 2026-10-03
fitbitPyPI · PythonFitbit Web APIorcasgit/python-fitbit0.3.1, 2019-05-242,689 days before our readApache 2.0—2019-08-12default branch, read 2026-10-03
withings-apiPyPI · PythonWithings APIvangorra/python_withings_api2.4.0, 2022-02-081,698 days before our readMIT—2022-03-05default branch, read 2026-10-03

Versions, dates and licences read from PyPI on 2026-10-03; last-commit dates read by git on 2026-10-03; archive flags from the GitHub API, read 2026-10-03. This data records no download counts, so the table has no downloads column. Repository is the GitHub owner and name as GitHub reports it, which is how the data names a maintainer.

How to choose: our reading

Judgement, labelled as such, drawn only from the README notes and registry facts on each package’s page and from the comparisons. No package is ranked first.

Garmin Connect

garminconnect · garth

  • Starting fresh: garth's own README says new logins do not work, which settles it.
  • Running garth today on a saved session: it may keep working until the OAuth1 token expires; schedule the move before then rather than after.
  • Moving to garminconnect: its README says garth-era token files cannot be converted, so budget for one interactive login (with MFA if the account uses it).
  • Building for other people's Garmin data rather than your own: both are unofficial clients; Garmin's official developer program is the route for that.

garminconnect vs garth: side by side →

Strava

stravalib

  • stravalib wraps the Strava V3 API rather than replacing it, so you still register a Strava app first; its README's tutorials start there, then cover refreshing the token and reading activities and athlete data.
  • Its README lists Python 3.11 or later, and its PyPI metadata declares requires_python >=3.11.

Oura

oura-ring · oura

  • New integration: it has to use OAuth2 (no new personal access tokens), and oura-ring is the one whose README documents that flow end to end.
  • Existing script on oura with a previously issued token: it may keep working, but neither the token nor the client's v2 OAuth path is something to build new work on.
  • Either way, both wrap the same Oura API, so Oura's app registration and scopes apply identically.

oura-ring vs oura (python-ouraring): side by side →

Fitbit

fitbit

  • python-fitbit, published on PyPI as fitbit, was written for the legacy Fitbit Web API. Its latest release dates from May 2019, and its README still lists Python 2.7+.
  • Google's Fit migration guide lists the Google Health API as the recommended path for Fitbit Web API integrations, and nothing in python-fitbit's README mentions it.

Withings

withings-api

  • withings-api authenticates with OAuth 2.0 using a client ID and consumer secret from a Withings developer application, and its README shows a demo mode for testing against Withings' demo data.
  • Its latest release, 2.4.0, dates from February 2022, and its PyPI metadata declares Python >=3.6,<4.0: an author's declaration rather than a test result, so test it on the interpreter you deploy.

Platform rules these packages inherit

A wrapper inherits every rule of the API it calls. Each rule below is stated, with its sources, on the page it links.

Side-by-side comparisons

The APIs underneath

The pages these packages’ own pages point to for the API each one wraps.

Questions

Which fitness APIs have a Python client on this site's list?
Five: Garmin Connect (garminconnect and garth), the Strava API (stravalib), the Oura API (oura-ring and oura), the Fitbit Web API (fitbit) and the Withings API (withings-api). Each package wraps one vendor's web API, according to its registry description, and none reads Apple HealthKit or Android Health Connect.
Can I read Apple Health or Health Connect data from Python?
Not through a web API. HealthKit data lives only on Apple devices and Apple's setup has no tokens or server endpoint, and Health Connect is an on-device Android store, not an OAuth cloud API, so neither offers an endpoint for a Python client to call. The Python packages this site tracks call vendor web APIs instead: Garmin Connect, the Strava API, the Oura API, the Fitbit Web API and the Withings API.
Which Python fitness API clients are deprecated or looking for a maintainer?
garth: its README says it is deprecated and no longer maintained, and its PyPI classifier reads "Development Status :: 7 - Inactive". oura, the python-ouraring project: its README asks for someone to take over maintenance. Two more had published nothing newer at our registry read: fitbit (python-fitbit), last released in May 2019, and withings-api, in February 2022.
How do the Python fitness API clients sign in?
Each in its vendor's way, according to its README. garminconnect logs in with the user's own Garmin credentials through Garmin's mobile sign-in flow, with an MFA callback, and stores the tokens locally. stravalib authenticates against a Strava app you register and keeps the token current. oura-ring wraps Oura's OAuth2 authorization-code flow, while the older oura client's examples start from a personal access token. withings-api uses OAuth 2.0 with a client ID and consumer secret from a Withings developer application, and python-fitbit is built on requests-oauthlib. garth's README says new logins no longer work.

Registry facts read by scripts/fetch-libraries.mjs on 2026-10-03; README notes checked on 2026-10-03. README quotes and notes are each project's own statements; the selection, grouping and reading are AIFitnessAPI's, which publishes none of these packages.

← All health and fitness libraries