Back to Blog

What Share of Short Link Clicks Are Bots? Real Data

Your short link says 400 clicks. Your site saw 40 sessions. Here is the measured share of short-link hits that are automated, counted across 12,525 links.

Karan Bhakuni
Karan Bhakuni
Founder, Flyn
ResearchSep 10, 202618 min readUpdated Sep 10, 2026
What Share of Short Link Clicks Are Bots? Real Data

Why nobody will tell you what share of your clicks are bots

You posted a link, the shortener says 412 clicks, and your analytics saw 38 sessions. Somebody asks what the real number is, and every answer online is either about web traffic in general or a range with no source behind it. That gap is not an accident: almost every tool in the chain throws the evidence away.

The counter most tools refuse to show you

Google Analytics filters known bots by default using Google research plus the International Spiders and Bots List maintained by the Interactive Advertising Bureau, and its own documentation is blunt about what you get back: you cannot disable known bot traffic exclusion or see how much known bot traffic was excluded. Email platforms do the same. Mailchimp's bot filtering identifies most bot activity and hides inaccurate data from your reports without removing it from your account, and warns you to expect metrics to drop significantly once you switch it on. Helpful, honest, and numberless: you are told the noise was removed, never how loud it was.

Shorteners behave the same way, with one difference: a short link is one URL shared into dozens of contexts, so the noise arrives from everywhere at once. If you are picking a tool on this basis, the vendor comparison for bot filtering covers who exposes what. This page is about the number itself.

What this page measures

Flyn keeps two tallies per link: human clicks and filtered bot hits. Because the second is stored next to the first instead of discarded, the ratio can be computed across a whole population of links rather than estimated. Everything below comes from that, computed on 2026-09-10: no modelling, no extrapolation, no sampling, just two integers per link, summed.

How we measured it: two counters, one window

The method matters more than the headline, because a headline is only quotable if you can see exactly what it counts.

Flow diagram: a request to a short link passes a user agent screen, then lands either in the human click counter with a stored row or in the filtered bot counter as a plus oneTap to enlarge
Every request lands in exactly one of two counters before the redirect goes out. Bot share is counter B divided by the sum of both.

The two counters and the window

Every request is screened by user agent before anything is counted. Known crawlers, link-preview fetchers, headless browsers, HTTP client libraries, uptime monitors and blank user agents increment the link's filtered tally and nothing else: no stored row, no retained user agent. Everything else counts as a human click and stores one row. On a live link both branches then get the same 302, so the classification changes the counter and not the redirect. Dead links are the documented exception: an expired or disabled link answers a recognised crawler with a 410 rather than the page a person would see. That screening is explained end to end in the guide to reading your traffic quality split, and it runs on every link on every plan.

The window is links created between 2026-07-19, the day the filtered counter shipped, and 2026-09-10. That start date is the point of the exercise: the filtered tally has no timestamp, so a link created earlier would carry a human count covering its whole life and a bot count covering only part of it. Restricting the population to links born after the counter existed makes both tallies cover the same lifetime for every link in the set.

The choices, one by one

DecisionWhat we didWhy
WindowLinks created 2026-07-19 to 2026-09-10The filtered counter shipped on 2026-07-19, so both tallies cover each link's full life
UnitHits, not sessions or visitorsA shortener sees requests; it cannot see what happened after the redirect
NumeratorThe link's filtered bot tallyIncremented once per screened request
DenominatorHuman clicks plus filtered hitsShare of everything that knocked, not of what got counted
DetectionUser-agent screening onlyNo IP reputation, no behavioural scoring, so the result is a floor
CohortsSix owner and state bucketsAbuse, internal testing and anonymous links behave nothing like normal links
Per-link statsOnly links with at least one hit (n=3,967)A link nobody touched has no share to report

The clean cohort is the one to quote: an owner who is not banned and not an internal Flyn account, a link that is not disabled and not password protected. The rest are reported separately below, because mixing them produces a number that describes nothing.

Why every number on this page is a floor

The honest version of this research is the limitation section, so here it is in full rather than as a footnote.

User-agent screening only catches bots that announce themselves

Flyn classifies a hit as automated when the User-Agent header matches a known crawler, preview fetcher, headless runtime, HTTP library or monitor pattern, or when it is blank. That is a self-declaration, and a self-declaration is trivially falsifiable. Playwright, one of the automation runtimes on that pattern list, exposes a context option whose entire documented description is specific user agent to use in this context, so a script that wants to look like Chrome looks like Chrome in one line. MDN's reference on the header notes that it identifies a particular user agent and can therefore be used for fingerprinting, which is the same property read from the other side: it is a label the client picks. Google's own guidance on verifying Googlebot exists, in its words, because spammers or other troublemakers are accessing your site while claiming to be from Google, and the two checks it recommends are a reverse DNS lookup and a match against Google's published IP ranges. Neither one reads the user agent.

Two columns comparing hits counted as bots because they declare themselves against disguised hits counted as human, with a note that no reverse DNS or IP range check runsTap to enlarge
The screen reads the User-Agent header alone, so it counts only the automation that declares itself. Reverse DNS and a published IP range match, the two checks Google recommends for verifying Googlebot, are not run in the redirect path.

Flyn does not do reverse DNS, IP reputation or behavioural scoring in the redirect path. So a scraper sending a stock Chrome string, a click farm driving a real browser and residential-proxy traffic are all counted as human clicks. 9.8% is the share of hits that admitted what they were. The true share is higher by an unknown amount, and the banned-owner row at 2.5% is direct evidence of how much the method misses.

What the counter cannot tell you

The filtered tally is a single integer per link, and the user agent is discarded once the hit is classified, so it cannot be split by bot family. This page cannot tell you how much of that 9.8% was a chat app unfurling a paste versus Googlebot versus an uptime monitor, and any page claiming a per-crawler breakdown from this counter is making it up. Related but separate: AI crawlers like GPTBot and ClaudeBot land in the filtered tally as bots, while a human arriving from an AI assistant is a real click in its own referral channel, a distinction covered in the AI assistants channel breakdown.

What other shorteners report, and why the numbers differ

Our 9.8% is far below the figures a competitor will hand you, so here they are, named. Short.io tells its readers in a March 2026 guide that bots will consistently be over 99% of your traffic, with no sample, window or method published behind it. Linkly illustrates its help page on inflated clicks with a single dashboard in which 3,674 clicks are shown and 9.8k bots were filtered out, roughly three quarters of that one link's raw traffic. Neither of Linkly's two bot help pages, read on 2026-09-10, puts a percentage on its own population. Neither claim is a measurement of a population: one is an assertion, the other is one screenshot of one heavily fetched link. Both are compatible with what we found, because our own ladder has a top decile: 253 clean links in this window took bot hits and no human clicks whatsoever, and the worst link with real traffic ran 99.4% bots. A single exposed link can be almost entirely automated. A whole population of links, most of them small, is not.

Detection depth is the other half of the gap, and it does not run in our favour. Linkly documents screening that goes past the user agent: it verifies major crawlers against the networks they genuinely operate from, and it weighs whether a request arrived from a cloud hosting provider such as AWS, Google Cloud or DigitalOcean together with how the request behaves. Flyn does none of that in the redirect path. On identical traffic a filter like that should return a higher bot count than ours, so Linkly's numbers are not comparable with the ones on this page and should be expected to sit above them. That is the honest reading of a low figure published by the party being measured: 9.8% is what a user-agent screen can see, not what is there.

Three more caveats, plainly. This is one shortener's customer base, not a census of short links. The window is 54 days, so seasonality is invisible. And these are counters, not logs: they can be summed and divided, but not re-segmented after the fact by country, device or referrer the way stored click events can.

Audit your own click report in five steps

Run this on any link, using the published distribution as the yardstick rather than a rule of thumb.

Decision tree routing a link from having both counts, through the correct share formula, to a size check that picks either the small-link yardstick or the percentile ladderTap to enlarge
The audit in the order it has to run: both counts first, the correct denominator second, and the size bucket before any threshold. Under 100 total hits the yardstick is 21.4% or 28.4%, not the 9.8% headline and not the ladder.

The five checks

  1. Get both numbers, not one. Write down human clicks and filtered hits for the link. If your tool only gives you a total, you cannot do this audit and you should say so in the report rather than guess.
  2. Compute the share as filtered divided by the sum of both. Not filtered divided by human clicks, which inflates it, and not filtered divided by total clicks if total already excludes bots.
  3. Check the size bucket before anything else. Under 100 total hits the share is noise. Compare it to the 21.4% and 28.4% bucket figures, not to the 9.8% headline and not to the ladder.
  4. At 100 hits or more, place it on the ladder below before you react to it. That ladder is built from the 293 clean links that cleared 100 hits, not from the whole population.
  5. Recompute every downstream rate on human clicks. Conversion rate, cost per click, CTR: all of them move once the filtered hits come out of the denominator. The click tracking guide and UTM audit guide cover how to keep those denominators consistent once you have cleaned them.
Filtered share on a link with 100 or more hitsWhere it sitsWhat to do
0% to 4.8%At or below the medianNothing. This is the normal half of the high-traffic population.
4.8% to 16.1%Normal upper halfNote it and use human clicks as your denominator.
16.1% to 33.6%Top quartileCheck where the link was shared before you call it fraud.
Above 33.6%Top decileTreat the raw total as unusable. Report human clicks only.
Near zero on a high-volume linkSuspicious, not cleanRemember the banned-owner row: disguised traffic reads as human.

That last row is the one people skip. A link with 40,000 clicks and 12 filtered hits does not have a clean bill of health; it has traffic that is not declaring itself. Pair this audit with the detection methods if the stakes are financial, and with short link safety if you are the one being sent the link.

What would change this number

Cite this page, but cite it with its expiry date in mind. Four things would move it, and three of them are likely within a year.

The things that move it

First, detection depth. Adding IP reputation, reverse DNS verification or behavioural checks would raise the measured share immediately, because traffic currently counted as human would land in the filtered tally instead. Worth remembering whenever a vendor publishes a higher figure than this one: a bigger bot percentage can mean a better filter rather than a worse internet.

Second, the agentic shift. Cloudflare's 57.3% of HTML requests and Imperva's 53% of web traffic are both trending upward, driven by AI agents fetching pages on a person's behalf, and short links sit directly in that path. Whether an agent following a link for a human counts as a bot is a genuinely open question. Third, population mix: a shift in who signs up moves the ratio. Fourth, window length: a full year would show seasonality that 54 days cannot.

The measurement is scheduled to re-run quarterly on the same cohort definitions, so later figures can be compared against these rather than replacing them. Until then: 9.8% of all hits on clean links, a median of 7.7% per link across the whole population and 4.8% on the links that cleared 100 hits, a 90th percentile of 33.6% on that same high-traffic set, and the top 1% of links with traffic carrying 49.3% of the bot hits. Every one of those is a floor, because detection is user-agent screening only. Measured on 2026-09-10.

This page reports a measurement, not a compliance or fraud determination, and nothing here is legal advice.

Frequently Asked Questions

What percentage of short link clicks are bots?
On Flyn's own data, 9.8% of all hits on clean short links were screened as automated: 36,735 filtered bot hits against 338,024 human clicks, across 12,525 links created between 19 July and 10 September 2026. That is the population figure. The per-link picture is wider: among the 3,967 links that got any traffic, the median was 7.7%, the 75th percentile 37.0% and the 90th percentile 75.0%, though that population is 92.7% links with fewer than 100 total hits, so it describes the population rather than benchmarking one link. On the 293 clean links that took 100 or more hits the median is 4.8%, the 75th percentile 16.1% and the 90th percentile 33.6%, and that is the ladder to compare a working link against. Because detection is user-agent screening only, all of these are floors. Anything sending a normal browser string is counted as a human click, so the true automated share is higher by an unknown amount.
Why is my short link click count higher than my website sessions?
Three reasons stack up. First, automated fetches: 17% of links in this research recorded more bot hits than human clicks, and 253 links had bot hits with zero human clicks at all. Second, a redirect counts a request while your analytics counts a page that finished loading and ran JavaScript, so anyone who bounced mid-hop is missing downstream. Third, the destination never sees the full short URL because the redirect sends a strict referrer policy, so attribution can land in direct rather than your campaign. Compare your link's filtered count to its human count before assuming the gap is tracking loss.
Does a low bot percentage mean my link's traffic is real?
No, and this is the most important caveat in the research. Links owned by accounts that were later banned for abuse showed a bot share of 2.5%, which is lower than the 9.8% on clean links, despite pulling more raw volume than the entire clean population. User-agent screening catches bots that declare themselves, and abuse traffic does not declare itself: it arrives wearing ordinary browser strings, often through residential proxies. So a near-zero filtered count on a high-volume link is a reason to look harder, not a clean bill of health. Read a low share as low visibility, not low automation.
Why does my brand new link show such a high bot percentage?
Because automated fetches are roughly fixed per share event while human clicks have not arrived yet. Links with 1 to 9 total hits averaged 21.4% bots and links with 10 to 99 averaged 28.4%, while links past 1,000 hits settled at 6.4%. A preview fetcher, a crawler and a safety scanner can easily touch a link before the first person does, so on a link with six hits the ratio is dominated by noise. Wait until the link clears roughly 100 human clicks before comparing its share to anything, and compare it to its size bucket rather than to the headline figure.
Can you break the bot hits down by crawler, like Googlebot versus Slack?
Not from this data, and any page claiming to do so from a shortener's filtered count is guessing. Flyn screens the user agent, increments a single integer on the link, and discards the string. There is one tally per link, not one per bot family, so the total is reliable while the composition is simply not recorded. Nothing identifying about the request survives, which is good for privacy and useless for forensics. A per-platform breakdown requires a controlled test where you paste a link into each platform and watch the requests arrive, which is a different kind of study from a population count.
How does this compare to web-wide bot traffic statistics?
It is much lower, and it should be. Imperva's 2026 report put automated traffic at more than 53% of all web traffic in 2025. Cloudflare data reported in June 2026 put it at 57.3% of worldwide HTTP requests to HTML content, while Cloudflare Radar, the company's own public dashboard at radar.cloudflare.com/bots, showed 34.7% over the four weeks to 10 September 2026: the two Cloudflare numbers differ because one counts only requests that returned a web page and the other counts every HTTP request, including the images, scripts and API calls a single page load drags in behind it. Those figures come from infrastructure that inspects IP reputation, behaviour and TLS fingerprints. Flyn's 9.8% comes from user-agent screening alone on short-link redirects. The numbers answer different questions: the web-wide figures estimate how much traffic is automated, while this one measures how much of it admits to being automated on one specific surface.
Why does Short.io say bots are over 99% of link traffic when Flyn measured 9.8%?
Because the two statements are about different things. Short.io's guide asserts that bots will consistently be over 99% of your traffic and publishes no sample, window or method behind it. Our 9.8% is a ratio of totals across 12,525 links, most of which are small, and it comes with the window, the cohort rules and the detection method stated. Both can hold at once: a single heavily fetched link really can run over 99% automated, and 253 links in our population took bot hits and no human clicks at all, but a whole population of links does not. The second half of the gap is detection depth. Linkly, another shortener, screens verified crawler networks and cloud hosting ranges as well as user agents, so its filtered counts should run higher than ours on identical traffic. Read our figure as a floor produced by user-agent screening, not as a claim that the rest of your clicks are people.
Should I report raw clicks or human clicks to a client?
Report human clicks, and disclose the filtered count alongside them rather than hiding it. On a link with real traffic, meaning 100 hits or more, the median adjustment is 4.8% and nobody will argue with it, while the 75th percentile is 16.1% and the 90th is 33.6%, which changes every rate built on top of it: conversion per click, cost per click, click-through rate. If you present raw totals and a client later compares them to their own analytics, the gap looks like your campaign underperformed rather than like a counting artefact. Showing both numbers and naming the method is the version that survives scrutiny.
Do QR code scans behave the same way?
This research cannot tell you, because QR is a rounding error in the population: only 590 of the 338,024 human clicks on clean links came from a QR scan. With a sample that small, any bot share computed on scans would be noise. There is a structural reason to expect scans to be cleaner, since a scan requires a physical camera pointed at a physical code, but that is reasoning rather than measurement and this page does not publish it as a finding. Treat scan tracking as a separate measurement problem with its own caveats.

Ready to try Flyn?

Free plan includes 25 links/month, full analytics, and access to all 30+ free tools above. No credit card required.

Already a member? Log in

Karan Bhakuni
Karan Bhakuni· Founder, Flyn

Karan Bhakuni is the founder of Flyn. He writes about branded links, click analytics, and the link-management tooling growth teams and creators actually need, drawn from building Flyn and reading a lot of user feedback.

Find these guides useful? Add Flyn as a preferred source so more of them show up in your Google results.