{
  "version": 1,
  "generatedAt": "2026-08-16",
  "race": {
    "slug": "ironman-frankfurt",
    "name": "IRONMAN Frankfurt (European Championship)",
    "editionId": "ironman-frankfurt-2027",
    "date": "2027-06-27",
    "course": {
      "verifiedAt": "2026-08-13",
      "source": "https://www.ironman.com/races/im-frankfurt/course",
      "swim": {
        "laps": 2,
        "distance": "3.8 km",
        "water": "Lake, fresh",
        "detail": "Two laps of the Langener Waldsee, a lake inside the city forest, split by a short Australian exit. You run out onto the sand and straight back in, which spikes your heart rate at exactly the point most people are already breathing too hard. Rehearse it before race day."
      },
      "bike": {
        "laps": 2,
        "distance": "180 km",
        "detail": "Two rolling loops mixing fast flat sections with real climbs, out through the villages and back towards the Mainhattan skyline. Rolling rather than brutal, which makes it a fast day if you pace the hills honestly and a very long one if you do not."
      },
      "run": {
        "laps": 4,
        "distance": "42.2 km",
        "detail": "Four flat laps along the banks of the Main under the skyline, finishing at the Römer. One of the most spectator-dense marathons in the calendar, which is a gift at 30km and a trap at 5km, because the noise will happily carry you out at a pace you cannot hold."
      },
      "weather": {
        "airHighC": 33,
        "airLowC": 20,
        "waterAvgC": 23
      },
      "unverified": [
        "bike elevation gain",
        "cut-off times",
        "aid station spacing",
        "water temperature history",
        "bike and run maps (no usable official GPX)"
      ]
    },
    "intelligence": {
      "slug": "ironman-frankfurt",
      "name": "IRONMAN Frankfurt (European Championship)",
      "editionId": "ironman-frankfurt-2027",
      "updatedAt": "2026-08-16",
      "course": {
        "swim": {
          "value": {
            "distanceKm": 3.8,
            "gainM": null,
            "reliefM": 0,
            "points": 7
          },
          "evidenceType": "gpx_derived",
          "status": "observed",
          "sampleSize": 7,
          "confidence": "medium",
          "source": "https://www.ironman.com/races/im-frankfurt/course",
          "verifiedAt": "2026-08-13",
          "method": "haversine distance; positive elevation deltas; source GPX"
        },
        "bike": null,
        "run": null
      },
      "climate": {
        "value": {
          "airHighC": 33,
          "airLowC": 20,
          "waterAvgC": 23
        },
        "evidenceType": "official",
        "status": "observed",
        "sampleSize": null,
        "confidence": "high",
        "source": "https://www.ironman.com/races/im-frankfurt/course",
        "verifiedAt": "2026-08-13"
      },
      "travel": {
        "value": {
          "nearestAirport": "Frankfurt Airport (FRA)",
          "airportDistanceKm": 12,
          "arrival": "The organiser lists S8 and S9 rail services from the airport to central Frankfurt in about 15 minutes.",
          "carNeeded": false,
          "spectatorMobility": "The swim starts at Langener Waldsee while the run and finish are central; official race transport and current access instructions remain decisive.",
          "accommodationPressure": "high",
          "source": "https://www.ironman.com/races/im-frankfurt/directions",
          "verifiedAt": "2026-08-16",
          "evidenceType": "official"
        },
        "evidenceType": "official",
        "status": "observed",
        "sampleSize": null,
        "confidence": "high",
        "source": "https://www.ironman.com/races/im-frankfurt/directions",
        "verifiedAt": "2026-08-16"
      },
      "results": {
        "value": {
          "status": "awaiting_aggregate",
          "sampleSize": 0
        },
        "evidenceType": "official",
        "status": "pending",
        "sampleSize": 0,
        "confidence": "pending",
        "source": "https://www.ironman.com/races/im-frankfurt/results",
        "verifiedAt": null,
        "available": false,
        "minimumSample": 50
      },
      "modelled": {
        "available": true,
        "label": "Modelled athlete fit"
      },
      "observed": {
        "available": false,
        "label": "Observed course performance"
      },
      "community": {
        "available": false,
        "label": "Community rating"
      }
    }
  }
}
