# X (Twitter) User Profile Scraper (`gopalakrishnan/twitter-user`) Actor

"Get X/Twitter profile data  - display name, bio, follower count, following count, tweet count, verification badge, and location - from a list of usernames. Uses public guest access only, no login, no cookies, no account risk."

- **URL**: https://apify.com/gopalakrishnan/twitter-user.md
- **Developed by:** [Gopalakrishnan](https://apify.com/gopalakrishnan) (community)
- **Categories:** Social media, Automation, Lead generation
- **Stats:** 6 total users, 4 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.70 / 1,000 profile scrapeds

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/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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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

## Cheapest Twitter/X User Profile Scraper (No Login, No Cookies)

Fast, lightweight, and extremely cost-effective user profile scraper for Twitter/X. Retrieve user IDs, names, follower counts, following counts, tweet counts, locations, and bios without account login or cookies.

### Why Choose This Scraper?

- **Cheapest & Lightest:** Optimized to run with guest token authentication instead of spinning up browser instances, resulting in massive speed and resource savings.
- **Safe & Private:** Performs scraping entirely logged-out. Because it does not use your account cookies, there is **zero risk** of your personal accounts getting flagged or banned.
- **No Login / No Cookies Required:** Uses official guest token activation from Twitter's web app client to make authorized GraphQL API calls directly.
- **Reliable & Automatic:** Built-in auto-retry mechanics for guest token rotation, auto-concurrency scaling, and rate-limit detection.

***

### Input Parameters

The Actor accepts the following input parameters:

| Field Name           | Type    | Required | Description                                                                                                                      | Default                     |
| :------------------- | :------ | :------- | :------------------------------------------------------------------------------------------------------------------------------- | :-------------------------- |
| `usernames`          | Array   | **Yes**  | A list of Twitter/X usernames (e.g. `elonmusk`) or full profile URLs (e.g. `https://x.com/elonmusk`). Both formats are accepted. | -                           |
| `maxProfiles`        | Integer | No       | The maximum number of profiles to scrape. Leave empty for no limit.                                                              | -                           |
| `proxyConfiguration` | Object  | **Yes**  | Proxy settings. Apify Proxy (datacenter or residential) is required to bypass Twitter's IP-based rate limiting.                  | `{ "useApifyProxy": true }` |

***

### Output Data Structure

Every successfully scraped profile produces a clean, flat JSON object. If a handle is suspended, deleted, or does not exist, an error row with `scrapeStatus: "error"` is pushed to prevent empty records.

#### Scraped Profile Fields

| Field Name        | Type    | Description                                                      |
| :---------------- | :------ | :--------------------------------------------------------------- |
| `username`        | String  | The screen name/handle (e.g. `elonmusk`).                        |
| `name`            | String  | Display name of the user.                                        |
| `userId`          | String  | Twitter rest\_id/User ID.                                         |
| `description`     | String  | Bio description of the user.                                     |
| `followersCount`  | Integer | Total number of followers.                                       |
| `followingCount`  | Integer | Total number of following accounts.                              |
| `tweetCount`      | Integer | Total number of tweets/posts.                                    |
| `verified`        | Boolean | Whether the account is verified or blue-verified.                |
| `profileImageUrl` | String  | URL of the profile image.                                        |
| `location`        | String  | Stated user location.                                            |
| `createdAt`       | String  | Timestamp when the account was created.                          |
| `profileUrl`      | String  | Full profile URL (`https://x.com/handle`).                       |
| `scrapeStatus`    | String  | Scrape status: `success` or `error`.                             |
| `scrapeError`     | String  | Error explanation (e.g., `USER_NOT_FOUND`) if status is `error`. |
| `scrapedAt`       | String  | ISO timestamp when the scrape was performed.                     |

***

### Billing & Pay-Per-Event (PPE)

This Actor uses Apify's Pay-Per-Event (PPE) pricing to ensure you only pay for what you get:

1. **`actor-start`:** Charged 1 time per run to cover bootstrap overhead.
2. **`profile-scraped`:** Charged once per profile successfully scraped. If a profile lookup fails (e.g., username does not exist), you are not billed for the `profile-scraped` event for that handle.

# Actor input Schema

## `usernames` (type: `array`):

List of Twitter/X usernames (e.g. `elonmusk`) or full profile URLs (e.g. `https://x.com/elonmusk`). Both formats are accepted.

## `maxProfiles` (type: `integer`):

The maximum number of profiles to scrape. Leave empty for no limit.

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

Proxy servers required to bypass Twitter anti-bot protections. Apify Proxy is recommended.

## Actor input object example

```json
{
  "usernames": [
    "elonmusk",
    "https://x.com/adrian_horning_"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `profiles` (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 = {
    "usernames": [
        "elonmusk",
        "https://x.com/adrian_horning_"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("gopalakrishnan/twitter-user").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 = { "usernames": [
        "elonmusk",
        "https://x.com/adrian_horning_",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("gopalakrishnan/twitter-user").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 '{
  "usernames": [
    "elonmusk",
    "https://x.com/adrian_horning_"
  ]
}' |
apify call gopalakrishnan/twitter-user --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/xdT2ElOMzAF03DdNa/builds/NhdFuoFc1F6ep0SZV/openapi.json
