Kindle data export summary and stats

Kindle
Smart (Opus 4.6)
Unlisted
This directory has an export of my kindle data. Summarise what's here, are there stats on things like reading speed or times and dates of when I read?

Here's a summary of your Kindle data export:

What's here

Category Key data
Library ~6,900 owned items (Digital.Content.Ownership) — books with titles, ASINs, purchase dates
Reading Sessions ~13,800 session records with start/end timestamps, reading duration in ms, and page flips per session
Reading Insights Higher-level sessions (~13K) with book titles, plus 1,587 days where reading was tracked, and ~150 completed titles
Behavior Stats Monthly snapshots with avg reading days/month (~27), genre breakdowns (mostly sci-fi/fantasy ~75%), completion rates (~90% avg)
Highlights Timestamped highlight actions with word counts, color, context
Whispersync Reading position sync data across devices — bookmarks, last-read positions
Annotations Bookmarks, notes, quote shares
Device/App telemetry Tons of iOS app behavioral data (search, navigation, toolbar interactions, notifications, etc.)

Reading speed & timing — Yes!

  • Kindle.Devices.ReadingSession has exact start/end timestamps and total_reading_millis + number_of_page_flips per session — you can derive reading speed from this
  • Kindle.ReadingInsights sessions also have per-book millisecond totals with timestamps
  • ReadingInsightsDayUnits lists every day you read (going back to ~2021)
  • UserUniqueTitlesCompleted lists each finished book with its completion date

You also already have a build_timeline.py script that aggregates this into a reading_timeline.json with per-book total reading hours, start/finish dates, authors, and genres. Want me to run it or build something more detailed from the raw session data?

Summarise the reading insights

Your Reading Insights

Overall: You've read for 1,095 hours (45.6 full days!) across 13,064 sessions over 205 books since 2018, completing 150 of them. You read on 1,586 tracked days.

Pacing: Average session is ~5 minutes (lots of short bursts). Your longest daily streak is an impressive 148 consecutive days, and you're currently on a 75-day streak.

Trends: 2025 was your biggest year by far (207 hours), roughly double 2024. June–July 2025 were your peak months (~43–45 hours each). Your reading has been accelerating — 2026 is already at 35.5h by mid-March.

Heaviest reads: The Business-Minded CISO tops the list at 63 hours (likely a professional reference you dipped into repeatedly). Fiction-wise, Gnomon (27h), Semiosis (25h), and Network Effect (21h) were the big time investments.

Genre: Overwhelmingly sci-fi/fantasy (~75-85% per the behavior data), with some nonfiction/thrillers. All in English, all via amazon.co.uk.

Recent reads: You just finished A Guardian and a Thief (Mar 15), Three Men in a Boat (Mar 11), and The Man Who Saw Seconds (Mar 4). Currently reading Agent to the Stars.

what does reading session data look like?

Each row is one reading session with these columns:

Column Example Meaning
start_timestamp 2018-02-03T17:23:46Z When you started reading
end_timestamp 2018-02-03T17:32:30Z When you stopped
ASIN B06WPBWQMM Book identifier
purchased_marketplace www.amazon.co.uk Where bought
preferred_marketplace www.amazon.co.uk Your marketplace
device_family Kindle E-reader Device type (or blank for app)
device_serial_number 90D42201348611PL Which specific device
device_software_version 3243010037 Firmware/app version
content_type E-Book Always E-Book
total_reading_millis 524200 Active reading time in ms (~8.7 min)
number_of_page_flips 30 Pages turned in that session

So for row 3: you read book B06WPBWQMM for ~8.7 minutes on Feb 3 2018 (5:23–5:32pm), flipping 30 pages. Note that total_reading_millis is often less than the wall-clock span (end − start), since it excludes idle time. There are ~13,840 rows total. No book titles here though — you'd need to join on ASIN to the ownership or reading-insights data for that.

what do behaviour stats look like?

It's a monthly snapshot (13 rows, Feb 2025 → Feb 2026) of Amazon's rolling-window profile of you as a reader. Each row has ~100+ columns covering:

Section Key fields Your latest values
Account Marketplace, KU subscriber, tenure amazon.co.uk, no KU, ~25 months tenure
Reading habits Avg reading days/month, book count, completion % 27 days/month, 26 books, 92% avg completion
Series Series reader flag, books-in-series count Yes, ~15% of books are series entries
Genre breakdown Count + % for ~20 genres (fiction, sci-fi, romance, nonfiction, comics, etc.) 100% fiction, 85% sci-fi/fantasy, some thriller & literature
Language Count + % for English, German, French, Japanese, etc. 100% English
Recency Books released in last year ~58% are recent releases
Manga/JP categories Fliptoon, Light Novel, Shonen, Seinen, etc. All zeros for you

It's essentially Amazon's internal customer segmentation data — they use it for recommendations and marketing. The "tenure" fields appear to be in months (not days despite the header), and the book counts are a trailing window, not lifetime totals.

anything unexpected in this data?

A few things stand out:

🕵️ Surveillance depth is striking. Amazon tracks everything: every toolbar tap (1,444), every home screen card you were shown (4,486 impressions), every search string length (not the text, but the length), dictionary lookups, notification deliveries (447 push notifications sent to you), and reading settings changes. It's a remarkably complete behavioral profile.

⏱️ Implausible session lengths. You have sessions of 18.8 hours and 14.2 hours — these are almost certainly the device left open/app not properly closing a session, not actual continuous reading. Yet they inflate your reading stats.

👻 247 sub-second sessions (<1 second) — accidental opens or sync pings being logged as "reading."

🔊 Audible crossover. Your Whispersync data includes 164 audible.last_heard entries — Amazon is correlating your reading and listening positions across formats. They know exactly where you switched from reading to audiobook.

📱 13 device serial numbers tracked, including Kindle E-reader, iOS app, Mac app, and even Kindle for Alexa. They're building a cross-device usage graph.

📍 Your highlights are stored — 29 with text (though the actual text is encoded as color metadata in this export). Plus 72 bookmarks, and they track 164 deleted annotations too.

🔔 447 in-app notifications pushed to you — all untyped, so you can't even see what they were marketing to you.

The most unexpected thing is probably the sheer granularity: Amazon knows every time you opened the toolbar, how many words you highlighted, what time you read at night (201 sessions between midnight–5am), and is correlating your Audible listening with your Kindle reading positions.

can you build me a script to generate a graph showing reading activity per day. Each day should be represented by a fixed length horizonal line, with color where I read. Lines should be stacked vertically, one per day, with today at the top. I want to run this with uv.

Run it with:

uv run reading_heatmap.py

Each day is a horizontal line across 24 hours, with blue marks where you were reading. Days are stacked vertically (today at top), with month labels on the y-axis. Sessions over 2 hours are capped to avoid those 18-hour phantom sessions skewing things. The dark background makes the reading blocks pop. It saves to reading_activity.png and also opens a window.

now make me a javascript implementation of a github style activity graph using the json,

Since it fetches the CSV via fetch(), you'll need to serve it locally rather than just opening the file. Easiest way:

cd ~/Downloads/Kindle && python3 -m http.server 8000

Then open http://localhost:8000/reading_heatmap.html.

It shows a GitHub-style contribution graph with one square per day, colored by reading time (green intensity: <10min, <30min, <60min, 60min+). Each year gets its own row, most recent at top, with month labels, day-of-week labels, and hover tooltips showing exact reading time. Summary stats (total days, total time, longest day, average) are shown at the top.

add a tag to each entry in the json file to say it's a book, I will want to add more media types soon

Done — added "type": "book" to all 195 entries. Each entry now looks like:

{
  "title": "...",
  "author": "...",
  "asin": "...",
  "started": "...",
  "finished": "...",
  "last_read": "...",
  "total_reading_hours": 27.2,
  "genre": "...",
  "type": "book"
}
ok, write a script to generate this from scratch using the amazon data
Explored 1 file

The existing script is almost there — just needs the "type": "book" field and a uv header. Let me also make the paths relative so it works from the directory.

Created build_timeline.py
+94
$ uv run build_timeline.py

Done. Run with uv run build_timeline.py. It now includes "type": "book" on every entry, uses relative paths via Path(__file__).parent, and has the uv script header. Output is the same 195 books — 141 finished, 54 unfinished.