Twitter (X) Tweets Profiles Scraper avatar

Twitter (X) Tweets Profiles Scraper

Pricing

from $3.99 / 1,000 results

Go to Apify Store
Twitter (X) Tweets Profiles Scraper

Twitter (X) Tweets Profiles Scraper

Twitter (X) Tweets Profiles Scraper extracts tweets, user profiles, bios, follower counts, engagement metrics, timestamps, hashtags, and other public data. Automate social media research, competitor monitoring, audience analysis, influencer discovery, and lead generation.

Pricing

from $3.99 / 1,000 results

Rating

0.0

(0)

Developer

ScraperForge

ScraperForge

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

2 days ago

Last modified

Share

Twitter (X) Tweets Profiles Scraper — Tweets by Profile or Keyword, with Full User Data

Scrape tweets from X (Twitter) by profile or keyword. Paste profile URLs, @usernames or plain search terms — mixed freely in one run — and get each tweet with its text, timestamp, direct URL, likes, replies, retweets and quotes, media, links, and the complete author profile attached to every row.

Include or exclude replies, toggle profile data, and let the proxy chain escalate automatically when X pushes back.


What is Twitter (X) Tweets Profiles Scraper?

Most X scrapers make you choose: profile mode or search mode. This one takes both in the same input field and works out what each line is.

A line that looks like a profile URL or handle is read as a timeline; anything else is treated as a keyword search. That means a single run can cover the three accounts you monitor and the two topics you track, without splitting it into separate jobs.

Every tweet carries a full user object — bio, location, website, join date, follower and following counts, total tweets, total likes and media count — so engagement-rate analysis needs no second lookup.


What data can you extract?

Tweet

FieldDescription
idTweet ID
urlDirect link to the tweet
textTweet text
timestampPublication time
username, fullnameAuthor handle and display name
verifiedVerification status
linksLinks contained in the tweet
mediaAttached images and video
likes, replies, retweets, quotesEngagement counts
isPinned, isQuote, isRetweet, isReplyContent-type flags
tweetUserIdAuthor's user ID

user — the full author profile

username, userFullName, userId, avatar, description (bio), location, website, url, joinDate, verified, totalFollowers, totalFollowing, totalTweets, totalLikes, totalMediaCount.


Why teams scrape X tweets and profiles

For social listening

Keyword lines let you monitor topics, not just accounts — brand mentions, product complaints, competitor launches — and every match arrives with the author's follower count so you can triage by reach immediately.

For influencer research

totalFollowers and totalTweets sit in the same row as likes and retweets, so engagement rate is a single division rather than a join across two datasets.

For competitor monitoring

Track rival accounts and the keywords they care about in one run, then compare cadence and engagement.

For lead generation

Author bios, locations and websites are in every row. Filtering a keyword search by bio keywords is a fast route to qualified prospects.

For content research

The isRetweet, isQuote and isReply flags let you separate original content from amplification — essential when studying what an account actually produces.

For journalism and research

Timestamped, permalinked posts with author context make a citable dataset.


How to scrape X step by step

  1. Open the Actor and add your targets — one per line. Profile URLs, @usernames and keywords can all be mixed.
  2. Set Maximum Tweets per Target (1–100).
  3. Decide whether to Include Replies and Include User Information.
  4. Click Start, then export the Output tab as JSON (recommended) or CSV.

⬇️ Input

Example input

{
"startUrls": [
"https://x.com/elonmusk",
"mrbeast",
"ai tools"
],
"maxTweets": 50,
"withReplies": true,
"includeUserInfo": true
}

Input reference

FieldTypeDefaultDescription
startUrlsarray— (required)One target per line. Profile URLs (https://x.com/username), usernames (username or @username), or keywords/topics (crypto, ai tools). Profiles and keywords can be mixed in one run.
maxTweetsinteger10Tweets to collect per target, from 1 to 100.
withRepliesbooleantrueInclude reply tweets. Turn off to collect only main tweets.
includeUserInfobooleantrueAttach the detailed profile object to each tweet.
proxyConfigurationobjectoffOptional. Auto-fallback: datacenter first, then residential if blocked. Use residential for stricter blocking.

⬆️ Output

Example output (trimmed)

{
"id": "1789012345678901234",
"url": "https://x.com/exampleuser/status/1789012345678901234",
"username": "@exampleuser",
"fullname": "Example User",
"verified": true,
"timestamp": "2026-08-04T14:22:31.000Z",
"text": "Shipped a big update today. Full changelog in the replies 👇",
"links": ["https://example.com/changelog"],
"likes": 18420,
"replies": 612,
"retweets": 2140,
"quotes": 184,
"isPinned": false,
"isQuote": false,
"isRetweet": false,
"isReply": false,
"media": [],
"tweetUserId": "44196397",
"user": {
"username": "exampleuser",
"userFullName": "Example User",
"userId": "44196397",
"avatar": "https://pbs.twimg.com/profile_images/…",
"description": "Building things on the internet.",
"location": "Berlin, Germany",
"website": "https://example.com",
"joinDate": "Tue Mar 21 20:50:14 +0000 2017",
"verified": true,
"totalFollowers": 482100,
"totalFollowing": 913,
"totalTweets": 26410,
"totalLikes": 19430,
"totalMediaCount": 1204
}
}

Illustrative values — a live run returns current X data.


Usage recipes

Monitor accounts and topics together

{
"startUrls": [
"yourcompetitor",
"https://x.com/industrypublication",
"your brand name",
"your product category"
],
"maxTweets": 100
}

One run, four data sources, one dataset.

Original content only

{
"startUrls": ["yourcompetitor"],
"maxTweets": 100,
"withReplies": false
}

Then filter the export for rows where isRetweet and isQuote are both false.

Compute engagement rate

Divide likes by user.totalFollowers directly in your export — both values are already in the same row.

Find prospects by bio

Run a keyword search, then filter user.description for the role or industry you sell to, and user.location for your territory.

Lightweight, high-volume pass

{
"startUrls": ["topic one", "topic two", "topic three"],
"maxTweets": 100,
"includeUserInfo": false
}

Turning off user info produces smaller rows when you only need tweet text and engagement.


How does this compare to X's official API?

X's official API is now a paid, tiered product. The free tier is effectively write-only for most purposes, and meaningful read access — timelines and search at any useful volume — sits behind Basic, Pro or Enterprise pricing with monthly post caps.

This Actor reads publicly visible timelines and search results without an API key or subscription. If you need X's official guarantees, SLAs and full-archive search, the paid API is the right route. For research and monitoring at ordinary volumes, this is the practical alternative.


Integrate and automate

Python

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_API_TOKEN>")
run = client.actor("scraperforge/twitter-x-tweets-profiles-scraper").call(run_input={
"startUrls": ["elonmusk", "ai tools"],
"maxTweets": 50,
})
for t in client.dataset(run["defaultDatasetId"]).iterate_items():
followers = (t.get("user") or {}).get("totalFollowers")
print(t["username"], "|", t["likes"], "likes /", followers, "followers |", t["text"][:60])

JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_APIFY_API_TOKEN>' });
const run = await client.actor('scraperforge/twitter-x-tweets-profiles-scraper').call({
startUrls: ['elonmusk'],
maxTweets: 50,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

REST API

curl -X POST "https://api.apify.com/v2/acts/scraperforge~twitter-x-tweets-profiles-scraper/runs?token=<YOUR_APIFY_API_TOKEN>" \
-H "Content-Type: application/json" \
-d '{"startUrls":["elonmusk"],"maxTweets":50}'

n8n, Make, Zapier and AI agents

Call the Actor from n8n, Make, Zapier or an MCP-capable agent — for example, an agent that watches a keyword and summarises high-reach mentions daily.

Schedules and webhooks

Attach a Schedule for continuous monitoring and deduplicate on id, then use webhooks or the Google Sheets / Airtable / Slack integrations to route results.


Pricing and what you are charged for

Pay-per-event: a small Actor-start charge plus a charge per tweet row delivered. maxTweets multiplied by the number of targets is your ceiling.

Current rates are on the Pricing tab of this Actor's page, and Apify shows an estimate before and during every run. If the run escalates to residential proxies, that traffic is billed separately by the platform.


Limits, reliability and blocking

  • Maximum 100 tweets per target. For deeper history, use several targets or run repeatedly.
  • maxTweets is per target, so five targets at 100 each can return up to 500 rows.
  • Public profiles only. Protected accounts are not accessible.
  • X limits timeline and search depth, so very old posts may be unreachable regardless of your limit.
  • Engagement counts are point-in-time and change constantly — timestamp runs for trend work.
  • Media URLs expire — they point at X's CDN.
  • Turning off includeUserInfo removes the user object, which also removes your ability to compute engagement rate. Keep it on unless row size matters.
  • Keyword lines return search results, which X ranks and filters — they are not an exhaustive archive of every matching post.
  • Default run options are 4 GB memory and a 1-hour timeout.

This Actor collects only publicly available X content — the same posts and profiles any visitor can see without logging in. It does not log in, post, follow, or access private data or direct messages.

Posts and media remain the property of their authors, and handles, bios, locations and avatars are personal data. Ensure your use complies with X's terms, copyright, and GDPR or comparable regulations, and do not use scraped profile data for unsolicited bulk messaging.


❓ Frequently asked questions

Do I need an X API key or paid subscription?

No. The Actor reads public timelines and search results without a developer account.

Can I mix profiles and keywords in one run?

Yes — that is the main design feature. Each line is detected independently.

How many tweets can I get per target?

Up to 100. Add more targets or run repeatedly for greater volume.

Do I get the author's follower count?

Yes, in the user object on every row — provided includeUserInfo is on.

How do I exclude retweets?

Turn withReplies off to drop replies, then filter the export on isRetweet and isQuote for genuinely original content.

Can I scrape protected accounts?

No. Only public profiles are accessible.

Why do keyword searches return fewer results than expected?

X ranks and filters search results; they are not a complete archive. Use several keyword variations for broader coverage.

Do I need a proxy?

Not for small runs. Enable Apify Proxy for larger or repeated jobs — the Actor falls back from datacenter to residential automatically.

Which export format should I use?

JSON — user, media and links are nested. CSV works if you only need tweet text and counts.


Browse the full collection on the ScraperForge profile.


💬 Feedback

Need higher per-target limits, extra fields, or a custom X monitoring pipeline? Open an issue on the Issues tab of this Actor.