X (Twitter) Community Top Posts Scraper avatar

X (Twitter) Community Top Posts Scraper

Pricing

from $0.10 / 1,000 community posts

Go to Apify Store
X (Twitter) Community Top Posts Scraper

X (Twitter) Community Top Posts Scraper

Find public X Community posts by one keyword or phrase, or from public Community IDs or URLs. Choose Top or Latest ranking and get structured rows with post text, community, author, engagement, media, and source links.

Pricing

from $0.10 / 1,000 community posts

Rating

0.0

(0)

Developer

Maxime Dupré

Maxime Dupré

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

🏘️ See what X Communities are posting

Researchers, marketers, and developers can use this X (Twitter) Community Top Posts Scraper to find public X Community posts with one keyword or phrase, or public Community IDs or URLs. It returns structured rows with post text, community details, author context, engagement counts, media links, and source links, so you can study conversations and compare popular or recent posts.

Use cases

🧾 See each post with its community context

Each saved row is a public X Community post. It keeps the post ID, URL, text, publish time, source community, author context, engagement counts, media links, language, posting source, conversation references, sensitivity flag, and quoted-post context when the source exposes them.

▶️ Choose how to find the posts

Choose Keyword to search across public X Communities, or Community IDs or URLs to collect from specific public Communities. Choose Top for high-engagement posts or Latest for newest posts first. Page and cursor handling stay inside the Actor. Leave maxItems empty to return all available posts until the source is exhausted.

⚙️ Input

Input fields

FieldTypeWhat it does
discoveryMethodstringChooses keyword to search across public X Communities or community to use Community IDs or URLs. Only fields for the selected method are used.
keywordstringSearches public X Communities with one keyword or phrase. Do not enter a list.
communityIdsstring[]Accepts one or more public X Community IDs or canonical Community URLs, one value per line.
rankingstringUses top for high-engagement posts or latest for newest posts first.
maxItemsintegerStops after this many posts. Leave it empty to return all available posts until the source is exhausted.

Example input

This is the public input from the successful beta default-input run:

{
"discoveryMethod": "keyword",
"keyword": "AI startups",
"ranking": "top",
"maxItems": 4
}

🧾 Output

The run exposes datasetItems as a string link that opens the collected posts as JSON rows.

Every dataset row uses the community post shape below. Optional fields are left out when the public source does not expose them.

Community post row

FieldTypeWhat it does
postIdstring (required)Stable ID for the post from X.
postUrlstring (optional)Canonical X URL for opening the post.
textstring (required)Text published in the post.
publishedAtstring (required)Time when the post was published, in ISO 8601 format.
communityobject (required)Public X Community that contains the post.
community.idstring (required)Stable ID for the public X Community.
community.namestring (optional)Name of the public X Community.
authorobject (optional)Author details exposed with the post.
author.idstring (required when present)Stable ID for the post author.
author.handlestring (required when present)X handle of the post author, without @.
author.displayNamestring (required when present)Display name of the post author.
author.isVerifiedboolean (optional)Whether X marks the author as verified.
author.followersCountinteger (optional)Number of followers shown for the author.
author.profileImageUrlstring (optional)URL of the author's profile image.
engagementobject (optional)Engagement counts shown for the post.
engagement.likesinteger (optional)Number of likes shown for the post.
engagement.repostsinteger (optional)Number of reposts shown for the post.
engagement.repliesinteger (optional)Number of replies shown for the post.
engagement.quotesinteger (optional)Number of quote posts shown for the post.
engagement.bookmarksinteger (optional)Number of bookmarks shown for the post.
engagement.viewsinteger (optional)Number of views shown for the post.
mediaobject[] (optional)Photos, videos, or GIFs attached to the post.
media[].typestringType of the attached media: photo, video, or animated_gif.
media[].urlstringDirect URL for the attached media file.
media[].thumbnailUrlstring (optional)URL for a thumbnail of the attached media.
media[].widthinteger (optional)Width of the media in pixels.
media[].heightinteger (optional)Height of the media in pixels.
media[].durationSecondsnumber (optional)Length of the video in seconds, when shown by the source.
media[].variantsobject[] (optional)Other source URLs and formats for the media.
media[].variants[].urlstringDirect URL for a media variant.
media[].variants[].contentTypestring (optional)Internet media type for the variant.
media[].variants[].bitrateinteger (optional)Bitrate of the variant in bits per second.
media[].variants[].widthinteger (optional)Width of the variant in pixels.
media[].variants[].heightinteger (optional)Height of the variant in pixels.
languagestring (optional)Language code shown for the post.
postingSourcestring (optional)App or service shown as the source of the post.
conversationobject (optional)Conversation and reply references shown for the post.
conversation.conversationIdstringStable ID for the conversation containing the post.
conversation.inReplyToPostIdstring (optional)ID of the post this post replies to, when shown by the source.
isSensitiveboolean (optional)Whether the source marks the post as sensitive.
quotedPostobject (optional)Quoted post details shown by the source.
quotedPost.postIdstring (required when present)Stable ID for the quoted post.
quotedPost.postUrlstring (optional)Canonical X URL for opening the quoted post.
quotedPost.textstring (optional)Text shown for the quoted post.
quotedPost.authorobject (optional)Author details shown for the quoted post.
quotedPost.author.idstring (required when present)Stable ID for the quoted post author.
quotedPost.author.handlestring (required when present)X handle of the quoted post author, without @.
quotedPost.author.displayNamestring (required when present)Display name of the quoted post author.
quotedPost.author.isVerifiedboolean (optional)Whether X marks the quoted author as verified.
quotedPost.author.followersCountinteger (optional)Number of followers shown for the quoted author.
quotedPost.author.profileImageUrlstring (optional)URL of the quoted author's profile image.
quotedPost.engagementobject (optional)Engagement counts shown for the quoted post.
quotedPost.engagement.likesinteger (optional)Number of likes shown for the quoted post.
quotedPost.engagement.repostsinteger (optional)Number of reposts shown for the quoted post.
quotedPost.engagement.repliesinteger (optional)Number of replies shown for the quoted post.
quotedPost.engagement.quotesinteger (optional)Number of quote posts shown for the quoted post.
quotedPost.engagement.bookmarksinteger (optional)Number of bookmarks shown for the quoted post.
quotedPost.engagement.viewsinteger (optional)Number of views shown for the quoted post.

Example output

This complete row comes from the successful current-beta default-input run:

{
"postId": "1980908685468611013",
"postUrl": "https://x.com/i/status/1980908685468611013",
"text": "Good morning fam \n\nPrivacy-first AI is finally real. 🔒🤖\n\n@zama Concrete ML lets you train/run ML models directly on encrypted data — the model never sees raw inputs, and servers can’t leak or misuse info. 🧠🔐\n\nBuilt on the same FHE foundation that powers FHEVM. ⚙️ https://t.co/IV1n0mM7kY",
"publishedAt": "2025-10-22T08:06:48.000Z",
"community": {
"id": "1938688998379266124",
"name": "Zama Community"
},
"author": {
"id": "1886863054987517954",
"handle": "CryptoDoctor06",
"displayName": "Doctor",
"isVerified": false,
"followersCount": 8889,
"profileImageUrl": "https://pbs.twimg.com/profile_images/1969689999365885952/4WefRm5Q_normal.jpg"
},
"engagement": {
"likes": 135,
"reposts": 2,
"replies": 133,
"quotes": 0,
"bookmarks": 5,
"views": 1778
},
"media": [
{
"type": "photo",
"url": "https://pbs.twimg.com/media/G32Z8t2WQAAx9er.jpg",
"thumbnailUrl": "https://pbs.twimg.com/media/G32Z8t2WQAAx9er.jpg",
"width": 1024,
"height": 1024
}
],
"language": "en",
"postingSource": "Twitter for Android",
"conversation": {
"conversationId": "1980908685468611013"
},
"isSensitive": false
}

💳 Pricing

This Actor uses pay-per-event pricing. The primary event applies to each public Community post saved to the dataset. Use maxItems to choose how many posts to save, or leave it empty to return all available posts until the source is exhausted. The current price is shown in Apify's Pricing tab.

🔌 Integrations

Video guide

Use the Apify dataset or API to read the machine-readable post rows in your workflow.

❓ FAQ

Can I search a private or members-only Community?

No. The Actor works with public X Communities. Private, restricted, deleted, or unavailable Communities are outside scope.

What should I enter for a keyword run?

Enter one keyword or phrase. A run does not support a list of separate keyword searches.

When should I use Community IDs or URLs?

Use them when you already know which public Communities to read. Add one value per line, using a Community ID or a canonical public Community URL.

What is the difference between Top and Latest?

top asks for high-engagement posts. latest asks for newest posts first. The public source controls which posts are available.

Can I use a canonical Community URL?

Yes. Add a URL such as https://x.com/i/communities/1844947700867101063 in the Community IDs or URLs field.

Does the Actor collect replies?

It returns reply references and counts when the source shows them. It does not collect full reply threads or reply bodies.

Does it download media files?

No. It returns media references and available media metadata. It does not download or host media files.

Why can a field be missing?

Optional values are left out when the public source does not expose them.

Do I need an X login or API key?

No buyer-supplied X login or API credentials are needed.

📝 Changelog

0.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é