Twitter (X) Scraper
Pricing
from $0.70 / 1,000 public data
Twitter (X) Scraper
Collect public X posts, profiles, network members, and regional trends. Filter posts by date, language, media, links, and engagement, then save structured rows to an Apify dataset without X credentials.
Pricing
from $0.70 / 1,000 public data
Rating
5.0
(1)
Developer
Maxime Dupré
Maintained by CommunityActor stats
2
Bookmarked
357
Total users
51
Monthly active users
7 hours ago
Last modified
Categories
Share
🔎 Twitter (X) scraper for public data
Twitter Scraper helps researchers, marketers, and developers collect public Twitter/X posts, profile matches, profile network members, and regional trends. Get text, links, authors, media, engagement counts, and source details as structured dataset rows without giving the Actor your Twitter/X login.
- Find public posts with the Twitter API task.
- Collect public posts for a topic with an Apify Twitter scraper task.
- Build a small public-data workflow with the Twitter scraper Python task.
- Collect image posts with the Twitter image scraper task.
- Read saved public rows in code with the Twitter scraper API task.
📦 Public posts, profiles, networks, and trends
Post rows can include text, links, time, language, post kind, author details, engagement counts, media, quotes, replies, and conversation links. Profile rows can include identity, bio, images, public counts, verification, and source context. Trend rows include rank, region, and a search link.
The Actor saves each eligible public item on its first match. If another query, URL, handle, ID, or source finds it later, that later match is ignored. Source fields describe only the first saved match.
▶️ Run one Twitter/X collection
- Choose one
targetfor the run. - Add the matching search, profile, network, or trend input.
- Set any filters and
maxNbItemsToScrape. - Run the Actor and open its dataset.
Post searches can use plain text, X search syntax, public source URLs, post URLs or IDs, conversation IDs, quoted post IDs, filters, or date and place limits. Profile search finds public accounts by search phrase or direct target. Profile options also collect followers, followed accounts, or public post retweeters. Trends mode returns topics for one supported region. Leave the work limit empty to return all available results until the source is exhausted.
⚙️ Input
Input fields
Only fields for the chosen target affect that run.
| Field | Type | What it does |
|---|---|---|
target | string | Required. Choose searchPosts, searchProfiles, or trendingTopics. The form prefills searchPosts; there is no schema default. Network members are Profiles options. |
postDiscoveryMethod | string | Choose searchQuery (default), directPosts, conversationIds, quotedPostIds, or sourceUrls. Other post-finding inputs are ignored. |
searchQuery | string[] | Uses plain text or advanced X search syntax. Each entry is one full query. The form prefills OpenAI; there is no schema default. |
directPostUrls | string[] | Fetches the exact public posts at the submitted X or Twitter URLs or numeric IDs. |
conversationIds | string[] | Finds public posts that belong to the submitted conversations. |
quotedPostIds | string[] | Finds public posts that quote the submitted post IDs. |
postSearchUrls | string[] or object[] | Uses public search, profile, list, or conversation URLs as post sources. Each entry is a URL string or an object with url. Use quotedPostIds to find quotes of a post. |
hashtags | string[] | Keeps posts that contain the submitted hashtags. Enter each tag without #. |
fromUsers | string[] | Keeps posts written by the submitted handles. Enter each handle without @. |
authorVerification | string | Choose any (default), verified, or notVerified. Verification includes X Premium status. |
mentions | string[] | Keeps posts that mention the submitted handles. Enter each handle without @. |
toUsers | string[] | Keeps posts addressed to the submitted handles. Enter each handle without @. |
searchMode | string | Choose latest (schema default), top, or latestAndTop. The form prefills latestAndTop. The combined mode saves each post once. |
startDate | string | Keeps posts on or after this date. Omission uses the last 30 days for searches. Use a date or a UTC date-time. Direct post lookup ignores search filters. |
endDate | string | Keeps posts on or before this date or UTC date-time. A date includes its full day. Omit for no end bound. |
language | string | Keeps posts with this language code, such as en, es, fr, or ja. |
placeId | string | Sets an X or Twitter place ID. |
links | string | Choose include (default), onlyLinks, or onlyWithoutLinks. |
media | string | Choose include (default), onlyMedia, onlyImages, or onlyVideos. Videos include GIFs. |
postKinds | string[] | Choose one or more of originalPosts, quotePosts, replies, and reposts. The first three are the default. |
minLikes | integer | Keeps posts with at least this many likes. Minimum 0; omit for no likes filter. |
minReplies | integer | Keeps posts with at least this many replies. Minimum 0; omit for no reply filter. |
minRetweets | integer | Keeps posts with at least this many reposts. Minimum 0; omit for no repost filter. |
sinceId | string | Keeps posts after this X post ID. |
maxId | string | Keeps posts at or before this X post ID. |
profileDiscoveryMethod | string | Choose searchPhrases (default), directTargets, followers, following, or retweeters. |
profileSearchQueries | string[] | Uses X or Twitter People search phrases to find matching public profiles. |
profileLookupTargets | string[] | Sets handles, URLs, or numeric user IDs for directTargets, followers, or following. Enter handles without @. |
retweeterPostUrlsOrIds | string[] | Sets public post URLs or IDs whose public retweeter profiles to collect. |
includeArchivedVerificationHistory | boolean | Adds available past badge details for Profiles. Default false. Current verification details remain available when off. |
archivedVerificationHistoryLimit | integer | With past badge details on, requests up to this many past entries per profile. Default 3; minimum 0. Use 0 for all available entries. Off means no past entries, whatever the limit. |
trendRegionId | string | Chooses one of the region IDs in the input form. Default 1 means Worldwide. |
maxNbItemsToScrape | integer | Stops after this many saved rows across the run. Minimum 0. Omit or use 0 for all available results until the source is exhausted or the charge limit is reached. The form prefills 10; there is no schema default. |
Example input
Use this public input from a successful current-beta run with the default form values:
{"target": "searchPosts","postDiscoveryMethod": "searchQuery","searchQuery": ["OpenAI"],"authorVerification": "any","searchMode": "latestAndTop","links": "include","media": "include","postKinds": ["originalPosts","quotePosts","replies"],"profileDiscoveryMethod": "searchPhrases","includeArchivedVerificationHistory": false,"archivedVerificationHistoryLimit": 3,"trendRegionId": "1","maxNbItemsToScrape": 10}
Post searches need at least one positive selector. Each supplied list needs at least one value. Profile searches need a search phrase or direct target. Followers and Following need profile targets; Post retweeters needs post URLs or IDs. Trends use only the chosen region. Omit unused filters to leave them off. Direct post lookup fetches the submitted posts without the search filters.
🧾 Output
Each run returns rows for one chosen target shape. Network-member runs use the profile shape. Optional fields can be absent or null when X does not provide them. The output link results opens these rows in the default dataset.
Post row
| Field | Type | What it does |
|---|---|---|
rowType | string | Marks this row as a post. |
postId | string | Gives the X post ID. |
postUrl | string | Gives the public link to the X post. |
postText | string | Gives the full post text. |
postDateTime | string | Gives the publication time as a date-time string. |
language | string | Gives the post language code. |
postKind | string (optional) | Says whether the post is original, a reply, a quote, or a repost, when available. |
authorId | string or null | Gives the author profile ID, when available. |
authorHandle | string or null | Gives the author handle without @, when available. |
authorDisplayName | string or null | Gives the author's display name, when available. |
authorProfileUrl | string or null | Gives the link to the author's X profile, when available. |
authorBio | string or null | Gives the author's public profile bio, when available. |
authorLocation | string or null | Gives the author's public profile location, when available. |
authorAvatarUrl | string or null | Gives the author's avatar image link, when available. |
authorFollowersCount | integer or null | Gives the author's follower count, when available. |
authorFollowingCount | integer or null | Gives the author's following count, when available. |
authorCreatedAt | string or null | Gives the author account creation time, when available. |
authorIsVerified | boolean or null | Says whether the author is verified, when available. |
authorIsBlueVerified | boolean or null | Says whether the author has X Premium verification, when available. |
authorVerifiedType | string or null | Gives the author's verification type, when available. |
nbLikes | integer or null | Gives the number of likes, when available. |
nbReposts | integer or null | Gives the number of reposts, when available. |
nbReplies | integer or null | Gives the number of replies, when available. |
quoteCount | integer or null | Gives the number of quotes, when available. |
nbViews | integer or null | Gives the number of views, when available. |
nbBookmarks | integer or null | Gives the number of bookmarks, when available. |
mediaDetails | object[] | Lists each media file and its available details. |
mediaDetails.id | string or null | Gives the media ID, when available. |
mediaDetails.altText | string or null | Gives the media alt text, when available. |
mediaDetails.type | string | Gives the media kind. |
mediaDetails.url | string | Gives the main media file link. |
mediaDetails.thumbnailUrl | string or null | Gives a preview image link, when available. |
mediaDetails.width | integer or null | Gives the media width in pixels, when available. |
mediaDetails.height | integer or null | Gives the media height in pixels, when available. |
mediaDetails.durationMs | integer or null | Gives the media length in milliseconds, when available. |
mediaDetails.aspectRatio | string or null | Gives the media shape, when available. |
mediaDetails.contentType | string or null | Gives the media file type, when available. |
mediaDetails.variants | object[] | Lists other video file choices, when available. |
mediaDetails.variants.url | string | Gives a video choice link. |
mediaDetails.variants.contentType | string or null | Gives a video choice file type, when available. |
mediaDetails.variants.bitrate | integer or null | Gives a video choice bitrate, when available. |
hashtags | string[] | Lists hashtags without #. |
linkEntities | string[] | Lists usable destination links found in the post. |
quotedPostId | string or null | Gives the quoted post ID, when available. |
quotedPostText | string or null | Gives the quoted post text, when available. |
quotedAuthorHandle | string or null | Gives the quoted post author's handle, when available. |
replyToHandle | string or null | Gives the handle this post replies to, when available. |
replyToPostId | string or null | Gives the post ID this post replies to, when available. |
conversationId | string or null | Gives the conversation ID, when available. |
inReplyToUserId | string or null | Gives the replied-to user ID, when available. |
isPinned | boolean or null | Says whether X marks the post as pinned, when available. |
source | string or null | Gives the posting client label, when available. |
sourceInput | string or null | Gives the submitted query, URL, ID, or similar value that first found the post. |
resultPosition | integer or null | Gives the post's place in its source results, when available. |
poll | object or null | Gives available poll choices and vote details. |
poll.choices | object[] | Lists poll choices in their shown order. |
poll.choices.label | string | Gives the choice text. |
poll.choices.voteCount | integer or null | Gives X's vote count for the choice. |
poll.countsAreFinal | boolean or null | Says whether X marks the counts as final. |
poll.closesAt | string or null | Gives the poll closing time. |
article | object or null | Gives available X article content linked to the post. |
article.title | string or null | Gives the article title. |
article.text | string or null | Gives the article text. |
article.url | string or null | Gives the public article link. |
article.publishedAt | string or null | Gives the article publication time. |
article.updatedAt | string or null | Gives the last change time. |
repostedPost | object or null | Gives the original post shared by a repost. |
repostedPost.postId | string or null | Gives the original post ID. |
repostedPost.postUrl | string or null | Gives the original post link. |
repostedPost.postText | string or null | Gives the original post text. |
repostedPost.postDateTime | string or null | Gives the original publication time. |
repostedPost.authorId | string or null | Gives the original author's ID. |
repostedPost.authorHandle | string or null | Gives the original author's handle. |
repostedPost.authorDisplayName | string or null | Gives the original author's display name. |
mentions | object[] | Lists accounts mentioned in the post. |
mentions.profileId | string or null | Gives the mentioned account ID. |
mentions.handle | string or null | Gives the mentioned handle without @. |
mentions.displayName | string or null | Gives the mentioned account name. |
place | object or null | Gives place details attached to the post by X. |
place.id | string or null | Gives the X place ID. |
place.name | string or null | Gives the place name. |
place.fullName | string or null | Gives the full place name. |
place.type | string or null | Gives the kind of place. |
place.country | string or null | Gives the country name. |
place.countryCode | string or null | Gives the country code. |
place.boundingBox | object or null | Gives the area around the place. |
place.boundingBox.type | string or null | Gives the geometry type. |
place.boundingBox.coordinates | number[][][] | Gives boundary rings of longitude and latitude points. |
Example post row from a successful current-beta run
{"rowType": "post","postId": "2114107998830559449","postUrl": "https://x.com/Astro_Kimiya/status/2114107998830559449","postText": "皆さん、おはようございます!\n今週は、APRSAF(ASIA-PACIFIC REGIONAL SPACE AGENCY FORUM)に参加するために、タイ王国へ出張です。\nタイへ行くのは初めてですが、宇宙から見てもとても美しい国なので、とても楽しみです! https://t.co/wK27z4gapD","postDateTime": "2026-10-24T21:33:19.000Z","language": "ja","postKind": "original","authorId": "569247858","authorHandle": "Astro_Kimiya","authorDisplayName": "油井 亀美也 Kimiya.Yui","authorProfileUrl": "https://x.com/Astro_Kimiya","authorBio": "2015年7月~12月&2025年8月~2026年1月ISS長期滞在。In 2011 became a JAXA astronaut, Кимия Юи;В 2011 году стал астронавтом JAXA","authorLocation": "Japan","authorAvatarUrl": "https://pbs.twimg.com/profile_images/441086500059742208/gEt6BJ___normal.jpeg","authorFollowersCount": 256997,"authorFollowingCount": 147,"authorCreatedAt": "2012-05-02T14:54:25.000Z","authorIsVerified": true,"authorIsBlueVerified": true,"authorVerifiedType": null,"nbLikes": 1136,"nbReposts": 70,"nbReplies": 23,"quoteCount": 1,"nbViews": 22603,"nbBookmarks": 18,"mediaDetails": [{"id": "2114107984498552833","altText": null,"type": "image","url": "https://pbs.twimg.com/media/HVbSAsjacAEvPro.jpg","thumbnailUrl": "https://pbs.twimg.com/media/HVbSAsjacAEvPro.jpg","width": 2048,"height": 1155,"durationMs": null,"aspectRatio": null,"contentType": null,"variants": []}],"poll": null,"hashtags": [],"linkEntities": [],"quotedPostId": null,"quotedPostText": null,"quotedAuthorHandle": null,"replyToHandle": null,"replyToPostId": null,"conversationId": "2114107998830559449","inReplyToUserId": null,"isPinned": false,"source": null,"mentions": [],"place": null,"resultPosition": 1,"sourceInput": "https://x.com/i/lists/4143216"}
Profile and network-member row
Profile search and network-member runs use this same shape. Network rows add networkType, while sourceInput gives the first query, handle, URL, ID, or similar source value.
| Field | Type | What it does |
|---|---|---|
rowType | string | Marks this row as a profile. |
profileId | string | Gives the profile ID. |
profileUrl | string | Gives the public link to the X profile. |
handle | string | Gives the profile handle without @. |
displayName | string | Gives the profile display name. |
bio | string or null | Gives the public profile bio, when available. |
createdAt | string or null | Gives the account creation time, when available. |
location | string or null | Gives the public profile location, when available. |
avatarUrl | string or null | Gives the profile avatar image link, when available. |
bannerUrl | string or null | Gives the profile banner image link, when available. |
followersCount | integer or null | Gives the public follower count, when available. |
followingCount | integer or null | Gives the public following count, when available. |
postsCount | integer or null | Gives the public post count, when available. |
likesCount | integer or null | Gives the public like count, when available. |
isVerified | boolean or null | Says whether X marks the profile as verified. |
pinnedPostIds | string[] | Gives the shown pinned post IDs. |
sourceInput | string or null | Gives the submitted query, handle, URL, ID, or similar value that first found the profile. |
networkType | string or null | Gives followers, following, or retweeters when a network run found the profile. |
resultPosition | integer or null | Gives the profile's place in the source results, when available. |
websiteUrl | string or null | Gives the profile website link. |
mediaCount | integer or null | Gives the number of media posts. |
listedCount | integer or null | Gives the number of public lists that include the profile. |
isBlueVerified | boolean or null | Says whether the profile has X Premium verification. |
verifiedType | string or null | Gives the verification type. |
professional | object or null | Gives professional account details. |
professional.type | string or null | Gives the professional account type. |
professional.categories | string[] | Lists professional categories. |
restrictions | object or null | Gives public access limits. |
restrictions.isProtected | boolean or null | Says whether posts are limited to approved followers. |
restrictions.withheldCountries | string[] | Lists country codes where X withholds the account. |
restrictions.withheldScope | string or null | Gives the scope of the access limit. |
canReceiveDirectMessages | boolean or null | Says whether the profile accepts direct messages. |
accountRegion | object or null | Gives public account-region details. |
accountRegion.country | string or null | Gives the stated country or region. |
accountRegion.accuracy | string or null | Gives X's description of region accuracy. |
usernameHistory | object[] | Lists available past username details. |
usernameHistory.handle | string or null | Gives a past handle without @. |
usernameHistory.changedAt | string or null | Gives the reported username change time. |
verificationHistory | object[] | Lists current verification details and any requested past badge entries. Past entries depend on the history switch and limit. |
verificationHistory.verifiedType | string or null | Gives the verification type for an entry. |
verificationHistory.verifiedAt | string or null | Gives the reported verification start time. |
Example profile row from a successful current-beta run
{"rowType": "profile","profileId": "137734165","profileUrl": "https://x.com/ashleyrgold","handle": "ashleyrgold","displayName": "Ashley Gold","bio": "@semafor senior tech correspondent in DC. alum @axios @politico @theinformation @bbcworld. agold@semafor.com, ashleyrgold.20 on signal","createdAt": "2010-04-27T15:58:36.000Z","location": "Washington, DC","avatarUrl": "https://pbs.twimg.com/profile_images/2100730381846646784/INs3gfH7_normal.jpg","bannerUrl": "https://pbs.twimg.com/profile_banners/137734165/1775743086","followersCount": 13044,"followingCount": 2390,"postsCount": 4721,"likesCount": 13429,"isVerified": true,"pinnedPostIds": [],"websiteUrl": null,"mediaCount": 252,"listedCount": 537,"isBlueVerified": true,"verifiedType": null,"professional": null,"restrictions": {"isProtected": false,"withheldCountries": [],"withheldScope": null},"canReceiveDirectMessages": null,"accountRegion": {"country": "United States","accuracy": "accurate"},"usernameHistory": [],"verificationHistory": [{"verifiedType": null,"verifiedAt": "2015-02-23T15:57:00.357Z"},{"verifiedType": "blue verified badge","verifiedAt": null},{"verifiedType": "blue verified badge","verifiedAt": null},{"verifiedType": "blue verified badge","verifiedAt": null},{"verifiedType": "blue verified badge","verifiedAt": null},{"verifiedType": "blue verified badge","verifiedAt": null},{"verifiedType": "blue verified badge","verifiedAt": null},{"verifiedType": "blue verified badge","verifiedAt": null},{"verifiedType": "blue verified badge","verifiedAt": null},{"verifiedType": "blue verified badge","verifiedAt": null},{"verifiedType": "blue verified badge","verifiedAt": null}],"resultPosition": 1,"sourceInput": "ashleyrgold"}
Example network-member row from a successful current-beta run
{"rowType": "profile","profileId": "1983192256128659456","profileUrl": "https://x.com/soraofficialapp","handle": "soraofficialapp","displayName": "Sora","bio": "all the other sora handles were taken. \nfollow for all things Sora and the Sora app.","createdAt": "2025-10-28T15:21:04.000Z","location": null,"avatarUrl": "https://pbs.twimg.com/profile_images/1983301834489114630/RtJHHC7d_normal.jpg","bannerUrl": "https://pbs.twimg.com/profile_banners/1983192256128659456/1763223660","followersCount": 27899,"followingCount": 4,"postsCount": 35,"likesCount": 5,"isVerified": true,"pinnedPostIds": [],"networkType": "following","websiteUrl": "https://help.openai.com/en/articles/20001152-what-to-know-about-the-sora-discontinuation","mediaCount": 23,"listedCount": 239,"isBlueVerified": true,"verifiedType": "Business","professional": null,"restrictions": {"isProtected": false,"withheldCountries": [],"withheldScope": null},"canReceiveDirectMessages": null,"accountRegion": {"country": "United States","accuracy": "accurate"},"usernameHistory": [{"handle": null,"changedAt": "2025-10-28T22:29:17.629Z"}],"verificationHistory": [{"verifiedType": null,"verifiedAt": "2025-11-04T15:41:18.150Z"}],"resultPosition": 1,"sourceInput": "OpenAI"}
Trend row
| Field | Type | What it does |
|---|---|---|
rowType | string | Marks this row as a trend. |
trendName | string | Gives the topic name. |
trendRank | integer | Gives its rank in the region. |
trendQuery | string or null | Gives the search query, when available. |
trendSearchUrl | string or null | Gives an X search link for the trend, when available. |
regionId | string | Gives the selected trend region ID. |
regionName | string | Gives the selected trend region name. |
regionCountry | string or null | Gives the country or global label for the region. |
regionCountryCode | string or null | Gives the ISO country code, or null for Worldwide. |
Example trend row from a successful current-beta run
{"rowType": "trend","trendName": "#VotacaoAte19Horas","trendRank": 1,"trendQuery": "#VotacaoAte19Horas","trendSearchUrl": "https://twitter.com/search?q=%23VotacaoAte19Horas","regionId": "1","regionName": "Worldwide","regionCountry": "Worldwide","regionCountryCode": null}
💳 Pricing
This Actor uses pay-per-event pricing. Each saved public post, profile, network member, or trend is one billable event. Set a small work limit for a first test, then raise it when you need more rows.
🔌 Integrations
Use the Apify API, schedules, webhooks, and dataset exports such as JSON, CSV, Excel, XML, or RSS.
❓ FAQ
What happens when the same post or profile matches twice?
The Actor saves the first eligible match. It ignores later matches and keeps the first sourceInput value for that row.
Can one run use more than one result type?
No. Choose posts, profiles, network members, or trends for each run. Inputs for other result types are ignored.
What happens if X stops returning pages during a run?
The Actor keeps valid saved rows and continues with other submitted values. It warns when a value cannot finish. If source access fails and no submitted value completes, the run fails. Each saved row is billed once. A successful empty run can mean no matches, unavailable public content, or a handled input problem. Read the run warnings for the reason.
How do I fetch one post without fetching its thread?
Use directPostUrls for an exact public post URL or numeric ID. Use quotedPostIds to find posts that quote a post. Use conversationIds when you want posts from a conversation.
How do I search profiles or collect a network?
Choose searchProfiles. Set profileDiscoveryMethod to searchPhrases with profileSearchQueries, or directTargets with profileLookupTargets. For networks, choose followers or following with profileLookupTargets, or retweeters with retweeterPostUrlsOrIds.
Can I collect a full historical archive?
No. The Actor returns public data that X exposes for the selected source. It does not promise complete historical coverage.
Why is a field null?
The source may not provide that value for the post, profile, network member, or trend. Private, protected, deleted, suspended, and otherwise unavailable data is outside the product boundary.
Does leaving the work limit empty return everything?
It returns all available results until the source is exhausted. It does not promise every historical post or every profile that X does not expose.
Do I need a Twitter/X login or API key?
No. You do not provide Twitter/X cookies, sessions, credentials, or an API key.
Is this the official Twitter/X API?
No. This is an Apify Actor for public X data and structured dataset rows. Use the official API when you need its own contract.
📝 Changelog
v3.0 (25-10-2026)
searchQuerynow takes a list so one run can search several queries. Change a string such as"OpenAI"to["OpenAI"].- Network collection is now part of Profiles. Replace
target: "networkMembers"withtarget: "searchProfiles". Replace the input keynetworkTypewithprofileDiscoveryMethod, usingfollowers,following, orretweeters. ReplacenetworkProfileHandleswithprofileLookupTargetsfor followers and following. KeepretweeterPostUrlsOrIdsfor retweeters. - Removed
nearandgeocodebecause matching locations could not be confirmed. Remove these keys from saved inputs. There is no place-name or radius replacement.placeIdfilters posts with an attached X place ID; it does not search a radius. - Added available poll results, article text, mentions, attached places, and original-post details for reposts to post rows.
- Added available profile region, website, message settings, professional details, restrictions, and verification and username history. Past badge details are off by default. Set
includeArchivedVerificationHistorytotrueto collect them.archivedVerificationHistoryLimitdefaults to 3 per profile; use 0 for all available entries. Current verification details are still collected with past badge details off. - Direct post lookup now also accepts numeric post IDs in
directPostUrls. maxNbItemsToScrapenow accepts 0 to collect all available matches.- Runs now use 256 MB of memory by default, with a range of 256 to 512 MB.
- Reliability improvements.
v2.0 (01-09-2026)
- Added direct public profile lookup by handle, profile URL, or ID.
- Added public post retweeter collection as a profile network option.
- Added author-verification filters for post searches.
- Changed post fields
searchQueryandsourceUrl, and profile fieldsearchQuery, tosourceInputto show the value that found each row. Update exports to readsourceInput. - Removed post field
sourceTypeand profile fieldnetworkOwnerHandleas result details were simplified. These fields have no direct replacement.sourceInputgives the submitted value, not its type or a separate network owner. Update exports that use the removed fields. - Removed trend field
tweetVolume, with no replacement. Remove it from exports. - Replaced input
directPostIdswithdirectPostUrlsfor direct post lookup. SetpostDiscoveryMethodtodirectPosts. Convert each ID to a full X post URL and put the URLs indirectPostUrls. - Improved handling of X source failures by preserving valid rows and clearly reporting when a run cannot finish.
v1.0
- Made each run explicitly choose posts, profiles, network members, or trending topics.
- Added author locations and structured media details to post rows, with clearer profile and trend result views.
- Moved post media links from
imageUrls,videoUrls, andgifUrlsintomediaDetails. Update exports to read the media type and URL there. - Removed profile field
twitterUrl; useprofileUrlfor the public profile link. RemovedscrapedAtfrom profile and trend rows, with no replacement. Update exports that use these fields. - Removed inputs
withinandshouldIncludePromotedPosts, with no replacement. Remove these keys from saved inputs. - Improved recovery when public X posts or responses are unavailable.
v0.4
- Added direct post collection by URL or ID.
- Added conversation and quote discovery.
- Added follower and following network collection.
- Improved handling when Twitter/X returns incomplete responses.
v0.3
- Added post search URLs and advanced search syntax.
- Added Latest + Top search and link, media, and location filters.
- Added richer flat post fields.
- Added clearer handling for unsupported X URLs.
v0.2
- Added Search Profiles for query-based Twitter/X profile discovery with flat profile rows and search provenance.
v0.1
- Added Trending Topics and supported trend regions.
- Added grouped target inputs and pay-per-event pricing.
v0.0
- Initial release.
🆘 Support
For issues, questions, or feature requests, file a ticket and I'll fix or implement it in less than 24h 🫡
🔗 Related Actors
- Twitter Media Scraper gets source-hosted image, video, and GIF links from public X posts.
- Twitter Organization Affiliates Scraper maps public affiliate accounts connected to X organizations.
- X (Twitter) Community Top Posts Scraper collects public posts with X Community context.
- Twitter Article Scraper collects public X article text and publication details.
- X (Twitter) Replies Scraper collects public replies to selected posts.
Made with ❤️ by Maxime Dupré