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.

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.
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
| Decision | What we did | Why |
|---|---|---|
| Window | Links created 2026-07-19 to 2026-09-10 | The filtered counter shipped on 2026-07-19, so both tallies cover each link's full life |
| Unit | Hits, not sessions or visitors | A shortener sees requests; it cannot see what happened after the redirect |
| Numerator | The link's filtered bot tally | Incremented once per screened request |
| Denominator | Human clicks plus filtered hits | Share of everything that knocked, not of what got counted |
| Detection | User-agent screening only | No IP reputation, no behavioural scoring, so the result is a floor |
| Cohorts | Six owner and state buckets | Abuse, internal testing and anonymous links behave nothing like normal links |
| Per-link stats | Only 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.
The headline: 9.8% of hits on clean links were bots
Across 12,525 clean links, Flyn counted 338,024 human clicks and 36,735 filtered bot hits: 374,759 requests in total, a bot share of 9.8%. For context, Imperva's 2026 report puts automated traffic at more than 53% of all web traffic in 2025, up from 51% the year before, and 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, showed bots at 34.7% for the four weeks to 2026-09-10. Both Cloudflare figures are right and they measure different denominators: the 57.3% counts only requests that returned an HTML page, while Radar's headline counts every HTTP request, and one person opening one page also pulls in the images, scripts and API calls that dilute the share. Short links screened by user agent come in below all of them, which is what you would expect from a method that only catches bots that announce themselves.
Every cohort side by side
| Cohort | Links | Human clicks | Filtered bot hits | Bot share |
|---|---|---|---|---|
| Clean (quote this one) | 12,525 | 338,024 | 36,735 | 9.8% |
| Banned owners | 380 | 511,052 | 12,963 | 2.5% |
| Disabled links | 179 | 30,581 | 2,532 | 7.6% |
| Anonymous links | 316 | 23,915 | 512 | 2.1% |
| Internal Flyn accounts | 475 | 207 | 40 | 16.2% |
| Password protected | 5 | 14 | 0 | 0% |
Why banned owners read lower than clean links
Look at the second row. The 380 links owned by accounts that were later banned pulled 511,052 human clicks, more raw volume than the entire clean population, and only 2.5% of their hits were screened as automated. A filter that worked on intent would light that row up. A filter that works on user agent does not, because the traffic driven at those links arrives wearing ordinary browser strings.
So the abuse cohorts are not cleaner, they are better disguised. That inversion is why every percentage here should be read as a minimum, and why a low filtered count is never evidence that a link's traffic is real. If a link of yours is in that state, what happens to a disabled link and the link safety rules matter more than its bot share.
Do not read these cohorts as quality grades. Internal Flyn links sit highest at 16.2% because they are test links with almost no human traffic (207 clicks total), so a few crawler hits dominate the ratio. Banned owners sit lowest because screening misses disguised traffic. Cohort bot share measures how visible the automation is, not how trustworthy the link is.
Bot hits cluster, and small links take the worst of it
Two structural facts explain almost every strange bot share you will see on a single link: concentration and size.
The top 1% of links carry half of it
Rank the 3,967 clean links with traffic by filtered bot hits and the top 1% carry 49.3% of every bot hit in the population; the top 10% carry 83.1%. Bot traffic on short links is not a tax applied evenly. It is a small number of links that something keeps hammering, usually because they were published somewhere crawled hard, pasted into several chat platforms that each unfurl a preview, or scraped into a feed. For most links the automated share is small and boring. For a few it is the majority of the counter.
Bot share falls as real traffic arrives
| Total hits on the link | Links | Bot share of hits in that bucket |
|---|---|---|
| 1 to 9 | 2,415 | 21.4% |
| 10 to 99 | 1,261 | 28.4% |
| 100 to 999 | 221 | 12.2% |
| 1,000 and up | 70 | 6.4% |
Read it bottom up. Once a link is genuinely working, past a thousand hits, bots are 6.4% of its traffic and fade into the background. Below a hundred hits they are a quarter of everything. Automated fetches are roughly fixed per share event, a preview here, a crawler there, a safety scanner, while human clicks scale with how well the campaign does. So bot share is mostly a measure of how little human traffic a link got, which is the opposite of how most people read it.
Never judge a link's quality in its first hours. A link with 6 hits and a 33% filtered share is statistically indistinguishable from every other new link in the 1 to 9 bucket. Wait until it clears about 100 hits, then compare its share against the 100-plus-hit ladder in the previous section. For a whole batch at once, run them through the bulk health checker rather than eyeballing one link at a time.
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.
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.
What this means for a Flyn short link
If you came here to work out what your own dashboard is telling you, this is where the research maps onto the product.
The filtered count sits next to the click count
Every Flyn link shows its human click count and its filtered bot count separately, on every plan including the free one, which is why this research was possible at all. Reading your own split takes one paragraph: open the link, compare the filtered number to the human number, and place the ratio on the ladder above. The full walkthrough of the card is in which clicks came from ChatGPT, and the count definitions are in unique versus total clicks and link analytics. Segmenting those human clicks by geo, device and referrer sits on the paid plans.
What a human click stores, and what a filtered hit does not
A hit classified as human stores one row: country, city, device, operating system, browser, referrer, a hashed IP, any UTM values on the short URL, and a timestamp. No advertising identifier, and as of 2026-09-10 the redirect sets no cookie. An automated hit stores nothing; it adds one to the filtered tally and the user agent is discarded. On a live link both branches get the same 302 with Referrer-Policy: strict-origin-when-cross-origin, and the classification stays inside Flyn: nothing in the hop marks a hit as filtered, which is part of why a shortener's count and your own server-side analytics never reconcile line for line. To sanity check the hop itself, use the redirect checker, the URL expander or the click counter tool.
One more number worth having: of the 338,024 human clicks on clean links, only 590 were QR scans. QR is a rounding error here, so do not let a scan-heavy campaign stand in for short links generally. Scan tracking is its own measurement problem.
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.
The five checks
- 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.
- 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.
- 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.
- 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.
- 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 hits | Where it sits | What to do |
|---|---|---|
| 0% to 4.8% | At or below the median | Nothing. This is the normal half of the high-traffic population. |
| 4.8% to 16.1% | Normal upper half | Note it and use human clicks as your denominator. |
| 16.1% to 33.6% | Top quartile | Check where the link was shared before you call it fraud. |
| Above 33.6% | Top decile | Treat the raw total as unusable. Report human clicks only. |
| Near zero on a high-volume link | Suspicious, not clean | Remember 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?
Why is my short link click count higher than my website sessions?
Does a low bot percentage mean my link's traffic is real?
Why does my brand new link show such a high bot percentage?
Can you break the bot hits down by crawler, like Googlebot versus Slack?
How does this compare to web-wide bot traffic statistics?
Why does Short.io say bots are over 99% of link traffic when Flyn measured 9.8%?
Should I report raw clicks or human clicks to a client?
Do QR code scans behave the same way?
Free tools for this
Three Flyn tools that pair well with the strategy in this article, all free, no signup needed.
UTM Builder
Build campaign-tracked URLs in seconds.
Broken Link Checker
Scan any page for dead links and 404s.
Open Graph Checker
Preview how URLs unfurl on social.
Keep reading
Three related deep-dives from the Flyn blog.

Why Branded Short Links Increase CTR by 34%
12 min read

How to Track Which Posts Drive Sales, Not Just Clicks
19 min read
Postback URL Tracking: How S2S Conversion Tracking Works
17 min read
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 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.