Methodology
How we measure the Dead — AI-generated content and bot activity across the web.
Overview
The Dead Internet Monitor tracks two distinct phenomena: the creation of AI-generated content (“AI Slop”) and the consumption of content by automated accounts (“AI Slurp”). We sample content from major platforms, classify it using large language models, and analyse author behaviour for bot-like patterns.
Our goal is not perfect accuracy — which remains elusive even for specialised detectors — but consistent, transparent measurement of trends over time.
+-----------------------+
| COLLECTION | 9 sources, staggered
+-----------+-----------+
|
+-----+-----+
v v
+----------+ +----------+
| CLASSIFY | |BOT DETECT| parallel
| (LLM) | |(7-signal)|
+----+-----+ +----+-----+
| |
+------+-----+
v
+-----------------------+
| AGGREGATION | Autopsy Matrix + DII
+-----------+-----------+
v
+-----------------------+
| DASHBOARD | deadinternetmonitor.com
+-----------------------+Data Collection
Content is collected from seven sources on staggered schedules. The headline metric — the Dead quadrant percentage — is volume-weighted: each classified item counts once regardless of source. Collection volumes are not calibrated to real-world traffic share; a future improvement would weight sources by their actual share of internet traffic.
| Source | Type | Schedule | ~Items/run |
|---|---|---|---|
| Social | Daily | ~1,500 | |
| HackerNews | Tech forum | Daily | ~1,200 |
| YouTube | Comments | 3×/week | ~1,200 |
| Mastodon | Fediverse | Daily | ~200 |
| Bluesky | Social | 3×/week | ~200 |
| Stack Overflow | Q&A | Weekly | ~350 |
| Lobsters | Tech forum | Weekly | ~1,000 |
| The Guardian | News comments | Weekly | ~800 |
| Steam | Game reviews | Weekly | ~1,000 |
Reddit uses public RSS feeds (comments only, no API credentials required). The Guardian collects reader comments from articles across five editorial sections (Opinion, Politics, Technology, Science, World) via the public Discussion API. Steam collects user reviews for the top 50 games by popularity via the public App Reviews API — filtered to English, most-recent first, with review-bomb detection retained in the sample. Mastodon and Lobsters serve as control groups — decentralised or invite-only platforms with lower bot incentive.
Classification
Each item is classified by a large language model using a structured prompt (v3.0) that applies Bayesian calibration with platform-specific base rates derived from Ahrefs and Originality.ai research. This counters the documented tendency of LLM classifiers to default to “human” ( RAID 2024 found 10–15% false negative rates).
Models
| Role | Model | Provider |
|---|---|---|
| Primary | Gemini 2.5 Flash Lite | |
| Fallback | Claude Haiku 4.5 | Anthropic |
Fallback triggers when primary confidence is below 0.5.
AI Indicators
The classifier looks for research-validated signals of AI generation:
- Overly balanced, hedging language (“It's worth noting”, “to be fair”)
- Formulaic structure and template phrases (“Let's dive in”, “In the realm of”)
- Comprehensive but shallow coverage of topics
- Synthetic empathy (“Great question!” without substance)
- Absence of personality, humour, or strong opinions
- Safety disclaimers on simple topics
Human Indicators
- Personal anecdotes and specific lived experiences
- Typos, slang, mid-thought corrections
- Strong opinions without both-sides framing
- Niche expertise with personal perspective
- Genuine emotional expression — frustration, sarcasm, humour
- Natural digressions and terse replies
Output
Each classification returns: a label (ai_generated, human_created, or uncertain), a confidence score (0.0–1.0), specific indicators observed, and a brief reasoning explanation.
Post-Processing
After the LLM returns its classification, a post-processing step corrects for the documented human-default bias. Items classified as “human” but carrying multiple AI indicators are reclassified as uncertain or AI-generated. Short content (<100 characters) is capped at 0.60 confidence.
+--------------+
| Content Item |
+------+-------+
v
+--------------+ confidence
|Primary Model |---- >= 0.5 --> RESULT
| Gemini Flash |
+------+-------+
| < 0.5
v
+--------------+
|Fallback Model|---- >= 0.5 --> RESULT
| Claude Haiku |
+------+-------+
| < 0.5
v
"uncertain"
|
v
+--------------+
|Post-Process | correct false negatives
| Recalibrate | using signal evidence
+------+-------+
v
FINAL LABEL
ai / human / uncertainClassification coverage
Not every collected item can be classified. Content with fewer than 50 characters of body text — one-line replies, single-emoji posts, bare links, “this.” — carries too little signal for the classifier to separate human from machine, so it is markedskipped and excluded from the AI-rate denominator. (Items between 50 and 100 characters are classified but capped at 0.60 confidence, as noted above.) Skipped items are still collected and counted in volume totals; they are simply not scored. The headline AI rate is therefore a rate over classifiable content, not over everything collected.
Coverage — the share of collected items that carry enough text to classify — varies substantially by source. Short-form and review platforms skip the most; long-form and Q&A platforms skip the least. We publish the breakdown so the denominator behind each source’s rate is explicit. The table below is computed live from the trailing 30 days of collection counts and updates with each night’s data. Both total_collected and total_classified are published per source per day in the open aggregate export, so every coverage figure here is reproducible from the licensed data: coverage = total_classified / total_collected.
| Source | Coverage | Classified | Skipped |
|---|---|---|---|
| Steam | 41.5% | 1,605 | 2,261 |
| YouTube | 54.2% | 6,503 | 5,504 |
| Bluesky | 69.4% | 1,949 | 860 |
| 79.4% | 7,110 | 1,840 | |
| Lobsters | 84.2% | 629 | 118 |
| Mastodon | 90.1% | 3,047 | 336 |
| HackerNews | 91.9% | 31,450 | 2,765 |
| Guardian | 96.6% | 561 | 20 |
| StackOverflow | 99.0% | 198 | 2 |
| All sources | 79.5% | 53,052 | 13,706 |
Bot Detection
Separate from content classification, we analyse author behaviour using a 7-signal weighted scoring system grounded in peer-reviewed research. Authors with 2+ collected items receive a bot score.
| Signal | Weight | Research |
|---|---|---|
| Posting frequency — posts per hour | 0.20 | Gilani et al. 2017 |
| AI content ratio — % of posts classified as AI | 0.20 | Novel signal |
| Content diversity — topic/subreddit entropy | 0.15 | Oentaryo et al. 2016 |
| Timing entropy — Shannon entropy of posting hours | 0.15 | Chu et al. 2012 |
| Response latency — median seconds between posts | 0.10 | Ferrara et al. 2016 |
| Karma velocity — karma gained per day | 0.10 | Multiple studies |
| Account age ratio — age vs activity volume | 0.10 | Cresci et al. 2015 |
Scores above 0.7 are flagged as likely bots. Between 0.4–0.7 is suspicious. Below 0.4 is likely human.
The Autopsy
What type of Dead is the Internet?
The Autopsy Matrix crosses content origin with audience type. The content axis comes from our AI classification. The audience axis uses the global bot consumption rate — the proportion of web traffic that is automated.
| Human Audience | AI Slurp | |
|---|---|---|
| Human Content | Alive | Zombified |
| AI Slop | Polluted | Dead |
AI Slop = AI-generated content · AI Slurp = bot consumption of content
- Alive — Human-written content reaching a human audience. The real internet.
- Zombified — Human-written content consumed by bots. Real voices talking to no one.
- Polluted — AI-generated content reaching human eyes. Slop you actually read.
- Dead — AI-generated content consumed by bots. Machines talking to machines.
The bot consumption rate (45%) is a cross-industry blend of four major bot traffic reports: Imperva 2025 (51%), Akamai 2025 (51%), Cloudflare Radar 2025 (~30%), and Barracuda 2023 (50%). This rate is applied uniformly across all sources as per-platform consumption data is not publicly available.
Dead Internet Index (Supplementary)
The primary headline metric is the Dead quadrant percentage from the Autopsy Matrix above — it directly answers “what percentage of the internet is dead?” in plain language.
The DII is a supplementary composite score (0–100) retained for internal analysis and historical continuity. It combines four weighted components, though it has known limitations: the Slop×Slurp component is mathematically identical to the Dead quadrant (redundant), bot engagement data is structurally sparse across several sources, and low-confidence human measures classifier uncertainty rather than deadness. The DII does not currently answer a distinct research question from the Autopsy.
| Component | Weight |
|---|---|
| AI content % — classified as AI-generated | 0.40 |
| Bot engagement % — engagement from bot-flagged authors | 0.25 |
| Slop×Slurp % — AI content from bot authors (the “dead” quadrant) | 0.20 |
| Low-confidence human % — “human” classifications below 0.7 confidence | 0.15 |
When consumption data is available (Cloudflare Radar, robots.txt monitoring), a fifth component (0.20 weight) is added and the other weights adjust downward.
Open Data
DIM's aggregate measurements and per-item classifications are machine-readable. Researchers, journalists, and other monitors can download the data directly — no scraping, no API key, no registration. Use it.
Daily aggregate (recommended)
One row per day, with the headline AI rate, 30-day rolling averages, ex-AutoModerator + ex-orgsync breakdowns, Autopsy quadrant counts, and bot engagement — the same numbers that drive the dashboard. Pass?source=all for per-source rows, a specific source name (reddit, hackernews, etc.) for one source, or omit for the combined series.
/api/export/aggregate— CSV of the combined daily series/api/export/aggregate?source=all— CSV with one row per source per day/api/export/aggregate?format=json— same data as JSON
Optional filters: start_date=YYYY-MM-DD, end_date=YYYY-MM-DD, source=<name>.
Per-item content (sample)
Up to 10,000 individual classified items at a time. Useful for replication, methodology review, or sub-population analysis. Each row is one collected post or comment with its classification, confidence, and bot score.
/api/export— CSV of recent classified content/api/export?format=json— same data as JSON
Optional filters: source=<name>, classification=ai_generated|human_created|uncertain, min_confidence=0.0–1.0, content_class=<tag> (include only items with the named tag — e.g. automated_moderation, organizational_syndication), exclude_content_class=<tag> (exclude items with the named tag — mirrors the headline ai_percentage_ex_automod / ai_percentage_ex_orgsync breakdowns at the per-item level), start_date, end_date.
Other machine-readable surfaces
/rss.xml— RSS feed of published Key Findings/api/stats— the live dashboard JSON (combined daily series + summary)/api/stats/sources— latest per-source AI rate/api/stats/communities— per-community DII and AI rate
Licensing
DIM's data and metadata are published under Creative Commons Attribution 4.0 International (CC BY 4.0). You can copy, redistribute, remix, and build on it for any purpose — including commercially — provided you give credit and link to the licence.
Suggested attribution:
Source: Dead Internet Monitor — deadinternetmonitor.com (CC BY 4.0)
Scope. CC BY 4.0 covers material authored by DIM — aggregate statistics, AI / human / uncertain classifications, classification confidence, bot scores, the Autopsy quadrant counts, the Key Findings collection, the RSS feed, the methodology, and DIM's commentary. It does not extend to original source-content text in the per-item exports (post titles, post bodies, comment bodies, author handles, source URLs collected from Reddit, Hacker News, Mastodon, Bluesky, YouTube, StackOverflow, Lobsters, Steam, and The Guardian); that text remains under the copyright of its original author and the originating platform's terms. Reusers of per-item exports must continue to honour those platforms' terms when redistributing source-content text. DIM's classifications, confidences, and bot scores attached to those items are CC BY 4.0.
Full licence text: creativecommons.org/licenses/by/4.0/legalcode. Repo: LICENSE-DATA. If you publish something based on this data, we'd like to see it: hello@deadinternetmonitor.com.
Updates — Newsletter
Methodology revisions, new sources, and notable findings are announced in the DIM newsletter — ad hoc, no more than once a month, no advertising. Subscribers are stored on Buttondown; email addresses are not used for any purpose other than sending these dispatches and are never sold or shared. See the privacy policy for full detail.
Limitations
- Classification is imperfect. Skilled writers can produce polished text that resembles AI output, and AI can mimic human writing. We target consistency over perfection.
- Sampling bias. We monitor a limited set of platforms. Findings may not generalise to the entire internet. We will continue to increase the number of sources and samples.
- Short content is harder. Posts under 100 characters are capped at 0.60 confidence; posts under 50 characters are excluded from classification entirely. Coverage varies by source — see Classification coverage.
- Temporal drift. As AI-generated content evolves, detection patterns must be updated. We version our prompts and models to track changes.
- Engagement data varies. Some sources (e.g. Reddit via RSS) do not provide vote scores, so bot engagement metrics are unavailable for those platforms. The bot engagement average only includes sources where engagement data exists.
- Text only. Currently, the monitor only measures text-based content. Future iterations will be multimodal.
Operational Reliability
Consistency is one of the three things this project is built on. Daily collection, daily classification, daily aggregation — an unbroken run since launch. The streak is itself a measurement: if the monitor stops measuring, the number stops meaning anything.
How the streak is monitored
Data collection runs on Google Cloud Scheduler, independent of any local machine. The autonomous editorial cycle that produces the daily memo runs alongside it. The pipeline itself has not missed a day. The editorial cycle has, occasionally.
Each cycle writes a heartbeat row to a Cloud SQL table when it completes. A separate Cloud Scheduler job (dim-cycle-alarm-daily) reads that row at 05:00 UTC each morning. If the most recent heartbeat is older than 26 hours, the job emails the operator. Silent on healthy days. One email per miss.
The alarm closes the detection gap, not the execution gap. A missed cycle still has to be caught up by hand. The point is that a miss becomes visible within the same morning rather than several days later via a gap in the timeline. The streak is a credibility metric; the alarm protects it.
What is monitored, what is not
| Surface | Monitored? | How |
|---|---|---|
| Pipeline collection (HN, Reddit, Mastodon, Bluesky, …) | Yes | Cloud Scheduler job status + per-source row presence in daily_stats |
| Classification backlog | Yes | Checked at the top of every editorial cycle; non-zero triggers re-classification |
| Aggregation | Yes | 02:00 UTC nightly; row presence verified before metrics are reported |
| Editorial cycle (daily memo) | Yes — off-host alarm since 2026-05-30 | Heartbeat row + 05:00 UTC alarm job; emails operator if >26h since last cycle |
| Site uptime | No (informally) | Cloud Run revision health visible in GCP; no dedicated uptime probe yet |
Metadata
Classification Audit Trail
Each classification record stores:
- Model provider and model name
- Prompt version
- Token counts (input / output)
- Estimated cost (USD)
- Latency (ms)
Content Tags
The content_class field tags items by type without changing how they are classified. Tags are applied at collection time and enable breakdown views alongside the headline metrics.
| Tag | Applies to | Headline effect | Breakdown field |
|---|---|---|---|
automated_moderation | Platform moderation bots posting templated system messages — Reddit u/AutoModerator and per-subreddit *-ModTeam accounts (e.g. askscience-ModTeam, changemyview-ModTeam), and Guardian platform-moderation accounts CommunityMod and Community_Host | None — still counts as AI | ai_percentage_ex_automod |
organizational_syndication | Bluesky accounts using verified-domain handles (Forbes, the Guardian, NBC News, Politico, …) auto-syndicating article headlines via CMS | None — still counts as AI | ai_percentage_ex_orgsync |
New tags are added autonomously as the dataset grows. A content type qualifies for tagging when it meets all four criteria:
- Non-organic. The content is generated by a bot, platform system, or automated process — not by a human participant in the conversation.
- Deterministic. Membership is objective and rule-based (e.g. author name, system flag), not a judgement call.
- Material. The content type accounts for 10%+ of collected items in at least one source, observed across 3+ collection days.
- Additive only. Tagging must not change headline metrics. It adds a breakdown view, never removes data.
Discovery is automated: a weekly audit samples content from each source and uses an LLM to identify recurring non-organic patterns (bots, system messages, templated content). Candidates are then validated against the materiality threshold before being implemented.
Revision History
Current methodology: Rev 09 (2026-05-27).
The monitor evolves as we add sources, refine methodology, and respond to platform changes. Each revision is backfilled — we re-aggregate all historical data under the current methodology so the full timeline is consistent.
| Rev | Date | Changes |
|---|---|---|
| 09 | 2026-05-27 | Community Explorer now exposes Ex-automod and Ex-orgsync view-toggles alongside the headline AI rate, matching the per-source toggle on the AI Content by Source chart (Rev 05, Rev 06, Rev 07). Each toggle swaps the displayed 30-day per-community AI rate to the corresponding breakdown column (ai_percentage_ex_automod_30d / ai_percentage_ex_orgsync_30d), computed by the aggregation service from the per-(source, section) tag counts. Communities without tagged content show the headline value unchanged. The expanded per-community panel additionally shows both breakdown values when present. Example: r/askscience reads 45.1% headline → 34.7% Ex-automod (10.4pp drop, driven by 169 u/AutoModerator / askscience-ModTeam items over the 30-day window); Bluesky discover reads 14.3% headline → 7.4% Ex-orgsync. Headline AI rate unchanged at every level of granularity. |
| 08 | 2026-05-26 | Community Explorer’s per-community AI rate now uses the same volume-weighted 30-day rolling formula as the headline (Rev 04), rather than the arithmetic mean of per-day rates across an arbitrary window. The new ai_percentage_30d column on every (source, section) row in daily_stats is populated by the aggregation service and surfaced on the /data Community Explorer. The two formulas can diverge meaningfully on low-volume days — e.g. r/changemyview’s arithmetic-mean across 5/19–5/25 was ~25%, the volume-weighted 30d is 32.65%, a 7-point difference driven by larger-volume days carrying higher AI shares. The per-community number now matches the headline at every level of granularity. Headline AI rate unchanged. |
| 07 | 2026-05-18 | Extended the automated_moderation content_class tag to cover Reddit per-subreddit *-ModTeam accounts (e.g. askscience-ModTeam, changemyview-ModTeam, explainlikeimfive-ModTeam) and Guardian platform-moderation accounts CommunityMod and Community_Host. These accounts post automated rejection / comment-closure / pre-moderation notices that are structurally identical to Rev 05’s u/AutoModerator pattern — bot-posted system messages the classifier correctly flags as machine-emitted, but which inflate per-subreddit and per-source AI rates without separation. Surfaced by the Monday content-type audit (2026-05-18). 268 historical Reddit ModTeam rows and 31 Guardian moderation rows backfilled. Headline AI rate unchanged; the existing ai_percentage_ex_automod breakdown now reflects these additional moderation patterns alongside AutoModerator. |
| 06 | 2026-05-16 | Added the organizational_syndication content_class tag for Bluesky news-org auto-syndication. Verified-domain handles (e.g. forbes.com, theguardian.com) run ~36% AI-classified over 30 days versus ~8% for personal .bsky.social handles — a 4.3× delta from CMS-templated article headlines that the classifier correctly flags as machine-emitted. The tag enables an ai_percentage_ex_orgsync breakdown alongside the headline so the inflation can be reported without hiding the bot-posted content from the headline rate. Same shape as the Rev 05 AutoModerator pattern, applied to a different platform. 940 historical Bluesky rows backfilled. Headline AI rate unchanged. |
| 05 | 2026-04-15 | Added The Guardian (8th source, 2026-04-14) and Steam (9th source, 2026-04-15) in a single source-expansion wave. The Guardian collects reader comments across five editorial sections (Opinion, Politics, Technology, Science, World) via the public Discussion API — DIM's first news media comment source. Steam collects user reviews for the top 50 games via the public App Reviews API — DIM's first product reviews source, extending coverage into commerce and a known venue for coordinated review manipulation. Both run weekly. All prior data unaffected. |
| 04 | 2026-04-02 | Headline DII, AI rate, and autopsy quadrant percentages now computed as 30-day volume-weighted rolling averages. Each classified item in the window contributes proportionally to its day's volume, smoothing daily sampling noise (~1,500 items/day) into a statistically stable signal. Raw daily values preserved for per-day analysis. Methodology follows established index patterns (cf. CNN Fear & Greed 7-day SMA). All historical data back-calculated. |
| 03 | 2026-03-31 | Reverted to volume-weighted aggregation — each classified item counts once regardless of source. Fixed bot consumption rate to 45% (was being diluted by double-blending Cloudflare Radar data). Consumption collection paused (rate is a static cross-industry blend). All historical data re-aggregated. Note: the Mar 25 spike in the dead quadrant reflects Reddit's first large collection (high-AI knowledge subreddits), not a methodology artefact. |
| 02 | 2026-03-25 | Reddit live (15 subreddits via RSS, ~1,500 items/run). Autopsy matrix now uses bot consumption rate for audience axis instead of author bot scores. Rate corrected from 51% (Imperva-only) to 45% (cross-industry blend of Imperva, Akamai, Cloudflare Radar, and Barracuda). YouTube capped at 30 comments/video. All historical data re-aggregated under Rev 02 methodology. |
| 01 | 2026-03-04 | Initial release. 6 active sources (Reddit paused — no API credentials). Classification via Gemini 2.5 Flash Lite with Claude Haiku fallback. 7-signal bot detection. Volume-weighted DII. Author-based autopsy matrix. |
Benchmarks & References
How do our numbers compare to published research? This table maps DIM metrics against independent studies so you can judge for yourself.
| Metric | DIM | Published | Source |
|---|---|---|---|
| AI content rate (discussion posts) | ~11% | 15% | Originality.AI 2025 — 15% of Reddit posts AI-generated. Our lower figure reflects a multi-platform mix (not Reddit-only). |
| AI content rate (web pages) | — | 74% | Ahrefs Apr 2025 — 74% of new web pages contain some AI content, but only 2.5% are “pure AI.” We classify discussion content, not web pages — a structurally different signal. |
| Bot traffic share | 45% | 51% | Imperva 2025 Bad Bot Report — automated traffic exceeded human traffic for the first time (51%). Our 45% is a cross-industry blend including Cloudflare (~30%) which pulls the average down. |
| Bot traffic share | 45% | ~54% | Cloudflare Radar 2025 — non-AI bots generated ~50% of HTML page requests, plus 4.2% AI crawler traffic. |
| Bot traffic share | 45% | 57.5% | Cloudflare Radar, Jun 2026 — automated systems generated 57.5% of HTTP requests to web content vs 42.5% from humans — the first recorded crossover, driven by agentic-AI crawling. Measures request share (a traffic proxy), not content consumption, so it is not directly comparable to our 45% consumption blend. |
| Bot traffic share | 45% | 51% | Akamai 2025 — corroborates Imperva's finding at ~51% automated traffic. |
| AI article share | — | ~40% | Graphite / Axios 2025 — AI-generated articles reached ~40% of new English-language articles by 2024. Measures published articles, not discussion content. |
Our AI rate (~11%) is conservative relative to web-page studies (40–74%) because we classify community discussion content — comments, posts, answers — where AI penetration is structurally lower than in published articles or SEO-driven pages. Our bot traffic blend (45%) sits below the latest Imperva/Cloudflare figures (51–57.5%) and may be revised upward as source-level consumption data becomes available.
The trend matters more than any single number. We are watching the Dead.