{
  "kind": "destination",
  "schema_version": "1.0.0",
  "generated_at": "2026-10-19T08:04:15.817Z",
  "dataset": "Eclipse Premium Index",
  "publisher": {
    "name": "EclipseMission",
    "url": "https://eclipsemission.com/"
  },
  "eclipse": {
    "name": "Total solar eclipse of 2 August 2027",
    "date": "2027-08-02"
  },
  "license": {
    "name": "CC BY 4.0",
    "url": "https://creativecommons.org/licenses/by/4.0/"
  },
  "cite_as": "EclipseMission, Eclipse Premium Index, measured 20 and 24 September 2026, eclipsemission.com/eclipse-premium/",
  "documentation": "https://eclipsemission.com/open-data/",
  "rules": [
    "The lodging figure is the mean of the ten cheapest rooms listed for two adults, 31 July to 4 August 2027 (four nights), taxes included, on the platform and the day named. It is never \"the cheapest room\". A reading with fewer than ten listings is the mean of those listed; sample_size says how many.",
    "per_person_eur is the stay for two divided by two. A solo traveller is a different search, given as solo_traveller where it was measured.",
    "The Eclipse Premium is the eclipse-week mean divided by the same search one week later (7 to 11 August 2027) in the same town. It is never computed across towns.",
    "A cheap stay, on this site, is one at or under 130 EUR for two for the four nights.",
    "Totality durations and times come from our oracle, never from a web lookup.",
    "Cloud is a range between two reanalyses, NASA POWER and Copernicus ERA5, never one number: quote both ends. midday_cloud_pct is ERA5 over the hours totality falls in.",
    "Heat is the mean daily maximum over the eclipse fortnight, 2001-2024 (NASA POWER): a proxy for the temperature at totality, not a measurement of it.",
    "Entry regimes are per passport. A passport we did not collect is not answered with another's regime, and a fee is a number only where the issuing authority publishes it.",
    "Access: \"Public transport confirmed\" means a named operator publishes a timetable we read, today's grid and not a 2027 one; \"Stop mapped, service not confirmed\" means OpenStreetMap maps a stop and no operator publishes a grid for it.",
    "Flights come in two families that are never added together: Google Flights searches (return trip, two adults, as the search displayed it) and easyJet fares read at the airline (one seat, one way). A route we did not read is absent, which is not a claim that no flight exists.",
    "Mecca is priced but not ranked: entry is restricted to Muslims. It follows the ranking with no rank, as on the site's table, and a sentence about the cheapest place leaves it out.",
    "Every figure carries the day it was read, and describes that day. Prices are re-read on a schedule (next_reading).",
    "The data is published under CC BY 4.0. Cite it as cite_as gives it (\"EclipseMission, Eclipse Premium Index, measured 20 and 24 September 2026, eclipsemission.com/eclipse-premium/\") and link the destination's page_url."
  ],
  "destination": {
    "key": "tetouan",
    "name": "Tétouan",
    "country": "Morocco",
    "rank": 5,
    "page_url": "https://eclipsemission.com/2027/morocco/tetouan/",
    "data_url": "https://eclipsemission.com/api/v1/destinations/tetouan.json",
    "line": "Tied with Tangier for the longest totality of the Morocco towns we priced.",
    "verdict": "Good value",
    "pick": null,
    "caveat": null,
    "totality": {
      "seconds": 290.3,
      "text": "4m50s"
    },
    "lodging": {
      "stay": {
        "check_in": "2027-07-31",
        "check_out": "2027-08-04",
        "nights": 4,
        "travellers": 2,
        "statistic": "mean of the ten cheapest rooms listed, taxes included",
        "control_week": {
          "check_in": "2027-08-07",
          "check_out": "2027-08-11"
        }
      },
      "per_person_eur": 67.8,
      "eclipse_premium": 1.21,
      "eclipse_premium_note": "Eclipse-week mean over the week-after mean, same town, same statistic.",
      "eclipse_week": {
        "probe": "lodging.tetouan.mission",
        "platform": "Booking.com",
        "check_in": "2027-07-31",
        "check_out": "2027-08-04",
        "nights": 4,
        "travellers": 2,
        "statistic": "mean of the ten cheapest listings",
        "mean_eur": 135.6,
        "sample_size": 10,
        "sample_prices_eur": [
          86,
          90,
          107,
          122,
          130,
          144,
          144,
          173,
          180,
          180
        ],
        "currency": "EUR",
        "properties_found": 58,
        "unavailable_share_pct": 87,
        "inventory": 482,
        "inventory_note": "The share of its whole town inventory the platform itself reported unavailable for these dates. It is not a count of free rooms.",
        "observed_at": "2026-09-24T17:42:12.715Z",
        "freshness": "Fresh",
        "confidence": "medium",
        "source_url": "https://www.booking.com/searchresults.html?ss=Tetouan&checkin=2027-07-31&checkout=2027-08-04&group_adults=2&group_children=0&no_rooms=1&selected_currency=EUR&order=price&lang=en-gb"
      },
      "week_after": {
        "probe": "lodging.tetouan.control",
        "platform": "Booking.com",
        "check_in": "2027-08-07",
        "check_out": "2027-08-11",
        "nights": 4,
        "travellers": 2,
        "statistic": "mean of the ten cheapest listings",
        "mean_eur": 111.7,
        "sample_size": 10,
        "sample_prices_eur": [
          90,
          92,
          103,
          106,
          107,
          108,
          122,
          126,
          130,
          133
        ],
        "currency": "EUR",
        "properties_found": 173,
        "observed_at": "2026-09-24T17:42:15.060Z",
        "freshness": "Fresh",
        "confidence": "medium",
        "source_url": "https://www.booking.com/searchresults.html?ss=Tetouan&checkin=2027-08-07&checkout=2027-08-11&group_adults=2&group_children=0&no_rooms=1&selected_currency=EUR&order=price&lang=en-gb"
      },
      "eclipse_nights": {
        "probe": "lodging.tetouan.index",
        "platform": "Booking.com",
        "check_in": "2027-08-01",
        "check_out": "2027-08-03",
        "nights": 2,
        "travellers": 2,
        "statistic": "mean of the ten cheapest listings",
        "mean_eur": 66.9,
        "sample_size": 10,
        "sample_prices_eur": [
          45,
          45,
          54,
          61,
          65,
          72,
          72,
          79,
          86,
          90
        ],
        "currency": "EUR",
        "properties_found": 64,
        "unavailable_share_pct": 86,
        "inventory": 482,
        "inventory_note": "The share of its whole town inventory the platform itself reported unavailable for these dates. It is not a count of free rooms.",
        "observed_at": "2026-09-24T17:42:10.580Z",
        "freshness": "Fresh",
        "confidence": "medium",
        "source_url": "https://www.booking.com/searchresults.html?ss=Tetouan&checkin=2027-08-01&checkout=2027-08-03&group_adults=2&group_children=0&no_rooms=1&selected_currency=EUR&order=price&lang=en-gb"
      },
      "solo_traveller": null,
      "hostels": {
        "note": "A second platform, read separately. Never averaged with the rooms above.",
        "eclipse_week": {
          "probe": "lodging.hostelworld.tetouan.mission",
          "platform": "Hostelworld",
          "check_in": "2027-07-31",
          "check_out": "2027-08-04",
          "nights": 4,
          "travellers": 2,
          "statistic": "mean of the ten cheapest listings",
          "mean_eur": 140,
          "sample_size": 2,
          "sample_prices_eur": [
            80,
            200
          ],
          "currency": "EUR",
          "properties_found": null,
          "observed_at": "2026-09-20T17:24:32.968Z",
          "freshness": "Aging",
          "confidence": "high",
          "source_url": "https://www.hostelworld.com/pwa/s?q=Tetouan,%20Morocco&country=Morocco&city=Tetouan&type=city&id=17086&from=2027-07-31&to=2027-08-04&guests=2&currency=EUR&page=1"
        },
        "week_after": {
          "probe": "lodging.hostelworld.tetouan.control",
          "platform": "Hostelworld",
          "check_in": "2027-08-07",
          "check_out": "2027-08-11",
          "nights": 4,
          "travellers": 2,
          "statistic": "mean of the ten cheapest listings",
          "mean_eur": 42.26,
          "sample_size": 10,
          "sample_prices_eur": [
            20.25,
            27,
            32,
            43.2,
            45,
            45,
            46,
            49.5,
            54.31,
            60.3
          ],
          "currency": "EUR",
          "properties_found": null,
          "observed_at": "2026-09-20T17:24:38.934Z",
          "freshness": "Aging",
          "confidence": "high",
          "source_url": "https://www.hostelworld.com/pwa/s?q=Tetouan,%20Morocco&country=Morocco&city=Tetouan&type=city&id=17086&from=2027-08-07&to=2027-08-11&guests=2&currency=EUR&page=1"
        }
      },
      "cheap_threshold_stay_for_two_eur": 130
    },
    "sky": {
      "cloud_pct_low": 20.9,
      "cloud_pct_high": 21,
      "text": "20.9 % to 21.0 % cloud",
      "low_end_source": "NASA POWER",
      "high_end_source": "Copernicus ERA5",
      "midday_cloud_pct": 23.1,
      "note": "A range between two reanalyses, never one number (brief §A72).",
      "power_mean_pct": 20.9,
      "era5_mean_pct": 21,
      "clear_day_share_pct": {
        "power": 78,
        "era5": 66.7
      },
      "clear_threshold_pct": 30,
      "midday_clear_share_pct": 69.6,
      "verdict": "divergent",
      "delta_mean_points": 0.1,
      "days": 264,
      "land_cell_snapped": false,
      "arbitration": "era5",
      "arbitrated_pct": 21,
      "window": "28 July - 7 August",
      "years": "2001-2024",
      "sources": [
        {
          "name": "NASA POWER",
          "url": "https://power.larc.nasa.gov/",
          "attribution": "MERRA-2 CLOUD_AMT, daily means 2001-2024"
        },
        {
          "name": "Copernicus ERA5",
          "url": "https://cds.climate.copernicus.eu/",
          "attribution": "Generated using Copernicus Climate Change Service information 2026"
        },
        {
          "name": "EUMETSAT CM SAF",
          "url": "https://www.cmsaf.eu/",
          "attribution": "copyright 2026 EUMETSAT (CM SAF CLARA-A3)"
        }
      ]
    },
    "heat": {
      "mean_daily_max_c": 34,
      "days_over_40_pct": 3,
      "note": "Daily maxima, not the temperature at the hour of totality. The maximum falls in the afternoon; totality falls around local noon in Egypt and in the early morning in Morocco, around 08:45 local time. Never present the daily maximum as \"the temperature during the eclipse\".",
      "p90_daily_max_c": 37.6,
      "record_daily_max_c": 42.9,
      "mean_daily_mean_c": 26.4,
      "relative_humidity_mean_pct": 58,
      "hot_threshold_c": 40,
      "days": 264,
      "window": "28 July - 7 August (±5 days around 2 August)",
      "years": "2001-2024",
      "collected_at": "2026-09-20",
      "source": {
        "name": "NASA POWER (MERRA-2, parameters T2M_MAX, T2M and RH2M)",
        "url": "https://power.larc.nasa.gov/api/temporal/daily/point?parameters=T2M_MAX%2CT2M%2CRH2M&community=RE&longitude=-5.3747&latitude=35.5698&start=20010101&end=20241231&format=JSON",
        "attribution": "The data was obtained from the National Aeronautics and Space Administration (NASA) Langley Research Center (LaRC) Prediction of Worldwide Energy Resource (POWER) Project"
      }
    },
    "access": {
      "code": "stop-known",
      "label": "Stop mapped, service not confirmed"
    },
    "nearest_airport": {
      "iata": "TTU",
      "name": "Tétouan Saniat R'mel Airport",
      "distance_km": 6.2,
      "method": "Great-circle distance from the centre of the place to the centre of the aerodrome.",
      "source": {
        "name": "OpenStreetMap contributors, ODbL (aerodrome coordinates); NASA POWER (centres of the places)",
        "url": "https://www.openstreetmap.org/way/1180649397"
      },
      "computed_on": "2026-09-22"
    },
    "eclipse": {
      "totality_seconds": 290.3,
      "totality_text": "4m50s",
      "source": {
        "name": "EclipseMission oracle: NASA GSFC Besselian elements for the eclipse of 2 August 2027, reduced in Python and acceptance-tested against the NASA path table (worst case 0.2 s on duration)",
        "url": "https://eclipsemission.com/methodology/"
      },
      "circumstances": null,
      "circumstances_note": "The oracle's contact times for this place are not in the dataset yet; the duration above is."
    },
    "entry": {
      "country": {
        "code": "MA",
        "name": "Morocco"
      },
      "collected_at": "2026-09-22",
      "note": "A regime is what the issuing state publishes on a page we could read ourselves. Where the issuer publishes nothing reachable, the row says so and carries no figure. A fee quoted only by a reseller or a search summary is never published here.",
      "passports": [
        {
          "passport": "FR",
          "name": "France",
          "regime": "visa-free",
          "regime_text": "No visa and no electronic travel authorisation required for a tourist stay.",
          "fee": "no entry fee",
          "fee_status": "not-applicable",
          "stay_days": 90,
          "source_url": "https://www.acces-maroc.ma/#/",
          "consulted_at": "2026-09-22",
          "regime_quote": "According to the Information entered, you will not need a visa or a Morocco Electronic Travel Authorization",
          "fee_multiple_entry": null,
          "fee_note": "No visa required, so no visa fee applies.",
          "stay_quote": "Dans le cas exceptionnel d'un maintien sur le sol marocain au-delà de trois mois (90 jours exactement), il convient de prendre l'attache du service marocain de l'immigration et de solliciter une prolongation de l'autorisation de séjour, qui ne pourra pas excéder trois mois.",
          "passport_rule": "A passport valid for the whole of the planned stay. A national identity card alone is no longer accepted.",
          "lead_time": null,
          "lead_time_status": "unconfirmed",
          "source_name": "Accès Maroc -- official Moroccan entry portal",
          "source_updated": "2026-09-15",
          "verification": "Issuer's own eligibility tool driven in a rendering browser on 2026-09-22 (nationality + country of residence + ordinary passport + tourist + no event + no held visa). WebFetch cannot read it: the portal is a client-side JavaScript application that returns an empty body. Negative control run the same session: NIGERIA under identical inputs returns 'you will need to apply for Moroccan visa', so the tool discriminates and is not a stuck 'no visa' widget. Re-verified alone on a freshly loaded page for SA. The tool publishes no authorised stay duration, so stay_days stays null. The authorised stay (90 days) is retained from the earlier consular source recorded on this row, which the issuer's checker does not restate; regime and stay therefore come from two different sources, both traced.",
          "confidence": "high"
        },
        {
          "passport": "GB",
          "name": "United Kingdom",
          "regime": "visa-free",
          "regime_text": "British tourists can enter Morocco without a visa for stays of up to 90 days.",
          "fee": "no entry fee",
          "fee_status": "not-applicable",
          "stay_days": 90,
          "source_url": "https://www.gov.uk/foreign-travel-advice/morocco/entry-requirements",
          "consulted_at": "2026-09-21",
          "regime_quote": "You can visit Morocco without a visa for up to 90 days for tourism.",
          "fee_multiple_entry": null,
          "fee_note": "No visa is required for this stay length, so no visa fee applies.",
          "stay_quote": "You can visit Morocco without a visa for up to 90 days for tourism.",
          "passport_rule": "Passport must have an expiry date at least 3 months after the date of arrival in Morocco.",
          "lead_time": null,
          "lead_time_status": "not-applicable",
          "source_name": "GOV.UK — Foreign travel advice: Morocco (entry requirements)",
          "source_updated": null,
          "verification": "Page fetched directly via WebFetch; quotes read verbatim from the live entry-requirements subpage. No explicit 'last updated' timestamp was present in the fetched extract.",
          "confidence": "high"
        },
        {
          "passport": "US",
          "name": "United States",
          "regime": "visa-free",
          "regime_text": "No visa and no electronic travel authorisation required for a tourist stay.",
          "fee": "no entry fee",
          "fee_status": "not-applicable",
          "stay_days": null,
          "source_url": "https://www.acces-maroc.ma/#/",
          "consulted_at": "2026-09-22",
          "regime_quote": "According to the Information entered, you will not need a visa or a Morocco Electronic Travel Authorization",
          "fee_multiple_entry": null,
          "fee_note": "No visa required, so no visa fee applies.",
          "stay_quote": null,
          "passport_rule": "Passport must have at least six months' validity at time of entry, with at least one blank page.",
          "lead_time": null,
          "lead_time_status": "not-published",
          "source_name": "Accès Maroc -- official Moroccan entry portal",
          "source_updated": null,
          "verification": "Issuer's own eligibility tool driven in a rendering browser on 2026-09-22 (nationality + country of residence + ordinary passport + tourist + no event + no held visa). WebFetch cannot read it: the portal is a client-side JavaScript application that returns an empty body. Negative control run the same session: NIGERIA under identical inputs returns 'you will need to apply for Moroccan visa', so the tool discriminates and is not a stuck 'no visa' widget. Re-verified alone on a freshly loaded page for SA. The tool publishes no authorised stay duration, so stay_days stays null. No authorised stay duration is published for this cell by either source.",
          "confidence": "high"
        },
        {
          "passport": "CA",
          "name": "Canada",
          "regime": "visa-free",
          "regime_text": "Canadian tourists do not need a visa for stays of less than 90 days.",
          "fee": "no entry fee",
          "fee_status": "not-applicable",
          "stay_days": 90,
          "source_url": "https://travel.gc.ca/destinations/morocco",
          "consulted_at": "2026-09-21",
          "regime_quote": "Tourist visa: not required for stays of less than 90 days",
          "fee_multiple_entry": null,
          "fee_note": "No visa required for this stay length, so no fee applies.",
          "stay_quote": "Tourist visa: not required for stays of less than 90 days",
          "passport_rule": "Passport must be valid for at least 6 months beyond the date the traveller expects to leave Morocco.",
          "lead_time": null,
          "lead_time_status": "not-applicable",
          "source_name": "Government of Canada — Travel Advice and Advisories: Morocco",
          "source_updated": "2026-09-09",
          "verification": "Page fetched directly via WebFetch; quotes and 'last updated' timestamp read verbatim from the live page.",
          "confidence": "high"
        },
        {
          "passport": "SA",
          "name": "Saudi Arabia",
          "regime": "visa-free",
          "regime_text": "No visa and no electronic travel authorisation required for a tourist stay.",
          "fee": "no entry fee",
          "fee_status": "not-applicable",
          "stay_days": null,
          "source_url": "https://www.acces-maroc.ma/#/",
          "consulted_at": "2026-09-22",
          "regime_quote": "According to the Information entered, you will not need a visa or a Morocco Electronic Travel Authorization",
          "fee_multiple_entry": null,
          "fee_note": "No visa required, so no visa fee applies.",
          "stay_quote": null,
          "passport_rule": "unconfirmed",
          "lead_time": null,
          "lead_time_status": "unconfirmed",
          "source_name": "Accès Maroc -- official Moroccan entry portal",
          "source_updated": null,
          "verification": "Issuer's own eligibility tool driven in a rendering browser on 2026-09-22 (nationality + country of residence + ordinary passport + tourist + no event + no held visa). WebFetch cannot read it: the portal is a client-side JavaScript application that returns an empty body. Negative control run the same session: NIGERIA under identical inputs returns 'you will need to apply for Moroccan visa', so the tool discriminates and is not a stuck 'no visa' widget. Re-verified alone on a freshly loaded page for SA. The tool publishes no authorised stay duration, so stay_days stays null. No authorised stay duration is published for this cell by either source.",
          "confidence": "high"
        },
        {
          "passport": "AE",
          "name": "United Arab Emirates",
          "regime": "visa-free",
          "regime_text": "No visa and no electronic travel authorisation required for a tourist stay.",
          "fee": "no entry fee",
          "fee_status": "not-applicable",
          "stay_days": null,
          "source_url": "https://www.acces-maroc.ma/#/",
          "consulted_at": "2026-09-22",
          "regime_quote": "According to the Information entered, you will not need a visa or a Morocco Electronic Travel Authorization",
          "fee_multiple_entry": null,
          "fee_note": "No visa required, so no visa fee applies.",
          "stay_quote": null,
          "passport_rule": "unconfirmed",
          "lead_time": null,
          "lead_time_status": "not-applicable",
          "source_name": "Accès Maroc -- official Moroccan entry portal",
          "source_updated": null,
          "verification": "Issuer's own eligibility tool driven in a rendering browser on 2026-09-22 (nationality + country of residence + ordinary passport + tourist + no event + no held visa). WebFetch cannot read it: the portal is a client-side JavaScript application that returns an empty body. Negative control run the same session: NIGERIA under identical inputs returns 'you will need to apply for Moroccan visa', so the tool discriminates and is not a stuck 'no visa' widget. Re-verified alone on a freshly loaded page for SA. The tool publishes no authorised stay duration, so stay_days stays null. No authorised stay duration is published for this cell by either source.",
          "confidence": "high"
        },
        {
          "passport": "MA",
          "name": "Morocco",
          "regime": "national",
          "regime_text": "Moroccan nationals entering Morocco do so as citizens, not as visa-subject tourists; no tourist visa regime applies to them.",
          "fee": "no entry fee",
          "fee_status": "not-applicable",
          "stay_days": null,
          "source_url": null,
          "consulted_at": "2026-09-21",
          "regime_quote": null,
          "fee_multiple_entry": null,
          "fee_note": "Nationals do not pay a visa fee to enter their own country; no fee regime exists for this cell.",
          "stay_quote": null,
          "passport_rule": "unconfirmed",
          "lead_time": null,
          "lead_time_status": "not-applicable",
          "source_name": null,
          "source_updated": null,
          "verification": "No specific verbatim source was sought or opened for this cell: all primary Moroccan government domains attempted for the other cells were blocked (WAF or DNS failure) during this session, and the 'national entry' fact is a legal category rather than a policy figure that a single page states. Not independently confirmed against a Moroccan government source on passport/CIN rules for citizens.",
          "confidence": "medium"
        }
      ]
    },
    "observation": {
      "label": "free_from_town",
      "text": "Free from town — the eclipse is not for sale.",
      "paid_option_search": "searched, none found",
      "collected_at": "2026-09-21",
      "paid_option": null,
      "notes_fr": {
        "why": "290,3 s de totalite, la plus longue des trois villes marocaines mesurees.",
        "caveat": null,
        "search": "Recherche tracee le 2026-09-21 : aucun point de vue payant ni billetterie identifies pour Tetouan. Ce qui existe est un forfait multi-jours (ceutaeclipse.es, chicmorocco.com), hors perimetre par construction."
      }
    },
    "flights": {
      "airports": [
        "TTU"
      ],
      "families": [
        {
          "id": "google_flights_search",
          "label": "Google Flights search: return trip, two adults, as the search displayed it",
          "note": "Read in a browser on the day named. Not a carrier quote, and not comparable with the easyJet family: never add the two."
        },
        {
          "id": "easyjet_carrier_fare",
          "label": "easyJet lowest daily fare, read at the airline: one seat, one way",
          "note": "Doubling one does not make a couple and adding two does not make a return. The series is a single reading."
        }
      ],
      "readings": [
        {
          "probe": "air.AMS-TTU.control",
          "family": "google_flights_search",
          "origin": "AMS",
          "destination_airport": "TTU",
          "window": "control",
          "departure_date": "2027-08-07",
          "return_date": "2027-08-11",
          "travellers": 2,
          "price": 1641,
          "currency": "EUR",
          "availability": "available",
          "platform": "Google Flights",
          "observed_at": "2026-09-20T21:05:59.326Z",
          "freshness": "Aging",
          "source_url": "https://www.google.com/travel/flights?tfs=GhoSCjIwMjctMDgtMDdqBRIDQU1TcgUSA1RUVRoaEgoyMDI3LTA4LTExagUSA1RUVXIFEgNBTVNCAgEBSAGYAQE%3D&hl=en&curr=EUR"
        },
        {
          "probe": "air.AMS-TTU.mission",
          "family": "google_flights_search",
          "origin": "AMS",
          "destination_airport": "TTU",
          "window": "mission",
          "departure_date": "2027-07-31",
          "return_date": "2027-08-04",
          "travellers": 2,
          "price": 1384,
          "currency": "EUR",
          "availability": "available",
          "platform": "Google Flights",
          "observed_at": "2026-09-20T20:56:28.108Z",
          "freshness": "Aging",
          "source_url": "https://www.google.com/travel/flights?tfs=GhoSCjIwMjctMDctMzFqBRIDQU1TcgUSA1RUVRoaEgoyMDI3LTA4LTA0agUSA1RUVXIFEgNBTVNCAgEBSAGYAQE%3D&hl=en&curr=EUR"
        },
        {
          "probe": "air.BER-TTU.control",
          "family": "google_flights_search",
          "origin": "BER",
          "destination_airport": "TTU",
          "window": "control",
          "departure_date": "2027-08-07",
          "return_date": "2027-08-11",
          "travellers": 2,
          "price": 3679,
          "currency": "EUR",
          "availability": "available",
          "platform": "Google Flights",
          "observed_at": "2026-09-20T21:08:57.670Z",
          "freshness": "Aging",
          "source_url": "https://www.google.com/travel/flights?tfs=GhoSCjIwMjctMDgtMDdqBRIDQkVScgUSA1RUVRoaEgoyMDI3LTA4LTExagUSA1RUVXIFEgNCRVJCAgEBSAGYAQE%3D&hl=en&curr=EUR"
        },
        {
          "probe": "air.BER-TTU.mission",
          "family": "google_flights_search",
          "origin": "BER",
          "destination_airport": "TTU",
          "window": "mission",
          "departure_date": "2027-07-31",
          "return_date": "2027-08-04",
          "travellers": 2,
          "price": 3803,
          "currency": "EUR",
          "availability": "available",
          "platform": "Google Flights",
          "observed_at": "2026-09-20T21:00:32.093Z",
          "freshness": "Aging",
          "source_url": "https://www.google.com/travel/flights?tfs=GhoSCjIwMjctMDctMzFqBRIDQkVScgUSA1RUVRoaEgoyMDI3LTA4LTA0agUSA1RUVXIFEgNCRVJCAgEBSAGYAQE%3D&hl=en&curr=EUR"
        },
        {
          "probe": "air.BRU-TTU.control",
          "family": "google_flights_search",
          "origin": "BRU",
          "destination_airport": "TTU",
          "window": "control",
          "departure_date": "2027-08-07",
          "return_date": "2027-08-11",
          "travellers": 2,
          "price": 1686,
          "currency": "EUR",
          "availability": "available",
          "platform": "Google Flights",
          "observed_at": "2026-09-20T20:26:37.468Z",
          "freshness": "Aging",
          "source_url": "https://www.google.com/travel/flights?tfs=GhoSCjIwMjctMDgtMDdqBRIDQlJVcgUSA1RUVRoaEgoyMDI3LTA4LTExagUSA1RUVXIFEgNCUlVCAgEBSAGYAQE%3D&hl=en&curr=EUR"
        },
        {
          "probe": "air.BRU-TTU.mission",
          "family": "google_flights_search",
          "origin": "BRU",
          "destination_airport": "TTU",
          "window": "mission",
          "departure_date": "2027-07-31",
          "return_date": "2027-08-04",
          "travellers": 2,
          "price": 1686,
          "currency": "EUR",
          "availability": "available",
          "platform": "Google Flights",
          "observed_at": "2026-09-20T20:24:41.589Z",
          "freshness": "Aging",
          "source_url": "https://www.google.com/travel/flights?tfs=GhoSCjIwMjctMDctMzFqBRIDQlJVcgUSA1RUVRoaEgoyMDI3LTA4LTA0agUSA1RUVXIFEgNCUlVCAgEBSAGYAQE%3D&hl=en&curr=EUR"
        },
        {
          "probe": "air.CDG-TTU.control",
          "family": "google_flights_search",
          "origin": "CDG",
          "destination_airport": "TTU",
          "window": "control",
          "departure_date": "2027-08-07",
          "return_date": "2027-08-11",
          "travellers": 2,
          "price": 1741,
          "currency": "EUR",
          "availability": "available",
          "platform": "Google Flights",
          "observed_at": "2026-09-20T20:20:15.208Z",
          "freshness": "Aging",
          "source_url": "https://www.google.com/travel/flights?tfs=GhoSCjIwMjctMDgtMDdqBRIDQ0RHcgUSA1RUVRoaEgoyMDI3LTA4LTExagUSA1RUVXIFEgNDREdCAgEBSAGYAQE%3D&hl=en&curr=EUR"
        },
        {
          "probe": "air.CDG-TTU.mission",
          "family": "google_flights_search",
          "origin": "CDG",
          "destination_airport": "TTU",
          "window": "mission",
          "departure_date": "2027-07-31",
          "return_date": "2027-08-04",
          "travellers": 2,
          "price": 1835,
          "currency": "EUR",
          "availability": "available",
          "platform": "Google Flights",
          "observed_at": "2026-09-20T20:14:34.125Z",
          "freshness": "Aging",
          "source_url": "https://www.google.com/travel/flights?tfs=GhoSCjIwMjctMDctMzFqBRIDQ0RHcgUSA1RUVRoaEgoyMDI3LTA4LTA0agUSA1RUVXIFEgNDREdCAgEBSAGYAQE%3D&hl=en&curr=EUR"
        },
        {
          "probe": "air.LHR-TTU.control",
          "family": "google_flights_search",
          "origin": "LHR",
          "destination_airport": "TTU",
          "window": "control",
          "departure_date": "2027-08-07",
          "return_date": "2027-08-11",
          "travellers": 2,
          "price": 1637,
          "currency": "EUR",
          "availability": "available",
          "platform": "Google Flights",
          "observed_at": "2026-09-20T21:02:49.079Z",
          "freshness": "Aging",
          "source_url": "https://www.google.com/travel/flights?tfs=GhoSCjIwMjctMDgtMDdqBRIDTEhScgUSA1RUVRoaEgoyMDI3LTA4LTExagUSA1RUVXIFEgNMSFJCAgEBSAGYAQE%3D&hl=en&curr=EUR"
        },
        {
          "probe": "air.LHR-TTU.mission",
          "family": "google_flights_search",
          "origin": "LHR",
          "destination_airport": "TTU",
          "window": "mission",
          "departure_date": "2027-07-31",
          "return_date": "2027-08-04",
          "travellers": 2,
          "price": 1303,
          "currency": "EUR",
          "availability": "available",
          "platform": "Google Flights",
          "observed_at": "2026-09-20T20:53:41.131Z",
          "freshness": "Aging",
          "source_url": "https://www.google.com/travel/flights?tfs=GhoSCjIwMjctMDctMzFqBRIDTEhScgUSA1RUVRoaEgoyMDI3LTA4LTA0agUSA1RUVXIFEgNMSFJCAgEBSAGYAQE%3D&hl=en&curr=EUR"
        },
        {
          "probe": "air.MXP-TTU.control",
          "family": "google_flights_search",
          "origin": "MXP",
          "destination_airport": "TTU",
          "window": "control",
          "departure_date": "2027-08-07",
          "return_date": "2027-08-11",
          "travellers": 2,
          "price": 1333,
          "currency": "EUR",
          "availability": "available",
          "platform": "Google Flights",
          "observed_at": "2026-09-20T20:32:49.727Z",
          "freshness": "Aging",
          "source_url": "https://www.google.com/travel/flights?tfs=GhoSCjIwMjctMDgtMDdqBRIDTVhQcgUSA1RUVRoaEgoyMDI3LTA4LTExagUSA1RUVXIFEgNNWFBCAgEBSAGYAQE%3D&hl=en&curr=EUR"
        },
        {
          "probe": "air.MXP-TTU.mission",
          "family": "google_flights_search",
          "origin": "MXP",
          "destination_airport": "TTU",
          "window": "mission",
          "departure_date": "2027-07-31",
          "return_date": "2027-08-04",
          "travellers": 2,
          "price": 1201,
          "currency": "EUR",
          "availability": "available",
          "platform": "Google Flights",
          "observed_at": "2026-09-20T20:30:36.440Z",
          "freshness": "Aging",
          "source_url": "https://www.google.com/travel/flights?tfs=GhoSCjIwMjctMDctMzFqBRIDTVhQcgUSA1RUVRoaEgoyMDI3LTA4LTA0agUSA1RUVXIFEgNNWFBCAgEBSAGYAQE%3D&hl=en&curr=EUR"
        }
      ]
    },
    "next_reading": "2026-10-05"
  }
}