WEIR

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.

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

  • OR must be uppercase; lowercase or is 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:account returns original posts and replies, not reposts, unless you add include:nativeretweets.
  • lang: is X's guess. Short posts often come back as qme (mentions only), und (undetermined) or zxx (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