Kindle data export summary and stats
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.ReadingSessionhas exact start/end timestamps andtotal_reading_millis+number_of_page_flipsper session — you can derive reading speed from thisKindle.ReadingInsightssessions also have per-book millisecond totals with timestampsReadingInsightsDayUnitslists every day you read (going back to ~2021)UserUniqueTitlesCompletedlists 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?
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.
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.
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.
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.
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.
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.
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"
}
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.
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.