# X Community Activity & Member Finder (`dataspryva/x-community-activity-and-member-finder`) Actor

Collect public X Community posts, about info, rules and members with no login required. Get the community profile, member count, ranked posts with engagement metrics, authors and media.

- **URL**: https://apify.com/dataspryva/x-community-activity-and-member-finder.md
- **Developed by:** [Dataspryva](https://apify.com/dataspryva) (community)
- **Categories:** Social media, Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.49 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## X Community Activity & Member Finder

Collect a public X Community's profile, rules, topic, creator, moderators, facepile and active post authors, together with its top and media posts. No login, cookies, API key or browser is needed: every request reads the same public pages and guest endpoints a logged-out visitor gets.

### What you get

- **Community profile:** name, description, member count, creation date, banner, topic, join policy, NSFW flag and question when present
- **Rules:** rule names plus `rulesDetailed` with each rule's description
- **Creator and moderators:** the creator and the full moderator list X exposes on the public About tab, expanded with public profile details
- **Facepile:** the publicly featured member previews and their image URLs
- **Active members:** authors of the collected posts, added as member rows with role `active` — the cookieless substitute for a full member directory
- **Top and media posts:** merge X's ranked community feed, the media grid and the guest community timelines, de-duplicated by post ID
- **Full post detail:** text, timestamps, language, engagement counts, author snapshot, media, hashtags, mentions, links, quoted posts, polls and cards
- **Filters and sorts:** `postSource` all/top/media, sort top/latest/most liked/most viewed, date range, minimum likes/views/replies/retweets, language and verified authors
- **Honest output:** every row has a `type` (`community`, `post`, `member` or `status`); problems produce a `status` row instead of failing the run, and empty fields are omitted — the dataset never contains `null`, `""`, `[]` or `{}`

### Input

| Field | Type | Default | Description |
|---|---|---|---|
| `communityUrls` | array | – | **Required.** Community links or numeric IDs. Accepts `x.com`, `www.x.com` and `twitter.com` links. |
| `postSource` | select | `all` | `all` merges the top and media feeds; `top` collects the ranked feed; `media` collects posts with photos or videos. |
| `sort` | select | `top` | `top` keeps X's popular order; `latest`, `mostLiked` and `mostViewed` re-sort the collected rows. |
| `maxPosts` | integer | `50` | Upper bound per community (1–1000). X's public ceiling is roughly 1–66 posts (typically 20–66), so a larger number is not a guarantee. |
| `includeAbout` | boolean | `true` | Add the community row with profile, rules, topic, creator and moderators. |
| `includeMembers` | boolean | `false` | Add member rows for the creator, moderators and facepile. |
| `includeActiveMembers` | boolean | `false` | Add authors of the collected posts as member rows with role `active`. |
| `maxMembers` | integer | `50` | Cap on member rows per community (1–200) when a member option is on. |
| `dateFrom` / `dateTo` | date | – | Keep posts inside this date range. |
| `minimumLikes` | integer | – | Keep posts with at least this many likes. |
| `minimumViews` | integer | – | Keep posts with at least this many views. |
| `minimumReplies` | integer | – | Keep posts with at least this many replies. |
| `minimumRetweets` | integer | – | Keep posts with at least this many retweets. |
| `language` | select | `any` | Keep posts in one of 40 common languages. |
| `authorVerifiedOnly` | boolean | `false` | Keep posts by verified or blue-verified authors. |
| `proxyConfiguration` | object | – | Optional; the actor works without a proxy and uses a direct connection by default. |

#### Example: community overview plus top posts

```json
{
  "communityUrls": ["https://x.com/i/communities/1493446837214187523"],
  "postSource": "all",
  "sort": "top",
  "maxPosts": 50,
  "includeAbout": true
}
```

#### Example: media posts and active members

```json
{
  "communityUrls": ["1493446837214187523"],
  "postSource": "media",
  "sort": "mostLiked",
  "includeActiveMembers": true,
  "maxMembers": 25,
  "minimumViews": 500
}
```

#### Example: two communities, verified authors, date window

```json
{
  "communityUrls": [
    "https://x.com/i/communities/1493446837214187523",
    "https://twitter.com/i/communities/1539231166569410560"
  ],
  "authorVerifiedOnly": true,
  "dateFrom": "2026-01-01",
  "dateTo": "2026-12-31",
  "maxPosts": 100
}
```

### Output

#### Community row (`type: "community"`)

`id`, `url`, `name`, `description`, `memberCount`, `createdAt`, `bannerUrl`, `topic`, `question`, `joinPolicy`, `isNsfw`, `rules`, `rulesDetailed`, `trendingHashtags`, `creator`, `moderators`, `moderatorCount`, `memberFacepile`, `memberPreviewImageUrls`, `collectedPostCount`, `uniquePostCount`, `sourcePostCounts`, `collectedAt`.

#### Post row (`type: "post"`)

`id`, `url`, `text`, `createdAt`, `language`, `replyCount`, `retweetCount`, `likeCount`, `quoteCount`, `bookmarkCount`, `viewCount`, `engagementRate`, `isReply`, `isQuote`, `isRetweet`, `isNoteTweet`, `conversationId`, `inReplyToTweetId`, `inReplyToUserId`, `inReplyToUsername`, `hashtags`, `mentions`, `urls`, `cashtags`, `media`, `quotedTweet`, `quotedTweetId`, `poll`, `card`, `possiblySensitive`, `author`, `communityId`, `communityName`, `feed`, `collectedAt`.

`feed` records which surface produced the row (`top` or `media`). `engagementRate` is `(likes + retweets + replies) / followers` as a percentage and appears only when the author's follower count is known.

#### Member row (`type: "member"`)

`id`, `username`, `name`, `bio`, `followers`, `following`, `postCount`, `mediaCount`, `profileImageUrl`, `bannerUrl`, `profileUrl`, `accountCreatedAt`, `isBlueVerified`, `verified`, `verifiedType`, `isProtected`, `location`, `website`, `role`, `communityId`, `communityName`, `collectedAt`.

`role` is `creator`, `moderator`, `member` (facepile) or `active` (post author). `accountCreatedAt` is the account's public creation date — X does not expose the date a member joined the community.

#### Status row (`type: "status"`)

`status` is one of `noInput`, `invalidLink`, `notFound`, `rateLimited`, `noMatchingPosts`, `membersUnavailable`, `sourceChanged` or `error`; `message` explains it.

### Public limits

- **Roughly 1–66 posts per community (typically 20–66).** X shows only the ranked and media slices to logged-out visitors, with no working cursor. The actor returns the union of every public surface and never invents rows to fill `maxPosts`.
- **No live latest feed.** `/latest` returns zero rows for guests; `sort: "latest"` orders the collected top/media posts newest first.
- **No full member directory.** `/members` redirects to login. The actor returns the creator, the exposed moderator list, the facepile and the authors of collected posts.
- **No community or in-community search.** Those routes require login and return no cookieless data.
- **No cookies, login or API key.** There is no credential input, and every field comes from public data.

### FAQ

**Do I need an X account, cookies or a developer key?**  No. The actor reads public community pages and guest endpoints without any credential input. If a saved task still sends `cookies`, they are ignored with a log message.

**How many posts can I get per community?**  Roughly 1–66 unique posts, typically 20–66, depending on the community. `maxPosts` is an upper bound, not a promise, and filters can reduce the result further.

**Why do I get fewer posts than `maxPosts`?**  X exposes only its ranked and media slices to logged-out visitors and has no working public cursor. The actor returns everything reachable and never fabricates rows.

**What is the difference between top, media and latest?**  `postSource: "top"` collects the ranked feed, `"media"` collects posts with photos or videos and `"all"` merges both. `sort: "latest"` re-orders the collected posts by date because X's live latest feed is login-gated.

**Which members are included?**  The creator, the moderator list shown on the public About tab, the facepile and — when enabled — the authors of the collected posts. A full member directory needs login, so it is not offered.

**Why are dates or counts missing on a few rows?**  Some media-grid rows only expose their date and counts through a second public guest timeline. The actor merges those twins automatically and still omits any value X genuinely does not publish.

**Can I collect a private or NSFW community?**  Public communities work, including NSFW-flagged ones. Private, deleted or login-only communities return a `notFound`, `rateLimited` or `sourceChanged` status row.

**How fresh is the data?**  Live — every run reads X at request time. Schedule the actor for hourly or daily monitoring.

**How do I use the results?**  Download the dataset from the run page, or consume it through the Apify API, webhooks, Zapier, Make, Google Sheets or any other integration.

**Is this affiliated with X?**  No. It is an independent third-party actor that reads publicly available community data.

# Actor input Schema

## `communityUrls` (type: `array`):

Paste the links of the X communities you want to collect. Community links look like https://x.com/i/communities/1493446837214187523. You can also paste the numeric community ID on its own.

## `postSource` (type: `string`):

Which public post feed to collect. All merges the popular and media feeds; Top keeps X's ranked posts; Media keeps posts with photos or videos.

## `sort` (type: `string`):

How to order the collected posts. Top keeps X's popular order; Latest and Most liked/Viewed re-sort the collected rows.

## `maxPosts` (type: `integer`):

Upper bound on posts per community. X exposes roughly 1-66 unique public posts per community (typically 20-66), so a larger number is not a guarantee.

## `includeAbout` (type: `boolean`):

Add a community row with the name, description, member count, creation date, banner, topic, join policy and rules.

## `includeMembers` (type: `boolean`):

Add one row per publicly visible member: the creator, the full exposed moderator list and the community facepile, expanded with public profile details.

## `includeActiveMembers` (type: `boolean`):

Add the authors of the collected posts as member rows with role active. This is the cookieless substitute for a full member directory, which requires login on X.

## `maxMembers` (type: `integer`):

Cap on member rows per community when either member option is on. The creator and moderators are kept first.

## `dateFrom` (type: `string`):

Only keep posts created on or after this date.

## `dateTo` (type: `string`):

Only keep posts created on or before this date.

## `minimumLikes` (type: `integer`):

Only keep posts with at least this many likes.

## `minimumViews` (type: `integer`):

Only keep posts with at least this many views.

## `minimumReplies` (type: `integer`):

Only keep posts with at least this many replies.

## `minimumRetweets` (type: `integer`):

Only keep posts with at least this many retweets.

## `language` (type: `string`):

Only keep posts written in this language.

## `authorVerifiedOnly` (type: `boolean`):

Keep only posts whose author is verified or blue-verified.

## `proxyConfiguration` (type: `object`):

Optional. The actor works without a proxy; use one only for large or repeated runs.

## Actor input object example

```json
{
  "communityUrls": [
    "https://x.com/i/communities/1493446837214187523",
    "1493446837214187523"
  ],
  "postSource": "all",
  "sort": "top",
  "maxPosts": 3,
  "includeAbout": true,
  "includeMembers": false,
  "includeActiveMembers": false,
  "maxMembers": 10,
  "language": "any",
  "authorVerifiedOnly": false
}
```

# Actor output Schema

## `records` (type: `string`):

All collected rows: one community row, one row per post, optional member rows, and status rows for problems.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "communityUrls": [
        "https://x.com/i/communities/1493446837214187523"
    ],
    "postSource": "all",
    "sort": "top",
    "maxPosts": 3,
    "includeAbout": true,
    "includeMembers": false,
    "includeActiveMembers": false,
    "maxMembers": 10,
    "language": "any",
    "authorVerifiedOnly": false
};

// Run the Actor and wait for it to finish
const run = await client.actor("dataspryva/x-community-activity-and-member-finder").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "communityUrls": ["https://x.com/i/communities/1493446837214187523"],
    "postSource": "all",
    "sort": "top",
    "maxPosts": 3,
    "includeAbout": True,
    "includeMembers": False,
    "includeActiveMembers": False,
    "maxMembers": 10,
    "language": "any",
    "authorVerifiedOnly": False,
}

# Run the Actor and wait for it to finish
run = client.actor("dataspryva/x-community-activity-and-member-finder").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "communityUrls": [
    "https://x.com/i/communities/1493446837214187523"
  ],
  "postSource": "all",
  "sort": "top",
  "maxPosts": 3,
  "includeAbout": true,
  "includeMembers": false,
  "includeActiveMembers": false,
  "maxMembers": 10,
  "language": "any",
  "authorVerifiedOnly": false
}' |
apify call dataspryva/x-community-activity-and-member-finder --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,dataspryva/x-community-activity-and-member-finder"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/426ZUFce9JRGaj4Mc/builds/YF4pzdKaKvCueXzye/openapi.json
