blue and yellow line illustration

Apps

Sync Garmin, Whoop, Strava into Apple Health — 4 steps

Garmin, Whoop and Strava doubling your workouts in Apple Health? Here's the 4-step connection order that kills duplicates and inflated calorie counts.

TLDR Apple Health is your hub; Garmin and Whoop write to it for different data types; Strava should read from it, not write to it. The critical move is controlling write permissions per-app — not just toggling connections on. Do that and the duplicate workout entries, double-counted calories, and contradictory HRV numbers disappear.

Running a Garmin watch, a Whoop strap, and Strava on your iPhone sounds like having more data. In practice it usually means triple-counted calories, two copies of your morning run, and a heart rate average that no longer resembles reality. The problem isn't the wearables. It's that nobody explains the correct connection order, or which app should own each metric. I've been testing this exact four-app stack — Garmin Forerunner 965, Whoop 4.0, Strava, and Apple Health — on an iPhone 15 Pro running iOS 18.4. What follows is the setup that actually produces clean, non-duplicated data as of June 2026.

Why this ecosystem creates messy data by default

Apple Health stores over 70 distinct data categories. When multiple apps hold simultaneous write permission to the same category — "Workouts," "Active Energy," "Heart Rate" — it doesn't merge the records intelligently. It stacks them. A 45-minute Garmin run, plus the same run auto-imported by Strava, plus an auto-detected strain event from Whoop's motion algorithm adds up to 135 minutes of movement that Apple Health records as three separate events. Your weekly training load becomes fiction.

This is a deliberate HealthKit design decision, not a bug. Apple built the framework to be additive: any app with write permission adds a record, and the system preserves all sources so you can audit them. Most users never audit anything, though. They flip the connection toggles on and assume the platform handles conflicts automatically. It doesn't.

The deeper issue is structural. Every platform in this stack has a financial incentive to be your primary app. Garmin Connect wants to own your fitness picture. Strava — which hit 125 million registered users by January 2026 — wants to be your social activity layer. Whoop charges $239/year specifically because it wants to be your daily recovery operating system. None of them defaults to "just be a spoke in someone else's wheel." You have to configure that deliberately.

The fix is conceptually simple: designate Apple Health as the hub, assign exactly one write-source per data type, and treat everything else as a reader. Apple Health earns this role on iPhone because it's local-first, not monetized around your health data, and accepted as an input by all three platforms.

iPhone screen showing Apple Health Summary dashboard with activity rings, heart rate, and sleep data sections

Step 1 — Audit and clean Apple Health before connecting anything

Before you change a single permission, find out how bad the current state is. Open Health → Browse → Workouts → Show All Data and look at the source column next to each entry. If you see the same workout date logged by two different sources — "Strava" and "Garmin Connect," for instance — you already have live duplicates. Fix those before adding more connections.

To see what currently writes to Health: Settings → Privacy & Security → Health → [App name]. Tap each app to see read vs. write permissions granularly. Work through every app in that list and assign it a mental role: writer or reader. One writer per data type, full stop.

Delete duplicate historical workouts manually: tap the entry, scroll to the bottom, hit Delete Workout. It's tedious. Expect 10–20 minutes of cleanup if you've been running this stack for more than a few months without managing permissions. There's no bulk-delete by source in Apple Health's native UI as of iOS 18.4 — third-party apps like Health Auto Export (free tier, iOS) can help you identify and batch-flag duplicates faster, but the actual deletion still happens one entry at a time in Apple Health.

Warning Connecting a new app to Apple Health and granting it write access to "Workouts" or "Active Energy" without first revoking the same write permission in other apps is the single most common cause of inflated weekly calorie totals. Check permissions first, connect second — always.

I noticed during testing that Whoop's defaults are particularly aggressive on first connection. It requests write access to eight categories simultaneously, including Workouts and Active Energy, and the setup screen frames each toggle as a feature rather than a potential conflict. Turn those off before anything else.

Step 2 — Garmin Connect: your workout and VO2 Max source of truth

Garmin Connect should own workouts, active energy, VO2 Max estimates, GPS-based routes, steps, and standing time in Apple Health. Garmin's ecosystem is mature: as of firmware 18.20 on the Forerunner 965 (released March 2026), the Apple Health sync fires automatically within a few minutes of a completed workout sync over Wi-Fi — no manual export required.

Connecting Garmin to Apple Health

  1. Open Garmin Connect on iPhone.
  2. Tap the menu (top left) → Settings → Connected Apps → Apple Health.
  3. Enable write access for: Workouts, Heart Rate, VO2 Max, Active Energy, Steps, Distance.
  4. Disable write access for: Sleep (if Whoop is your primary sleep tracker) and Resting Heart Rate (if you want Whoop's continuous overnight measurement to own that metric).

That fourth point feels counterintuitive — disabling a Garmin write sounds like losing data. You're not. The data stays in Garmin Connect's own timeline in full detail. You're only preventing it from adding a second conflicting version to Apple Health's Resting Heart Rate or Sleep categories, where it would contradict Whoop's readings without either one being obviously correct.

Garmin's Strava connection lives separately

Garmin has a direct partner integration with Strava through Garmin Connect's Connected Apps menu. When active, every Garmin workout pushes directly to Strava via API — no Apple Health involvement at all. Keep this enabled. This is what lets Strava display your full GPS route and pace data. The critical implication: because Strava receives workout data directly from Garmin, there's no reason for Strava to also write those workouts back to Apple Health. That's exactly where the duplicate originates.

Info If Garmin Connect's Apple Health sync stops firing after an iOS update, check Settings → General → Background App Refresh and confirm Garmin Connect is enabled. iOS 18's battery management occasionally disables background refresh for apps not opened in 72+ hours. Opening the app manually once resets the refresh cycle.

For athletes also running an Oura ring alongside this three-app stack, the complexity compounds further — the detailed guide to syncing Garmin, Oura, and Whoop into a single Apple Health view covers how to handle three simultaneous HRV sources without data collisions.

Step 3 — Whoop: recovery writes only, workout writes off

Whoop 4.0 excels at recovery metrics: HRV measured as continuous RMSSD, resting heart rate, respiratory rate, and sleep staging with high temporal resolution. It is not a GPS workout recorder. That distinction is everything when it comes to Apple Health configuration.

What Whoop should and shouldn't write

Data Type Write to Apple Health Reason
HRV (RMSSD) ✅ Yes Whoop's overnight sampling is more granular than Garmin's spot-check
Resting Heart Rate ✅ Yes Continuous overnight measurement, more accurate than wrist optical in motion
Sleep Stages ✅ Yes Disable Garmin sleep write if you enable this
Respiratory Rate ✅ Yes Garmin doesn't reliably track this
Workouts / Strain Events ❌ No Conflicts with Garmin GPS workout records
Active Energy ❌ No Garmin's GPS-based calculation is more accurate for outdoor sports

Configuring Whoop permissions

In the Whoop app (version 8.12.0 on iOS): Profile → App Integrations → Apple Health → Manage. Toggle off "Workouts" and "Active Energy" immediately. Toggle on HRV, Resting Heart Rate, Respiratory Rate, Sleep, and Oxygen Saturation.

Whoop's strain detection is genuinely impressive for flagging effort across a full day — it catches elevated cardiovascular load from a stressful meeting or heat exposure that Garmin completely misses. But its workout boundary detection doesn't align precisely with GPS segment starts and stops, so the "workout" it logs is rarely the same start-time, end-time, or calorie total as the Garmin record of the same session. You don't want both sitting in Apple Health's Workouts category.

If the $239/year Whoop membership cost is also up for reconsideration, there's a solid analysis of free tools that replicate Whoop's core Apple Health data outputs worth reading before renewal time.

Whoop app screen showing daily recovery score, HRV, and strain metrics on iPhone

Step 4 — Strava: connect it as a reader, not a writer

Here's the counterintuitive part of this setup: Strava should not write to Apple Health. It should read from it.

Strava's Apple Health integration offers write access to Workouts. If Garmin is already writing workouts to Apple Health and Garmin is pushing those same workouts directly to Strava via the partner integration, then enabling Strava → Apple Health write access creates a clean duplicate. Every activity arrives in Apple Health twice: once from Garmin, once from Strava importing the same Garmin session.

The correct Strava configuration

  1. Open Strava → You → Settings → Apps, Features & Devices.
  2. Under Health, tap Connect (or manage if already connected).
  3. Disable: Write access to Workouts, Active Energy, Distance.
  4. Enable: Read access to weight and body measurements if you log those in Health and want them visible in Strava's dashboard.

Strava should remain fully enabled for everything else — its segment analysis, route mapping, social feed, and relative effort scoring are all genuinely useful and don't involve Apple Health writes. The goal is specifically to prevent it from acting as a second workout-writing source to HealthKit.

Tip If you ever manually record a run in Strava directly (using Strava's GPS tracker instead of Garmin), that workout won't come from Garmin and won't be in Apple Health unless you explicitly grant Strava write access for that specific activity. In that edge case, grant write permission temporarily, confirm the single workout appears in Health, then disable write again.

For a broader look at which paid Strava features are worth keeping in a multi-app stack, the breakdown of free health tracking tiers you can safely drop covers the subscription math in detail.

Data ownership map and troubleshooting common breaks

After the four steps above, here's the target permission state. Use this table as a reference whenever you add a new fitness app to the stack.

Data Type Garmin Connect Whoop Strava Notes
GPS Workouts ✅ Write ❌ Off ❌ Off One source only
Active Energy ✅ Write ❌ Off ❌ Off GPS more accurate
VO2 Max ✅ Write ❌ N/A ❌ N/A Garmin-only metric
Steps / Distance ✅ Write ❌ Off ❌ Off
HRV (RMSSD) ❌ Off ✅ Write ❌ N/A Whoop more granular
Resting Heart Rate ❌ Off ✅ Write ❌ N/A Overnight measurement
Sleep Stages Optional* ✅ Write ❌ N/A *Only if not wearing Whoop overnight
Respiratory Rate ❌ Off ✅ Write ❌ N/A
Routes / Activity Feed Reads Reads Receives from Garmin directly Strava gets data via partner API

*The "Optional" for Garmin sleep is real: if you regularly sleep without your Whoop strap — common in summer, or when traveling without charging bandwidth — enable Garmin's sleep write temporarily. Just not both simultaneously. Apple Health averages certain category readings and sums others, and either outcome is inaccurate when the data represents the same night from two devices.

Three breaks that come up after clean setup:

Syncs that stop firing. Both Garmin Connect and Whoop require background app refresh to push to Apple Health. After major iOS updates, check Settings → General → Background App Refresh and ensure both apps are listed and enabled.

Whoop and Garmin sleep records colliding. Symptom: Apple Health's "Time in Bed" reads longer than either device actually recorded. Cause: both apps are writing sleep data simultaneously. Fix: revisit Step 3 and disable Garmin sleep writes.

Post-workout data not appearing in Apple Health. Almost always a Garmin sync delay, not a permissions issue. Check Garmin Connect → Profile → Connected Apps → Apple Health — the last sync timestamp is visible there. If it's stale, open the app and trigger a manual sync by pulling down on the activity feed.

The HRV duplicate scenario specifically — where multiple wearables write RMSSD readings from the same night — is one of the most common data quality problems in a multi-device stack. The piece on fixing HRV duplicates when three wearables all report to Apple Health goes deeper on the HealthKit behavior behind it.

Garmin Forerunner 965 watch face showing heart rate, distance, and pace during a run

Quick checklist — 8 steps to clean data

Work through these in order. Each step depends on the previous one being correct.

  1. Audit existing Health permissions: Settings → Privacy & Security → Health — list every app with write access to Workouts and Active Energy. Note them before changing anything.
  2. Delete historical duplicates: Health → Browse → Workouts → Show All Data, identify entries where two sources logged the same session on the same date, delete the non-primary source's entry.
  3. Configure Garmin Connect: enable Write for Workouts, Active Energy, VO2 Max, Steps, Heart Rate. Disable Write for Sleep and Resting Heart Rate (unless Whoop is not your overnight tracker).
  4. Configure Whoop: disable Write for Workouts and Active Energy. Enable Write for HRV, Resting Heart Rate, Respiratory Rate, Sleep, and SpO2.
  5. Configure Strava: disable all Write access to Apple Health. Confirm the Garmin → Strava partner connection is active in Garmin Connect → Settings → Connected Apps → Strava.
  6. Test with one workout: record an activity on your Garmin, let it sync over Wi-Fi, open Apple Health and confirm the workout appears exactly once with Garmin Connect as the source.
  7. Check Background App Refresh for both Garmin Connect and Whoop: Settings → General → Background App Refresh.
  8. Set a calendar reminder for three months out to re-audit permissions — both Garmin Connect and Whoop have reset write permissions after major app updates in the past, and it's easier to catch this early than to untangle months of duplicate data later.

Sources & further reading

  • Apple Support (support.apple.com) — Official documentation on managing Health app data sources and permissions in iOS 18; explains how HealthKit handles multiple simultaneous write sources and how to view per-source data history.
  • Garmin Support Center (support.garmin.com) — Device-specific guides for Garmin Connect's Apple Health and Strava partner integrations; includes firmware-version context for Forerunner, Fenix, and Venu series.
  • Whoop Help Center (support.whoop.com) — Covers the Apple Health integration toggles available in Whoop app version 8.x, including which categories each permission controls and what happens when Whoop detects a strain event vs. a manually logged workout.
  • Strava Support (support.strava.com) — Documentation on Strava's Health app connection settings and the Garmin direct-partner integration; explains why activities can appear from multiple pathways and how to manage that.
  • EFF (Electronic Frontier Foundation) — Background on what granting third-party fitness apps write access to HealthKit actually means from a privacy standpoint; useful context if you're deciding how many integrations to enable on a platform that aggregates personal biometric data.