# Twitter Profile Scraper | No Cookie | No Login (`rexreus/twitter-profile-scraper`) Actor

Extract public Twitter/X profiles in bulk — followers, bio, location, verified status, join date, tweet counts & profile images. No API key, no login. Export to JSON, CSV, Excel or Google Sheets. Rotation-proof, ban-resistant, and reliable at scale.

- **URL**: https://apify.com/rexreus/twitter-profile-scraper.md
- **Developed by:** [REXREUS D.O](https://apify.com/rexreus) (community)
- **Categories:** SEO tools, Social media, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js/docs.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Twitter / X Profile Scraper 🐦 — Bulk Export Public X Profiles (No API Key, No Login)

<img src="https://i.imgur.com/y6tPzsh.png" align="center">

**Turn any list of X (Twitter) usernames into clean, structured profile data in seconds.**
Followers, bio, location, verified status, join date, tweet counts, profile images and
more — exported straight to JSON, CSV, Excel or Google Sheets. **No X API key. No login.
No rate-limit headaches.**

Built as an enterprise-grade scraper that reads the same **public** GraphQL responses your
browser receives, and keeps working even when X rotates its internal query IDs.

> ✅ **Public data only.** This Actor scrapes information that is publicly visible on a
> profile page. It never logs in, never bypasses private/protected accounts, and never
> touches login-gated content.

---

### 💡 What can you do with it?

- **Lead generation & sales** — enrich a list of X handles with followers, bio and website.
- **Influencer discovery** — rank creators by follower count, verified status and niche.
- **Competitor & brand monitoring** — track audience size and profile changes over time.
- **Market & audience research** — build datasets of accounts in any industry.
- **Data enrichment** — append X profile fields to your CRM, spreadsheet or database.

---

### ⭐ Why choose this scraper

- **No API key, no login** — reads the same public data your browser sees.
- **Rotation-proof** — the internal query hash and guest token are captured live at
  runtime, never hardcoded. When X changes them, this Actor adapts automatically.
- **Ban-resistant** — realistic rotating browser fingerprints, residential proxy
  waterfall, a session pool binding *token ↔ IP ↔ fingerprint*, and exponential backoff.
  An empty result is treated as a **block**, never silently reported as "0 followers".
- **Reliable, flat output** — one clean row per profile with consistent types; missing
  fields are `null`, never dropped. A single failed handle never breaks the whole run.
- **Cost control** — `maxItems` caps exactly how many records you pay for.
- **Scales cleanly** — deterministic memory cleanup and streaming output for large runs.

---

### 🚀 How to use

1. Click **Try for free** / **Run**.
2. Add the X usernames you want in **`handles`** (with or without `@`), or paste profile
   URLs into **`startUrls`**.
3. (Optional) Set **`maxItems`** to cap results and pick your proxy.
4. Click **Start** — results stream into the dataset in real time.
5. Export as **JSON, CSV, Excel, HTML or Google Sheets**, or pull them via the
   [Apify API](https://docs.apify.com/api/v2) and [integrations](https://apify.com/integrations)
   (Make, Zapier, n8n, webhooks, and more).

You can also **schedule** runs (daily/weekly) to keep your dataset fresh.

---

### 📥 Input

| Field | Type | Default | Description |
|---|---|---|---|
| `handles` | string[] | – | X usernames (with or without `@`). e.g. `["nasa", "@github"]` |
| `startUrls` | array | – | Profile URLs, e.g. `https://x.com/nasa`. Strings or `{ "url": ... }`. |
| `resultsMode` | enum | `profile_only` | `profile_only` or `profile_with_tweets`. |
| `includeRecentTweets` | boolean | `false` | Capture recent tweets (see *Limitations*). |
| `maxItems` | integer | `0` | Max records to push (`0` = unlimited). |
| `maxConcurrency` | integer | `3` | Parallel browsers, clamped to **1–5**. |
| `proxyConfiguration` | object | residential | Apify proxy config. Residential is strongly recommended. |

At least one of `handles` or `startUrls` **must** be provided — the Actor fails fast with a
clear message otherwise.

#### Example input

```json
{
    "handles": ["apify", "nasa", "github"],
    "resultsMode": "profile_only",
    "maxItems": 3,
    "maxConcurrency": 2,
    "proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }
}
````

***

### 📤 Output

Each profile becomes one flat dataset item:

```json
{
    "rest_id": "11348282",
    "username": "NASA",
    "name": "NASA",
    "description": "There's space for everybody. ✨",
    "location": "Earth",
    "url": "https://www.nasa.gov",
    "followers_count": 95000000,
    "friends_count": 180,
    "statuses_count": 68000,
    "media_count": 24000,
    "favourites_count": 3200,
    "listed_count": 91000,
    "verified": false,
    "is_blue_verified": true,
    "protected": false,
    "created_at": "2007-12-19T20:29:24.000Z",
    "profile_image_url": "https://pbs.twimg.com/profile_images/000/nasa.jpg",
    "profile_banner_url": "https://pbs.twimg.com/profile_banners/000/nasa",
    "recent_tweets": null,
    "sourceUrl": "https://x.com/nasa",
    "scrapedAt": "2026-01-01T00:00:00.000Z",
    "status": "ok",
    "error": null
}
```

#### Per-item `status`

Every target yields exactly one row — a failure never breaks the whole run:

| status | Meaning |
|---|---|
| `ok` | Profile scraped successfully. |
| `protected` | Account is private; public data unavailable. |
| `not_found` | Handle does not exist / suspended. |
| `blocked` | Anti-bot / rate-limit signal after retries were exhausted. |
| `challenge_failed` | An interactive challenge could not be solved. |

***

### ❓ FAQ

**Do I need a Twitter/X API key or an account?**
No. The Actor reads only public profile data — no API key, no login, no cookies.

**Can it scrape private/protected accounts?**
No. Protected accounts return `status: "protected"` with no private data. This Actor never
bypasses access controls.

**How many profiles can I scrape?**
As many as you like. Use `maxItems` to cap the run and control cost, and `maxConcurrency`
(1–5) to balance speed vs. stability.

**Which proxy should I use?**
**Residential** proxies are strongly recommended — datacenter IPs are blocked by X within
1–2 requests.

**In what formats can I export the data?**
JSON, CSV, Excel, HTML, RSS or Google Sheets — via the UI or the
[Apify API](https://docs.apify.com/api/v2).

**Can I automate or schedule it?**
Yes. Schedule recurring runs and connect the output to Make, Zapier, n8n, webhooks and more
through [Apify integrations](https://apify.com/integrations).

***

### ⚠️ Limitations

- **Recent tweets** are not yet normalized into the output; `recent_tweets` is always `null`
  in this version even when `includeRecentTweets` is enabled. Profile fields are the
  supported contract.
- Datacenter proxies are blocked by X within 1–2 requests — use **residential**.

***

### 📜 Legal & responsible use

This Actor collects **only publicly available** data and does not circumvent authentication
or access controls. You are responsible for how you use the output. Review X's
[Terms of Service](https://x.com/en/tos) and applicable data protection laws (e.g.
GDPR/CCPA) before scraping, storing, or processing personal data. Do not use this Actor to
harass, profile, or de-anonymize individuals.

# Actor input Schema

## `handles` (type: `array`):

List of X usernames WITHOUT '@' (e.g. "nasa"). Either `handles` or `startUrls` is required.

## `startUrls` (type: `array`):

List of public X profile URLs (e.g. https://x.com/nasa). Alternative to `handles`.

## `resultsMode` (type: `string`):

profile\_only = profile metadata only (fastest & cheapest). profile\_with\_tweets = profile + recent tweets.

## `includeRecentTweets` (type: `boolean`):

If true and mode = profile\_with\_tweets, include an array of recent public tweets.

## `maxRecentTweets` (type: `integer`):

Limit on recent tweets per profile (applies when includeRecentTweets = true).

## `maxItems` (type: `integer`):

Hard limit on the number of profiles produced. 0 = unlimited. Prevents wasted proxy cost.

## `maxConcurrency` (type: `integer`):

Number of parallel browsers (1-5). Lower values are safer from bans & use less memory.

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

Residential REQUIRED - datacenter IPs are blocked by X within 1-2 requests.

## Actor input object example

```json
{
  "handles": [
    "nasa",
    "natgeo"
  ],
  "startUrls": [
    {
      "url": "https://x.com/nasa"
    }
  ],
  "resultsMode": "profile_only",
  "includeRecentTweets": false,
  "maxRecentTweets": 20,
  "maxItems": 0,
  "maxConcurrency": 3,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `profiles` (type: `string`):

No description

## `runLog` (type: `string`):

No description

# 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 = {
    "handles": [
        "nasa",
        "natgeo"
    ],
    "startUrls": [
        {
            "url": "https://x.com/nasa"
        }
    ],
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("rexreus/twitter-profile-scraper").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 = {
    "handles": [
        "nasa",
        "natgeo",
    ],
    "startUrls": [{ "url": "https://x.com/nasa" }],
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("rexreus/twitter-profile-scraper").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "handles": [
    "nasa",
    "natgeo"
  ],
  "startUrls": [
    {
      "url": "https://x.com/nasa"
    }
  ],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call rexreus/twitter-profile-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=rexreus/twitter-profile-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Twitter Profile Scraper | No Cookie | No Login",
        "description": "Extract public Twitter/X profiles in bulk — followers, bio, location, verified status, join date, tweet counts & profile images. No API key, no login. Export to JSON, CSV, Excel or Google Sheets. Rotation-proof, ban-resistant, and reliable at scale.",
        "version": "0.0",
        "x-build-id": "FN5KHAFfZuc0UeSd7"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/rexreus~twitter-profile-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-rexreus-twitter-profile-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/rexreus~twitter-profile-scraper/runs": {
            "post": {
                "operationId": "runs-sync-rexreus-twitter-profile-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/rexreus~twitter-profile-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-rexreus-twitter-profile-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "handles": {
                        "title": "X Usernames / Handles",
                        "type": "array",
                        "description": "List of X usernames WITHOUT '@' (e.g. \"nasa\"). Either `handles` or `startUrls` is required.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "startUrls": {
                        "title": "Profile URLs",
                        "type": "array",
                        "description": "List of public X profile URLs (e.g. https://x.com/nasa). Alternative to `handles`.",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "resultsMode": {
                        "title": "Results Mode",
                        "enum": [
                            "profile_only",
                            "profile_with_tweets"
                        ],
                        "type": "string",
                        "description": "profile_only = profile metadata only (fastest & cheapest). profile_with_tweets = profile + recent tweets.",
                        "default": "profile_only"
                    },
                    "includeRecentTweets": {
                        "title": "Include Recent Tweets",
                        "type": "boolean",
                        "description": "If true and mode = profile_with_tweets, include an array of recent public tweets.",
                        "default": false
                    },
                    "maxRecentTweets": {
                        "title": "Max Tweets per Profile",
                        "minimum": 0,
                        "maximum": 200,
                        "type": "integer",
                        "description": "Limit on recent tweets per profile (applies when includeRecentTweets = true).",
                        "default": 20
                    },
                    "maxItems": {
                        "title": "Max Items (cost brake)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Hard limit on the number of profiles produced. 0 = unlimited. Prevents wasted proxy cost.",
                        "default": 0
                    },
                    "maxConcurrency": {
                        "title": "Max Concurrency",
                        "minimum": 1,
                        "maximum": 5,
                        "type": "integer",
                        "description": "Number of parallel browsers (1-5). Lower values are safer from bans & use less memory.",
                        "default": 3
                    },
                    "proxyConfiguration": {
                        "title": "Proxy Configuration",
                        "type": "object",
                        "description": "Residential REQUIRED - datacenter IPs are blocked by X within 1-2 requests.",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "RESIDENTIAL"
                            ]
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
