BLACK FRIDAY
Save 59% on PageForge Annual $191/year $485/year
Claim 59% Off →
AnGo Scroll Analytics icon
Actively maintained Tested with WP 7.1 #3 in content engagement

AnGo Scroll Analytics

Scroll depth statistics for your content — see how far visitors actually read, by day, month and article.

Active installs10+10+ tier
Downloads · 30d812• 0% vs prev. 30d
Rating—0 reviews
Health score66/100Good
All-time downloads805Since Sep 2026
Support resolved—No recent threads
RequiresWP 6.8PHP 7.4+
Downloads · 7d142▼ -51.9% week over week
Our verdict

Solid choice

AnGo Scroll Analytics is a solid plugin choice in 2026, with a few things worth checking first. It runs on 10+ sites and was last updated 6 days ago, and scores 66/100 on our health check.

  • Actively developed — last update 6 days ago
  • Tested with the latest WordPress (7.1)
  • Small user base (10+ active installs)
  • Very few reviews so far

How does it stack up?

Side-by-side on installs, updates, ratings & support

Daily downloads

255176Sep 20Oct 4Oct 19
Yesterday7
Daily average (1y)27
Peak day102Oct 6, 2026
Last 12 months812

Download spikes usually follow a new release — each site that auto-updates counts as a download.

Rankings

Where AnGo Scroll Analytics stands today

WordPress.org search rankings

Live position in the plugin search, top 100
KeywordPositionCompeting pluginsCategory
content engagement >100 2,183 Best content engagement plugins →
ga4 alternative #25 79 Best ga4 alternative plugins →
privacy friendly analytics >100 1,455 Best privacy friendly analytics plugins →
reading analytics #54 777 Best reading analytics plugins →
scroll depth #39 398 Best scroll depth plugins →

Version adoption

Share of active sites per release.

  • 1.12100.0%

About AnGo Scroll Analytics

From the official readme · v1.12.0

Description

AnGo Scroll Analytics records how far visitors scroll through your posts and pages and shows the result on a “Readability” screen in wp-admin. It answers the question a pageview count cannot: did anyone actually read past the first screen?

The tracking script is loaded on the single page of every public post type — posts, pages, WooCommerce products, custom post types from any plugin (media attachments are left out) — and measures how far the page was scrolled during a visit. That is depth through the scrollable height of the document, not the share of the article visible on screen: a page that fits on one screen records 100%.

A visit is registered as soon as the page loads — a visitor who scrolls nowhere still gets a row, with 0%. After that, data is sent to the server only when reading progress actually advances (checked every 5 seconds), and always when the visitor leaves the page or switches tabs (via navigator.sendBeacon, or fetch with keepalive where it is unavailable). A failed send is retried at the next check.

One visit is one row in the table, updated as the reader gets further down. A new tab or a new session is a new visit.

What the dashboard shows

  • The period, chosen by hand (the last 30 days by default), with an “Apply” button and grouping by day or by month.
  • A summary for the selected period: number of visits, average scroll %, median.
  • Percentiles 5/10/25/50/75/90/100, phrased as “X% of visitors scrolled at least to Y% of the article”. A “Percentile mode” switch (Reach / Classical) feeds both this list and the table columns from either the reach computation — how far readers actually got — or the classical one: the standard PERCENTILE.INC percentiles, “X% of visitors reached no further than Y%”.
  • An “Exclude load-and-die visits” checkbox (on by default): visits whose only beacon fired at page load — on a live site mostly bots and link previews — are left out of the statistics, and the Visits card shows how many were excluded. Uncheck it to see the raw population.
  • A trend chart: average scroll as a line, visits as bars.
  • A table per item: title, type (the content type’s own name — Post, Page, Product), visits, average scroll, and a “Percentiles” group — seven sortable columns (5/10/25/50/75/90/100) showing the scroll depth each share of that article’s visitors reached. Every column header is clickable and sorts the table (first click ascending, second descending; numbers as numbers, titles alphabetically), so “most visited” or “worst-median depth” is one click away — the 50% column is the median. A “Search articles” box above the table narrows the rows as you type, matching titles case-insensitively; it composes with the active sort and survives an Apply.
  • A “Readability brief” widget on the admin Dashboard home screen: the same numbers for the last 7 days at a glance, with a link to the full report. It is a standard dashboard widget — visible to administrators, and movable, collapsible or hideable through Screen Options like every other box there.

Performance at scale

The plugin computes the statistics on the fly with database queries. At very large volumes (hundreds of thousands of visits) caching (transients) or cron-based aggregation is worth adding. A typical blog does not need it.

Rate limiting and the database

Without a persistent object cache, each beacon writes the throttle counter to the options table, so the limit costs two queries per beacon. That is cheap at the scale this plugin targets — it is a spam brake, not a firewall.

Installation

  1. In wp-admin go to Plugins → Add New → Upload Plugin.
  2. Choose the downloaded archive (ango-scroll-analytics-1.12.0.zip), click “Install Now”, then “Activate”.
  3. On activation the plugin creates its table in the database, {prefix}_ango_visits (wp_ango_visits with the default prefix). If the schema changes in a later version, the table is brought up to date the next time wp-admin is opened (dbDelta).
  4. A “Readability” entry appears in the left-hand menu — the dashboard lives there.

Frequently asked questions

Do visits with no scrolling really count?

Yes. Every arrival is a row, including the ones with 0% scroll: the percentiles describe all arrivals, not only those who read to the end. That is a deliberate decision, not lost data. The dashboard does distinguish two kinds of zero-scroll visits. A visit that sent nothing after the initial page-load beacon (max_scroll 0 and time on page 0) is “load-and-die” — on a live site those are usually bots, crawlers and link previews, not people. They are excluded from the statistics by default (the Visits card shows how many were left out), while a person who loaded the page and stayed without…

Is the tracking endpoint public?

Yes — it has to be, because visitors are not logged in. POST /wp-json/ango/v1/depth is limited to 60 requests per minute per IP; the limit is changed through the ango_rate_limit filter, and a value below 1 disables the check. The IP itself is not stored, only a hash of it, for the duration of the window. Behind a proxy (Cloudflare and similar) REMOTE_ADDR is the proxy address, so the limit is shared by all visitors — raise it in that setup.

Why do the numbers differ from my analytics tool?

This plugin measures depth through the scrollable height of the page, not the share of the article that was on screen: a short page that fits on one screen records 100%. And it counts visits, not unique readers — a new tab or a new session is a new visit.

What timezone are the numbers in?

Timestamps in the table (created_at) are stored in UTC, while the dashboard computes day boundaries in the site timezone. Keep that in mind when writing manual SQL against {prefix}_ango_visits.

Can I track custom post types?

They are tracked by default: the script loads on the single page of every public post type, so a WooCommerce product, a forum thread or a knowledge-base entry all get measured the moment they exist. Media attachments are the one exception — they are public but are media-library artifacts, not pages a reader scrolls. If a plugin registers a public type you do not want counted (a page-builder’s template library, a popup type), remove it with the ango_trackable_post_types filter: add_filter( 'ango_trackable_post_types', function ( $types ) { unset( $types['my_popup'] ); return $types; } );

Does the admin screen load anything from outside my site?

No. The chart is drawn by Chart.js 4.5.1, bundled with the plugin (assets/vendor/chart.umd.min.js, MIT license), so wp-admin makes no external request and the chart works offline and behind a filtering proxy.

Why does the bundled Chart.js ship minified?

Chart.js 4.5.1 (MIT) ships here as the minified UMD build that upstream publishes — assets/vendor/chart.umd.min.js, licence banner intact. Upstream has no unminified UMD to use instead: dist/chart.umd.js and dist/chart.umd.min.js in its package are both minified. The readable code is published, just in another build: the unminified ESM bundle is dist/chart.js (https://unpkg.com/chart.js@4.5.1/dist/chart.js), and the sources it is built from are at https://github.com/chartjs/Chart.js/tree/v4.5.1/src.

Why are the file names so plain?

They are deliberately neutral: the tracking script is assets/js/scroll-depth.js and the public endpoint is /wp-json/ango/v1/depth, with no tracker/track in either. Those words are a common target for filter lists, and a blocked script or beacon loses data silently. Neither EasyList/EasyPrivacy nor the uBlock Origin and AdGuard filters matched these URLs (checked 2026-09-16 under the plugin’s previous name; the endpoint paths did not change in the rename), but the lists update daily — so do not rename them back “for clarity”.

What happens to my data when I uninstall the plugin?

Deleting the plugin removes everything it stored: the {prefix}_ango_visits table, the ango_db_version option and the throttle transients. Deactivating does not — the data survives a deactivate and reactivate cycle, so an upgrade or a temporary switch-off costs nothing. Clicking Delete on the Plugins screen shows a confirmation naming the statistics that will be lost. If you need the numbers after the plugin is gone, export them before deleting, or hold the cleanup back from a must-use plugin with add_filter( ‘ango_remove_data_on_uninstall’, ‘__return_false’ ).

Changelog

1.12.0

  • New: a “Percentile mode” switch on the dashboard (Reach / Classical). Reach percentiles answer “how far did readers get” — at least X% of visitors reached this depth. Classical percentiles are the textbook statistical view, computed exactly like Excel’s PERCENTILE.INC — X% of visitors reached this depth or less. The switch changes the summary list, the table columns and their tooltips at once, needs no reload and is remembered per browser. Reach stays the default.

1.11.0

  • New: a “Search articles” box above the “By article” table. It filters the rows live as you type — case-insensitive title matching, no Apply click, no extra requests — composes with any active sort, and survives a re-render. When nothing matches, the table says so instead of showing a stale row set.

1.10.0

  • New: the “By article” table replaces the single “90% scrolled at least to” column with a full “Percentiles” group — seven sortable sub-columns (5/10/25/50/75/90/100) showing the depth each share of that article’s visitors reached. The separate Median column is gone; the 50% sub-column IS the median, computed the same way from the same rows. Wide screens scroll the table horizontally instead of squeezing it.

1.9.0

  • New: the tracker covers every public post type, not only posts and pages — WooCommerce products and any plugin’s custom post types are now measured and appear in the “By article” table. Media attachments stay untracked, and the new ango_trackable_post_types filter removes a type a site does not want counted.
  • New: the “By article” table names each row’s content type — a product reads “Product”, not “Post”.

1.8.1

  • New: article titles in the “By article” table are clickable links to the article itself, opening in a new tab. Posts that no longer exist stay plain text.
  • Fix: the sortable column headers no longer show their label twice (“ArticleArticle”). The 1.8.0 headers printed the column name both outside and inside the sort button; it now appears once.

1.8.0

  • New: the “By article” table is sortable. Click a column header to sort by it — first click ascending, second descending, with a direction arrow on the active column. Numbers sort numerically, titles and types alphabetically; finding the most visited or worst-median article no longer means eyeballing the rows.

Full changelog on WordPress.org →

Screenshots

The Readability dashboard: the filter bar, visits / average scroll / median cards, the percentile list ("X% of visitors scrolled at least to Y% of the article"), and the visits-plus-average-scroll trend chart.
The Readability dashboard: the filter bar, visits / average scroll / median cards, the…

For developers

Is this your plugin? Show off the numbers.

Add a live badge to your site, docs or GitHub README. It updates on its own — no account needed.

Active installs badge Rating badge Health score badge

Best AnGo Scroll Analytics alternatives

All content engagement plugins →
Alternatives
Rank Plugin Active installs Rating Updated Health
1 Reactify – Post Reactions, Emoji Reactions & Engagement Analytics for WordPress Reactify Explore All Features | Documentation | Premium Version by WP Plugify 300+ ★★★★★★★★★★ No reviews 2 weeks ago 69
2 FYP Infinite Posts – Automatic Infinite Scroll & Ajax Load More for Better Engagement FYP Infinite Posts Keep visitors engaged longer with automatic infinite scroll. No coding required - 8… by François Yerg 10+ ★★★★★★★★★★ No reviews 9 months ago 38
4 MP Smart Content Timekeeper MP Smart Content Timekeeper Enhance user engagement with smart reading time estimates and interactive progress tracking. by Mayank Pandya <10 ★★★★★★★★★★ 5 (1) 1 year ago 37

FAQ

AnGo Scroll Analytics: quick answers

Straight answers, pulled from live WordPress.org data.

Live data from WordPress.org · checked Oct 20, 2026

Is AnGo Scroll Analytics free?

Yes. AnGo Scroll Analytics is free to download and use from the official WordPress.org plugin directory.

Is AnGo Scroll Analytics safe to use in 2026?

AnGo Scroll Analytics is a solid plugin choice in 2026, with a few things worth checking first. It runs on 10+ sites and was last updated 6 days ago, and scores 66/100 on our health check.

How many websites use AnGo Scroll Analytics?

AnGo Scroll Analytics is active on 10+ WordPress websites and has been downloaded 805 times since it launched in September 2026. It was downloaded 812 times in the last 30 days.

Does AnGo Scroll Analytics work with WordPress 7.1?

Yes. The developer has tested AnGo Scroll Analytics up to WordPress 7.1.3, the latest release. It requires WordPress 6.8 or newer.

What PHP version does AnGo Scroll Analytics need?

AnGo Scroll Analytics requires PHP 7.4 or higher. Most hosts run PHP 8.x today, so it works on any modern WordPress hosting.

When was AnGo Scroll Analytics last updated?

The latest version, 1.12.0, was released on October 14, 2026 (6 days ago).

Who makes AnGo Scroll Analytics?

AnGo Scroll Analytics is developed and maintained by andrewgolubev.

What are the best alternatives to AnGo Scroll Analytics?

The most popular alternatives to AnGo Scroll Analytics are Reactify (300+ installs), FYP Infinite Posts (10+ installs) and MP Smart Content Timekeeper (<10 installs).

Powered by PageForge

Want thousands of pages that rank like these? Build them in an afternoon.

This directory runs on the same engine as PageForge. Turn any spreadsheet, CSV or API into thousands of fast, SEO-ready WordPress pages — with schema, internal links and AI-written copy baked in.

  • CSV, Google Sheets & API data sources
  • AI content, schema & internal links per page
  • Works with Elementor, Gutenberg, Yoast & Rank Math
  • Free on WordPress.org — no credit card
Sarah is here to help!
Hi there! 👋 Need help finding what you're looking for?
Sarah
Sarah
Online & Ready to Help
Hi there! 👋 Need help finding what you're looking for?

We'll use this to continue our conversation

Just now ✓ Verified

Join 500+ SEO Pros Scaling Their Strategy

Get exclusive programmatic SEO tactics, AI content workflows, and the latest PageForge updates delivered straight to your inbox. Stay ahead of the algorithm.

We care about your data in our privacy policy.