Twitter Shadowban Test (2026): Check Your Account Yourself
Run a Twitter shadowban test you can repeat: what X says it limits, a manual search check, and a free script that compares your timeline with search.
Tarun Khatri
Published · Updated · 7 min read
A Twitter shadowban test checks whether other people can still find your posts in X search, and you can run one yourself.
This guide is for you if your reach on X (Twitter) dropped. You get what X says it limits, a manual check, and a free script that compares your timeline with search. We run Weir, the API it calls.
From an account that doesn't follow you, search this on the Latest tab:
from:yourname
- Look for a noticeA label, read-only mode or a lock.
- Search as someone elsefrom:yourname and a phrase, on Latest.
- Check replies and your nameCan others find both?
- Compare by APITimeline posts missing from search.
- Appeal through XFrom the label or X's form.
Does X shadowban? What X itself says
X avoids the word but describes something close. In 2018, Twitter wrote "We do not shadow ban," meaning it doesn't hide your posts from everyone but you.
In April 2023, X's blog called it "visibility filtering": limiting the reach of posts that break its rules. Its Help Center lists what that can include:
- Search: the post is left out of search results and trends.
- Timelines: it is removed from For you and Following.
- Replies: it is "downranked" in replies.
- Actions: likes, replies or reposts on it can be turned off.
X says these posts get a label that you and your viewers see.
Search has its own rules. X filters search "for quality posts and accounts," and can drop accounts that post duplicates or abuse hashtags.
Step 1: Look for a notice from X
Check for a notice first: it's the only certain answer.
- A label on a post. Open your recent posts and read under each one.
- Read-only mode. X can stop you posting, reposting or liking for a while.
- A locked account. X may ask you to confirm a phone number or email.
No notice doesn't clear you: X's search rules mention none for search filtering.
Step 2: Run the manual Twitter shadowban test
This is the classic Twitter search ban check, or X shadowban test. Twitter's 2018 post said you can always see posts from accounts you follow, so test from one that doesn't follow you.
Search your username on Latest. Your recent posts should be listed.
Then copy five or six words from your latest post and search them in quotes:
"exact words from your last post"
A post missing from both searches is the result to note. Our X advanced search builder writes these strings for you.
Step 3: Check your replies and your name
From the other account, open a post you replied to recently. If you have to dig for your reply, it may have been ranked down.
Then type your name into the search box. X's help says account search prefers complete profiles, with a name, username and bio.
Neither proves much: in 2018, a bug kept "hundreds of thousands" of accounts out of name suggestions.
Step 4: Compare your timeline with search by API
Your timeline lists every post you made, while search shows what others can find. A timeline post missing from a from: search is the signal.
Weir's search doesn't run as your account. You need Python 3, requests and a free key in WEIR_API_KEY. Part one fetches your posts and skips reposts:
import os, sys, requests
from datetime import datetime, timedelta, timezone
API = "https://api.weirapp.io/v1/x"
HEAD = {"Authorization": f"Bearer {os.environ['WEIR_API_KEY']}"}
def own_posts(user):
r = requests.get(f"{API}/users/{user}/posts", headers=HEAD, timeout=60)
r.raise_for_status() # 404: protected, suspended or not found
return [p for p in r.json()["data"] if not p["retweetedPost"]]
Part two searches from: over the same days. X search returns reposts, so -filter:nativeretweets drops them, as our search operators guide explains. It stops once it finds every post, or at a null cursor:
def found_in_search(user, since, wanted, max_pages=5):
body = {"fromUsers": [user], "query": "-filter:nativeretweets",
"onlyOriginal": True, "since": since, "limit": 20}
found = set()
for _ in range(max_pages):
r = requests.post(f"{API}/search", json=body, headers=HEAD, timeout=60)
r.raise_for_status()
page = r.json()
found |= {p["id"] for p in page["data"]} & wanted
if found == wanted or not page["meta"]["nextCursor"]:
return found, True
body["cursor"] = page["meta"]["nextCursor"]
return found, False
Part three checks the past 7 days and prints a signal:
user = sys.argv[1].lstrip("@")
start = (datetime.now(timezone.utc) - timedelta(days=7)).strftime("%Y-%m-%d")
posts = [p for p in own_posts(user) if p["createdAt"][:10] >= start]
if not posts:
sys.exit("No posts from the last 7 days to check.")
since = min(p["createdAt"][:10] for p in posts) + "T00:00:00Z"
found, complete = found_in_search(user, since, {p["id"] for p in posts})
missing = [p for p in posts if p["id"] not in found]
print(f"@{user}: {len(found)} of {len(posts)} recent posts found in search")
for p in missing:
print(" missing:", p["createdAt"][:16], p["url"])
if not missing:
print("Signal: none. Your recent posts show up in search.")
elif not complete:
print("Signal: unclear. Raise max_pages.")
elif len(posts) < 3:
print("Signal: too few posts to judge.")
elif len(missing) == len(posts):
print("Signal: strong. None show up in search.")
else:
print("Signal: weak. Run it again tomorrow.")
Save it as shadow_check.py and run python shadow_check.py yourname. We made the same two calls for @github on 22 October 2026, with small limits:
@github: 1 of 1 recent posts found in search
Signal: none. Your recent posts show up in search.
Our timeline page held a pinned post from 7 October, a repost and one new post. The script skipped the first two.
A full check reads 20 posts and costs up to 44 credits when search finds them all at once. Weir's 5,000 free monthly credits cover over 100 checks.
Step 5: Read the result as a signal, not proof
The script can't see why a post is missing, so its verdict is one clue:
| Result | What it may mean | Do next |
|---|---|---|
| All found | No sign in search | Look at timing, topics |
| Some missing | A weak signal | Run it again tomorrow |
| All missing | A strong signal | Look for labels again |
| Unclear | Search ran out of pages | Raise max_pages |
X's search help lists innocent reasons too:
- Protected posts show in search only to approved followers.
- An unconfirmed email address can keep your posts out.
- Safe search hides posts with potentially sensitive content.
- Search isn't complete. X says it "may not show every post."
Step 6: Appeal or ask X for help
Only X can lift a limit. Its pages give three routes:
- A labelled post. Appeal the label if you think X limited the post by mistake.
- A locked or suspended account. Appeal in the app, or with X's appeal form for locked accounts.
- Missing from search with no notice. X's search rules point you to its "Help with X search" checklist. Its Help Center also has a Contact Us link.
Do Twitter shadowban checkers work?
A Twitter shadowban checker runs public searches like these, then labels the result. None can see X's internal labels.
X's own API data dictionary has no field that says a post was filtered from search. So every checker's verdict is a guess from search results, ours included.
When not to use Weir
- You want X's answer. Only X sees its labels.
- One look is enough. The Step 2 search costs nothing.
- Your account is protected. Weir reads public data only and returns a 404.
- Cost per post matters most. TwitterAPI.io lists $0.15 per 1,000 tweets, and it can also post.
X's Terms of Service say you "cannot scrape the Services without X's express written permission," so check what applies to you. This isn't legal advice.
FAQ
How do I check if my Twitter account is shadowbanned?
Look for a label on your posts first. Then ask someone who doesn't follow you to search from:yourname on the Latest tab. Posts missing from search are a signal, not proof.
Is there a free Twitter shadowban checker?
Yes, several sites check for free, and our script runs on Weir's free monthly credits. None of them can see X's internal labels, so read any verdict as a signal, never as proof.
How long does a Twitter shadowban last?
X gives no time frame on the help pages we read, and the top guides give no sourced number either. Run the check again after a few days, and appeal through X if you find a label.
Does X admit to shadowbanning?
Not by that name. Since 2023, X has said it limits the reach of posts that break its rules, and labels them. It also filters some accounts from search.
Sources
Checked on 22 October 2026. X's blog and help pages are Wayback copies, dated in brackets:
- Twitter blog, 26 July 2018 (copy of 12 October 2026): https://blog.x.com/en_us/topics/company/2018/Setting-the-record-straight-on-shadow-banning
- X blog, 17 April 2023 (copy of 3 October 2026): https://blog.x.com/en_us/topics/product/2023/freedom-of-speech-not-reach-an-update-on-our-enforcement-philosophy
- X Help, enforcement options (24 September 2026): https://help.x.com/en/rules-and-policies/enforcement-options
- X Help, search rules (8 October 2026): https://help.x.com/en/rules-and-policies/x-search-policies
- X Help, help with search (10 September 2025): https://help.x.com/en/using-x/x-search-not-working
- X Help, appeal form (5 June 2026): https://help.x.com/en/forms/account-access/appeals
- X Terms of Service, effective 9 October 2026 (17 October 2026): https://x.com/en/tos
- X API data dictionary (direct): https://docs.x.com/x-api/fundamentals/data-dictionary
- TwitterAPI.io pricing and posting: https://twitterapi.io/pricing, https://docs.twitterapi.io/api-reference/endpoint/create_tweet_v2
- Weir docs: https://docs.weirapp.io/reference/x/getXUserPosts, https://docs.weirapp.io/reference/x/searchX, https://docs.weirapp.io/billing
- Our two Weir calls for @github, 22 October 2026, 10 credits