X (Twitter) Scraper: Tweets, Profiles & Data, No API Key avatar

X (Twitter) Scraper: Tweets, Profiles & Data, No API Key

Pricing

from $6.15 / 1,000 results

Go to Apify Store
X (Twitter) Scraper: Tweets, Profiles & Data, No API Key

X (Twitter) Scraper: Tweets, Profiles & Data, No API Key

Scrape X (Twitter) tweets, profiles and posts by handle, tweet ID or URL. No API key or login. Get full text, likes, retweets, replies, quotes, bookmarks, views, media, hashtags, mentions and author data. Filter by date, language, media and engagement. Export to JSON, CSV or Excel.

Pricing

from $6.15 / 1,000 results

Rating

5.0

(1)

Developer

Scrapers Lat

Scrapers Lat

Maintained by Community

Actor stats

0

Bookmarked

7

Total users

1

Monthly active users

11 days ago

Last modified

Share

X (Twitter) Tweets & Profiles Scraper

X (Twitter) Scraper: Tweets, Profiles & Data, No API Key

Scrape public X (Twitter) data without an API key or login. This X scraper (Twitter scraper) pulls tweets, profiles, and posts by handle, tweet ID, or URL, and returns every field X exposes: full text, likes, retweets, replies, quotes, bookmarks, views, media, hashtags, mentions, links, and complete author data. Export to JSON, CSV, or Excel.

Here is one real result, showing every field a tweet record returns:

{
"id": "2085865635586912359",
"url": "https://x.com/OpenAI/status/2085865635586912359",
"text": "https://t.co/zBh8ck0Gbc",
"author": {
"id": "4398626122",
"handle": "OpenAI",
"name": "OpenAI",
"verified": true,
"followers": 5196598,
"profileImageUrl": "https://pbs.twimg.com/profile_images/1885410181409820672/ztsaR0JW_normal.jpg"
},
"createdAt": "Fri Aug 07 23:08:15 +0000 2026",
"createdAtISO": "2026-08-07T23:08:15.000Z",
"conversationId": "2085801349866729975",
"likeCount": 390,
"retweetCount": 4,
"replyCount": 39,
"quoteCount": 5,
"bookmarkCount": 20,
"viewCount": 217398,
"lang": "zxx",
"source": "Twitter Web App",
"isReply": true,
"inReplyToTweetId": "2085801349866729975",
"inReplyToUserId": "4398626122",
"inReplyToHandle": "OpenAI",
"isRetweet": false,
"isQuote": true,
"isQuoteStatus": true,
"quotedTweetId": "2085862292311396515",
"retweetedTweetId": null,
"possiblySensitive": false,
"place": null,
"noteTweet": null,
"media": [],
"entities": {
"hashtags": [],
"mentions": [],
"urls": ["https://x.com/sama/status/2085862292311396515"]
},
"quotedTweet": {
"id": "2085862292311396515",
"url": "https://x.com/sama/status/2085862292311396515",
"text": "astra is a powerful model and we are working to make it generally available. ...",
"createdAtISO": "2026-08-07T22:54:58.000Z",
"likeCount": 28472,
"retweetCount": 1250,
"replyCount": 1802,
"viewCount": 2990915,
"author": { "id": "1605", "handle": "sama", "name": "Sam Altman", "verified": true }
},
"retweetedTweet": null,
"observedAt": "2026-09-04T08:27:12.267Z"
}

📥 Input · 📤 Output · 💰 Pricing · ▶️ Examples

Apify Coverage Output Billing

Table of contents

What it does

This Twitter data scraper reads public X (Twitter) content and writes one normalized record per tweet or profile to the run's dataset. No API key, no developer account, and no login are required. Pick a mode:

  • userTweets (default): pull a public account's recent posts (a Twitter timeline scraper). One record per tweet.
  • userProfile: pull profile details (bio, followers, following, counts, verification, location, join date). One record per handle.
  • tweet: fetch specific tweets by numeric ID or full status URL.

Handles can be provided as @name, name, or a profile URL, and startUrls accepts profile or status URLs directly. Duplicates are removed. Missing source values are returned as null. Longform note-tweets are returned with their full untruncated text. Optional filters (date range, language, media type, verified authors, minimum engagement) narrow the tweets you collect.

Keyword search is shown in the input but is not available for logged-out reads: X requires a logged-in account for keyword search, so that mode returns a clear error instead of fake or empty data. See the FAQ.

Use cases

  • Social media monitoring and brand tracking: watch what an account posts and how it performs.
  • Competitor and influencer analysis: pull tweet engagement (likes, retweets, replies, quotes, bookmarks, views) at scale.
  • Lead and audience research: collect profile bios, follower counts, websites, and locations.
  • Dataset building for AI/ML and sentiment analysis: export clean tweet text, language, and entities.
  • News and event tracking: follow official accounts and capture posts with media and links.
  • Archiving: keep a structured record of an account's posts as JSON, CSV, or Excel.

Quickstart

Open the actor, paste this into the input, and press Run. It returns up to 10 recent tweets from the given accounts.

{
"mode": "userTweets",
"handles": ["nasa", "OpenAI"],
"tweetsLimit": 10,
"maxItems": 10
}

Switch mode to userProfile for profile records, or to tweet and pass tweetIds (IDs or URLs) to fetch specific tweets. Set includeReplies to true to include the account's replies. Add filters such as minimumFavorites, onlyVideo, or start/end to narrow the results.

How it compares

For the modes X allows without a login (by handle and by tweet ID/URL), this actor returns a strict superset of the fields other tweet scrapers return, and accepts the same input names as the popular tools so you can migrate an existing input with minimal changes.

CapabilityThis actorapidojo/tweet-scraperkaitoeasyapi (cheapest)Older quacker/microworlds
No API key / no loginYesYesYesYes
Tweets by handle (timeline)YesYesYesPartial
Profile details by handleYesPartialPartialPartial
Tweet by ID / URLYesYesYesPartial
startUrls (profile + status)YesYesYesPartial
Filters (date, lang, media, min engagement, verified)YesYesPartialNo
Full engagement (likes, RT, replies, quotes, bookmarks, views)YesYesPartialPartial
Media variants + duration + alt textYesPartialPartialNo
Quoted / retweeted tweet, enrichedYesPartialPartialNo
Longform note-tweet full textYesPartialPartialNo
Author object (id, name, verified, followers, avatar)YesPartialPartialPartial
ISO 8601 timestampsYesNoNoNo
Keyword search discoveryNo (login-gated by X)YesYesVaries
Pay per resultYesYesYesVaries

Note on honesty: keyword search discovery (finding tweets by query across all of X) requires a logged-in account, which some tools run behind the scenes. This actor is strictly logged-out and HTTP-only, so it does not offer keyword discovery. Everything else here matches or exceeds the alternatives, and the optional filters let you narrow collected tweets by the same criteria (date, language, media, engagement).

Input reference

FieldTypeRequiredDefaultDescription
modeenumnouserTweetsuserTweets, userProfile, tweet, or search (search returns a login-required error).
handlesstring[]for user modes["nasa","OpenAI"]Public X handles. Accepts @name, name, or a profile URL.
twitterHandlesstring[]no(empty)Alias of handles, merged with it.
startUrlsstring[]no(empty)Profile or status URLs. In user modes they add the account handle; in tweet mode they add the tweet ID.
tweetsLimitintegerno100For userTweets: max tweets per handle (paginated). Range 1 to 3200.
includeRepliesbooleannofalseFor userTweets: also include the account's replies.
tweetIdsstring[]for tweet mode(sample)Numeric tweet IDs (for example 20) or full status URLs.
maxItems / maxPostsintegerno(unbounded)Caps the total records across the whole run.
tweetLanguagestringno(any)Keep only tweets whose language code matches (for example en).
onlyVerifiedUsersbooleannofalseKeep only tweets by verified authors.
onlyImage / onlyVideo / onlyQuotebooleannofalseKeep only tweets with an image, with video/GIF, or that quote another tweet.
minimumRetweets / minimumFavorites / minimumRepliesintegerno(none)Keep only tweets above these engagement thresholds.
start / endstringno(none)Keep only tweets in this ISO 8601 date range.
authorstringno(none)Keep only tweets whose author handle matches.
mentioningstringno(none)Keep only tweets mentioning this handle.
langstringnoenTwo-letter UI language hint sent to X for localized fields.

Filters apply to the tweets collected in userTweets and tweet modes. Because X login-gates keyword search, filters narrow (not discover) results.

Output reference

Tweet records (userTweets and tweet modes). Types: string, number, boolean, object, object[], or null when the source value is absent.

FieldTypeDescription
idstringTweet ID (unique per tweet).
urlstringCanonical tweet URL on x.com.
textstringTweet text (full untruncated text for longform note-tweets).
authorobjectid, handle, name, verified, followers, profileImageUrl.
createdAtstringTweet creation timestamp as returned by X.
createdAtISOstringSame timestamp normalized to ISO 8601.
conversationIdstringID of the conversation (thread root).
likeCountnumberNumber of likes.
retweetCountnumberNumber of retweets.
replyCountnumberNumber of replies.
quoteCountnumberNumber of quote tweets.
bookmarkCountnumberNumber of bookmarks, or null.
viewCountnumberNumber of views, or null when X does not expose it.
langstringLanguage code X assigned to the tweet.
sourcestringPosting client label, for example Twitter Web App.
isReplybooleanWhether the tweet is a reply.
inReplyToTweetIdstringID of the tweet being replied to, or null.
inReplyToUserIdstringUser ID being replied to, or null.
inReplyToHandlestringHandle being replied to, or null.
isRetweetbooleanWhether the tweet is a retweet.
isQuotebooleanWhether the tweet quotes another tweet.
isQuoteStatusbooleanX's own quote-status flag.
quotedTweetIdstringID of the quoted tweet, or null.
retweetedTweetIdstringID of the retweeted tweet, or null.
possiblySensitivebooleanX sensitivity flag, or null.
placeobjectGeotag: name, fullName, country, countryCode, coordinates; null when absent.
noteTweetstringFull longform note-tweet text when present, else null.
mediaobject[]Each item: type, url, previewUrl, videoUrl, durationMillis, variants[], width, height, altText, expandedUrl.
entitiesobjectParsed hashtags, mentions, urls; null when the tweet has none.
quotedTweetobjectQuoted tweet with id, url, text, createdAtISO, counts, and author, or null.
retweetedTweetobjectRetweeted tweet with the same shape, or null.
observedAtstringISO 8601 timestamp of when the record was collected.

In userProfile mode each record instead holds profile fields: handle, name, bio, website, followers, following, tweetsCount, mediaCount, listedCount, verified, protected, location, joinedAt, pinnedTweetId, avatar, banner, url, id, observedAt. On any failure, a single item with a populated error field is written instead (and is not charged).

Run via API and CLI

Start a run and read the dataset. Replace <TOKEN> with your Apify API token.

Run synchronously and get dataset items in one call:

curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~x-twitter-scraper/run-sync-get-dataset-items?token=<TOKEN>" \
-H "Content-Type: application/json" \
-d '{"mode":"userTweets","handles":["nasa"],"tweetsLimit":25}'

Start a run asynchronously:

curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~x-twitter-scraper/runs?token=<TOKEN>" \
-H "Content-Type: application/json" \
-d '{"mode":"tweet","startUrls":["https://x.com/BarackObama/status/266031293945503744"]}'

Apify CLI:

apify call scrapers_lat/x-twitter-scraper \
--input '{"mode":"userProfile","handles":["OpenAI"]}'

Fetch results

Every run writes to a dataset. Fetch items as JSON, CSV, or Excel by changing format:

# JSON
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"
# CSV
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"
# Paginate large datasets
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&offset=1000&limit=1000"

<DATASET_ID> is returned as defaultDatasetId in the run object. clean=true drops empty and internal fields.

Billing and limits

  • Pay per result. You are charged per tweet or profile record returned (result event). See the pricing tab for the current per-result price.
  • No charge on failure. Handles or tweets that cannot be read (not found, suspended, protected, rate-limited) are written with a populated error field and are not charged.
  • Filtered-out tweets are not charged. Only records that pass your filters and are delivered are billed.
  • Spend cap respected. Set maxTotalChargeUsd on the run; once reached, the actor stops emitting and charging further billable results.
  • Free Apify plans are capped at 10 records per run. Upgrade for more.

FAQ and troubleshooting

Why can't I search by keyword? X disabled logged-out (guest) keyword search, so the search mode returns a clear error rather than fake results. Use userTweets to pull a specific account's posts, then narrow with the filter inputs (date, language, media, engagement). This actor is HTTP-only and never uses a logged-in account.

How many tweets can I get per account? Up to tweetsLimit (max 3200), paginated through the account timeline. maxItems / maxPosts caps the whole run across all handles.

Can I filter by date, language, or engagement? Yes. Use start/end (ISO dates), tweetLanguage, minimumRetweets, minimumFavorites, minimumReplies, onlyImage, onlyVideo, onlyQuote, and onlyVerifiedUsers. Filters apply to the tweets collected from the timeline.

Why did a handle or tweet return an error? The account or tweet is protected, suspended, deleted, or X rate-limited the request at that moment. Error records are not charged. Re-run rate-limited inputs.

How do I get replies too? Set includeReplies to true in userTweets mode. If X's replies timeline is temporarily unavailable, the actor falls back to the default timeline so you still get the account's posts.

Is this an official X tool? No. This actor is independent and has no affiliation with X (formerly Twitter). It reads only data that is publicly available to logged-out users.

More scrapers at scrapers.lat

Built and maintained by scrapers.lat, where we publish scrapers for US and Latin American public platforms: company registries, government data, finance, e-commerce and more. Browse the catalog or request a custom scraper at scrapers.lat.


Independent tool, not affiliated with X (formerly Twitter). Accesses only publicly available data. Keyword search is login-gated by X and is not supported.