Stranger Things Tracker

paused

Dialogue for every Stranger Things character, counted from the official scripts.

Tech Stack

PythonSQLiteBeautifulSoupebooklibpandas

TL;DR

Official scripts, parsed into SQLite, animated as a bar chart race.

S1E1 - The Vanishing

INT. WHEELER BASEMENT - NIGHT

[MIKE, DUSTIN, LUCAS, and WILL huddle around the game board]

MIKE

Something is coming. Something hungry for blood.

DUSTIN

A demogorgon?!

LUCAS

We're so screwed if it's the demogorgon.

MIKE

It's not the demogorgon.

[MIKE rolls the dice. They clatter across the board.]

DUSTIN

An eleven?! Oh my god, an eleven!

WILL

Does the demogorgon get us?

Official Duffer Brothers script book

stranger_things.db
sqlite> SELECT
  season,
  character_name,
  ROUND(
    100.0 * SUM(line_count) /
    SUM(SUM(line_count)) OVER (
      PARTITION BY season
    ), 1
  ) as pct
FROM dialogue_summary
WHERE character_name = 'MIKE'
GROUP BY season;

season | pct
-------|------
   1   | 13.2%
   2   |  7.3%
   3   |  7.1%
   4   |  5.1%

Mike's dialogue share:

S1
13%
S2
7%
S3
7%
S4
5%

Mike's declining dialogue share

Bar chart race: dialogue share over time

What it is
15,178 lines of dialogue across 517 characters, parsed from the Duffer Brothers' script books for seasons 1 to 4.
Finding
Mike speaks 13% of all dialogue in season 1 and 5% in season 4. Dustin ends up with the most lines.
Parsing
Every season's epub has a different HTML structure, and EL, ELEVEN and JANE are one person. Regex and an alias map handle both.
Stack
Python, BeautifulSoup and ebooklib for parsing, SQLite for storage, pandas and matplotlib for the race.

Started December 2025.