X/Twitter Search
Extract public X/Twitter profiles, visible posts, Communities, and speech transcripts from public post videos.
Workspace
Configure
Inputs stay here while results become exportable artifacts.
Start from an example
Results
Preview, inspect, copy, or export the complete output.
Your result will become an artifact
Run the tool to inspect structured rows, raw JSON, execution details, and downloadable JSON, CSV, and Markdown files.
Overview
X/Twitter Search reads the structured data in X's logged-out public pages. Provide a handle for profile metadata or visible profile posts, or a post URL for one post, and receive normalized account, text, engagement, and media fields without private cookies or API keys.
Last validated: Jul 15, 2026
Input
mode"profile" | "user_posts" | "post" | "community" | "community_posts" | "transcript"Public profile, visible profile posts, one post, Community details, Community posts, or a public post-video transcript. Inferred as post when post_url is supplied.
handlestringX/Twitter handle, with or without @. Use handle or profile_url.
languagestringOptional spoken-language hint for transcript mode; omit for detection.
post_urlstring (uri)Public x.com or twitter.com post URL for post or transcript mode.
max_resultsintegerdefault: 10Maximum visible profile posts to return.
profile_urlstring (uri)Public X/Twitter profile URL. Use handle or profile_url.
community_urlstring (uri)Public x.com or twitter.com Community URL.
Output
biostringProfile bio text
modestringrequiredResolved operation mode
countintegerrequiredNumber of profiles or posts returned
tweetobjectOne normalized public X post
tweet.idstringX post id
tweet.urlstringCanonical public post URL
tweet.textstringVisible post text
tweet.author_idstringAuthor numeric user id
tweet.created_atstringISO post creation timestamp
tweet.like_countintegerLike count
tweet.media_urlsstringNewline-separated public media URLs
tweet.view_countintegerView count when visible
tweet.author_namestringAuthor display name
tweet.quote_countintegerQuote count
tweet.reply_countintegerReply count
tweet.author_avatarstringAuthor avatar URL
tweet.author_handlestringAuthor handle
tweet.retweet_countintegerRepost count
avatarstringVisible profile image URL
handlestringX/Twitter handle without @
tweetsobject[]Visible public posts from an X profile page
user_idstringX/Twitter numeric user id
communityobjectNormalized public X Community details
community.idstringCommunity id
community.urlstringCanonical public Community URL
community.namestringCommunity name
community.created_atstringCommunity creation timestamp
community.post_countintegerVisible discussion count when exposed
community.descriptionstringCommunity description
community.join_policystringPublic join policy
community.banner_imagestringCommunity banner image URL
community.member_countintegerVisible member count
community.creator_handlestringCommunity creator handle
joined_atstringISO timestamp when X exposes profile creation time
post_countintegerVisible post/tweet count
source_urlstringrequiredPublic X page fetched
transcriptobjectSpeech transcript generated from the highest-quality public MP4 rendition.
transcript.textstringNormalized spoken text.
transcript.languagestringDetected or requested language code.
transcript.duration_secondsnumberMedia duration in seconds.
transcript.language_probabilitynumberLanguage-detection confidence when available.
profile_urlstringFetched public X/Twitter profile URL
banner_imagestringVisible profile banner image URL
display_namestringVisible display name
joined_labelstringHuman joined date label from public meta tags
follower_countintegerVisible follower count
following_countintegerVisible following count
protected_accountbooleanWhether X marks the account as protected when visible
transcript_segmentsobject[]Timed transcript segments.
Examples
openai-profile
{
"handle": "openai"
}visible-profile-posts
{
"mode": "user_posts",
"handle": "levelsio",
"max_results": 10
}public-post
{
"mode": "post",
"post_url": "https://x.com/jack/status/20"
}public-community
{
"mode": "community",
"community_url": "https://x.com/i/communities/1926186499399139650"
}public-community-posts
{
"mode": "community_posts",
"max_results": 10,
"community_url": "https://x.com/i/communities/1926186499399139650"
}public-video-transcript
{
"mode": "transcript",
"language": "en",
"post_url": "https://x.com/WarnerBrosUK/status/1768322581868744740"
}Use cases
FAQ
Does X/Twitter Search require an X account?
No. The tool reads structured data visible in logged-out public X pages and does not use private cookies, passwords, bearer tokens, or exported sessions.
Does it return a user's latest chronological timeline?
It returns posts visible on the logged-out public profile, which X may rank rather than expose chronologically. It does not claim private or exhaustive timeline access.
Why can fields be missing?
The tool only returns fields present in X's public profile response. Protected, suspended, removed, or region-limited profile data is not bypassed or guessed.
Use it anywhere
MCP (Claude, ChatGPT, Codex)
# After connecting https://betterfetch.co/api/mcp, ask your AI to:
1. Call search_tools for "X/Twitter Search"
2. Call run_tool with:
name: "twitter_search"
input: {"handle":"openai"}REST
curl -sS -X POST "https://betterfetch.co/api/tools/twitter_search/run" \
-H "Authorization: Bearer bf_your_key_here" \
-H "Content-Type: application/json" \
-d '{"input": {"handle":"openai"}}'Run locally
git clone https://github.com/better-fetch/tools/tree/main/tools/twitter-search && cd twitter-search && npm i
BETTER_FETCH_API_KEY=bf_your_key_here npx bf-tool run --input '{"handle":"openai"}'