Tweet Scraper — X (Twitter) Search, Hashtags & Profiles avatar

Tweet Scraper — X (Twitter) Search, Hashtags & Profiles

Pricing

from $1.84 / 1,000 tweets

Go to Apify Store
Tweet Scraper — X (Twitter) Search, Hashtags & Profiles

Tweet Scraper — X (Twitter) Search, Hashtags & Profiles

Scrape tweets from X (Twitter) by search query, hashtag, username or tweet URL. Returns tweet text, engagement metrics, author details and media for each tweet.

Pricing

from $1.84 / 1,000 tweets

Rating

5.0

(1)

Developer

Khadin Akbar

Khadin Akbar

Maintained by Community

Actor stats

2

Bookmarked

160

Total users

23

Monthly active users

13 hours ago

Last modified

Features

Limited permissions

Share

Get the tweets of any X (Twitter) account, hashtag, mention, tweet link, reply thread or list, with likes, reposts, replies, views, author and media. No login, no cookies, JSON/CSV/Excel export. Pay only for tweets returned.

What you get

NeedInputResult
A account's timelinehandleslatest tweets, original only if you wish
Topic trackinghashtags, searchQuery, mentioningtweets with date, language and engagement filters
Exact tweetstweetIds, startUrlsone row per tweet
ConversationrepliesToTweets, quotesOfTweetsreplies or quote tweets
Curated feedslistIdslist timeline
WatchingonlyNewSinceLastRun + a scheduleonly tweets you have not received yet

Which X Actor should I use?

You wantUse
Accounts, hashtags, tweet IDs, replies, lists, monitoringThis Actor
Open keyword search with Top/Latest/People/Photos/Media tabsX Twitter Search Scraper
Profile details (bio, followers)X Twitter Profile Scraper

Pricing

Pay per tweet returned: $0.002 (volume plans pay less: Silver about 3% off, Gold about 8% off). Start fee $0.00005. Apify platform usage is included in the price. 100 tweets cost about $0.20, 1,000 about $2. Free Apify plan runs return up to 50 tweets per run.

How we compare

This ActorTypical rival
Price per tweet$0.002, platform usage included$0.00015 to $0.0004, platform usage often extra
Monitor mode (only new tweets)yesno
Replies, quotes, lists, tweet IDs in one Actoryesusually add-ons or separate Actors
Input checksbad dates or language stop the run, nothing billedsilent empty result
Run costlean, no browservaries

Input fields

FieldTypePurpose
searchQuerystringKeywords or X advanced search syntax
hashtagsarray[string]Hashtags to scrape, one query per hashtag
handlesarray[string]X usernames to scrape via from:username queries
startUrlsarray[object]Direct X.com or twitter.com profile/search URLs
mentioningstringUsername to find tweets that mention that account
sortstringLatest, Top, or Both
maxTweetsPerQueryintegerMax tweets per source
langstringISO 639-1 language filter
startDatestringSince date in YYYY-MM-DD format
endDatestringUntil date in YYYY-MM-DD format
minimumLikesintegerMinimum likes filter
minimumRetweetsintegerMinimum retweets filter
minimumRepliesintegerMinimum replies filter
onlyVerifiedbooleanVerified-account filter
onlyImagesbooleanImage-only filter
onlyVideosbooleanVideo-only filter
excludeRepliesbooleanExcludes reply tweets
excludeRetweetsbooleanExcludes retweets
includeSourceQuerybooleanAdds source_query to each record
tweetIdsarray[string]Exact tweets by ID or link
repliesToTweetsarray[string]Replies to these tweets
quotesOfTweetsarray[string]Quote tweets of these tweets
listIdsarray[string]Timelines of X Lists
onlyNewSinceLastRunbooleanMonitor mode: skip tweets returned by earlier runs of the same sources

Focused input example

{"handles": ["OpenAI"], "sort": "Latest", "lang": "en", "maxTweetsPerQuery": 10, "excludeRetweets": true, "onlyNewSinceLastRun": true}

Output fields

FieldTypePurpose
tweet_idstringUnique tweet identifier
textstringTweet display text
full_textstringComplete tweet text
author_handlestringAuthor username without @
author_namestringAuthor display name
author_idstringNumeric author ID
author_followersnumber or nullFollowers count
author_followingnumber or nullFollowing count
author_verifiedbooleanVerified status
created_atstringTweet timestamp
like_countnumberLike count
retweet_countnumberRetweet count
reply_countnumberReply count
quote_countnumberQuote count
view_countnumber or nullView count when available
is_replybooleanReply indicator
is_retweetbooleanRetweet indicator
is_quotebooleanQuote-tweet indicator
has_mediabooleanMedia indicator
media_urlsarray[string]Media URLs
hashtagsarray[string]Hashtags in the tweet
urlsarray[string]Expanded external URLs
langstring or nullDetected language
conversation_idstring or nullConversation root ID
in_reply_to_userstring or nullReplied-to username
urlstringDirect tweet permalink
source_urlstringQueried API URL
scraped_atstringExtraction timestamp

Illustrative output record

{
"tweet_id": "1773456789012345678",
"text": "Just launched our new AI product! 🚀 #AI #tech",
"full_text": "Just launched our new AI product! 🚀 #AI #tech https://t.co/example",
"author_handle": "openai",
"author_name": "OpenAI",
"author_id": "1288285673",
"author_followers": 2500000,
"author_following": 342,
"author_verified": true,
"created_at": "Mon Mar 25 14:30:00 +0000 2024",
"like_count": 4200,
"retweet_count": 1100,
"reply_count": 830,
"quote_count": 210,
"view_count": 980000,
"is_reply": false,
"is_retweet": false,
"is_quote": false,
"has_media": true,
"media_urls": ["https://pbs.twimg.com/media/example.jpg"],
"hashtags": ["AI", "tech"],
"urls": ["https://openai.com/blog/example"],
"lang": "en",
"conversation_id": "1773456789012345678",
"in_reply_to_user": null,
"url": "https://x.com/openai/status/1773456789012345678",
"source_url": "https://twitter.com/i/api/2/search/adaptive.json?q=AI&count=40",
"scraped_at": "2026-03-31T12:00:00.000Z"
}

Use with AI agents (MCP)

Available through Apify MCP as khadinakbar/x-tweet-scraper. Agents can pay per request (x402) with no account setup. Every row has tweet_id, url and source_url for deduplication. Example prompt: "Get the 20 latest English tweets from @OpenAI, originals only, with like counts."

Example with the Apify API

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('khadinakbar/x-tweet-scraper').call({ handles: ['OpenAI'], maxTweetsPerQuery: 5, excludeRetweets: true });
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

FAQ

Do I need an X account or cookies?

No. Collection is cookieless.

How does monitor mode work?

Turn on onlyNewSinceLastRun and schedule the Actor. It remembers tweet IDs per set of sources and returns only new ones.

Why are some results fewer than I asked for?

Public data only: deleted, private or protected tweets are not returned. You are charged only for tweets returned.

Can I get an account's followers or bio?

Use the Profile Scraper linked above.

What happens on bad input?

The run stops with INVALID_INPUT and nothing is charged.

How fresh is the data?

Live at the time of the run.

Collects publicly available data. You are responsible for complying with X's terms and applicable law (GDPR, CCPA) when storing or using personal data.