How to Tell if a Twitter Account Is a Bot: 7 Signals (2026)
X's Automated label, posting rate and five more signals show how to tell if a Twitter account is a bot, with a free checker we ran on a known bot.
Tarun Khatri
Published · Updated · 7 min read
To tell if a Twitter account is a bot, look for X's "Automated" label, then check six public signals that bots tend to share.
This guide is for you if you've asked "is this Twitter account a bot?" before you follow, trust or quote one on X (Twitter). You get the checklist, a free script that prints the signals, and its output for a real bot. We run Weir, the API the script calls.
You can read any public profile with one call:
curl https://api.weirapp.io/v1/x/users/EmojiMashupBot \
--header "Authorization: Bearer $WEIR_API_KEY"
- Look for the label"Automated by @owner" sits under the name.
- Do the mathPosts a day, and following versus followers.
- Read the profileDefault avatar, empty bio, recent renames.
- Check where it's basedX's country versus the bio's location.
- Run the checkerOur script prints it all for 6 credits.
How to tell if a Twitter account is a bot: the 7 signals
No single signal proves anything, so you count how many line up. Here is where you look for each one:
| Signal | Where to look | Worth a closer look when |
|---|---|---|
| Automated label | Under the name | Missing, yet it posts like a machine |
| Account age | Joined date | New, yet already busy |
| Posting rate | Posts ÷ days old | Over 72 a day |
| Follow ratio | Following, Followers | Follows thousands, few follow back |
| Profile | Avatar and bio | Default avatar, empty bio |
| Username changes | About this account | Several, or very recent |
| Based in | About this account | Clashes with the bio, or X doubts it |
The 72-a-day mark comes from DFRLab's guide to spotting bots. It calls over 144 a day "highly suspicious."
Even so, DFRLab warns that "no single factor can be relied upon to identify bot-like behavior."
Signal 1: Does X label it as automated?
X's Developer Guidelines tell every bot on its API to switch on an "Automated" label, shown under its name. The bio should say it's a bot and who runs it.
For its newer bot accounts, X's docs show the label as "Automated by @owner". TechCrunch reported that the labels opened to all bots on 16 February 2022.
You have to read the label on the profile itself. X's API data dictionary lists a parody flag but no automated field, and Weir doesn't return the label either.
Signals 2 to 4: age, posting rate and follow ratio
You can read these three straight off the profile:
- Age matters most next to activity: a week-old account with thousands of posts stands out.
- Posting rate is what you get when you divide the post count by the days since it joined.
- Follow ratio flags accounts that follow thousands in the hope of follow-backs, which X's rules ban for bots.
Age can't clear an account on its own. The Register noted that "someone could probably give a bot access to a long-established account."
We ran our checker on @EmojiMashupBot on 22 October 2026. TechCrunch named it among the bots that tested X's label before the 2022 launch.
By the numbers it looks calm, yet it's a declared bot. Emojipedia says it stopped posting in February 2023, after changes to X's API.
A lifetime average hides both bursts and long silences.
Signals 5 to 7: profile, renames and where it's based
You'll find these three on the profile and X's "About this account" screen:
- A default avatar means no photo was ever set, though DFRLab says that alone "is not an indicator of botness."
- Username changes show as a count and a date, as our username history guide explains.
- "Account based in" is the country X ties the account to, with a flag for whether X trusts that guess.
Renames have innocent causes too. @XDevelopers renamed once, on 26 July 2023, the day MobileSyrup reported "@TwitterDev is now @Xdevelopers". If an old, popular account renamed last week, though, look twice.
The country is a clue when it clashes with the bio. @XDevelopers lists its location as "127.0.0.1", a programmer's joke for "this computer", while X says the United States.
So a mismatch can be a joke, a trip or a VPN. Our guide to account based in on X covers when the country is wrong.
Is there a free Twitter bot checker that still works?
The best-known one, Botometer X, is now an archive.
Its maker, OSoMe, says it runs in "archival mode" on scores collected before June 2023. It has no records of accounts created after 31 May 2023, when X ended free API access for researchers. OSoMe adds that its model was trained before tools like ChatGPT.
You can run our checker free on Weir's 5,000 monthly credits. Each account costs you 6 credits. That's about 830 accounts a month.
Run the free Twitter bot checker in Python
You need Python 3, requests and a free Weir key in WEIR_API_KEY. The first half fetches the profile and the About screen:
import os, sys, requests
from datetime import datetime, timezone
def get(path):
r = requests.get(f"https://api.weirapp.io/v1/x/users/{path}", timeout=30,
headers={"Authorization": f"Bearer {os.environ['WEIR_API_KEY']}"})
r.raise_for_status() # a 404 means protected or gone, and costs nothing
return r.json()["data"]
user = sys.argv[1]
profile, about = get(user), get(f"{user}/about")
facts = about["aboutProfile"] or {}
renames = facts.get("usernameChanges") or {}
The second half prints each signal, never a verdict. It spots a default avatar by the "default_profile_images" address that X's own API examples use:
born = datetime.fromisoformat(profile["createdAt"].replace("Z", "+00:00"))
days = max(1, (datetime.now(timezone.utc) - born).days)
avatar = profile["profileImageUrl"] or "default_profile_images"
print("Account age, days:", days)
print("Posts a day:", round(profile["statusesCount"] / days, 1))
print("Following:", profile["followingCount"], "| Followers:", profile["followersCount"])
print("Default avatar:", "default_profile_images" in avatar)
print("Empty bio:", not (profile["description"] or "").strip())
print("Username changes:", renames.get("count"), "| Last:", renames.get("lastChangedAt"))
print("Based in:", facts.get("accountBasedIn"), "| Bio location:", profile["location"])
print("X trusts that country:", facts.get("locationAccurate"))
Save both halves as bot_signals.py and run it with a username. Our run on @EmojiMashupBot, 22 October 2026:
Account age, days: 2655
Posts a day: 8.6
Following: 2 | Followers: 228049
Default avatar: False
Empty bio: False
Username changes: 1 | Last: 2019-07-16T05:04:32.750Z
Based in: France | Bio location: (an email address, trimmed)
X trusts that country: True
Its only rename came six minutes after it joined, which is normal for a new account. "Connected via" read "France Android App", so don't count on that field to reveal a script.
If the script stops early:
- A 404 means the account is protected, suspended or gone, and it costs nothing.
- A 429 means you passed the free tier's 30 requests a minute, so wait and retry.
Noneon the About lines means X showed nothing there for that account.
Turn it into a Twitter fake follower checker
Run the same signals over your follower list to spot fakes. Weir's followers endpoint returns each follower's full profile, about 70 per page.
You pay a credit per follower and per page, plus a one-time 2-credit lookup of the account. TwitterAPI.io lists followers from $0.01 per 1,000, which is far cheaper for big audits.
Our follower export guide has the paging code.
When not to use Weir
- One account at a time? X's profile page shows you the label, the Joined date and the About screen for free.
- Huge follower audits cost far less on TwitterAPI.io.
- Need the Automated label as data? Weir doesn't return it, and X's data dictionary has no field for it.
- Want a verdict? No tool can prove a person is a bot, ours included.
FAQ
How can you tell if a Twitter account is a bot?
Look for X's "Automated" label first. Then check age, posts a day, follows, profile, renames and where X says it's based. Several red flags together justify a closer look; one alone means little.
Is there a free Twitter bot checker?
The best-known one, Botometer X, is now an archive with no scores for accounts made after May 2023. You can run our Python checker free on Weir's 5,000 monthly credits. Each account costs 6 credits.
Can a Twitter bot detector prove an account is a bot?
No. Every signal has innocent causes, like travel, a VPN or a busy news desk. Treat a pile of signals as a reason to look closer, never as proof about a person.
How do I find fake followers on Twitter?
Run the same signals over your follower list: default avatars, empty bios, new accounts and huge following counts. Weir returns each follower's profile for a credit, and TwitterAPI.io charges less for big lists.
Sources
All checked on 22 October 2026:
- X Developer Guidelines, automation rules: https://docs.x.com/developer-guidelines
- X docs, bot accounts: https://docs.x.com/xchat/bots
- X API data dictionary: https://docs.x.com/x-api/fundamentals/data-dictionary
- X docs, default avatar in an API example: https://docs.x.com/x-api/account-activity/introduction
- TechCrunch (16 February 2022): https://techcrunch.com/2022/02/16/twitter-officially-launches-labels-to-identify-the-good-bots/
- DFRLab, #BotSpot (28 August 2017): https://dfrlab.org/2017/08/28/botspot-twelve-ways-to-spot-a-bot/
- The Register (15 October 2025): https://www.theregister.com/2025/10/15/twitter_x_bot_show_user_info/
- Emojipedia (11 June 2024): https://blog.emojipedia.org/emoji-mashup-bots-new-home-on-emojipedia/
- MobileSyrup (26 July 2023): https://mobilesyrup.com/2023/07/26/twitters-old-handle-goes-private-as-company-takes-over-x-username/
- OSoMe, "Introducing Botometer X" (21 February 2024): https://osome.iu.edu/research/blog/introducing-botometer-x
- TwitterAPI.io pricing: https://twitterapi.io/pricing
- Weir API reference: https://docs.weirapp.io/reference/x/getXUser and https://docs.weirapp.io/reference/x/getXUserAbout
- Weir billing: https://docs.weirapp.io/billing
- Our four Weir calls on @EmojiMashupBot and @XDevelopers, 22 October 2026, 12 credits