# X (Twitter) Affiliates & Subscriptions Scraper (`arjun_code/x-twitter-affiliates-subscriptions`) Actor

Export organization affiliates and publicly visible creator subscriptions from X/Twitter usernames, profile links, or user IDs. Get bios, follower counts, verification and affiliation badges. Run batch lookups and export CSV or JSON without your own X login or API key.

- **URL**: https://apify.com/arjun_code/x-twitter-affiliates-subscriptions.md
- **Developed by:** [Arjun Data](https://apify.com/arjun_code) (community)
- **Categories:** Social media, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 related account profiles

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
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

Export **X (Twitter) organization affiliates and publicly visible creator subscriptions** in one workflow. Enter usernames, profile links, or user IDs to get account profiles with bios, audience counts, verification and affiliation badges—without supplying your own X login, cookies, API key, or proxy.

To try it, keep the prefilled **SpaceX** account and click **Start**. Download the results as CSV, Excel, or JSON, or connect the Actor to your reporting workflow through the Apify API.

### What can you collect?

| Choose | What you get | Useful for |
| --- | --- | --- |
| **Affiliated accounts** — default | Profiles connected to an organization through X's affiliation feature | Brand account audits, organization network research, and discovering related projects or people |
| **Subscribed creators** | Creators the input account publicly subscribes to | Researching public creator-support relationships |
| **Both** | Both lists, identified separately in the results | Exporting the two relationship types in one run |

Affiliated accounts are not necessarily employees. Subscribed creators are **not ordinary following accounts** and are **not the people who subscribe to the input account**.

### How to use

1. Enter one or more **X accounts**, one per line. Use a username, `@handle`, full profile link, or numeric user ID; formats can be mixed.
2. Under **What would you like to collect?**, keep **Affiliated accounts**, or choose **Subscribed creators** or **Both**.
3. Set **Profiles per type (0 = all available)**. The default is 100; set 0 to collect all profiles X makes available.
4. Click **Start**, then open **Output**. Use the **Accounts** view for a quick overview and **All fields** or a JSON export for the complete data.

With **Both** and a limit of 100, one input account can produce up to 100 affiliated accounts **plus** 100 subscribed creators. The limit applies separately to every input account and relationship type.

### Input

| Parameter | Form label | Default | How to use it |
| --- | --- | --- | --- |
| `accounts` | X accounts | Prefilled with `SpaceX` | Required. Accepts `SpaceX`, `@SpaceX`, `https://x.com/SpaceX`, or `34743251`. Repeated references to the same account are processed once. |
| `collectionType` | What would you like to collect? | `affiliates` | Use `affiliates`, `creator_subscriptions`, or `both`. |
| `maxResultsPerAccount` | Profiles per type (0 = all available) | `100` | A whole number of 0 or more. Applies per input account and per selected type, not to the run as a whole. |

#### Export organization affiliates

```json
{
  "accounts": ["SpaceX"],
  "collectionType": "affiliates",
  "maxResultsPerAccount": 100
}
```

#### Export public creator subscriptions

```json
{
  "accounts": ["https://x.com/SpaceX"],
  "collectionType": "creator_subscriptions",
  "maxResultsPerAccount": 0
}
```

To collect several source accounts, add them to `accounts`, for example `["SpaceX", "@OpenAI", "783214"]`. Choose `both` if you need both relationship lists.

### Results and exports

Each successful row represents **one related account for one source account and relationship type**. Source fields identify the account you entered; the remaining profile fields describe the affiliated account or subscribed creator.

| Field group | Included data |
| --- | --- |
| Source and relationship | Requested input, relationship type, source user ID, username, name, profile link, counts reported by X, and whether subscriptions are hidden |
| Identity and bio | User ID, username, name, bio, location, account creation time, bio language, native entities, bio links, mentions, and hashtags |
| Audience and activity | Followers, following, posts, media posts, likes given, and Lists containing the account |
| Verification and affiliation | Verification flags and type, organization name, affiliation link, badge image, and account label |
| Profile and professional details | Website, avatar, banner, avatar shape, default-avatar flag, professional type and categories, and pinned Tweet IDs |
| Other available X fields | Protected-account status, sensitive-content flag, media-tagging permission, profile notice, subscription eligibility, and withholding information |

Dates use ISO 8601 UTC, such as `2007-10-17T02:31:18Z`. `favourites_count` means **likes given by the account**, not likes received. `verified` and `is_blue_verified` are separate X fields; a blue-verified account can have `verified: false`.

Missing text is an empty string and missing lists are empty arrays. Where the creator-subscription response does not supply `listed_count` or `default_profile_image`, these are `null`, not assumed zero or false.

The **Accounts** view keeps 12 key columns: status, requested account, source account, relationship, avatar, username, name, profile link, bio, followers, blue verification, and affiliation. Open **Status rows** for explanation messages, or **All fields** for the complete Dataset. No exported fields are removed by the compact view.

A run summary is available under **Storage → Key-value store → RUN_SUMMARY**. No private messages or the collector account's own follow, block, mute, or subscription state are included.

#### Example result — all successful-row fields

This is a real affiliated-account result from the SpaceX example. Profile values can change between runs.

```json
{
  "status": "success",
  "relationship_type": "affiliates",
  "requested_identifier": "SpaceX",
  "source_user_id": "34743251",
  "source_screen_name": "SpaceX",
  "source_name": "SpaceX",
  "source_profile_url": "https://x.com/SpaceX",
  "source_business_affiliates_count": 16,
  "source_creator_subscriptions_count": 1,
  "source_has_hidden_subscriptions": false,
  "user_id": "9490952",
  "screen_name": "chadgibbs88",
  "name": "Chad Gibbs",
  "profile_url": "https://x.com/chadgibbs88",
  "description": "Chad Gibbs - @SpaceX employee working on @Starlink",
  "description_entities": {
    "description": {},
    "url": {
      "urls": [
        {
          "display_url": "Starlink.com",
          "expanded_url": "http://Starlink.com",
          "indices": [
            0,
            23
          ],
          "url": "https://t.co/bMhXzjWTfo"
        }
      ]
    }
  },
  "profile_description_language": "en",
  "bio_urls": [],
  "bio_mentions": [],
  "bio_hashtags": [],
  "location": "Los Angeles",
  "created_at": "2007-10-17T02:31:18Z",
  "website_url": "http://Starlink.com",
  "profile_image_url": "https://pbs.twimg.com/profile_images/1382154659020763138/93ebzelh_normal.jpg",
  "profile_banner_url": "https://pbs.twimg.com/profile_banners/9490952/1708968789",
  "profile_image_shape": "Circle",
  "default_profile_image": false,
  "followers_count": 9559,
  "following_count": 160,
  "tweets_count": 412,
  "media_count": 25,
  "favourites_count": 187,
  "listed_count": 66,
  "verified": false,
  "is_blue_verified": true,
  "verified_type": "",
  "protected": false,
  "possibly_sensitive": false,
  "can_media_tag": true,
  "profile_interstitial_type": "",
  "super_follow_eligible": false,
  "withheld_scope": "",
  "withheld_description": "",
  "professional_type": "",
  "professional_categories": [],
  "pinned_tweet_ids": [],
  "account_label": "",
  "affiliation_name": "SpaceX",
  "affiliation_url": "https://twitter.com/SpaceX",
  "affiliation_badge_url": "https://pbs.twimg.com/profile_images/1697749409851985920/HbrI04tM_bigger.jpg"
}
```

### Availability and empty results

Only information X currently makes available can be exported. An account can hide its creator subscriptions, and the number of available profiles can be lower than the count shown on X. A limit of 0 means all profiles available through X pagination at the time of the run—not a guarantee that the displayed total can be exported.

When profiles cannot be returned, the Dataset includes a readable status and message:

| Status | Meaning |
| --- | --- |
| `no_results` | No visible profiles were returned for the selected relationship. |
| `hidden` | The source account hides its creator subscriptions. |
| `not_found` | The source account does not exist or is unavailable. |
| `invalid_input` | An input value is not a valid account reference. |
| `request_failed` | The request could not be completed after retries. |

A problem with one account does not prevent other valid accounts from being processed. Invalid parameter types or values may be rejected by Apify before a run starts; correct the highlighted input and try again.

### Pricing

Pay per event: both affiliated-account profiles and publicly visible subscribed-creator profiles use the same result price. Platform usage is included for standard runs.

| Apify tier | Per successful profile | Per 1,000 successful profiles |
| --- | ---: | ---: |
| FREE | $0.0020 | $2.00 |
| BRONZE | $0.0016 | $1.60 |
| SILVER | $0.0013 | $1.30 |
| GOLD | $0.0010 | $1.00 |
| PLATINUM | $0.0010 | $1.00 |
| DIAMOND | $0.0010 | $1.00 |

A startup event costs **$0.00150**. At the default 512 MB, it is charged once per run; above 1 GB, Apify increases the number of startup events with the selected memory.

Only successfully saved profiles trigger the `related-profile-result` event. Status-only rows for empty, hidden, unavailable, invalid, or failed inputs do not trigger a result charge. The startup charge still applies when a run starts, even if it produces no profiles.

For example, at the FREE tier and default memory, a run saving 16 profiles costs **$0.03350**: 16 × $0.00200 + $0.00150. A started run with no profiles costs **$0.00150**. The same profile appearing under a different source account or relationship type is a separate result.

Start with one account and a small profile limit to check the data you need. You can set a maximum run charge in Apify Console; the Actor stops before making further X requests once the remaining budget cannot pay for another profile. Review the Pricing tab before starting a run.

### API and automation

Start a run from your application with the [Apify API](https://docs.apify.com/api/v2/actors-runs-post). Use your **Apify** API token, not an X token:

```bash
curl --request POST \
  --url "https://api.apify.com/v2/actors/arjun_code~x-twitter-affiliates-subscriptions/runs" \
  --header "Authorization: Bearer <APIFY_API_TOKEN>" \
  --header "Content-Type: application/json" \
  --data '{"accounts":["SpaceX"],"collectionType":"affiliates","maxResultsPerAccount":100}'
```

The API returns a run ID. When the run finishes, retrieve its Dataset using the returned `defaultDatasetId`.

Save your input as an **Apify Task** to reuse it or schedule regular exports. Each run creates a fresh Dataset; automatic comparison between runs is not included. Apify integrations can pass results to spreadsheets, webhooks, Make, or n8n.

### FAQ

#### Are these affiliate-marketing accounts?

No. Here, “affiliates” means accounts linked to an organization through X's affiliation feature. It does not identify referral programs or commissions.

#### Can I see private creator subscriptions?

No. A hidden list produces a `hidden` status rather than a guessed or incomplete list presented as complete.

#### Does this export followers or following?

No. For ordinary follower and following lists, use the [X Followers & Following Scraper](https://apify.com/arjun_code/x-twitter-followers-followings-scraper).

#### Do I need an X account or API key?

You do not need to supply your own X login, cookies, X API key, or proxy. You need an Apify account to run the Actor.

### Related Actors and support

- [X Account Origin Scraper](https://apify.com/arjun_code/x-twitter-account-origin-scraper): inspect available account-origin and profile information.
- [X Similar Accounts Finder](https://apify.com/arjun_code/x-twitter-similar-accounts-finder): discover additional accounts related to a seed account.

For a problem or feature request, open an issue on this Actor's **Issues** tab and include the run ID and affected input. Never share passwords, cookies, or API tokens.

Use the data responsibly and respect privacy and applicable platform rules. This independent Actor is not affiliated with or endorsed by X Corp.

# Actor input Schema

## `accounts` (type: `array`):

Enter one account per line: SpaceX, @SpaceX, https://x.com/SpaceX, or 34743251. You can mix usernames, profile links, and user IDs. Repeated accounts are collected once.

## `collectionType` (type: `string`):

Affiliated accounts are profiles linked to an organization through X's affiliation feature. Subscribed creators are the creators an account publicly subscribes to. Choose Both to collect the two lists separately. If an account hides its subscriptions, the result will explain this.

## `maxResultsPerAccount` (type: `integer`):

Maximum profiles to save for each input account and each selected type. For example, 100 with Both can save up to 100 affiliated accounts and 100 subscribed creators per account. Set 0 to collect all profiles currently available from X. X may expose fewer profiles than the count shown on an account.

## Actor input object example

```json
{
  "accounts": [
    "SpaceX"
  ],
  "collectionType": "affiliates",
  "maxResultsPerAccount": 100
}
```

# Actor output Schema

## `results` (type: `string`):

Related public accounts and clear status rows stored in the default Dataset.

## `summary` (type: `string`):

Counts, request totals, and completion status for this run.

# 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 = {
    "accounts": [
        "SpaceX"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("arjun_code/x-twitter-affiliates-subscriptions").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 = { "accounts": ["SpaceX"] }

# Run the Actor and wait for it to finish
run = client.actor("arjun_code/x-twitter-affiliates-subscriptions").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 '{
  "accounts": [
    "SpaceX"
  ]
}' |
apify call arjun_code/x-twitter-affiliates-subscriptions --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,arjun_code/x-twitter-affiliates-subscriptions"
        }
    }
}
```

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/zLjup3AI2GZew0HEd/builds/9UhdXclaU6ibfE3aK/openapi.json
