Twitter Advanced Search Operators: The 2026 Reference for X Search
Every Twitter advanced search operator in 2026, tested live: from:, lang:, since:, min_faves:, filter:, conversation_id: and more, with API field mappings.
By Tarun Khatri · · 9 min read
Twitter advanced search operators are short commands you type into X's search box, such as from:XDevelopers, "exact phrase", lang:en, since:2026-10-01, min_faves:100 or -filter:replies, to filter posts far more precisely than the Advanced Search form allows. Below is a reference of the operators X's search accepts in October 2026, each marked with whether it returned matching results when we ran it on 19 October 2026, followed by the different syntax the official X API v2 uses and a table mapping each operator to the structured fields of Weir's POST /v1/x/search.
Disclosure: Weir is our product. The operator reference applies to X's own search box no matter what tool you use.
How this reference was checked
X's help page on advanced search documents the form fields (words, phrases, hashtags, language, accounts, places and dates), not the operators behind them. The most thorough public list is Igor Brigadir's twitter-advanced-search reference on GitHub, whose own checks mostly date from 2022, so we re-tested.
Every operator marked Works below was sent as the query of a live search on 19 October 2026 and returned posts that matched it. Not confirmed means we did not test it, or it returned nothing when it should have. X changes search without notice, so treat even confirmed operators as working-today, not guaranteed.
Twitter advanced search operators: the full list
Words and phrases
| Operator | Example | Finds | Status |
|---|---|---|---|
| space (AND) | python pandas |
Both words, any order | Works |
"..." |
"open source" |
The exact phrase | Works |
OR |
(rust OR golang) |
Either term; must be uppercase | Works |
- |
-crypto |
Excludes a word, phrase or operator | Works |
( ) |
(rust OR golang) @github |
Groups terms | Works |
# |
#rustlang |
A hashtag | Works |
$ |
$NVDA |
A cashtag | Not confirmed |
url: |
url:github.com |
Links to a domain | Works |
lang: |
lang:en |
X's detected language | Works |
Our cashtag test, $NVDA min_faves:100, returned nothing, which is implausible for a widely discussed ticker. Use it, but verify the results.
Accounts
| Operator | Example | Finds | Status |
|---|---|---|---|
from: |
from:XDevelopers |
Posts by an account | Works |
to: |
to:XDevelopers |
Replies to an account | Works |
@ |
@github |
Posts mentioning an account | Works |
list: |
list:1585430245762441216 |
Posts by members of a public List | Works |
filter:verified |
python filter:verified |
Verified accounts | Works (effect hard to isolate) |
filter:blue_verified |
python filter:blue_verified |
Accounts with paid verification | Works (effect hard to isolate) |
Both verification filters returned only accounts with verified: true, but so do most unfiltered searches today, so we could not show what they exclude.
Dates and post ids
| Operator | Example | Finds | Status |
|---|---|---|---|
since: |
since:2026-08-01 |
On or after a date (UTC) | Works |
until: |
until:2026-09-01 |
Before a date (exclusive) | Works |
since: with time |
since:2026-08-01_09:30:00_UTC |
On or after an exact instant | Works |
since_time: / until_time: |
since_time:1756684800 |
Unix-seconds bounds | Works |
within_time: |
within_time:30d |
The last N days, hours (h), minutes (m) |
Works |
since_id: |
since_id:2112000000000000000 |
Newer than a post id (exclusive) | Works |
max_id: |
max_id:2112030814905180440 |
At or older than a post id (inclusive) | Works |
Time operators need another term or operator alongside them; since:2026-10-01 alone is not a search.
Engagement
| Operator | Example | Finds | Status |
|---|---|---|---|
min_faves: |
min_faves:500 |
At least N likes | Works |
min_retweets: |
min_retweets:20 |
At least N reposts | Works |
min_replies: |
min_replies:1 |
At least N replies | Works |
-min_faves: |
-min_faves:1000 |
Fewer than N likes | Works |
Replies, quotes, threads and reposts
| Operator | Example | Finds | Status |
|---|---|---|---|
filter:replies |
to:XDevelopers filter:replies |
Only replies | Works |
-filter:replies |
python -filter:replies |
Excludes replies | Works |
conversation_id: |
conversation_id:2102535041532186709 |
Every post in a thread | Works |
filter:self_threads |
from:XDevelopers filter:self_threads |
An author replying to themselves | Works |
filter:quote |
@github filter:quote |
Quote posts | Works |
quoted_tweet_id: |
quoted_tweet_id:2092730108041695449 |
Quotes of one post | Works |
quoted_user_id: |
quoted_user_id:2244994945 |
Quotes of any post by an account (numeric id) | Works |
include:nativeretweets |
from:github include:nativeretweets |
Adds reposts, which search hides by default | Works |
filter:nativeretweets |
from:github filter:nativeretweets |
Only reposts | Works |
The Brigadir reference notes the repost operators only reach back about 7 to 10 days. Our test returned reposts from the previous four days, which fits.
Media and links
| Operator | Example | Finds | Status |
|---|---|---|---|
filter:media |
from:XDevelopers filter:media |
Any image or video | Works |
filter:images |
to:XDevelopers filter:images |
Images | Works |
filter:videos |
from:XDevelopers filter:videos |
Video | Works |
filter:native_video |
from:XDevelopers filter:native_video |
Video uploaded to X | Works |
filter:links |
python filter:links |
Any URL, media included | Works |
-filter:links |
from:XDevelopers -filter:links |
Posts without links | Works |
Location
| Operator | Example | Finds | Status |
|---|---|---|---|
near: + within: |
coffee near:London within:10km |
Geotagged posts near a place | Not confirmed |
geocode: |
geocode:51.5,-0.12,10km |
Posts near coordinates | Not confirmed |
X's own help page still uses near: and within: in its examples, but our London test returned nothing at all. Very few posts carry a location today, so expect little or nothing from geo operators.
Rules that trip people up
ORmust be uppercase; lowercaseoris searched as a word.- Underscores, not spaces or hyphens, inside operator values (
url:values with hyphens need underscores, per the Brigadir reference). - Reposts are hidden by default.
from:accountreturns original posts and replies, not reposts, unless you addinclude:nativeretweets. lang:is X's guess. Short posts often come back asqme(mentions only),und(undetermined) orzxx(no text), and some codes do not filter at all.- There is a practical operator ceiling: the Brigadir reference puts it at about 22 to 23 operators in one query.
The official X API v2 uses a different dialect
If you call X's own API (directly, through Tweepy, or through X's SDK), several of these are not accepted. X's operator documentation says min_faves: and min_retweets: "are not valid in the X API and will be rejected with a 400 error", and date ranges are request parameters (start_time, end_time, since_id, until_id) rather than operators.
| X search box | X API v2 |
|---|---|
min_faves:N |
min_likes:N |
min_retweets:N |
min_reposts:N |
min_replies:N |
min_replies:N |
filter:replies |
is:reply |
filter:quote |
is:quote |
filter:nativeretweets |
is:retweet |
filter:verified |
is:verified |
filter:media / filter:images |
has:media / has:images |
filter:links |
has:links |
quoted_tweet_id: |
quotes_of_tweet_id: |
since: / until: |
start_time / end_time parameters |
from:, to:, @, #, url:, list:, conversation_id:, lang: |
Same |
In v2, the is: and has: operators and lang: must be combined with at least one standalone operator. Cost matters too: X bills $0.005 per post read on its pay-per-usage pricing as of October 2026. Our X API pricing guide has the full rate card.
Mapping operators to Weir's structured search fields
Weir's POST /v1/x/search uses the search-box dialect above. You can write operators straight into query, or use structured fields, which are validated (usernames, ids, ISO dates) and turned into operators for you. Every field narrows the result; at least one of query, phrase, hashtags, fromUsers, toUsers, mentions, listId or quotedPostId is required. Field names below are exactly as in the searchX reference.
| Weir field | Type | Becomes |
|---|---|---|
query |
string, up to 200 chars | Passed as written: words (AND) and any operators |
phrase |
string | "phrase" |
anyWords |
string[] (up to 20) | (a OR b) |
excludeWords |
string[] (up to 20) | -a -b |
hashtags |
string[] (up to 10) | (#a OR #b); # optional |
fromUsers |
string[] (up to 10) | (from:a OR from:b) |
toUsers |
string[] (up to 10) | (to:a OR to:b) |
mentions |
string[] (up to 10) | (@a OR @b) |
language |
string, e.g. en |
lang:en |
minLikes |
integer | min_faves:N |
minReposts |
integer | min_retweets:N |
minReplies |
integer | min_replies:N |
onlyLinks |
boolean | filter:links |
onlyText |
boolean | -filter:links |
onlyOriginal |
boolean | -filter:replies |
onlyReplies |
boolean | filter:replies |
since |
ISO 8601 UTC | since:YYYY-MM-DD_HH:MM:SS_UTC |
until |
ISO 8601 UTC | until:YYYY-MM-DD_HH:MM:SS_UTC |
quotedPostId |
numeric string | quoted_tweet_id: |
listId |
numeric string | list: |
sinceId |
numeric string | since_id: (exclusive) |
untilId |
numeric string | max_id: one below it, so it is exclusive too |
sort |
latest or top |
X's Latest or Top tab |
limit, cursor |
Page size and paging |
Operators with no structured field (filter:media, filter:images, filter:videos, filter:quote, conversation_id:, url:, quoted_user_id:, include:nativeretweets, -min_faves:, within_time:) go in query, and they combine with the fields. onlyOriginal excludes replies only; reposts are already left out unless you add include:nativeretweets to query.
Example requests
All of these ran successfully on 19 October 2026.
Mentions of a brand, from other people, with a link:
curl --request POST \
--url https://api.weirapp.io/v1/x/search \
--header "Authorization: Bearer $WEIR_API_KEY" \
--header 'Content-Type: application/json' \
--data '{"mentions":["github"],"query":"-from:github filter:links","language":"en","minLikes":10,"limit":20}'
The search X runs is roughly -from:github filter:links (@github) min_faves:10 lang:en.
An account's popular original posts since a date:
import os
import requests
response = requests.post(
"https://api.weirapp.io/v1/x/search",
headers={"Authorization": f"Bearer {os.environ['WEIR_API_KEY']}"},
json={
"fromUsers": ["XDevelopers"],
"minLikes": 500,
"onlyOriginal": True,
"since": "2026-08-01T00:00:00Z",
"limit": 20,
},
timeout=60,
)
response.raise_for_status()
for post in response.json()["data"]:
print(post["createdAt"], post["likeCount"], post["url"])
What a List is saying about a topic, older than a given post:
{
"listId": "1585430245762441216",
"query": "agents",
"minLikes": 50,
"untilId": "2112030814905180441"
}
Raw operators, when there is no field for them. Each line is a complete request body:
{"query": "from:XDevelopers filter:media"}
{"query": "conversation_id:2102535041532186709"}
{"query": "from:github include:nativeretweets filter:nativeretweets"}
For whole threads and quotes there are dedicated endpoints as well: GET /v1/x/posts/{id}/replies, /thread and /quotes. To resume a feed without re-reading it, pass the newest id you have already stored as sinceId. Paging works the same everywhere: send meta.nextCursor back unchanged until it is null (pagination).
Each search returns about 20 posts per page and costs 1 credit plus 1 per post, so a full page is 21 credits; the 5,000 free monthly credits cover about 238 full pages. See pricing.
Using these with Weir
If you want these operators behind a plain JSON API, create a free account (no card) and start with the quickstart. For a full Python walkthrough with paging and CSV export, see how to get tweets with Python; to run a search on a schedule and receive only new matches, see the brand mention monitor guide.
Sources
- X Help Center, How to use advanced search: https://help.x.com/en/using-x/x-advanced-search
- Igor Brigadir, twitter-advanced-search: https://github.com/igorbrigadir/twitter-advanced-search
- X API, search operators: https://docs.x.com/x-api/posts/search/integrate/operators
- X API, recent search parameters: https://docs.x.com/x-api/posts/search-recent-posts
- X API pay-per-usage pricing: https://docs.x.com/x-api/getting-started/pricing