Who Blocked Me on Twitter — The Methods That Actually Work

Short answer: X (formerly Twitter) does not give you a list of accounts that blocked you. That is a deliberate design choice — block status is private to the blocker. There is no "who blocked me" tab, no API field, and no notification.
What X does is show you the block when you visit the blocker's profile: instead of their tweets, you see "You're blocked. You can't follow or see @username's posts." That single signal is the foundation of every reliable detection method below.
The rest of this guide covers four manual checks that work (in order of effort), a brief honest note on third-party "who-blocked-me" tools and why most are unsafe, and — for developers managing larger lists — a public-data approach using a Twitter data API to flag follower-list anomalies in bulk.
Method 1 — Visit the suspected profile directly
The most reliable single check. Open X (web or app), go to https://x.com/SUSPECTED_USERNAME, and look at what loads. Three things can happen:
You see their tweets — they have not blocked you.
You see "You're blocked. You can't follow or see @username's posts." — confirmed block.
You see "This account doesn't exist" or "Account suspended" — different situation. The account is gone (suspended or deactivated), not blocking you specifically. Distinguishing this is covered below.
This method has zero false positives and zero risk. The downside is it does not scale: you have to know who to check.
Method 2 — Try to send a direct message
If you have ever DM'd the suspected account before, open that thread now. Attempt to send a new message.
If you are blocked, the message will fail to send. X surfaces a generic error ("Your message could not be sent") rather than naming the cause — but in a thread where messages used to go through, sudden failure is a strong signal.
This works for any block initiated *after* the thread started. It does not work if the account had DMs off entirely, which gives the same error for a different reason. Cross-check with Method 1 to confirm.
Method 3 — Logged-out vs logged-in comparison
Open the same profile URL in two contexts: your normal logged-in browser, and a private/incognito window (logged out).
Logged-in view shows the block message, logged-out view shows tweets = the account is public, and they have specifically blocked your account.
Both views show tweets = no block; you may have been mistaken about which account.
Both views show the empty/protected state = the account is private ("protected"), not specifically blocking you. Anyone not in their followers sees the same thing.
Logged-out view shows "Account doesn't exist" = the account is deleted or suspended, not blocking. Method 1 alone cannot distinguish this; Method 3 can.
This is the single most useful check when you need certainty about *what* the situation is, not just "can I see them."
Method 4 — Mutual-account triangulation
If you suspect a block but want secondary confirmation, ask a mutual contact to check the suspected account from their own logged-in browser. If they can see the tweets and you cannot, the cause is between you and the suspect specifically (block), not a public-facing state (suspension/protection).
This is useful in disputes ("are they blocking only me or has their account changed?") and for cases where the suspect has a protected account — your friend follows them, you do not, and the block status is otherwise ambiguous.
Third-party "who blocked me" tools — what they are, why most are unsafe
Several services market themselves as bulk block-detectors. The honest landscape: a handful are legitimate analytics tools that include block visibility as a feature, and many are credential-harvesting scams. Names that come up in searches include Circleboom, TweetDelete, and @blolook (a free service announced on X itself). We are not endorsing any of them — verify recent reviews before granting account access.
The risk is always the same: a true "who blocked me" tool needs to either log into X as you (giving it your session — same access as your password) or scrape from a separate account it controls (less accurate, more rate-limited). Both modes expose your account to whatever the tool's operator does next.
The honest cost-benefit: if you only want to verify one or two specific accounts, Methods 1–3 above are faster and cost zero. If you need to screen hundreds of accounts, the developer approach below avoids handing over credentials entirely.
For developers — bulk public-visibility screening with a Twitter data API
If you maintain a follower list of thousands of accounts and want to spot anomalies (suspended, deleted, or potentially blocking accounts) without granting your X session to anyone, you can use a third-party Twitter data API to probe each account's public visibility from the server side.
Important caveat: server-side probing cannot confirm a personal block the way Methods 1–3 can. Personal block status is a relationship between two logged-in accounts; a server logged in with no X session sees only the public surface. What it *can* do is flag accounts where the public surface looks unusual — exists in X's records but tweets are not visible to anonymous viewers, or the account is missing entirely. That is a *signal* worth investigating manually, not a conclusion.
Costs are bounded by the per-call pricing of whichever Twitter data API you use. At TwitterAPI.io's published $0.15 per 1,000 tweet reads + $0.18 per 1,000 user-profile reads, a script that screens 5,000 follower accounts (one profile lookup + one recent-tweets lookup each) costs under one dollar — and there is no Twitter developer-account application gate.
The code snippet below shows the honest version: a public-visibility probe across `/twitter/user/info`, `/twitter/user/last_tweets`, and `/twitter/user/check_follow_relationship`. It returns a *probable-anomaly* verdict, never a definitive "this account is blocking you" claim, because that would over-promise what server-side data can know.
# Honest disclaimer: twitterapi.io is a server-side read-only API. It
# cannot see "is X blocking me from MY account's view" — that requires
# YOUR X login session. What it CAN do is detect public-visibility
# signals (user accessible? recent tweets accessible? follow-relationship
# fetchable?) that combine to a probable verdict, not a certainty.
import requests
API_KEY = "your_twitterapi_io_key"
HEADERS = {"X-API-Key": API_KEY}
BASE = "https://api.twitterapi.io/twitter"
def visibility_probe(target_username: str) -> dict:
"""Public-visibility signals about a target account."""
info = requests.get(
f"{BASE}/user/info",
params={"userName": target_username},
headers=HEADERS,
timeout=15,
).json()
tweets = requests.get(
f"{BASE}/user/last_tweets",
params={"userName": target_username, "limit": 1},
headers=HEADERS,
timeout=15,
).json()
return {
"username": target_username,
"exists": bool(info.get("data") or info.get("status") == "success"),
"protected": (info.get("data") or {}).get("protected") is True,
"tweets_publicly_visible": bool(tweets.get("tweets")),
}
def follow_signal(source_username: str, target_username: str) -> dict:
"""If you can't even fetch the follow relationship as the source,
that's a stronger (but still not definitive) blocked signal."""
r = requests.get(
f"{BASE}/user/check_follow_relationship",
params={
"source_user_name": source_username,
"target_user_name": target_username,
},
headers=HEADERS,
timeout=15,
)
return r.json()
# Bulk-screen a list of accounts you previously interacted with.
# A probably-blocked account: exists=True, tweets_publicly_visible=False
# (suspended/deleted accounts show exists=False instead).
candidates = ["acct_a", "acct_b", "acct_c"]
for c in candidates:
v = visibility_probe(c)
if v["exists"] and not v["tweets_publicly_visible"] and not v["protected"]:
print(f"{c}: possibly suspended you OR protected their account")
Questions readers ask
Does X notify someone when I block them?
No. X does not send a notification on block. The blocked account discovers the block only when they try to view your profile or DM you.
Can I see a full list of everyone who has blocked me on X?
No. X does not expose this list anywhere — neither in the app, on the website, nor through their public API. Anyone claiming a complete list is approximating it from public-visibility signals (and may be wrong).
Are the third-party 'who blocked me' tools accurate?
Mixed. The tools that work scrape your account using a granted X session, then compare follower-state diffs over time to infer blocks. Accuracy depends on how often they scan and how recently the block happened. Tools that do not log into your account can only infer blocks from public visibility — which is the same data the developer approach in this article uses, with the same limitations.
What's the difference between being blocked, being muted, and a soft block?
**Blocked**: you see the block message on their profile and cannot DM or follow. **Muted**: invisible to you — they still see your posts and you see theirs in their profile, but you do not appear in their feed. There is no way to detect a mute. **Soft block**: they blocked-then-unblocked you, which forces you to unfollow them. You can re-follow, so it shows up as a missing-follow rather than a block.
Will using a third-party API key get me suspended on X?
Reading public Twitter data through a Twitter data API does not touch your X account at all — you do not log in, you do not grant any session. Your X account is unaffected. The risk profile is only if you use a *posting* API that requires your X login session.
Continue
Stop reading. Start building.
Starter credits cover real testing on real data. Google sign-in, no card, no application queue.
Get an API key