Skip to content
Europe Flight Club
What we got wrong

Corrections

Every error this site has published, what a reader would have seen because of it, and the check that caught it. The last part is the useful one.

69
Corrections since August 29, 2026
63
Were live to readers before being found
19
Changed a published number
36
Changed a published claim

How we review says that if something here is wrong we will fix it and say that we did. This is where we say it.

Most of these were not found by rereading a page. They were found by a check that compares a published figure against the data behind it — and the check is written down in each entry, because that is the part someone else can reuse.

This site was rebuilt on August 29, 2026. Nothing before that date is in scope.

  1. ClaimWas live

    Points guidance omitted bank transfers and retained an obsolete ANA restriction

    What was wrong
    The transfer directory and American review treated Marriott as the only recorded route into AAdvantage or Atmos. ANA advice still required round-trip partner awards, and some transfer advice implied universal ratios or guaranteed partner-award savings.
    What a reader saw
    Readers could miss an eligible bank transfer, plan around a restriction that had ended, or transfer points without checking their card's rate and the available award.
    How it was found
    Reviewing the program and transfer records against official issuer and airline sources, then checking the written American review for the same claims.
    Fix
    The directory includes Citi to AAdvantage with card-specific eligibility and Bilt to Atmos. ANA advice recognizes one-way partner awards. Transfer copy identifies unverified or card-dependent rates and requires an available award quote with cash charges. The editorial point valuations are unchanged.
  2. ClaimWas live

    Points advice compared unlike trips and inferred award availability from cash fares

    What was wrong
    An Aeroplan example compared a one-way points price with a round-trip cash median. Other points advice treated alliance cash-route coverage as award inventory or a network median as a booking ceiling, and did not consistently deduct award charges.
    What a reader saw
    Readers could overvalue a redemption, transfer points for an unavailable award, or reject a sensible cash fare using an unrelated sample.
    How it was found
    Matching direction, cabin, dates, availability and fees in each redemption example, and checking program rules against the programs' own guidance.
    Fix
    Written guides and shared benchmarks distinguish editorial point valuations from measured cash observations. Redemption arithmetic now requires matching trips and award cash charges, and the guides direct readers to confirm availability before transferring.
  3. ClaimWas live

    Lufthansa and SWISS reviews generalized one seat configuration to an airline

    What was wrong
    Lufthansa's door-equipped Allegris record was not limited to the Business Class Suite, and the review implied equal fares and firsthand Allegris experience without supporting records. SWISS's legacy A330 was described as uniformly 2-2-2 and used to judge the entire current fleet.
    What a reader saw
    A reader could expect a door on a Classic seat, overlook a solo aisle-access seat on SWISS, or choose between tickets using unverified configuration and price assumptions.
    How it was found
    Checking the airlines' product pages and the official SWISS A330 seat map against the source records, reviews and confirmed airline-and-cabin flown roster.
    Fix
    The Lufthansa door record now names the Suite; the SWISS legacy map records alternating 1-2-1 and 2-2-1 rows. Reviews separate the exact seat from airline fare observations, acknowledge the newer unscored SWISS Senses cabin, and remove unsupported overall recommendations and airlinewide aggregate ratings. Seat-only check dates remain separate from older amenity records.
  4. ClaimWas live

    Generated fare pages overstated rankings, ties and savings

    What was wrong
    Airline pages did not consistently identify economy prices, ties or historical dates, and the hub mislabeled route observations as distinct airlines. Destination comparisons could describe equal win counts as equal prices and gateway spreads as actionable savings.
    What a reader saw
    Readers could apply economy evidence to a business ticket or mistake an old sample spread for a saving available on their own dates.
    How it was found
    Reviewing each generated page family against the actual units, cabins, collection dates and tie counts in its source data.
    Fix
    Templates now state historical scope and measured cabin, separate tied wins from equal prices, expose observation dates and unknown connection airports, and require same-date total-trip costing before treating a spread as a saving.
  5. ClaimWas live

    Business reviews used economy prices to support business recommendations

    What was wrong
    The SAS, Air France and KLM business reviews retained economy-fare comparisons and figures from smaller samples. Some conclusions inferred the price of a bed or door from network medians. Shared tables could pair economy prices with business-seat scores.
    What a reader saw
    A reader could mistake a low economy premium for evidence that a business ticket was a good purchase, or assume an observed fare included a seat that the search had not identified.
    How it was found
    Tracing each review's prices to its cabin-specific observations and checking the rendered tables against the fare fields actually captured.
    Fix
    The reviews now show dated business-fare evidence and gateway tables. Shared displays distinguish historical fares, independently documented seats and the equipment still to verify on a booking. Economy rankings no longer display business-seat scores.
  6. ClaimWas live

    The business ranking compared unequal scores and overstated KLM's door coverage

    What was wrong
    The ranking compared three-dimension averages for carriers without enough fares with four-dimension averages for others. A KLM record grouped the 787 with the door-equipped 777 without a source establishing that both had the door.
    What a reader saw
    Missing price evidence could improve a carrier's apparent rank. A reader could expect a door on a flight the cited evidence did not cover.
    How it was found
    Recomputing the ranking on a common seat scale and checking the KLM seat claim against its official 777 announcement.
    Fix
    The table and structured ranking use one seat scale, with business-fare coverage separately labeled. The door record is limited to the sourced 777 configuration. Seat-only rechecks have their own dates and do not renew older baggage or lounge records.
  7. Structured dataWas live

    Five carrier articles described the wrong fare dataset in structured data

    What was wrong
    The generic article Dataset described a flexible-date economy city grid even on the revised carrier rankings and business reviews, which use a fixed-week carrier grid.
    What a reader saw
    Search engines received the wrong cabin scope, measurement method and travel period for the figures on those pages.
    How it was found
    Comparing each revised article's Dataset declaration with the tables it rendered.
    Fix
    The five revised articles explicitly select the carrier dataset. Its travel week and collection date come from the fare data and remain separate from the editorial update date. Other article families remain on the audit list.
  8. ClaimWas live

    Comparison verdicts overstated the fare evidence

    What was wrong
    Generated comparison titles sometimes called airlines level on price when we had no matched fares. Price verdicts combined economy and business counts, and an FAQ assigned equal-price rows to one airline's wins. Some overall scores also compared different sets of scored dimensions.
    What a reader saw
    Readers could infer a fare tie without evidence or apply an economy result to a business booking. The FAQ and search title could overstate what the page's own observations established.
    How it was found
    Checking every comparison's matched rows by cabin, separating wins from equal fares, and inspecting the rendered page and structured data for missing-evidence cases.
    Fix
    Cabins and ties are counted separately. Titles describe the available evidence, missing fares remain unknown, and the page compares documented seat features without assigning a universal overall winner. Fare tables now expose departure filters, observation dates and recorded nonstop or connecting itineraries.
  9. ClaimWas live

    Written airline guides contained contradictory booking advice

    What was wrong
    The BA–Virgin guide retained a final recommendation based on a superseded BA quote while its fare section favored Virgin. The Delta–United guide used economy premiums inside a business explanation and called a historical price verdict settled. Other guides treated unknown aircraft as guaranteed low-scoring seats or assigned an unsupported value to an upgrade.
    What a reader saw
    Following the final advice could lead a reader to choose the wrong airline for the prices described, or pay for a seat the recorded fare did not establish.
    How it was found
    Reading all five written guides against their current fare rows, cabin records and stated recommendations, including the conclusions and FAQs.
    Fix
    Revised all five guides around their matched routes, actual itinerary choices and dated cabin evidence. Removed superseded quote recommendations, guaranteed equipment claims and universal upgrade-price advice. Content review dates remain separate from collection and cabin-check dates.
  10. ClaimWas live

    Deal-alert copy inferred normal prices and urgency from a snapshot

    What was wrong
    Some affiliate placements described how long fares lasted, what normally cost more, or how often a carrier was undercut, despite being based on a fixed-week fare snapshot.
    What a reader saw
    Historical measurements could look like evidence of recurring prices or a reason to act urgently on a deal alert.
    How it was found
    Auditing the shared affiliate copy against the time period and scope of the underlying city and carrier datasets.
    Fix
    Replaced those claims with dated observations and route-specific checks. The free signup is the first ask in every tier, while paid-tier links and click attribution remain available.
  11. ClaimWas live

    Belfast has two airports. Our grids searched two different places and both said Belfast.

    What was wrong
    The city grid files Belfast under BFS, Belfast International, and the Belfast guide reported the carrier grid's empty result as a fact about the city: no single airline sells Belfast. Both readings assume one airport. BFS on its own returns no fare from any US gateway at all — a six-month calendar came back empty from all twelve gateways reached on 2026-10-01, twice, and a fixed-date search answered that it had no options and offered Belfast City (BHD) instead, 14 miles away. So the carrier grid's absence is an absence at BFS, and the 25 city-grid fares cannot have been collected there.
    What a reader saw
    A reader could have seen a Belfast fare labeled or linked as Belfast International when the itinerary lands at Belfast City, which is a different airport, a different coach and a different ground cost. The headline explanation of why Belfast is the third most expensive city we price was also a claim about one airport dressed as a claim about the city.
    How it was found
    A collection sweep failing into Belfast from every gateway, identically, which is the signature of a search that cannot succeed rather than of a thin market. The reusable part is the inventory, not the investigation: four cities carried metro codes and arrival-airports.ts recorded all four, so the mechanism worked and the LIST of cities needing it was incomplete. Nothing said what a city's iata was a code for, so there was no list for Belfast to be missing from.
    Fix
    src/data/city-places.ts declares, for every city in the grid, whether its code names an airport or a metro and which place the collector searches, so a city added later fails the build instead of defaulting to one airport. Display goes through it: the routes hub prints the place rather than the code, the open-data file gained a destination_place column and destination_code stopped claiming to be the place searched, the carrier-grid tools label BFS as Belfast International because that grid did search the airport, and the guide says the figures are metro figures and that which airport an itinerary used is not recorded. fares.ts still records BFS; whether the grid's Belfast means the metro or the airport is a data question for Jon, and until it is settled no page names one of the two airports beside a city figure.
  12. ClaimWas live

    The cheapest-airlines ranking was published in the wrong order, and the page was an argument about that order

    What was wrong
    The budget-airlines page ranked TAP Air Portugal first at a $0 median premium and SAS fourth at $20. TAP is eighth at $20 and SAS sixth at $12; Icelandair and Royal Air Maroc hold the top two places at $0. The table stood through two collection sweeps.
    What a reader saw
    The whole page argues that the cheap end of the transatlantic market is full-service rather than low-cost, and the ranking is the evidence. A reader was told the cheapest airline to Europe was a Lisbon connector that is seventh behind the one we now name, and the error was a fact about coverage rather than about price: TAP sells five of the 26 US gateways, so its zero was always a fact about those five cities and not about the airline. Fourteen gateways added in the third sweep are ones TAP does not sell.
    How it was found
    Reading the four rows against rankedCarriers() while tokenizing the table. Nothing flagged it: the figures were inside a rows='[...]' JSON string, where no <Stat> tag can go, and the article's own prose two paragraphs below already described TAP's coverage problem correctly. The page disagreed with itself and only the table was wrong.
    Fix
    Every cell in the ranking is a token now, so the order and the premiums follow the grid. published-claims.test.ts pins the claim rather than the numbers: Icelandair and Royal Air Maroc first and second at $0, TAP outside the top four, and TAP's premium above SAS's. An ordinal rots exactly like a count, and this one survived a sweep that moved it seven places.
  13. ClaimWas live

    We said Finnair's peer group had never been cheapest on a single route. British Airways wins 156 of 491.

    What was wrong
    The Finnair review's price section concluded: "none of these four was the cheapest carrier on a single route between them, across 57 route-observations". British Airways is cheapest on 156 of 491 routes, Air France on 36 of 216, Aer Lingus on 10 of 74 and Finnair on 3 of 36. Every one of the twelve figures in the table above that sentence — four premiums, four win counts, four product scores — came from an earlier, smaller collection: Finnair was shown at $98 on 21 routes where it is $71 on 36, Aer Lingus at $158 where it is $260, Air France at $176 where it is $162, British Airways at $189 where it is $89. The surrounding prose still described a two-route sample, calling $30 "the lowest of the four" and saying Finnair came "within $31 of the cheapest carrier" on "both routes we priced".
    What a reader saw
    A reader comparing four European carriers on price was handed a flat negative — none of them ever wins — on the page written to answer that question. British Airways wins more routes than any carrier in this group and nearly all of them out of Texas, which is the opposite conclusion. The sentence was also the page's own summary of its table, so the error read as the considered view rather than a stale cell.
    How it was found
    Tokenizing the table and watching the sentence beneath it stop being true. The twelve numbers were checkable against the libs and the claim was not — "none of these four" is an interpretation, and the same shape of sentence had already rotted on the SAS and British Airways reviews. This is the third time a peer-group superlative outlived its sample.
    Fix
    The table is tokens. The section now states what the data shows and why it is less flattering than it looks: a low median premium and winning routes are different facts and across this group they barely correlate — British Airways is barely dearer than Finnair and wins fifty times as often, because it sells gateways nobody else does. published-claims.test.ts pins the ORDER of the four premiums and that the win counts point the other way, so the next sweep breaks the test rather than the sentence.
  14. Structured dataWas live

    A Finnair FAQ answer said its three wins were "all of them Nordic". They are Stockholm, Oslo and Paris, all from Dallas.

    What was wrong
    The answer to "Is Finnair cheap to Europe?" read: "three wins across 36 routes at a $71 median premium — all of them Nordic, where Helsinki finally points the right way." The three are Dallas to Stockholm, Dallas to Oslo and Dallas to Paris. Two further errors sat in the same answer block: "Does Finnair fly nonstop to the US?" named New York and Los Angeles where there are three nonstops, Dallas to Helsinki being the third, and said "the other 19 Finnair fares in our grid connect through Helsinki" when 33 of its 36 routes connect.
    What a reader saw
    All three answers are FAQ frontmatter, which this site renders into FAQPage structured data, so the wrong version is the one search engines were offered. The Nordic sentence was never true of any grid we have collected: the wins arrived with the Texas sweep and all three depart Dallas, which makes them a Texas finding — Texas reaches Europe through a flag-carrier hub and Helsinki is one — rather than evidence that Helsinki's geography finally pays. The site had just published that Texas finding on three other pages.
    How it was found
    Checking the FAQ answers against the grid while correcting the prose above them, instead of stopping at the body copy. A figure check would never have caught it: $71, three wins and 36 routes were all correct, and only the word "Nordic" was wrong. The nonstop count was wrong in the same way — the honest-looking "19" was a leftover from a 21-route sample.
    Fix
    All three answers rewritten from the grid with the Dallas pattern named, and the wins, routes and premiums rendered as tokens. published-claims.test.ts pins the exact three won routes, that every one departs Dallas, that one of them ends in Paris so a Nordics-only sentence fails, and that there are three Helsinki nonstops and not two.
  15. ClaimWas live

    Two business reviews scored Value on the economy cabin, a class of error recorded as fixed a month earlier

    What was wrong
    The Finnair business review's opening FAQ said it scores "8 on Value: a $71 median premium across the 36 routes we price it on". That is the economy grid. Finnair's business Value is 6, on a $1,580 median premium across 22 business routes — twenty-two times the figure the sentence printed beside the word business. The Azores Airlines business review had the same error in the opposite direction: its prose said the computed Value "says 9", which is the economy score, where the business figure its own rubric and its Review markup both carry is 10.
    What a reader saw
    Inside FAQPage structured data, on a page about a business cabin, a reader was shown a transatlantic business premium of $71. The scoring on both pages was already right: valueScore() became cabin-aware on 2026-09-01 and the rendered rubrics took the business figure. Only the prose explaining the rubric still held the economy one, which is the worst place for it, because that is where a reader goes to understand the number — and on the Azores page the paragraph making the point is specifically about the score now being computed rather than assigned.
    How it was found
    Re-reading every cabin review's prose against valueScore(carrier, "business") rather than against the rendered table. AGENTS.md records this exact class as fixed on 2026-09-01 — SAS scored a perfect 10 on a cabin it is sixteenth in, KLM and Delta went 6 and 3 to 0 and 0 — and the fix changed the computation and the tables everywhere while two reviews' prose was missed. A value that is correct for the wrong cabin is still the wrong figure, and no check on the figure finds it: both numbers are real scores of the same airline.
    Fix
    Both now read Value, median premium and route count from the business grid, and Finnair's answer states the economy premium separately and says plainly that it is a different cabin's number. Business-specific tokens exist precisely so a business rubric cannot render an economy figure; the remaining job is that older reviews still type some of theirs.
  16. ClaimWas live

    "The only route in all 193" was neither only nor 193

    What was wrong
    The budget-airlines page said New York to Rome was "the only route in all 193 where a low-cost nonstop beat every hub connection on offer". Norse Atlantic is outright cheapest on both of the routes it flies, so on the plain reading the claim was false the day it was written, and 193 was the size of a carrier grid two sweeps old — it is 888 priced economy routes now. The same stale 193 sat two paragraphs below, in a bolded sentence about Condor.
    What a reader saw
    A reader was told a particular fare was unique in the dataset when the dataset contains two of them, on a page whose argument depends on being precise about how much evidence each claim rests on. The figure was also wrong by a factor of four and quoted as the grid's size.
    How it was found
    Being asked to check whether the sentence was supported, and finding that no reading of it was: the uniqueness failed against Norse's own two wins, and the count failed against gridRoutes. A count guard existed for this class — a test that rejects any prose figure the datasets no longer produce — and it reads raw text, so it cannot see a figure that has been correctly tokenized and cannot see one that is spelled inside a longer phrase it does not match.
    Fix
    Replaced with the shape the data does support, every figure a <Stat>: a nonstop is the cheapest fare on only 30 of the 888 routes we price, and Norse holds two of those thirty from the two routes it flies. published-claims.test.ts pins that Norse wins every route it flies, that both wins are nonstops, that nonstop wins stay a minority, and that New York to Rome really does have hub connections on it to beat.
  17. ClaimWas live

    We said Condor sold nothing in the week we price. It had been selling for a month.

    What was wrong
    Three places on the budget-airlines page said Condor priced on nothing: a bolded sentence ("sells no seat, in either cabin, on any of our 193 priced routes"), a row of the route-withdrawals table ("No US economy service priced in November"), and an FAQ answer listing it among the category's failures. The third collection sweep on 2026-09-01 returned six Condor fares — two economy routes and four business, all connections, none a Condor nonstop.
    What a reader saw
    Live for a month, including inside FAQPage structured data, on the page that exists to be careful about this exact distinction: an airline that exists and is not selling versus one we have not measured. The page even used Condor as its illustration of recording that honestly, while recording it wrongly.
    How it was found
    Reading the page's claims against the carrier grid while correcting a different sentence in the same file. Nothing flagged it because a claim that a carrier has no fares is not a figure: the number zero was never typed, so no figure check could see it, and the carrier sits below the three-route ranking minimum and therefore appears in no ranking a test would compare against.
    Fix
    All three corrected to what the grid holds — two connecting economy routes, no nonstop, still below the three-route minimum our ranking needs — with the route count read from the grid rather than typed. published-claims.test.ts now pins both halves: that Condor is priced, and that it is priced too thinly to rank.
  18. DataWas live

    A route fare was rendered from a token that means a gateway's median, and a rank was six places out

    What was wrong
    The Azores review printed Boston to Ponta Delgada's economy fare from the token for Boston's median across every European city. Both are $598 today, which is why it was invisible. It also called the airline "fifth-best of the 31 carriers we rank" on median premium; it is eleventh. Two sentences on the same page dated a one-route search of Ponta Delgada — an airport the city grid does not price — from the city grid's own collection date, so a refresh of that grid would have restamped fares it will never re-collect.
    What a reader saw
    The rank was wrong by six places on the page's own summary of the airline. The fare was right by coincidence and would have become wrong the first time Boston's median moved, which a monthly refresh does; it is the same failure the site already documented when a carrier's network floor was used to render a named route's fare.
    How it was found
    Auditing every date token against the dataset its page is actually about, and checking the figure tokens in the same sentences while there. Agreeing with the data is not the test — a token has to MEAN what the sentence means, and a gateway median standing in for a route fare agrees with the data about a different question.
    Fix
    All four Boston fares now render through carrierFare, which takes a carrier and a named route; the rank and the premium are read from the ranking; and the one-route search keeps a literal date with a sentence saying it is not the city grid's. A new test, date-tokens.test.ts, pins every date token in content to the dataset its page is about and refuses a city-grid token on a carrier-grid, cabin or announcement surface.
  19. ClaimWas live

    A Belfast heading said nobody sells Belfast. We price it from 25 US gateways.

    What was wrong
    The Belfast guide carried the H2 "Nobody sells Belfast". The city grid prices Belfast from 25 of the 26 US gateway metros, with a floor of $741 from Chicago. The true claim is narrower and is what the section actually goes on to argue: in the carrier grid's fixed week, no single airline sold a Belfast itinerary from any US airport on its own metal.
    What a reader saw
    A heading is read on its own and often read alone, and this one said the opposite of the page beneath it — which then prints a 25-row chart of Belfast fares. A reader skimming could have concluded Belfast cannot be flown to from the US at all.
    How it was found
    Reading the page's headings against its own charts. The body was precise throughout and the absence it described was a carrier-grid absence, properly declared in the data; the heading dropped the scope and became a claim about the market. The same mistake has its own guard elsewhere on the site — a test requiring a stated absence to name the scope that measured it — and a heading of four words was short enough to slip under it.
    Fix
    Scoped to "No single airline sells Belfast in our grid", which is what the section evidences. The distinction is the one the whole dataset rests on: a route that returns nothing is recorded as returning nothing, so a collection failure can never pass itself off as a market with nothing to sell. Narrowed again on 2026-10-01 to name the airport that was searched; see the entry below.
  20. ClaimWas live

    Thirty guides said the grid showed where the cheapest weeks fell; the grid records no week

    What was wrong
    Twenty-five departure-city guides and five country guides answered "when is the cheapest time to fly" with "nearly every cheapest-week result in our grid landed in those windows regardless of departure city", and thirty-six pages stated that summer is roughly double as if it were measured.
    What a reader saw
    Live since each guide was published, and inside FAQPage structured data. The window was observed week by week for Boston alone during the August 30 search, then written into every other gateway's answer as a finding about the grid. The grid stores the fare and not the week, so it could not support the sentence for any gateway, and it has never priced summer at all.
    How it was found
    The cheap-flights hub rewrite, when its own FAQ had to say what the data supported and the departure guides were checked for consistency with it.
    Fix
    Every answer now attributes the window to the Boston check and calls it a working assumption elsewhere; every summer multiple is labeled a rule of thumb from nine years of flying, not a grid figure. The grid gains a week field, required on every row from the September 2026 refresh, so the next snapshot can measure what these pages currently assume. seasonality-claims.test.ts pins the wording until then.
  21. DataWas live

    "44 of 51 flag-carrier home routes were beaten" was a partial-grid figure on four pages

    What was wrong
    The best-airlines FAQ said 44 of 51 flag-carrier home-hub routes were beaten by another airline. That was true of the grid before the last fourteen gateways were added. The complete grid has 130 such routes and 112 beaten. The figure was then copied into three new route pages on the same day.
    What a reader saw
    The claim's direction was right — flag carriers do lose their own routes, and by a larger margin than stated — but the numbers a reader saw were from a dataset two sweeps old, inside FAQPage structured data on the site's flagship airline page.
    How it was found
    Being asked whether five new pages were up to standard and rereading them as a reviewer: every supporting figure that was prose rather than a token was checked against the libs. This one was wrong.
    Fix
    Two stat kinds, flagHomeRoutes and flagHomeBeaten, replace the typed figure everywhere it appeared, and published-claims.test.ts pins that beaten stays a clear majority. Fifteen stat kinds were added in the same sweep so city medians, ranks, gateway ranks and swap savings are read rather than typed on eleven pages.
  22. ClaimWas live

    Boston was called Dublin's second-cheapest gateway; it is the cheapest

    What was wrong
    The Boston-to-Dublin page said Boston was Dublin's second-cheapest US gateway. Boston is the cheapest of all 26, at $518, with New York second at $520.
    What a reader saw
    Live for about an hour. Understated the page's own argument — a Boston reader was told their airport was one place worse for this route than it actually is.
    How it was found
    The same review pass: a claim about ranking that had been written from memory rather than read from the grid.
    Fix
    Read from the grid via cityLow and pinned in published-claims.test.ts.
  23. ReachabilityWas live

    Two UK country pages were live at once, with different titles

    What was wrong
    The written guide sits at /cheap-flights/to-the-uk. The generated country page took its slug from the country name, /cheap-flights/to-united-kingdom, so the article-replaces-generated rule never fired and both were published and in the sitemap.
    What a reader saw
    Live from 2026-09-01 to 2026-09-03. Two of our own URLs competed for one query, and the generated one carried the category-label title the site had already moved away from: "Cheap Flights to United Kingdom: Which City Is Cheapest".
    How it was found
    A build-artifact audit of every rendered page: titles, descriptions, canonicals, links, structured data. The generated page surfaced as the only country page with a truncated description, and reading it showed the duplicate.
    Fix
    The generated slug for the United Kingdom now matches the article, so the article wins; the old URL redirects permanently; a test requires every written country guide to sit on a generated slug; and the generic country title form is banned.
  24. ClaimWas live

    The airlines hub still described the carrier grid as five US origins

    What was wrong
    The hub's description and one FAQ answer said the grid covered 5 US origins. It has covered all 26 since 2026-09-01, and a test banned the phrase in articles but did not scan the hub page.
    What a reader saw
    Live for two days after the grid was completed, including in the description shown in search results. It understated the dataset behind every figure on the page by a factor of five.
    How it was found
    A head-term audit of the three main pillars, reading the hub's rendered description. The phrase is now computed from the grid, and a test scans every rendered route for that class of wording.
    Fix
    Computed from GRID_ORIGINS; the ban extends to src/app.
  25. ClaimCaught pre-publish

    The Delta economy review nearly said none of Delta's cheapest routes start in Boston

    What was wrong
    The draft said not one of Delta's 58 ties for cheapest started in Boston or New York. One does: Boston to Edinburgh, a connection whose connecting airport the collection could not read.
    What a reader saw
    None. The test pinning the claim failed before the page was built, and the sentence was corrected to say one Boston route and no New York ones.
    How it was found
    published-claims.test.ts, which checks every departure of a tied route against the grid rather than trusting the summary.
    Fix
    Sentence corrected; the test now names the Boston exception explicitly so a refresh that changes it fails loudly.
  26. DataWas live

    Two headline stats on the cheap-flights hub were mislabeled

    What was wrong
    "$418, lowest fare in the grid, to Stockholm" was the cheapest city's floor, not the grid's lowest fare, which was $388 from Washington to Helsinki. "37 departure-city guides" counted every article in the hub; there are 26.
    What a reader saw
    Live since the hub was built. A reader comparing the strip with the bars directly beneath it could see a lower fare than the one labeled lowest.
    How it was found
    A review of the hub's above-the-fold copy against the grid. Each stat computed its own number with its own label; they now come from one function, and a test checks them against the raw fares.
    Fix
    Labels corrected and sourced from cheapFlightsHubFacts(), pinned in hub-copy.test.ts.
  27. ClaimWas live

    The Premium alert box said most fares on the page came from Going alerts

    What was wrong
    The shared Premium call-to-action read "Most of the round trips in this guide surfaced as Going alerts." Every fare on those pages came from the site's own one-day collection on Google Flights, as the pages themselves say.
    What a reader saw
    Live on every page carrying the Premium tier, including the cheap-flights hub. It misdescribed the provenance of the site's own data inside an affiliate pitch, which is the worst place to be wrong about it.
    How it was found
    A copy audit of the hub prompted by a question about its headline; the sentence was in a shared component and so appeared everywhere the tier did.
    Fix
    Rewritten to say what alerts are actually for: fares below the floor that last days. A test bans the provenance claim across the app.
  28. ClaimWas live

    Saga Premium's flat-bed premium was published ten times too high

    What was wrong
    The Icelandair review priced the upgrade from Saga Premium to a verified lie-flat seat at $269 to $3,357 across five routes, and concluded there was no general answer - an obvious yes on one route and an obvious no on another. Both the range and the conclusion came from a business grid covering five US origins. Against the completed 26-origin grid the range is $31 to $823.
    What a reader saw
    The page told readers a real flat bed cost $3,357 more from New York to Paris. It costs $464. On New York to Rome it quoted $269 where the true figure is $31 - close enough to free that it inverts the recommendation, and the page argued the opposite for as long as the partial grid stood. All five rows of the comparison table, all five named rivals, the meta description and an FAQ answer feeding FAQPage structured data were wrong.
    How it was found
    A sweep that parsed every hand-typed FareTable in content/ and checked each fare against the libs. It flagged 20 rows across 59 articles; most were the checker mistaking metro codes for airport codes, and three were real. This was the worst. The same sweep confirmed the two Icelandair economy tables were correct to the dollar, which is why the business one stood out.
    Fix
    Replaced the table with a CarrierVsField component that reads the grid and computes both the rival and the gap, with a lie-flat option so the editorial rule - compare only against cabins we have verified - is enforced in code rather than remembered. Rewrote the prose, the FAQ answer and the description, and pinned the new range in published-claims.test.ts. Air Serbia, named on the old page as an unverified coverage gap, had its cabin verified on 2026-09-01 and is the reason the premium collapsed.
  29. DataWas live

    Two different medians were in use, and the gateway pages had the wrong one

    What was wrong
    Every carrier-grid figure on the departure-city pages used the upper-middle element of an even-length set rather than the average of the middle two, which is not the median and is not what median() in lib/fares computes. The city-grid figures on the same pages used the real one. Twenty-one gateway medians differed, by $1 to $163.
    What a reader saw
    Readers saw two definitions of the word median on one page. Denver's business median was published at $4,731 against a true $4,568, which also put it 12th of 26 when it is 9th; Atlanta, Los Angeles and Seattle each moved a place with it. Five gateway-to-gateway gaps the pages tell readers to act on were wrong, and Raleigh was published as fourteenth of the 26 when it is thirteenth.
    How it was found
    A new test that parses every hand-typed FareTable in content/ and checks each figure against the libs. It flagged Atlanta's economy median as $4 out, which looked like a transcription slip until the same $4 turned up as a definition difference across twenty other gateways.
    Fix
    Switched everything to median() from lib/fares, corrected 21 medians and every figure derived from them - ordinals, positioning gaps and cross-references - and replaced the two worst-affected tables with computed components. The checker is now a permanent test, and the business ordinals are pinned.
  30. DataWas live

    Edinburgh's row on the cheapest-places table was wrong three ways

    What was wrong
    The expensive-end table on /cheap-flights/cheapest-places published Edinburgh at a $846 median with a cheapest fare of $683 from New York. The median is $817, the cheapest fare is $628, and it is from Orlando. Four other cities on the same table were $1 to $5 out, and the prose beneath it quoted Edinburgh at $846 against London at $756 when London is $771.
    What a reader saw
    A reader comparing gateways for Edinburgh was pointed at New York and shown a fare $55 above the real floor, on the page whose opening paragraph promises rankings by median across all 26 gateways rather than by a single lucky fare. Getting the cheapest gateway wrong is the specific failure that page exists to prevent.
    How it was found
    Extending the FareTable checker to the city-grid master tables. Whoever wrote the row appears to have read New York's fare as the minimum without sorting the column, which is exactly what a computed table makes impossible.
    Fix
    Both tables on that page are now a CityRanking component reading rankedCities(), so the order and every figure follow the data. Corrected the prose figures and pinned the Edinburgh-London relationship as a claim. Checker coverage went from 23% of hand-typed rows to 35%.
  31. DataWas live

    Three more cabin reviews were still quoting the partial business grid

    What was wrong
    The Air France, British Airways and KLM reviews each carried a one-row business comparison written against the five-origin business grid and never regenerated after it reached 26. Air France published $5,711 against Icelandair at $2,354 where the figures are $5,710 and $2,336; British Airways $6,051 against $2,356 where they are $6,047 and $2,338; KLM $11,981 against $2,404 where the rival is $2,386. The New York departure page had a Lisbon row $20 out.
    What a reader saw
    Same failure as the Icelandair flat-bed premium found earlier the same day, on three more pages. KLM's wrong figure propagated into its meta description and a closing link; Air France's into a points break-even quoted at 131,000 points that is 130,000.
    How it was found
    Extending the FareTable checker to carrier-versus-rival tables. It also exposed a bug in the checker itself: guessing the cabin from the size of the fare put British Airways' ECONOMY table in the business grid, because BA really does quote $3,751 for economy on a route it barely serves. The checker now reads the cabin from the table's own source line.
    Fix
    All three business tables are now CarrierVsField components reading the grid, and the surrounding prose, description and break-evens were corrected. Checker coverage of hand-typed rows went from 35% to 54%.
  32. ClaimWas live

    The best-business-class ranking omitted the five carriers at the top of it

    What was wrong
    The ranking table on /airlines/best-business-class-to-europe was written before the 2026-09-01 cabin sweep and never regenerated. It began at Lufthansa on 8.8 and did not contain Qatar, Etihad, Royal Jordanian, Royal Air Maroc or Edelweiss - the five carriers that actually lead it, three of them tied at 9.3. Its Value column also predated the fix that made valueScore cabin-aware, so ten carriers carried a Value taken from the economy grid: SAS shown as 9 where its business Value is 7, KLM as 6 where it is 2.
    What a reader saw
    A page titled 'the best business class to Europe' published a ranking missing every carrier at the top of it, with scores computed from the wrong cabin. The prose beneath it was correct and even described the cabin sweep, which is what made the gap invisible: the argument said one thing and the table said another. Both of its route tables were stale too, understating Virgin Atlantic's New York-London fare by $797.
    How it was found
    Extending the FareTable checker to product-score tables, comparing only the literal cells and leaving the {{token}} cells alone. Two rows of that table already used tokens and were correct; the fifteen typed ones were not.
    Fix
    Every table on the page is now a component - ProductRanking, RouteWithSeats, ConnectionVsNonstop and CabinMultiple - so the ranking, its order and its membership all follow the cabin grid. Corrected the description and six prose figures derived from the stale tables.
  33. ClaimWas live

    Five pages still described the carrier grid as covering five origins

    What was wrong
    The carrier grid reached all 26 US gateways on 2026-09-01, and AGENTS.md records that every page carrying an 'origins collected so far' qualifier could drop it. Five did not. The Miami page said 'Miami is not yet one of them' about a gateway we price 20 airlines and 41 routes for. The Austin page said the grid 'currently covers five US origins - none of them in Texas' after the Texas sweep had run. The flag-carrier finding was published as '44 of 51 lost from all five gateways' when the completed grid has 140 such routes across 24 gateways and the carrier loses 122.
    What a reader saw
    Two pages told readers we could not answer a question we had already answered for their airport, and pointed them at a collection we had finished. The 44-of-51 figure was cited from two other pages, so the stale number traveled.
    How it was found
    A guard already existed for this and was too narrow: it matched the exact phrase 'We have not yet priced carrier-level' and Miami's page said 'Miami is not yet one of them' instead. Widened to five patterns, with an exemption for sentences that describe the partial grid in the past tense, which the correction notes on three pages legitimately do.
    Fix
    Corrected all five, using the {{gridOrigins}} token where the figure is just the origin count so it cannot drift again. The flag-carrier table is now a FlagCarrierPremium component computing the routes and premiums from the grid.
  34. ClaimWas live

    Delta versus United was published from an eighteen-route sample

    What was wrong
    The comparison said the two carriers overlapped on 18 city pairs, that United was cheaper on 10 and Delta on 8, and concluded "there is no cheaper airline of the two". The grid had since grown to 162 shared business routes, on which United is cheaper on 112 and Delta on 48.
    What a reader saw
    A reader choosing between the two was told the question had no answer. It has one, and it is United by better than two to one. The 18-route figure also sat inside FAQPage structured data, so it was the version Google held.
    How it was found
    Writing three new head-to-heads and building a component to render the shared-route counts. Every other comparison computed its figures; this one still had them typed, and the difference was visible the moment they sat side by side.
    Fix
    The section is rewritten from the grid via <HeadToHead> and pair tokens, and the page now says what the earlier version got wrong and why. Ten pair tokens exist so no head-to-head has to type a count again, and published-claims.test.ts pins the verdict.
  35. ClaimCaught pre-publish

    Icelandair was called the only carrier cheapest in both cabins

    What was wrong
    AGENTS.md and a draft Dispatch item said Icelandair was the only airline with a $0 median premium in both economy and business. Discover Airlines and Edelweiss also reach it — on 11 and 10 routes, and 4 and 3, against Icelandair's 150 and 174.
    What a reader saw
    None to readers: the test that pins the claim failed before the issue was sent. It would have been the lead item of the first weekly email.
    How it was found
    Writing the test for the claim rather than for the number. The figure — a $0 median premium — was correct; the word "only" was not, and no check on the figure would ever have caught it.
    Fix
    The copy now says Icelandair is the only one whose zero is a fact about the airline rather than about a handful of city pairs, which is the true and more useful statement. AGENTS.md carries the correction with the old wording named as wrong.
  36. DataWas live

    The airlines pillar described a five-gateway grid it no longer used

    What was wrong
    Its method section said "948 round trips", "five US gateways", "235 pairs, of which 193 returned a fare", and "Value is computed from economy fares". All four were true of an earlier collection. The grid now covers all 26 gateways, and Value for a business review comes from business fares.
    What a reader saw
    The page's rankings were current; the paragraph explaining how they were produced was not. A reader checking our method against our numbers would have found them inconsistent, on the page whose whole argument is that we measured it.
    How it was found
    Reading the tail of the file while adding internal links to it. Nothing about the figures triggered a test, because prose in a method section is not a claim any test was pinning.
    Fix
    Rewritten from the grids via <Stat>, so the method section moves when the grid does.
  37. ReachabilityWas live

    Six articles had no editorial link pointing at them

    What was wrong
    AGENTS.md has always required links "up to the hub, across 2-3 siblings", and nothing enforced the sibling half. Six published articles had zero inbound editorial links and seventeen had exactly one.
    What a reader saw
    Hub pages list every article, so none of them was unreachable — but each was reachable only by someone already on the hub, which is the traffic those pages were least likely to receive.
    How it was found
    Counting inbound markdown links across the whole content tree after publishing ten new pages, rather than assuming the new ones were linked because they linked outward.
    Fix
    Contextual links added from articles that already discussed each subject by name, and internal-links.test.ts now fails when an article has fewer than two inbound links or when they all come from a single source.
  38. EditorialCaught pre-publish

    A British spelling passed the guard written to catch it

    What was wrong
    "Least favourable" was written into the Avios guide. The US-English test enumerated favour, favours, favoured, favouring, favourite and favourites — every form somebody had thought of, and not the one that got written.
    What a reader saw
    Caught before publishing. The site's pitch is an American who flies out of Boston, so a British spelling undercuts the voice before a reader reaches the substance.
    How it was found
    A manual sweep of the new files, after the automated guard passed them.
    Fix
    The pattern now matches the stem with any suffix rather than a list of endings — the failure that file's own header already described, repeated on a word the header did not list.
  39. DataWas live

    Three departure-city pages named the wrong second-cheapest airport

    What was wrong
    Seattle's page gave Stockholm's next-cheapest US gateway as Boston at $437, when it is New York at $422 and Boston is sixth; it put Seattle's margin at $19 rather than $4, claimed Seattle beat New York on that route by $108 when the figure is $4, stated a median gap of $95 that is $91, and counted four cities where Seattle beats New York when there are five. Los Angeles named Chicago as the runner-up on Santorini where it is Boston, and Orlando to Salzburg where it is New York. Orlando's own table priced New York's London fare at $538 and Seville at $563, both $12 over.
    What a reader saw
    A reader comparing airports was pointed at the wrong alternative. On Seattle-Stockholm the page overstated the advantage over New York by a factor of 27, which is the kind of number someone books a positioning flight on.
    How it was found
    Writing six new departure-city pages and building a test for their tables first. The check reads each FareTable's column headers and holds the documented ones to the grid — own fare, national rank, difference against New York, and next-cheapest gateway. It failed on five pages the first time it ran, three of them already published, and caught two errors in the new pages before they shipped.
    Fix
    All figures corrected and `gateway-tables.test.ts` added, so a column that claims a relationship is now checked against the data rather than trusted. The existing tests verified counts and word floors; none of them could see a claim about which airport is second-cheapest, which is exactly the class of thing a fare page is for.
  40. ClaimWas live

    We said British Airways never wins against real competition. It does.

    What was wrong
    The British Airways review reported six wins across 76 routes at a $189 median premium, said every win was an Orlando pair where BA was the only carrier selling the route, and concluded: "Against actual competition, across seventy routes, it wins nothing." On the current grid BA prices 159 routes at a $111 median premium and is cheapest on 26, seventeen of them against three to five competing carriers.
    What a reader saw
    A reader deciding whether British Airways could ever be the cheapest option was told, in a sentence built to be memorable, that it could not. From Dallas, Houston and Austin it frequently is — DFW to Barcelona at $747 against five carriers, DFW to Copenhagen at $751 against four.
    How it was found
    Extending the carrier grid to Texas. The claim was true of a five-origin grid weighted to the Northeast, where Lisbon, Keflavik and Copenhagen connections undercut Heathrow on nearly everything. Texas has no service from those carriers at all, so British Airways is competing against other flag carriers rather than against low-premium connectors, and it wins.
    Fix
    The review now leads with the correction rather than burying it, states 26 wins of which 17 are contested, and explains the structural reason: Texas reaches Europe through flag-carrier hubs and Heathrow is the one BA owns. The old figure is described in place rather than deleted.
  41. ClaimWas live

    SAS was described as the widest-reaching carrier in our grid. It is seventh.

    What was wrong
    Four pages described SAS as priced on more routes than any other carrier, most explicitly "97 of the 193 routes in that grid - half of it, and more than any other carrier by nineteen routes". After the Texas sweep Lufthansa and British Airways each price 159 routes and Turkish Airlines 156, against SAS's unchanged 97.
    What a reader saw
    The SAS review's central argument was reach — start here if your route is obscure. That advice is still defensible on price, where SAS is fifth-cheapest of 29, but the claim that supported it was overtaken and briefly kept being published as the grid grew underneath it.
    How it was found
    A grep for stale figures after the Texas sweep, prompted by the tests catching only the counts they pin. Reach was never pinned by a test, which is why it survived two expansions before being checked.
    Fix
    Every instance rewritten to lead with price rather than reach, and to say plainly that Copenhagen serves the Northeast and the north and does not serve Texas. A carrier's rank on a metric nobody pinned is exactly the kind of claim that rots quietly.
  42. ClaimWas live

    Our Delta vs United verdict reversed, and the cabins never changed

    What was wrong
    The head-to-head said "Delta wins on product, 8.8 to 7.8", in the title, the description and the body. On the current grid United scores 8.3 and Delta 7.8.
    What a reader saw
    A reader choosing between the two big US carriers for a transatlantic business fare was given the wrong verdict on the page written to settle exactly that question.
    How it was found
    An audit comparing every review's declared ratings against the live scoring functions, run after the Texas sweep. Nothing else would have caught it: the ratings are frontmatter, the scores are computed, and no test connected them.
    Fix
    The page now leads with the reversal and its cause. Neither cabin changed — Delta still wins seat 10 to 8 and screens 10 to 8. Value is computed from fares across every route a carrier flies, and going from five US origins to ten put Delta at a $326 median premium against United's $103, which is a larger gap than the cabin advantage. A test now pins every review's ratings to the live scores.
  43. Structured dataWas live

    Three reviews published stale Value scores in Review structured data

    What was wrong
    British Airways declared a Value of 5 where the data computed 7, Finnair 7 against 8, and KLM 4 against 6. Those numbers are copied into schema.org Review markup, so the ratings offered to search engines were wrong as well as the ones on the page.
    What a reader saw
    Three carriers were scored lower than their own fare data supported, on pages whose entire claim is that the scoring is computed rather than opinionated.
    How it was found
    Auditing declared frontmatter ratings against `valueScore()` and `scoreProduct()`. Value is recomputed from fares on every sweep while the frontmatter is hand-written, so the two drift apart silently every time the grid grows — twice now.
    Fix
    All three corrected, and `content.test.ts` now fails if any review's seat, screens, lounge or value differs from the live computation. It will fire on the next expansion, which is the intent: the fix is to update the review, never to relax the check.
  44. DataWas live

    The Boston page understated its own floor by $10

    What was wrong
    The Boston pillar said the cheapest round trip to anywhere in Europe was "about $380 to Helsinki", twice — in the body and in an FAQ answer. The grid says $390, and the same page's own fare table said $390 in four other places.
    What a reader saw
    Ten dollars, on the one page that exists to back the site's most public claim: that Jon regularly flies Boston to Europe for under $300. A reader checking that claim reads this page, and it disagreed with itself.
    How it was found
    Re-reading the page while checking whether the under-$300 claim was evidenced. The claim itself holds up — the page states the searchable floor plainly and explains that sub-$300 fares are drops and award space rather than something you can search for — but the floor it stated was not the floor in the data.
    Fix
    Both instances corrected to $390, matching the table above them and the grid behind it.
  45. DataWas live

    A fixed-week fare had been filled in from the flexible-date grid

    What was wrong
    The carrier grid held $422 for Icelandair, New York to Reykjavik. That is the CITY grid's figure for the same pair — the cheapest one-week trip anywhere in six months — and the carrier grid requires every carrier priced for one fixed week. Re-priced on the original source, Icelandair for that week is $600.
    What a reader saw
    Icelandair's cheapest route looked $178 cheaper than it was, and the Icelandair review called $422 the lowest fare in the whole carrier grid. It also flowed into British Airways, which flies the same route: its median premium was published as $254 and is $215.
    How it was found
    A cross-check of eight routes against an independent source. Seven agreed within 7%; Reykjavik was 29% apart, which is the size of gap that means a bad row rather than fare movement. Re-pricing on the original source confirmed it. The two grids agreeing to the dollar was the tell — an independent capture has no reason to land on the same number.
    Fix
    Row corrected to $600. Every figure it fed was recomputed rather than edited: the Icelandair review's table and two of its claims, the British Airways premium in three articles and its premium table, and the pinned test. A sweep for the same signature across all 119 comparable pairs found three more exact matches; all three were checked and all three are genuine.
  46. ClaimWas live

    The SAS review claimed a record its own data did not support

    What was wrong
    It described $558, New York to Copenhagen, as "the lowest single fare in our entire carrier grid". It is the fourth lowest of 175 fares, behind Norse Atlantic at $461 and two TAP fares into Madrid.
    What a reader saw
    A superlative that overstated SAS by three places.
    How it was found
    Searching every article for claims about the grid's lowest fare while correcting a different one, rather than checking only the article being edited.
    Fix
    Rewritten to say what is true: SAS's own cheapest fare, and where it actually ranks.
  47. ReachabilityWas live

    A finished tool was live with nothing linking to it

    What was wrong
    The Europe Flight Plan was deployed and working — nine questions, server-side scoring, Club signup — with no inbound links from anywhere on the site and no sitemap entry.
    What a reader saw
    The only way to reach it was to type the URL. No reader and no search engine had ever seen it.
    How it was found
    Auditing the sitemap against the built pages against the internal link graph, which is a different question from whether links are dead.
    Fix
    Registered as a live tool, linked from the home page and /tools, and added to the sitemap. A test now fails the build if any live tool points at a route that does not exist.
  48. ClaimWas live

    Thirty-three sentences said fourteen carriers when there were fifteen

    What was wrong
    Adding Iberia's cabin products moved the rubric set from fourteen carriers to fifteen. Thirty-three sentences across thirteen articles still said fourteen, including the description and FAQ answers of the ranking article itself.
    What a reader saw
    The home page was correct throughout, because it computes the number. Every article that had it typed by hand was wrong.
    How it was found
    Checking a count in an article against the library that produces it, while writing an unrelated review.
    Fix
    All thirty-three corrected. A test now fails the build on any carrier or cabin-product count in prose that no dataset supports.
  49. ClaimWas live

    Three 'the only' claims had quietly become false

    What was wrong
    Three superlatives were true when written and false by the time they were checked: that British Airways and Virgin Atlantic were the only pair tying on every dimension (three pairs do), that Aer Lingus was the only carrier whose long-haul cabins score identically (United's do too), and that British Airways was the only carrier where the same fare buys a 10 or a 5 (Lufthansa and KLM do it as well).
    What a reader saw
    Three articles asserted uniqueness that the data no longer supported. A fourth such claim was checked and held.
    How it was found
    Testing a superlative against the dataset instead of trusting it, then testing every other superlative on the site once the first one failed.
    Fix
    All three rewritten around what is actually distinctive. The facts behind them are now pinned by tests, so the next dataset change fails the build rather than the sentence going stale.
  50. ClaimWas live

    A statistic was labeled as something it did not measure

    What was wrong
    A function named for aisle access actually compared seat scores, which include the privacy door. Three of the seven carriers it returned have identical aisle access on every aircraft.
    What a reader saw
    The home page and the comparison hub both showed 7 of 15 next to a sentence about direct aisle access. The correct figure for aisle access is 4.
    How it was found
    Noticing that a carrier appeared in the results whose two cabins both have direct aisle access, and checking what the function actually compared.
    Fix
    Split into two measures with accurate names — cabin varies by aircraft (7) and aisle access varies (4) — and both surfaces now state which is which.
  51. DataWas live

    Virgin Atlantic was published as $1,688 dearer than British Airways. It is $126 cheaper.

    What was wrong
    The Virgin Atlantic review was titled and argued around a $1,688 business-class gap on New York to London — Virgin at $6,989 against British Airways at $5,301. Re-collecting the same route, same cabin, same travel week returned Virgin at $5,175 against BA at $5,301.
    What a reader saw
    The page told readers Virgin cost 32% more for an identical product and framed the whole decision as whether a better worst case was worth $1,688. On the current data there is no premium to justify: Virgin is the cheaper of the two.
    How it was found
    Re-pricing the five business routes on the same day as the full economy grid, using the same extraction, rather than carrying the previous collection forward. Every other anchor on that route came back identical to the dollar — Icelandair $2,356, Air Serbia $3,057, TAP $3,333, BA $5,301, Delta $8,631 — which is what makes the Virgin row a real move rather than a methodology difference.
    Fix
    Article retitled and rewritten around what the data now shows, with the retraction left in the section that made the original claim rather than deleted.
  52. ClaimWas live

    The flag-carrier premium does not grow with distance from Europe

    What was wrong
    The airline ranking said the premium a flag carrier charges into its own hub widened the further west you departed, citing Lufthansa into Frankfurt at $206 from New York, $520 from Chicago and $1,231 from Los Angeles.
    What a reader saw
    A tidy causal story that a reader could have used to predict fares from their own city. It would have told a Los Angeles reader to expect the worst flag-carrier premium in the dataset, when LAX is now Lufthansa's narrowest at $10.
    How it was found
    A pinned test that asserted the ordering rather than the conclusion, written when the claim was made specifically so a later collection would break it loudly. Completing the grid to all five gateways broke it on the first run.
    Fix
    Claim replaced with the mechanism it was a coincidence of — the premium is set by whether any carrier will route that city pair through its own hub, not by distance — and the test now pins the mechanism.
  53. DataCaught pre-publish

    The carrier grid was extended by choosing routes that helped specific carriers

    What was wrong
    The first attempt to widen the 22-route carrier grid picked five new routes because they would give under-covered carriers enough data to rank. TAP was cheapest on four of the five, which moved it from fourth to first in the price ranking and displaced Icelandair.
    What a reader saw
    None. The bias was caught before the expanded data was published, and the affected rows were reverted rather than shipped.
    How it was found
    Noticing that the carrier which benefited most from the new routes was the carrier the routes had been selected to help, and that no route had been added which could have hurt it.
    Fix
    Data discarded. The route list now lives in src/data/carrier-grid-plan.ts as a frozen cross-product with a test asserting nothing has been curated out, and the grid was re-collected in full against it.
  54. DataWas live

    The carrier grid could not measure Aer Lingus at its own hub

    What was wrong
    Every Aer Lingus fare we published connected THROUGH Dublin, because Dublin was not one of the twelve destinations the carrier grid priced. The single market where that airline should be strongest was the only market in which it could not be measured, and the review said it was 'cheapest on none of 18 routes' without noting the omission.
    What a reader saw
    A reader comparing Aer Lingus on its own home route had nothing to go on. Pricing Dublin properly shows its nonstop losing to a connecting carrier from all four US gateways that fly it — by $70 from Boston, $80 from New York, $266 from Los Angeles and $386 from Chicago. Munich, Barcelona, Milan, Athens and Vienna had the same shape.
    How it was found
    A reader asking whether there were missing routes — specifically whether US airports have nonstops to other major European airports. Checking the carrier grid's twelve destinations against our own 41-city fare grid showed they overlapped on only nine cities, and that every hub carrier's home airport was either missing or was the one thing being measured.
    Fix
    The destination set is now derived from the city grid's own list rather than inherited: 47 airports, 235 planned routes, 193 priced. Two tests enforce it — one that every city-grid city is a carrier-grid destination, and one that no destination can be removed without an explicit recorded reason.
  55. ClaimWas live

    Royal Air Maroc was not cheapest on every route it flies

    What was wrong
    Published this morning: 'Royal Air Maroc was the cheapest carrier on all nine Los Angeles routes we priced it on. Not competitive on. Cheapest, on every one.' It was true of the nine routes then in the grid.
    What a reader saw
    A perfect record reads as a property of the airline. At 18 routes it wins 15, and every win is from Los Angeles — the three losses are its New York routes, plus Bordeaux from LAX where Air France is genuinely better placed. Casablanca is a West Coast story, not a Royal Air Maroc story.
    How it was found
    Expanding the destination set from 12 airports to 47 in the same collection. The claim survived nine observations and died at eighteen, which is what a superlative drawn from a single gateway does.
    Fix
    Claim restated as 'cheapest on 14 of 15 LAX routes, and it wins nothing from anywhere else', with a pinned test asserting both the count and that every win is a Los Angeles pair.
  56. DataCaught pre-publish

    A guard against dead routes was checking the city pair, not the airline

    What was wrong
    The test keeping withdrawn routes out of the fare grid matched on origin and destination alone. LEVEL withdrew Barcelona-Boston; once Barcelona became a destination, it flagged TAP's perfectly live Boston-Barcelona fare — and 23 others — as ghosts of dead routes.
    What a reader saw
    None to readers: the test failed loudly on the first build after the expansion rather than removing anything. Had it been written the other way round, it would have deleted valid fares on any city pair whose only nonstop had ever been cut.
    How it was found
    The expansion. A twelve-airport grid contained none of the withdrawn pairs, so the bug was unreachable until Barcelona, Milan and the others were priced.
    Fix
    Now matches carrier AND route, so a withdrawn airline stays out while the city pair stays priced. A second test asserts the pairs remain flyable, because a grid that dropped them would tell a reader Barcelona cannot be reached from Boston.
  57. ReachabilityWas live

    Carrier fares were missing from 27 of the 41 city pages

    What was wrong
    The map joining carrier-grid airports to city entities was written by hand for the twelve-destination grid and never updated when that grid was expanded to forty-seven. It listed ten airports. Every city outside those ten returned no carrier fares at all.
    What a reader saw
    Dublin, Vienna, Athens, Munich, Barcelona and twenty-two other cities showed no airline comparison, on pages whose purpose is comparing airlines. The fares existed and had been collected the day before; nothing on the page said they were missing, so the pages read as though no carrier flew there worth naming.
    How it was found
    Building the assessment's route readout on the same helper. It returned nothing for Dublin, which is served by four US gateways in our own grid, and a route that obviously exists coming back empty is the cheapest possible signal that the lookup rather than the data is wrong.
    Fix
    The map is now derived as the exact inverse of the expansion the collection plan performs, so a city added to the fare grid appears automatically and the two cannot drift apart again. A test asserts coverage stays above thirty cities, which the hand-written version would have failed.
  58. DataWas live

    Boston to Milan was recorded $255 too high

    What was wrong
    The city grid held $846 for Boston to Milan. The true cheapest round trip that day was $591 — a 30% error, and the largest single mistake this site has published.
    What a reader saw
    Milan had become the headline example in four comparison tables. The error made Boston's Milan nonstop premium read as $16 when it was $271, which inverted the advice on that route.
    How it was found
    The Google Flights Explore map labels every city with its own cheapest fare, so one screenshot cross-checks about sixteen cities at once against the grid. Fourteen of sixteen matched to the dollar, one was off $17, and Milan was off $255. Exact agreement is the norm, so any double-digit gap is a bad row rather than price movement.
    Fix
    Row corrected and the six articles quoting it regenerated from the library rather than retyped.
  59. DataWas live

    Published tables had drifted from the data behind them

    What was wrong
    Twelve of 26 gateway rows and six of 15 city rows disagreed with src/lib/fares.ts, almost all by a single dollar.
    What a reader saw
    Individually harmless. Collectively it meant the tables readers screenshot and the pages computing from the same data disagreed with each other.
    How it was found
    Regenerating every table from the library and diffing it against what was published, rather than reading the two side by side.
    Fix
    All tables regenerated from src/lib/fares.ts. Hand-transcribing a derived figure is now prohibited by the project's own conventions.
  60. DataWas live

    127 fares were higher than the lowest we had actually seen

    What was wrong
    A second collection sweep returned lower fares than the first on 127 city pairs, and the grid still held the higher number.
    What a reader saw
    Every affected city looked more expensive than the evidence supported, which is the wrong direction for a site about flying cheaply.
    How it was found
    Running a second full sweep and diffing it against the stored grid cell by cell.
    Fix
    All 127 cells lowered, and the methodology changed: where two sweeps on the same day disagree, the grid records the lower fare.
  61. DataWas live

    Comparison pages compared business fares against economy fares

    What was wrong
    The shared-route lookup keyed on route alone, ignoring cabin, so British Airways' $5,301 business fare on New York to Heathrow was matched against Virgin Atlantic's $815 economy fare on the same route.
    What a reader saw
    Thirty-five of 91 comparison pages contained at least one row comparing two different cabins as though they were the same product. One page's FAQ stated that every fare shown was economy, which was false on that page.
    How it was found
    Auditing every generated comparison row for cabin agreement between the two sides, rather than spot-checking pages.
    Fix
    The lookup now keys on route and cabin together. Zero of 253 rows mix cabins, and a test fails the build if any ever does.
  62. DataWas live

    Three cabins were recorded with a layout their aircraft cannot have

    What was wrong
    Icelandair's 737 MAX, TAP's A321LR and Aer Lingus's A321neo were each recorded as 2-2-2 — a twin-aisle layout on a single-aisle aircraft.
    What a reader saw
    Three business cabins were described with a seating arrangement that is physically impossible on those airframes, and the seat scores derived from it were wrong.
    How it was found
    A test asserting that every recorded layout is possible for the aircraft it is attached to. The root cause was that the layout type offered no 2-2 option, so 2-2-2 was the closest available value.
    Fix
    2-2 added to the layout type, all three records corrected, and the test now runs on every build.
  63. Structured dataWas live

    Review schema was reported as present and had never been emitted

    What was wrong
    An audit reported Review structured data as present on cabin reviews. No page had ever emitted it.
    What a reader saw
    Seven reviews were missing the structured data that makes a review eligible for rich results, while an internal check said otherwise.
    How it was found
    Re-running the audit against the rendered JSON-LD rather than the page text. The original check had matched the word "Review" in prose — a false positive from grepping HTML.
    Fix
    Ratings added to all seven reviews so the schema is generated from frontmatter, and the audit now parses JSON-LD instead of searching for a word.
  64. ClaimWas live

    PLAY was described as an operating airline

    What was wrong
    PLAY ceased operations on 29 September 2025. Two articles referred to it in the present tense and six airport records listed it as a current low-cost operator.
    What a reader saw
    Readers were pointed at an airline they could not book, on a site whose purpose is telling them what to book.
    How it was found
    A reader question — Jon asked whether PLAY was still flying.
    Fix
    A dataset of defunct carriers and withdrawn routes now exists, with cessation dates, and the airport records were rebuilt from it.
  65. EditorialWas live

    British spellings on a site written by an American

    What was wrong
    Nine British spellings across four reviews — programme, traveller, neighbour, favours.
    What a reader saw
    The site's credibility rests on being written by an American who flies out of Boston. British spelling undercuts that before a reader reaches the substance.
    How it was found
    A pattern sweep that matches suffixed and plural forms. An earlier sweep for "travelled" had missed "travelling", and one for "neighbour" had missed "neighbours"; both shipped.
    Fix
    Nineteen spelling patterns are now checked on every build.
  66. ReachabilityWas live

    Three thin pages were live without being declared

    What was wrong
    Generated routes rendered any slug that happened to resolve, rather than only the ones we had declared.
    What a reader saw
    Three thin pages were live and reachable without appearing in the sitemap.
    How it was found
    Comparing every page the framework would render against the list of pages actually declared.
    Fix
    All generated routes now refuse any slug outside their declared set.

Common questions

Why publish a corrections page at all?
Because every fare page here is a claim about a number, and numbers on a travel site go wrong in ways the reader cannot see: the underlying fare moves, a figure gets transcribed by hand and drifts from the data behind it, or a sentence that was true when written stops being true when the dataset grows. All three have happened on this site. A page that lists them is the only way to show that the numbers are maintained rather than posted once.
What counts as a correction here?
Anything that changed a published number, a published claim, or what a reader could reach. Code defects are included when a reader saw the result — a comparison table that mixed cabins is a correction, an internal refactor is not.
How are errors usually found?
Almost always by a check that compares the published figure against the data behind it, rather than by rereading the page. The largest error on this site — a fare recorded $255 too high — was caught by cross-checking a map that labels sixteen cities at once against the grid. Exact agreement is the norm there, so any double-digit gap is a bad row rather than price movement.
How do I report something that looks wrong?
Email the address on the contact page with the page and the figure. If it is wrong it gets fixed and listed here with the date. If it is right, the reasoning gets explained, which is usually more useful.

Found something that looks wrong? Tell us. If it is wrong it gets fixed and listed here. See also how we review for where the numbers come from in the first place.