Advanced X (Twitter) Profile Scraper
Pricing
from $0.50 / 1,000 results
Advanced X (Twitter) Profile Scraper
Scrape all tweets from any X (Twitter) profile — not just recent ones. Uses advanced search with date ranges to capture full history, with rich per-tweet data: text, media, engagement metrics and author details. Fast, stable & API-based.
Pricing
from $0.50 / 1,000 results
Rating
5.0
(20)
Developer
ВAH
Maintained by CommunityActor stats
29
Bookmarked
4.2K
Total users
73
Monthly active users
7.5 hours
Issues response
9 days ago
Last modified
Categories
Share
What does Advanced X (Twitter) Profile Scraper do?
Advanced X (Twitter) Profile Scraper extracts all tweets from any X (Twitter) profile — not just the most recent ones. It works as an unofficial X (Twitter) API alternative: give it one or more profile URLs and a date range, and it returns clean, structured tweet data with 39 fields per tweet, including text, media URLs, engagement metrics, and full author details.
Unlike simple timeline scrapers that only see a profile's latest posts, this Actor uses X's advanced search with date-range splitting to reach deep into a profile's history. It's fast, stable, and API-based (no slow browser rendering).
Why use Advanced X (Twitter) Profile Scraper?
- 🗓️ Go beyond the timeline — advanced search reaches older tweets that a plain profile scrape misses.
- 🎯 Precise date control — set an exact
startDateandendDate; scrape a single day or years of history. - 🔪 Deep-scrape splitting — split the range by day, week, or month to defeat X's search limits and capture the fullest history.
- 🖼️ Rich data — text (full length, even 280+ character long posts), image URLs, direct MP4 video URLs, hashtags, mentions, links, and complete engagement stats.
- 👤 Full author profile — name, handle, bio, followers, following, verification, profile image, and more on every row.
- 🌐 Language filter — target tweets in any of 40+ languages.
- ⚡ Fast & stable — direct API access, not browser automation.
- 📤 Ready to use — export to JSON, CSV, Excel, XML, or HTML.
How this Actor compares
| Feature | This Actor | Typical profile scrapers |
|---|---|---|
| Reaches full history | ✅ Advanced search + date splitting | ❌ Recent timeline only |
| Long-post full text (280+) | ✅ Complete text | ❌ Often truncated |
| Media URLs (images + video MP4) | ✅ Both | ⚠️ Images only or none |
| Author profile fields | ✅ 11 fields | ⚠️ Handle only |
| Method | ✅ Direct API | ❌ Slow browser |
What data can you extract?
Each tweet is one dataset item with the following fields:
| Field | Type | Description |
|---|---|---|
tweetId | string | Unique tweet ID |
authorHandle | string | Author's @handle |
authorName | string | Author's display name |
tweetUrl | string | Direct link to the tweet |
fullText | string | Complete tweet text (untruncated for long posts) |
createdAt | string | Post time (UTC) |
lang | string | Tweet language code |
source | string | Posting client (e.g. Twitter for iPhone) |
replyCount | number | Number of replies |
repostCount | number | Reposts (retweets + quotes, as shown on X) |
retweetCount | number | Retweets only |
quoteCount | number | Quote tweets only |
likeCount | number | Number of likes |
viewCount | number | Number of views |
bookmarkCount | number | Number of bookmarks |
isReply | boolean | Whether the tweet is a reply |
replyToHandle | string | Handle being replied to |
replyToUrl | string | Profile URL being replied to |
isQuote | boolean | Whether the tweet quotes another |
quotedTweetUrl | string | Link to the quoted tweet |
isRetweet | boolean | Whether the tweet is a retweet |
isAd | boolean | Whether the tweet is promoted |
mediaType | string | photo, video, animated_gif, mixed, or empty |
imageUrls | array | Image URLs |
videoUrls | array | Direct MP4 video URLs |
hashtags | array | Hashtags in the tweet |
mentions | array | Handles mentioned |
externalUrls | array | External links in the tweet |
authorId | string | Author's numeric ID |
authorUrl | string | Author's profile URL |
authorLocation | string | Author's location |
authorVerified | boolean | Blue/verified status |
authorFollowers | number | Author's follower count |
authorFollowing | number | Accounts the author follows |
authorTweetsCount | number | Author's total tweets |
authorProfileImage | string | Author's profile image URL |
authorBannerImage | string | Author's profile banner image URL |
authorBio | string | Author's bio |
authorWebsite | string | Website link on the author's profile |
authorCreatedAt | string | When the author's account was created |
How to scrape an X (Twitter) profile
- Open the Actor and click Try for free.
- Add profile URLs — paste one or more X/Twitter profile URLs (e.g.
https://x.com/NASA) into the Account URLs field. - Set the date range — choose your
startDateandendDate(formatYYYY-MM-DD). - Pick a split mode — use By day for the most thorough scrape, or By week / By month for faster runs over long ranges. Optionally set a Language filter.
- Click Start, then download your tweets as JSON, CSV, or Excel from the Storage tab.
How much does it cost?
This Actor uses pay-per-result pricing — you pay only for the tweets you actually collect, with no monthly platform rental. Because it's API-based rather than browser-based, it runs cheaply and quickly.
You can try it for free on the Apify free plan — full features, up to 50 results per run (see below). To collect at scale with no limits, upgrade your Apify plan. See the Pricing section on this page for the current per-1,000-results rate.
💎 Free plan vs paid plan
The free plan gives you the full feature set (all filters, date-splitting, and every data field) — it's only capped on volume per run:
| Limit | Free plan | Paid plan |
|---|---|---|
| Runs per day | Unlimited | Unlimited |
| Results per run | 50 (shared across all account URLs) | Unlimited |
| Features (filters, date-split, all fields) | Full | Full |
| Multiple accounts per run | Capped by the 50-results total | Unlimited |
| Date range / split mode | Unlimited | Unlimited |
To scrape more than 50 results per run, multiple accounts at full volume, or deep historical archives, upgrade your plan.
Input
Provide one or more X (Twitter) profile URLs and a date range. Configure everything visually on the Input tab, or via JSON.
| Field | Type | Description | Default |
|---|---|---|---|
accountUrls | Array | X/Twitter profile URLs, e.g. https://x.com/NASA (free plan: 50 results total per run across all URLs) | Required |
startDate | String | Start date (inclusive), YYYY-MM-DD | Required |
endDate | String | End date (inclusive), YYYY-MM-DD | Required |
splitMode | String | day, week, or month. day is the most thorough | day |
language | String | Language filter (e.g. en, ja, es); any to disable | any |
maxCollections | Integer | Max tweets per profile; 0 = unlimited (paid plan) | 0 |
keyword | String | Only return the profile's tweets containing this keyword/phrase | (empty) |
excludeReplies | Boolean | Skip replies; return only original tweets | false |
mediaFilter | String | any, images (only tweets with images), or videos | any |
minLikes | Integer | Only tweets with at least this many likes | 0 |
minRetweets | Integer | Only tweets with at least this many reposts | 0 |
sort | String | Top (most relevant) or Latest (most recent) | Top |
Input example (JSON)
{"accountUrls": ["https://x.com/NASA", "https://x.com/elonmusk"],"startDate": "2025-08-01","endDate": "2025-09-02","splitMode": "week","language": "any","maxCollections": 0,"keyword": "","excludeReplies": false,"mediaFilter": "any","minLikes": 0,"minRetweets": 0,"sort": "Top"}
Output
Results are stored in the dataset. Each item is one tweet with full author and engagement details.
Output example (JSON)
{"tweetId": "2064422103416238295","authorHandle": "NASA","authorName": "NASA","tweetUrl": "https://x.com/NASA/status/2064422103416238295","fullText": "Introducing Artemis III.\n\nFour astronauts. Three launches. Two dockings. One splashdown...","createdAt": "2026-06-09 18:59:19+00:00","lang": "en","source": "Twitter Media Studio","replyCount": 1026,"repostCount": 6362,"retweetCount": 5919,"quoteCount": 443,"likeCount": 28601,"viewCount": 1975399,"bookmarkCount": 1474,"isReply": false,"replyToHandle": "", // populated only when isReply is true"replyToUrl": "", // populated only when isReply is true"isQuote": false,"quotedTweetUrl": "", // populated only when isQuote is true"isRetweet": false,"isAd": false,"mediaType": "video", // "photo" | "video" | "animated_gif" | "mixed" | """imageUrls": ["https://pbs.twimg.com/media/HKZL32MXcAAEvuz.jpg"],"videoUrls": ["https://video.twimg.com/amplify_video/2064419379664617472/vid/avc1/1920x1080/6jURoc2QL1nJj1tc.mp4"],"hashtags": [], // e.g. ["Artemis"]"mentions": [], // e.g. ["Astro_Luca"]"externalUrls": [], // links included in the tweet"authorId": "11348282","authorUrl": "https://x.com/NASA","authorLocation": "Pale Blue Dot","authorVerified": true,"authorFollowers": 92154022,"authorFollowing": 119,"authorTweetsCount": 74184,"authorProfileImage": "https://pbs.twimg.com/profile_images/1321163587679784960/0ZxKlEKB_normal.jpg","authorBannerImage": "https://pbs.twimg.com/profile_banners/11348282/1775567134","authorBio": "Making the seemingly impossible, possible. ✨","authorWebsite": "http://www.nasa.gov/","authorCreatedAt": "Wed Dec 19 20:20:32 +0000 2007"}
Tips
- Get the most complete history — for prolific accounts, X's search won't return everything in a wide date range. Use
splitMode: "day"(orweek) to break the job into smaller queries and maximize coverage. - Control your result count — set
maxCollectionsto cap tweets per profile and keep costs predictable. - Scrape multiple profiles — on a paid plan, add many URLs to
accountUrlsin a single run. - Automate it — schedule runs or connect the dataset to your app via the Apify API and integrations (Make, Zapier, Google Sheets, and more).
Related Actors
Looking for a different way to scrape X (Twitter)? 😊
- Ultimate X (Twitter) Advanced Search Scraper — Harness the full power of X advanced search. Instead of one profile, find tweets from all users by keyword, date, engagement, language, and more.
FAQ and support
Is it legal to scrape X (Twitter)?
Scraping publicly available data is generally legal. This Actor only collects data that any logged-out user can see. However, you are responsible for how you use the data.
Our Actors are ethical and do not extract any private user data, such as email addresses, gender, or location. They only extract what the user has chosen to share publicly. We therefore believe that our Actors, when used for ethical purposes by Apify users, are safe. However, you should be aware that your results could contain personal data. Personal data is protected by the GDPR in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers.
Why don't I get every single tweet in a large date range?
X's search limits how many results it returns per query. Use splitMode: "day" or "week" to break the range into smaller segments and capture far more.
Can I scrape more than one profile at once?
Yes — add multiple URLs to accountUrls. On the free plan a run still returns up to 50 results total (shared across those URLs); upgrade to a paid plan for unlimited results per account.
Need a custom field or a different scraper?
Reach out via the Apify support channels or leave feedback on the Actor's page. We're happy to help.