Reading Score Analyser
Analyse content readability from sitemaps or URLs using Flesch scores.
#about
Uses Trafilatura for content extraction and textstat for 8 readability metrics: Flesch Reading Ease, Flesch-Kincaid Grade, Gunning Fog, SMOG, ARI, Coleman-Liau, Linsear Write, Dale-Chall.
Also calculates word/sentence counts, avg sentence length, difficult words, reading time.
Fake-useragent for request randomisation.
Streamlit app
- Platform
- Browser-based (no installation required)
- Input
- XML sitemap URL (auto-extracts URLs)CSV with URL columnOr paste URLs directly (one per line)
- Output
- CSV with readability scores and metrics
- Category
- Content
Use cases
- Content readability audits
- Finding hard-to-read pages
- Content simplification planning
- Competitor readability comparison
#features
- Trafilatura content extraction
- 8 textstat readability metrics
- Word/sentence counts and reading time
- Fake-useragent request randomisation
- Request delay slider (0.5-10 seconds)
- URL limit up to 10,000 per session
#how-to-use
- Enter a sitemap URL, upload a CSV, or paste URLs
- Configure request delay (0.5-10s) and timeout (5-60s)
- Set the URL limit (default 100, up to 10,000)
- Run the analysis; image and PDF URLs from sitemaps are filtered out
- Review the readability distribution and hardest-to-read pages
- Download the CSV, optionally including the extracted content
#faq
- Why do some pages come back as 'Content too short for analysis'?
- Pages are skipped if the extracted text is under 100 words. Trafilatura also excludes tables and comment sections from extraction, so a page that looks long in the browser can still fall under the threshold if its substance is in tables or if extraction only found boilerplate.
- Can I point it at a sitemap index?
- No, use an individual sitemap. The tool reads the loc entries from the single XML file you give it and does not recurse into child sitemaps, so the entries of a sitemap index (which are sitemap URLs, not pages) would be queued as pages and fail extraction. URLs ending in .png, .jpg, .jpeg, .gif, .svg, .pdf and .webp are filtered out automatically; other non-HTML URLs are attempted and simply error.
- How is reading time calculated?
- Word count divided by 200 words per minute, rounded to one decimal. The word count itself is textstat's lexicon count with punctuation removed, the same figure shown in the word_count column.
- How does it avoid getting blocked on larger runs?
- Requests are sequential (never parallel) with your configured delay of 0.5 to 10 seconds between pages, and each request sends a different randomised browser user agent via fake-useragent. Note the default Maximum URLs is 100; raise it (up to 10,000) or a big sitemap will be silently cut to the first 100 with just a warning.
- Can I get the extracted text as well as the scores?
- Yes, but only if you tick 'Include content in export' in the sidebar before running; it is off by default. The extracted text is then added as a content column in the CSV, which is useful for spot-checking what the scores were actually calculated on.
/contact
Want me to run this for you? I run this tool as a managed service, or build something custom around your data. You get the insights without touching the code.