Do Netflix’s rankings and Wikipedia attention agree?
Reconciling a first-party chart with a third-party signal across six markets
1 Summary
Streaming platforms publish their own charts. Independent measurement has to check those numbers against something the platform doesn’t control. I asked a simple version of that question: when Netflix says a title is big in a country, does the public’s attention agree?
I compared Netflix’s weekly Top 10 in six markets (Germany, France, Japan, Brazil, Italy, South Korea) with daily Wikipedia pageviews for the same titles in each market’s language, over the 12 Netflix weeks from 29 June 2026 to 20 September 2026. That covered 378 titles and 641 title-market pairs.
Three findings:
- Agreement depends on the market, not on the method. French TV (ρ = 0.70, 95% CI 0.53 to 0.85), German films and Korean TV agree clearly. In Brazilian films, Japanese TV and German TV the interval includes zero, so pageviews don’t reliably track Netflix there.
- Coverage limits this method more than disagreement does. Only 43% of charted title-market pairs have an article in the local language. Japan sits at 26% and Brazilian TV at 17%. The comparison only works for titles Wikipedia covers.
- Attention peaks in the release week, not before it. 62% of pageview peaks land in the title’s first chart week, most often on its closing Sunday. Films are the partial exception: 29% of them peak before they chart. Pageviews work as a same-week check, not an early warning.
I also built an interactive dashboard on Tableau Public with the agreement, coverage, and discrepancy results.
The Recommendations section turns these findings into six practical steps for a measurement team.
Methodology, the full list of contested matches, and supporting detail are in the appendix.
2 Agreement by market
After French TV, the strongest cells with enough data are German films (0.59) and Korean TV (0.55). German TV is the clearest case of no agreement: ρ = 0.04, with an interval from -0.37 to 0.42.
Week-to-week values swing far more than the pooled figure, because a typical week has only four to six titles with articles in a category. That is why the pooled value is the headline and the weekly values appear as a spread in the table below.
3 Coverage
The comparison only exists where a title has a Wikipedia article in the market’s language. Of 378 titles, 240 matched a Wikidata item. Of the 641 title-market pairs, 273 had a local-language article.
Films are covered better than TV in four of the six markets. Japan and South Korea are roughly even. Brazil’s Portuguese edition covers few of the TV shows that chart there, and the Japanese edition covers few titles of either kind. Articles also lag behind the chart; Appendix A shows where.
4 Timing
43% of all peaks fall on a Sunday, and 26% fall on the Sunday that closes the first chart week. That fits weekend viewing driving weekend lookups.
A second, smaller cluster sits on the Sunday just before the first chart week. Those are mostly films, and would fit titles that had a cinema run or a trailer campaign before reaching Netflix. I did not test that explanation.
Films also have a long early tail. 11% of films (17 of 153) peaked 29 or more days before they first charted, grouped at the left edge of the chart. This may reflect a theatrical release weeks or months before the streaming debut, when interest in the article was highest. That explanation is untested.
5 Largest discrepancies
A discrepancy is a week in which Netflix and pageviews place a title at least half the list apart. I only evaluate market-weeks with at least four titles, because in smaller sets a half-list gap is one or two positions.
To list persistent disagreements rather than one-off weeks, a title-market pair needs at least 3 evaluated weeks. Pairs are ranked by the share of those weeks that were flagged, then by mean normalized gap (0 means the same position, 1 means opposite ends). 56 pairs qualify. The table shows the top 10.
| Title | Market | Category | Direction | Weeks flagged | Share flagged | Mean normalized gap |
|---|---|---|---|---|---|---|
| Wild Sing | South Korea | Films | Netflix ahead | 4 of 4 | 100% | 0.56 |
| Spider-Man: Far from Home | South Korea | Films | Attention ahead | 4 of 4 | 100% | 0.50 |
| Badly in Love | Japan | TV | Netflix ahead | 6 of 7 | 86% | 0.59 |
| I am Solo | South Korea | TV | Netflix ahead | 4 of 5 | 80% | 0.68 |
| The Last House | Brazil | Films | Netflix ahead | 3 of 4 | 75% | 0.83 |
| Vivant | Japan | TV | Attention ahead | 8 of 11 | 73% | 0.58 |
| 13 Minutes † | Brazil | Films | Netflix ahead | 2 of 3 | 67% | 0.69 |
| People and Meat | South Korea | Films | Netflix ahead | 2 of 3 | 67% | 0.50 |
| The Last House | Italy | Films | Attention ahead | 2 of 3 | 67% | 0.37 |
| My Life With the Walter Boys | France | TV | Netflix ahead | 3 of 5 | 60% | 0.44 |
† 13 Minutes (Brazil): the flag likely points to a matching error, not a real disagreement. This pair is on the contested list: its Netflix ID points at the 2015 German film, while the title charting in 2026 may be the 2021 film of the same name. This is the intended use of the list: disagreements get checked for data problems before they’re read as audience behavior.
Possible explanations for three other rows. All are unverified.
- Spider-Man: Far from Home (South Korea), attention ahead. Franchise articles draw steady traffic from news about the wider series and new releases, whether or not people are watching the film on Netflix that week.
- Vivant (Japan), attention ahead. A domestic drama that aired on Japanese broadcast TV before streaming. Its article likely draws readers who watched it there, so attention runs ahead of its Netflix rank.
- The Last House (Brazil and Italy), opposite directions. The same film is Netflix ahead in Brazil and attention ahead in Italy. That points to differences between the two articles, such as how new or well linked each one is, more than to differences between audiences.
6 Recommendations
These are written for a measurement team deciding how far to trust a third-party signal in each market. The same questions apply whether the signal is Wikipedia pageviews or a panel vendor.
- Score each market separately before relying on a third-party source. Agreement ranged from clear (French TV, German films, Korean TV) to unreliable (Brazilian films, Japanese TV and German TV, where the interval includes zero). A single global number would have hidden that. I would publish a per-market agreement score with its interval, and use the source as a cross-check only where the interval sits clearly above zero.
- Measure coverage before trusting agreement. In Japan, only 26% of charted titles had a local-language article, and in Brazilian TV only 17%. Any validation there rests on a small slice of the catalog, likely skewed toward international releases. In those markets I would report coverage next to every agreement figure and look for a second, local signal before drawing conclusions.
- Reconcile after the week closes, on the same weekly calendar. Attention peaked in the release week, most often on its closing Sunday. The signal confirms how a title performed; it doesn’t predict it. I would run the comparison once each week’s data is complete, and never compare partial weeks.
- Treat every discrepancy as a possible data problem first. The flag on 13 Minutes in Brazil most likely points to a title-matching error, not a real gap in audience behavior. I would keep a weekly review list: check the mapping and the data first, then investigate the pairs that stay flagged week after week, such as The Last House in Brazil (flagged in 3 of 4 weeks).
- Own the title crosswalk. Title matching failed in two ways. Wrong matches came from stale identifiers, remakes and same-name titles: every contested match traced back to a newer title with the same name. Missed matches mostly came from titles with no Wikidata entry at all (73 of 138). A maintained mapping table with explicit rules, a review step for same-name titles, and a running list of unmapped titles protects every number built on top of it.
- Hold off on the domestic-title pattern. Germany and Italy pointed in opposite directions, on fewer than ten titles each. That needs more weeks of data before it informs any decision.
7 Limitations
- Language editions are not countries. Portuguese pageviews include Portugal, and German pageviews include Austria and Switzerland. See Appendix C.
- Coverage favors titles with articles, likely big international releases. Agreement measured on covered titles may not hold for the rest. See Appendix A.
- Some matches may still be wrong. 26 title-market pairs rest on a contested Netflix ID. See Appendix D.
- Pageviews measure attention, not viewing, and Netflix publishes ranks, not viewing numbers. Neither source is audience measurement. See Appendix C.
8 Applying this to audience measurement
The same design works with better inputs. Replace Netflix’s published ranks with a platform’s first-party viewing data (hours or completed views by title and country). Replace Wikipedia with a third-party panel or census measurement. The pipeline stays the same: map titles across sources, rank within comparable sets, measure agreement per market, and flag where the two diverge.
The failure modes found here carry over too. Title matching is the step most likely to go wrong silently, so I gave it explicit rules, logged every decision, and kept a contested list. Coverage gaps are measured and reported as metrics, not treated as noise. Weeks where one source has no data are treated as missing, not as zero.
With real viewing data on both sides, the useful outputs are the same as here. First, a per-market agreement score with an honest interval. Second, a list of titles where the sources disagree most, to investigate first. Third, a coverage figure that says how much of the market the comparison can see.
Appendix
Supporting detail for the main report: how the data was matched and filtered, the checks behind each number, and how the work would run every week.
A. Article lag
Articles don’t always exist when a title starts charting. 31 of the 273 articles got their first recorded view only after the title was already charting. For those weeks, a zero in the pageview data means “no article yet”, not “no interest”, so I treat them as missing (see Methodology).
| Market | Category | With article | Article first read after charting | Median days late (when late) |
|---|---|---|---|---|
| Germany | Films | 31 | 1 | 11 |
| France | Films | 46 | 5 | 9 |
| Japan | Films | 18 | 1 | 27 |
| Brazil | Films | 27 | 1 | 5 |
| Italy | Films | 36 | 7 | 4 |
| South Korea | Films | 26 | 2 | 29 |
| Germany | TV | 15 | 4 | 20 |
| France | TV | 22 | 3 | 13 |
| Japan | TV | 11 | 2 | 7 |
| Brazil | TV | 8 | 0 | n/a |
| Italy | TV | 17 | 5 | 37 |
| South Korea | TV | 16 | 0 | n/a |
B. Domestic titles
I expected local audiences to look up their own country’s titles less than foreign ones, since they may already know them. I tested this in all six markets, using Wikidata’s country of origin. Pooled across markets, the gap between Netflix rank and pageview rank for domestic titles is near zero: -0.03. Germany and Italy point in opposite directions, on small samples. In Germany, domestic titles are looked up less than their Netflix rank suggests (-0.33, 95% CI -0.61 to -0.05, 9 titles). In Italy they are looked up more (+0.29, 95% CI +0.03 to +0.49, 8 titles). I would not draw a conclusion from this without more weeks.
C. Methodology
Sources. Netflix’s weekly Top 10 by country (Films and TV, ranks 1 to 10, downloaded from Tudum). Daily Wikipedia pageviews from the Wikimedia REST API, human users only, all platforms. Wikidata for mapping titles to articles. Language editions are not countries: the Portuguese Wikipedia serves Brazil and Portugal, the German edition serves Germany, Austria and Switzerland, and the French edition also serves Belgium, Switzerland and Quebec.
Title universe. Every title that appeared in a market’s Top 10 during the window, for that market only. TV seasons roll up to the show, because Wikipedia has one article per show.
Matching titles to articles. I never typed a translated title. I searched Wikidata for the English Netflix title, then took each language’s article from the matched item’s sitelinks.
- If a candidate item carries a Netflix ID (P1874), I accept it, provided its type fits the Netflix category: film or TV special for Films, TV program for TV. The type check matters because Wikidata also stores Netflix IDs on single episodes, and on films that share a name with a charting series.
- Without a Netflix ID, I require an exact English label match plus the same type check. Dates only break ties. In a tie, I drop the title if the closest candidate is more than two years from the window, since that usually means the charting title is a new release with no item yet. TV skips that guard when every tied item has a Netflix ID, because new seasons of older series chart all the time.
- A Netflix ID match is contested when a newer item of the same type and name exists. The newer item replaces it only if it is dated within two years before the title’s first chart week and has an article in that market’s language. 4 pairs were resolved that way. The rest are listed under Contested matches.
Missing weeks. Each pair’s first recorded pageview stands in for when its article existed. I used this instead of the article’s creation date, because an article can start as a redirect and be filled in much later. I dropped title-weeks that end before that date (36) and the partial week in which it falls (20). Articles with no views at all were dropped too (8 title-weeks). That left 591 of 655 title-weeks.
Agreement. Within each market, week and category, both sources are re-ranked 1 to n among the titles that have usable pageviews, with average ranks for ties. The headline is a pooled Spearman correlation across all weeks. Ranks are first rescaled to 0 to 1 within each week, so weeks with more titles don’t inflate the result. Weekly Spearman is computed only where n is at least 4. Cells with fewer than 30 title-weeks are marked low confidence.
Confidence intervals. The bootstrap resamples whole weeks, 2,000 times, with a fixed seed. Titles in the same week depend on each other (one moving up pushes another down), so the week is the independent unit.
Timing and coverage. Timing is the peak pageview day minus the Monday of the first chart week. Coverage is the first recorded pageview minus that same Monday.
Attention is not viewing. A pageview is someone looking a title up, which people do for many reasons: news, a controversy, an actor, a trailer. Netflix publishes ranks by country, not viewing numbers, so the size of the gap between #1 and #10 is unknown. This project tests whether the two sources tell the same story, not whether either one is right.
Verification. A separate script recomputes the missing-week counts and every weekly and pooled correlation in pandas from the raw files, and checks them against BigQuery. They match to within 1e-9.
D. Contested matches
26 title-market pairs were matched through a Netflix ID while a newer same-name item exists that didn’t meet the override rule. Excluding them moves each pooled ρ by 0.05 or less, with two exceptions. Brazil TV moves from −0.19 to 0.17, and German TV from 0.04 to −0.16. Both of those intervals include zero with or without the contested pairs, so no conclusion depends on them.
| Title | Matched item | Newer same-name items | Markets |
|---|---|---|---|
| 13 Minutes | Q18977471 | Q110585233 | BR |
| Angel Eyes | Q531675 | Q79999129 | FR, IT |
| Anora | Q123185887 | Q55604021 | FR, IT |
| Avatar: The Last Airbender | Q109608844 | Q5489837 | BR, DE, FR, IT |
| Breaking In | Q4287509 | Q39075152 | DE |
| Collateral Damage | Q506605 | Q66069483 | BR |
| Dune | Q114819 | Q20972530 Q60834962 Q65212698 | DE |
| Ghost Ship | Q1356265 | Q56692143 Q65598517 Q97212591 | DE |
| Into the Blue | Q1130297 | Q111738314 Q19368817 | JP, KR |
| Lovesick | Q18356285 | Q139603851 | FR |
| Silent Night | Q85801170 | Q112078051 | JP |
| Someone Like You | Q1346535 | Q109457856 Q125883233 Q20729515 Q3475092 Q57835558 | IT |
| The Contractor | Q2300207 | Q15129302 Q73549328 | FR, IT |
| The Debt Collector | Q56365946 | Q140724430 | IT |
| The Mentalist | Q204228 | Q30474612 | BR |
| The Morning After | Q1195881 | Q108881445 Q132860832 Q98416496 | FR |
| The Town | Q725539 | Q110748481 Q97168270 | FR, IT |
| Turbulence | Q727775 | Q137384638 Q7854768 Q7854769 Q97104712 | FR |
E. How I built this
I used AI tools in two ways. I planned the project and reviewed each phase with Claude (Anthropic) in a chat workspace, and I used Claude Code to write and run the pipeline, the SQL, and this report. I set the question and the scope, reviewed each phase’s output before the next one started, and decided the methodology questions the work raised, including widening the title universe, the rule for contested matches, treating weeks before an article existed as missing, and making pooled agreement with bootstrap intervals the headline. Every number here is computed from the committed data, and a separate script checks the BigQuery results against an independent recompute.
F. Automated weekly refresh
Netflix publishes the Top 10 on Tuesdays. A scheduled job on Wednesday morning (UTC) would run the whole pipeline: pull and map, load BigQuery and run the SQL, analyze, and render this site. The scripts already run end to end without manual steps, and each phase has a runner (scripts/run_phase1.ps1 to run_phase4.ps1).
- Where it runs. A GitHub Actions workflow on a weekly cron schedule, authenticating to Google Cloud through Workload Identity Federation. That avoids stored service account keys. It commits the refreshed
docs/folder, and GitHub Pages republishes. - Chart rendering. The charts are rendered to static SVG by kaleido, which drives a headless Chrome. The job’s runner needs Chrome installed (GitHub’s hosted Ubuntu runners include it), or kaleido can download its own copy as a setup step. Quarto must be installed on the runner too.
- Incremental work. The 12-week window moves forward one week at a time. Wikidata answers are cached per title, so only new titles hit the API. At a larger scale, I would store pageviews in a date-partitioned BigQuery table and append only the new days, instead of reloading the full range.
- Quality gates. The Phase 1 and Phase 2 check scripts exit with an error when a check fails: a wrong number of weeks, row counts that don’t reconcile, or a correlation that doesn’t match its independent recompute. A failed check stops the run before publishing, so the site keeps the last good version.
- Human review. New titles that fail to match or get flagged as contested are written to a review list each week (for example, as a GitHub issue). Matching errors are the main risk to the numbers, and a person clears them in a few minutes.
- Alerts. The job also alerts when a market’s mapping rate or title-week count drops sharply from the previous week. That usually means a source changed its format, not that audiences changed.
- Cost. This data scans a few megabytes per run in BigQuery, which is within the free tier.
G. References
Data sources accessed 28 September 2026. Tool list current as of 8 October 2026.
Data sources
- Netflix Top 10, Tudum: https://www.netflix.com/tudum/top10
- Netflix Top 10 weekly country file (TSV): https://www.netflix.com/tudum/top10/data/all-weeks-countries.tsv
- Wikimedia Pageviews REST API, per-article endpoint: https://wikimedia.org/api/rest_v1/metrics/pageviews/per-article/
- Wikidata API: https://www.wikidata.org/w/api.php
- Wikidata Query Service (SPARQL), used for the type checks in title matching: https://query.wikidata.org/
- Wikidata property P1874, Netflix ID: https://www.wikidata.org/wiki/Property:P1874
Tools
- Google BigQuery: https://cloud.google.com/bigquery
- Python 3.13: https://www.python.org/
- pandas: https://pandas.pydata.org/
- requests: https://requests.readthedocs.io/
- Plotly for Python, used to build the charts: https://plotly.com/python/
- Kaleido, which renders the Plotly charts to static SVG through a headless Google Chrome: https://github.com/plotly/Kaleido
- truststore: https://github.com/sethmlarson/truststore
- Quarto: https://quarto.org/
Package versions are pinned in requirements.txt in the project repository.