Dev.to WebDev πŸ›  Dev πŸ‘ 0 πŸ“– 6 min read

How we timed 25 anonymous Instagram story viewers (and what the third-party host count says)

Disclosure first: we build StoriesFly, one of the 25 sites in this test. It is one row in the table, not the point of the post. We list where it did worse than others, below. On 4 November 2026 we ran the same public ac

Disclosure first: we build StoriesFly, one of the 25 sites in this test. It is one row in the table, not the point of the post. We list where it did worse than others, below.

On 4 November 2026 we ran the same public account through 25 anonymous Instagram story viewers and wrote down what happened. This post is about the method and what the numbers show. The full write-up is in the test article, and the raw data is a CSV you can open yourself.

The setup

  • Test account: @natgeo, public, 5 active stories (4 photos, 1 video). Several of the tested sites listed the same 5 stories with matching ages, which gave us an independent check of that count.
  • Second account for the sites that worked: @outdoorresearch, 1 active video story.
  • Browser: desktop Chrome, no ad blocker, no login on any tested site, cookie banners declined, no captcha solved.
  • Three rounds: 01:35–02:26 UTC, 03:08–04:19 UTC, and 13:36–14:05 UTC.
  • One to three runs per site, by hand. One location (Serbia, by IP).

What we measured

Time to first story. We counted from pressing Enter to the first portrait story image that finished loading. Not "page loaded", not "result box appeared". A viewer can show a profile card in one second and the stories in twenty, and only the second number matters to a person who wants to see a story.

Third-party hosts. We counted the other domains each page loaded (ad networks, analytics, CDNs) from the browser's own resource timing entries. The article calls this a lower bound, and it is one: anything blocked, lazy-loaded later, or loaded after we stopped looking is not in the count.

A rough version of that count looks like this:

// Run in the console after the results have rendered.
const own = location.hostname.split('.').slice(-2).join('.');
const hosts = new Set(
  performance.getEntriesByType('resource')
    .map(e => new URL(e.name).hostname)
    .filter(h => !h.endsWith(own))
);
console.log(hosts.size, [...hosts].sort());

Two limits of this snippet. Taking the last two labels is wrong for suffixes like .co.uk. And a site's own CDN on another domain counts as third-party, so a high count is not always ads. We looked at the host names, not only the number.

What the data shows

Most failures were not broken sites. 14 of the 24 other sites showed stories without a login at least once. 3 showed them only partly: behind a sign-in, a "watch an ad" step, or a captcha. 6 never showed a story in our runs. 1 turned out not to be a story viewer at all.

Of those 6, the cause was almost never "the server is down". PVStory stopped at a browser check that did not clear. InstaPV and InstaStoriesViewer put a full-screen ad where the result should be. Picuki sent the tab to ad sites within about 10 seconds, with no click, in 3 runs out of 3.

Four sites failed first and worked later. Two cleared their Cloudflare check on their own in round 2. Mollygram showed stories in round 3, but only after we clicked its View button instead of pressing Enter. StoriesIG.cc showed the second account's story after one "Try again". So "the check did not clear in 30 seconds" is what we write, not "the site is down".

Cold runs and warm runs are different numbers. Some sites were slow once and fast after that:

Site First run Median
Insnoop 8.0 s 1.1 s
Inviziogram 20.7 s 1.6 s
Insmask 6.3 s 2.6 s

Repeat runs are faster because the site and the browser cache the same images. The first run alone measures the cold path; the median alone hides it. We show both.

Host counts spread widely. The working sites loaded between 3 and 15 third-party domains. The two heaviest pages were PVStory with 45 hosts (no story in our runs) and Mollygram with 38–41 (stories only on the third try). The lightest working pages were StoriesIG.us with 4, and Insmask and Insnoop with 5 each.

A second account changed the picture. AnonyIG and StoriesIG.info, which share a page template, showed all the stories for @natgeo and were among the fastest sites. For @outdoorresearch both showed a photo from the account's posts where the story should be, followed by an offer for a paid app. One account is not enough to judge a viewer. We found this only because we added the second account in round 3.

Dead domains in old lists

Before the timed runs we checked every domain that still turns up in older "best viewer" lists. On 4 November 2026, 12 of them were unusable:

  • Did not resolve: storiesdown.com, iganony.com, iganony.io, glassagram.com.
  • Domain-for-sale pages: megastory.com, instanav.com.
  • No answer, timeout or TLS error: followspy.ai, instanavigation.com, invizio.app.
  • Redirects: smihub.com and greatfon.com go to dumpor.io, instanavigation.net goes to insta-story.com.

If an article recommends one of these, it was written before they went.

Gates, not outages

If you build anything that fetches from third-party pages, the useful categories from this test are the gates in front of the content:

  • Browser checks (Cloudflare Turnstile). We waited and did not click.
  • Captchas. Dumpor gave no result in three automated rounds. In a manual check, a person on our team solved the captcha and got a story in about 30 seconds. So the site works for humans and not for our automated runs.
  • Ad gates. Full-screen or rewarded ads where the result should be, on seven sites. Imginn locks stories behind "watch a short ad".
  • Login walls. Inflact shows thumbnails of all 5 stories, then asks you to sign in to open or download.
  • Input quirks. On several sites pressing Enter did nothing, and the site's own button worked. Round 3 tried the button wherever Enter failed.

None of these is a page load problem. A timer that stops at the load event would have scored most of them as fast.

Where StoriesFly was worse

As a logged-out guest at 13:16 UTC, @natgeo's first story appeared 1.25 s after Enter, with 5 third-party hosts and no ad networks. That is the good row. These are the bad ones:

  • Uncached lookups of other accounts took 1.2 s (@nasa), 2.2 s (@bbcnews, 15 stories) and 11.1 s (@lonelyplanet).
  • The free plan is 10 story views a day without an account. More needs a paid plan.
  • In one of five attempts, pressing Enter before the page had fully loaded reloaded the page with no result.
  • Rounds 2 and 3 ran in a browser logged in to StoriesFly, which only affects our own numbers. That is why we also report a guest run.

Limits of the method

  • One day, one location, one desktop browser, 1–3 runs per site. Ad loads change by country and session.
  • Resource timing gives a lower bound on third-party hosts. It says who was contacted, not what they did.
  • Manual timing means the numbers are good to a fraction of a second at best. For DolphinRadar our timer had a gap, so we report 20–39 s and not a finer figure.
  • Sites change weekly. Read each result as "what we saw on 4 November 2026".

Check it yourself

The CSV has one row per site: UTC time of the run, whether stories were shown, stories shown versus existing, first-run and median seconds, second-account result, third-party host count, the gate, and notes. It also has the dead-domain checks and four extra sites we did not count in the 25.

instagram-story-viewers-test-2026-11.csv

If you re-run any of it and get different numbers, we would like to see them.

πŸ“° Read the original article on Dev.to WebDev

Originally published by Dev.to WebDev. Aggregated on AIWithGhost for educational purposes β€” full credit and traffic to the original publisher.