Twitter (X) Scraper avatar

Twitter (X) Scraper

Pricing

from $0.70 / 1,000 public data

Go to Apify Store
Twitter (X) Scraper

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é

Maxime Dupré

Maintained by Community

Actor stats

2

Bookmarked

357

Total users

51

Monthly active users

7 hours ago

Last modified

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.

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

  1. Choose one target for the run.
  2. Add the matching search, profile, network, or trend input.
  3. Set any filters and maxNbItemsToScrape.
  4. 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.

FieldTypeWhat it does
targetstringRequired. Choose searchPosts, searchProfiles, or trendingTopics. The form prefills searchPosts; there is no schema default. Network members are Profiles options.
postDiscoveryMethodstringChoose searchQuery (default), directPosts, conversationIds, quotedPostIds, or sourceUrls. Other post-finding inputs are ignored.
searchQuerystring[]Uses plain text or advanced X search syntax. Each entry is one full query. The form prefills OpenAI; there is no schema default.
directPostUrlsstring[]Fetches the exact public posts at the submitted X or Twitter URLs or numeric IDs.
conversationIdsstring[]Finds public posts that belong to the submitted conversations.
quotedPostIdsstring[]Finds public posts that quote the submitted post IDs.
postSearchUrlsstring[] 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.
hashtagsstring[]Keeps posts that contain the submitted hashtags. Enter each tag without #.
fromUsersstring[]Keeps posts written by the submitted handles. Enter each handle without @.
authorVerificationstringChoose any (default), verified, or notVerified. Verification includes X Premium status.
mentionsstring[]Keeps posts that mention the submitted handles. Enter each handle without @.
toUsersstring[]Keeps posts addressed to the submitted handles. Enter each handle without @.
searchModestringChoose latest (schema default), top, or latestAndTop. The form prefills latestAndTop. The combined mode saves each post once.
startDatestringKeeps 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.
endDatestringKeeps posts on or before this date or UTC date-time. A date includes its full day. Omit for no end bound.
languagestringKeeps posts with this language code, such as en, es, fr, or ja.
placeIdstringSets an X or Twitter place ID.
linksstringChoose include (default), onlyLinks, or onlyWithoutLinks.
mediastringChoose include (default), onlyMedia, onlyImages, or onlyVideos. Videos include GIFs.
postKindsstring[]Choose one or more of originalPosts, quotePosts, replies, and reposts. The first three are the default.
minLikesintegerKeeps posts with at least this many likes. Minimum 0; omit for no likes filter.
minRepliesintegerKeeps posts with at least this many replies. Minimum 0; omit for no reply filter.
minRetweetsintegerKeeps posts with at least this many reposts. Minimum 0; omit for no repost filter.
sinceIdstringKeeps posts after this X post ID.
maxIdstringKeeps posts at or before this X post ID.
profileDiscoveryMethodstringChoose searchPhrases (default), directTargets, followers, following, or retweeters.
profileSearchQueriesstring[]Uses X or Twitter People search phrases to find matching public profiles.
profileLookupTargetsstring[]Sets handles, URLs, or numeric user IDs for directTargets, followers, or following. Enter handles without @.
retweeterPostUrlsOrIdsstring[]Sets public post URLs or IDs whose public retweeter profiles to collect.
includeArchivedVerificationHistorybooleanAdds available past badge details for Profiles. Default false. Current verification details remain available when off.
archivedVerificationHistoryLimitintegerWith 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.
trendRegionIdstringChooses one of the region IDs in the input form. Default 1 means Worldwide.
maxNbItemsToScrapeintegerStops 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

FieldTypeWhat it does
rowTypestringMarks this row as a post.
postIdstringGives the X post ID.
postUrlstringGives the public link to the X post.
postTextstringGives the full post text.
postDateTimestringGives the publication time as a date-time string.
languagestringGives the post language code.
postKindstring (optional)Says whether the post is original, a reply, a quote, or a repost, when available.
authorIdstring or nullGives the author profile ID, when available.
authorHandlestring or nullGives the author handle without @, when available.
authorDisplayNamestring or nullGives the author's display name, when available.
authorProfileUrlstring or nullGives the link to the author's X profile, when available.
authorBiostring or nullGives the author's public profile bio, when available.
authorLocationstring or nullGives the author's public profile location, when available.
authorAvatarUrlstring or nullGives the author's avatar image link, when available.
authorFollowersCountinteger or nullGives the author's follower count, when available.
authorFollowingCountinteger or nullGives the author's following count, when available.
authorCreatedAtstring or nullGives the author account creation time, when available.
authorIsVerifiedboolean or nullSays whether the author is verified, when available.
authorIsBlueVerifiedboolean or nullSays whether the author has X Premium verification, when available.
authorVerifiedTypestring or nullGives the author's verification type, when available.
nbLikesinteger or nullGives the number of likes, when available.
nbRepostsinteger or nullGives the number of reposts, when available.
nbRepliesinteger or nullGives the number of replies, when available.
quoteCountinteger or nullGives the number of quotes, when available.
nbViewsinteger or nullGives the number of views, when available.
nbBookmarksinteger or nullGives the number of bookmarks, when available.
mediaDetailsobject[]Lists each media file and its available details.
mediaDetails.idstring or nullGives the media ID, when available.
mediaDetails.altTextstring or nullGives the media alt text, when available.
mediaDetails.typestringGives the media kind.
mediaDetails.urlstringGives the main media file link.
mediaDetails.thumbnailUrlstring or nullGives a preview image link, when available.
mediaDetails.widthinteger or nullGives the media width in pixels, when available.
mediaDetails.heightinteger or nullGives the media height in pixels, when available.
mediaDetails.durationMsinteger or nullGives the media length in milliseconds, when available.
mediaDetails.aspectRatiostring or nullGives the media shape, when available.
mediaDetails.contentTypestring or nullGives the media file type, when available.
mediaDetails.variantsobject[]Lists other video file choices, when available.
mediaDetails.variants.urlstringGives a video choice link.
mediaDetails.variants.contentTypestring or nullGives a video choice file type, when available.
mediaDetails.variants.bitrateinteger or nullGives a video choice bitrate, when available.
hashtagsstring[]Lists hashtags without #.
linkEntitiesstring[]Lists usable destination links found in the post.
quotedPostIdstring or nullGives the quoted post ID, when available.
quotedPostTextstring or nullGives the quoted post text, when available.
quotedAuthorHandlestring or nullGives the quoted post author's handle, when available.
replyToHandlestring or nullGives the handle this post replies to, when available.
replyToPostIdstring or nullGives the post ID this post replies to, when available.
conversationIdstring or nullGives the conversation ID, when available.
inReplyToUserIdstring or nullGives the replied-to user ID, when available.
isPinnedboolean or nullSays whether X marks the post as pinned, when available.
sourcestring or nullGives the posting client label, when available.
sourceInputstring or nullGives the submitted query, URL, ID, or similar value that first found the post.
resultPositioninteger or nullGives the post's place in its source results, when available.
pollobject or nullGives available poll choices and vote details.
poll.choicesobject[]Lists poll choices in their shown order.
poll.choices.labelstringGives the choice text.
poll.choices.voteCountinteger or nullGives X's vote count for the choice.
poll.countsAreFinalboolean or nullSays whether X marks the counts as final.
poll.closesAtstring or nullGives the poll closing time.
articleobject or nullGives available X article content linked to the post.
article.titlestring or nullGives the article title.
article.textstring or nullGives the article text.
article.urlstring or nullGives the public article link.
article.publishedAtstring or nullGives the article publication time.
article.updatedAtstring or nullGives the last change time.
repostedPostobject or nullGives the original post shared by a repost.
repostedPost.postIdstring or nullGives the original post ID.
repostedPost.postUrlstring or nullGives the original post link.
repostedPost.postTextstring or nullGives the original post text.
repostedPost.postDateTimestring or nullGives the original publication time.
repostedPost.authorIdstring or nullGives the original author's ID.
repostedPost.authorHandlestring or nullGives the original author's handle.
repostedPost.authorDisplayNamestring or nullGives the original author's display name.
mentionsobject[]Lists accounts mentioned in the post.
mentions.profileIdstring or nullGives the mentioned account ID.
mentions.handlestring or nullGives the mentioned handle without @.
mentions.displayNamestring or nullGives the mentioned account name.
placeobject or nullGives place details attached to the post by X.
place.idstring or nullGives the X place ID.
place.namestring or nullGives the place name.
place.fullNamestring or nullGives the full place name.
place.typestring or nullGives the kind of place.
place.countrystring or nullGives the country name.
place.countryCodestring or nullGives the country code.
place.boundingBoxobject or nullGives the area around the place.
place.boundingBox.typestring or nullGives the geometry type.
place.boundingBox.coordinatesnumber[][][]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.

FieldTypeWhat it does
rowTypestringMarks this row as a profile.
profileIdstringGives the profile ID.
profileUrlstringGives the public link to the X profile.
handlestringGives the profile handle without @.
displayNamestringGives the profile display name.
biostring or nullGives the public profile bio, when available.
createdAtstring or nullGives the account creation time, when available.
locationstring or nullGives the public profile location, when available.
avatarUrlstring or nullGives the profile avatar image link, when available.
bannerUrlstring or nullGives the profile banner image link, when available.
followersCountinteger or nullGives the public follower count, when available.
followingCountinteger or nullGives the public following count, when available.
postsCountinteger or nullGives the public post count, when available.
likesCountinteger or nullGives the public like count, when available.
isVerifiedboolean or nullSays whether X marks the profile as verified.
pinnedPostIdsstring[]Gives the shown pinned post IDs.
sourceInputstring or nullGives the submitted query, handle, URL, ID, or similar value that first found the profile.
networkTypestring or nullGives followers, following, or retweeters when a network run found the profile.
resultPositioninteger or nullGives the profile's place in the source results, when available.
websiteUrlstring or nullGives the profile website link.
mediaCountinteger or nullGives the number of media posts.
listedCountinteger or nullGives the number of public lists that include the profile.
isBlueVerifiedboolean or nullSays whether the profile has X Premium verification.
verifiedTypestring or nullGives the verification type.
professionalobject or nullGives professional account details.
professional.typestring or nullGives the professional account type.
professional.categoriesstring[]Lists professional categories.
restrictionsobject or nullGives public access limits.
restrictions.isProtectedboolean or nullSays whether posts are limited to approved followers.
restrictions.withheldCountriesstring[]Lists country codes where X withholds the account.
restrictions.withheldScopestring or nullGives the scope of the access limit.
canReceiveDirectMessagesboolean or nullSays whether the profile accepts direct messages.
accountRegionobject or nullGives public account-region details.
accountRegion.countrystring or nullGives the stated country or region.
accountRegion.accuracystring or nullGives X's description of region accuracy.
usernameHistoryobject[]Lists available past username details.
usernameHistory.handlestring or nullGives a past handle without @.
usernameHistory.changedAtstring or nullGives the reported username change time.
verificationHistoryobject[]Lists current verification details and any requested past badge entries. Past entries depend on the history switch and limit.
verificationHistory.verifiedTypestring or nullGives the verification type for an entry.
verificationHistory.verifiedAtstring or nullGives 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

FieldTypeWhat it does
rowTypestringMarks this row as a trend.
trendNamestringGives the topic name.
trendRankintegerGives its rank in the region.
trendQuerystring or nullGives the search query, when available.
trendSearchUrlstring or nullGives an X search link for the trend, when available.
regionIdstringGives the selected trend region ID.
regionNamestringGives the selected trend region name.
regionCountrystring or nullGives the country or global label for the region.
regionCountryCodestring or nullGives 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)

  • searchQuery now 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" with target: "searchProfiles". Replace the input key networkType with profileDiscoveryMethod, using followers, following, or retweeters. Replace networkProfileHandles with profileLookupTargets for followers and following. Keep retweeterPostUrlsOrIds for retweeters.
  • Removed near and geocode because matching locations could not be confirmed. Remove these keys from saved inputs. There is no place-name or radius replacement. placeId filters 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 includeArchivedVerificationHistory to true to collect them. archivedVerificationHistoryLimit defaults 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.
  • maxNbItemsToScrape now 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 searchQuery and sourceUrl, and profile field searchQuery, to sourceInput to show the value that found each row. Update exports to read sourceInput.
  • Removed post field sourceType and profile field networkOwnerHandle as result details were simplified. These fields have no direct replacement. sourceInput gives 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 directPostIds with directPostUrls for direct post lookup. Set postDiscoveryMethod to directPosts. Convert each ID to a full X post URL and put the URLs in directPostUrls.
  • 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, and gifUrls into mediaDetails. Update exports to read the media type and URL there.
  • Removed profile field twitterUrl; use profileUrl for the public profile link. Removed scrapedAt from profile and trend rows, with no replacement. Update exports that use these fields.
  • Removed inputs within and shouldIncludePromotedPosts, 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 🫡

Made with ❤️ by Maxime Dupré