# Meta Threads Profile Scraper (`trakk/threads-profile-scraper`) Actor

Extract public Threads (Meta) profile data — bio, follower count, full name, profile picture, bio links, verification, and latest posts. Fast HTTP-only scraper, no headless browser. Bulk usernames in parallel.

- **URL**: https://apify.com/trakk/threads-profile-scraper.md
- **Developed by:** [Blynx](https://apify.com/trakk) (community)
- **Categories:** Social media
- **Stats:** 10 total users, 6 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$3.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 a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.md):

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

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.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/platform/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

## Threads Profile Scraper

Scrape public Meta Threads profiles by username and export profile data, follower counts, bio links, verification status, profile images, and latest public posts.

Use it for creator research, brand monitoring, social listening, influencer discovery, and public profile datasets.

### What You Get

- One dataset item per Threads profile.
- Profile identity fields such as username, full name, profile URL, profile image, and internal IDs.
- Public metrics such as follower count and verification status.
- Biography, bio links, transparency labels, and profile flags.
- Latest public posts when Threads exposes them in the page payload.
- Error rows for missing, private, blocked, or unavailable profiles.
- Optional raw user payload for debugging.

### Quick Start

```json
{
  "profiles": ["puregymofficial", "instagram"],
  "maxConcurrency": 5,
  "rawOutput": false
}
````

Enter usernames without the leading `@`.

### Input Fields

| Field | Required | Description |
| --- | --- | --- |
| `profiles` | Yes | Threads usernames to scrape, without `@`. |
| `maxConcurrency` | No | Number of profiles fetched in parallel. Default is `5`. |
| `maxRetries` | No | Retry budget for HTTP 5xx and parse errors. |
| `maxProxyFailures` | No | Retry budget for connection, proxy, and TLS errors. |
| `maxBlockedFailures` | No | Retry budget for 403, 429, and challenge pages. |
| `timeoutSecs` | No | Per-request timeout in seconds. |
| `rawOutput` | No | Adds `_raw.user` with the unprocessed profile payload. |
| `proxy` | No | Proxy settings. Residential US proxy is recommended. |

### Output Fields

Successful profile items include:

- `url`, `sourceUrl`
- `username`, `full_name`, `biography`, `text_app_biography`
- `follower_count`
- `is_verified`, `is_private`
- `profile_pic_url`, `hd_profile_pic_versions`
- `bio_links`
- `pk`, `id`
- `friendship_status`
- `transparency_label`
- `is_threads_only_user`
- `show_text_post_app_badge`
- `gating`
- `profile_context_facepile_users`
- `latestPosts`
- `_raw` when `rawOutput` is enabled

Example item:

```json
{
  "url": "https://www.threads.net/@instagram",
  "sourceUrl": "https://www.threads.net/@instagram",
  "username": "instagram",
  "full_name": "Instagram",
  "follower_count": 123456789,
  "is_verified": true,
  "is_private": false,
  "biography": "Discover what's happening on Instagram.",
  "bio_links": [
    {
      "url": "https://instagram.com"
    }
  ],
  "latestPosts": []
}
```

### Error Items

If a profile cannot be scraped, the actor still returns a clear dataset item:

```json
{
  "username": "missing_profile",
  "url": "https://www.threads.net/@missing_profile",
  "sourceUrl": "https://www.threads.net/@missing_profile",
  "found": false,
  "error_type": "no_data",
  "error": "user data not found in page (handle may not exist on Threads)"
}
```

Common `error_type` values:

| Value | Meaning |
| --- | --- |
| `no_data` | Threads did not expose profile data, or the handle does not exist. |
| `blocked` | Threads returned a block or challenge page. |
| `proxy` | Proxy, connection, or TLS error. |
| `http` | HTTP error response. |
| `unknown` | Unexpected error while fetching or parsing. |

### Best Settings

For a small test:

```json
{
  "profiles": ["puregymofficial"],
  "maxConcurrency": 1
}
```

For larger profile lists:

```json
{
  "profiles": ["instagram", "meta", "threads"],
  "maxConcurrency": 5,
  "maxRetries": 5,
  "maxProxyFailures": 5,
  "maxBlockedFailures": 5,
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"],
    "apifyProxyCountry": "US"
  }
}
```

### Notes And Limits

- This actor scrapes public profile pages only.
- Private profiles can have limited or unavailable data.
- Latest posts are returned only when Threads exposes them in the public page payload.
- Follower counts and profile details can change frequently.
- Residential proxies are recommended because datacenter IPs are blocked more often.
- Empty fields mean Threads did not expose that value for the profile.

### Troubleshooting

**A profile is not found**

Check the spelling and remove the leading `@`. If the profile exists in a browser but returns `no_data`, try again later or use residential proxy.

**The run has blocked errors**

Use Apify Residential Proxy, lower `maxConcurrency`, and keep retry budgets enabled.

**Latest posts are empty**

Threads may not expose posts in the public payload for that profile or request. Profile fields can still be valid.

# Actor input Schema

## `profiles` (type: `array`):

Threads usernames to scrape (without leading @).

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

Number of profiles fetched in parallel.

## `maxRetries` (type: `integer`):

Retry budget for HTTP 5xx / parse errors. Independent of proxy and block budgets.

## `maxProxyFailures` (type: `integer`):

Retry budget for connection / proxy / TLS errors. Each retry rotates the exit IP.

## `maxBlockedFailures` (type: `integer`):

Retry budget for HTTP 403/429 and challenge pages. Each retry rotates the exit IP.

## `timeoutSecs` (type: `integer`):

Hard timeout for each HTTP request. Hung sockets are killed so the next proxy attempt can start.

## `rawOutput` (type: `boolean`):

Adds a \_raw field with the unprocessed user object.

## `proxy` (type: `object`):

Proxy configuration. Residential US is recommended — datacenter IPs are blocked frequently.

## Actor input object example

```json
{
  "profiles": [
    "puregymofficial"
  ],
  "maxConcurrency": 5,
  "maxRetries": 5,
  "maxProxyFailures": 5,
  "maxBlockedFailures": 5,
  "timeoutSecs": 15,
  "rawOutput": false,
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}
```

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

// Run the Actor and wait for it to finish
const run = await client.actor("trakk/threads-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 = { "profiles": ["puregymofficial"] }

# Run the Actor and wait for it to finish
run = client.actor("trakk/threads-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 '{
  "profiles": [
    "puregymofficial"
  ]
}' |
apify call trakk/threads-profile-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Meta Threads Profile Scraper",
        "description": "Extract public Threads (Meta) profile data — bio, follower count, full name, profile picture, bio links, verification, and latest posts. Fast HTTP-only scraper, no headless browser. Bulk usernames in parallel.",
        "version": "0.1",
        "x-build-id": "ZDDQqrHzRQ5KQtOIk"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/trakk~threads-profile-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-trakk-threads-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/trakk~threads-profile-scraper/runs": {
            "post": {
                "operationId": "runs-sync-trakk-threads-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/trakk~threads-profile-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-trakk-threads-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",
                "required": [
                    "profiles"
                ],
                "properties": {
                    "profiles": {
                        "title": "Threads usernames",
                        "type": "array",
                        "description": "Threads usernames to scrape (without leading @).",
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxConcurrency": {
                        "title": "Max concurrency",
                        "minimum": 1,
                        "maximum": 20,
                        "type": "integer",
                        "description": "Number of profiles fetched in parallel.",
                        "default": 5
                    },
                    "maxRetries": {
                        "title": "Max HTTP retries",
                        "minimum": 1,
                        "maximum": 10,
                        "type": "integer",
                        "description": "Retry budget for HTTP 5xx / parse errors. Independent of proxy and block budgets.",
                        "default": 5
                    },
                    "maxProxyFailures": {
                        "title": "Max proxy failures",
                        "minimum": 1,
                        "maximum": 10,
                        "type": "integer",
                        "description": "Retry budget for connection / proxy / TLS errors. Each retry rotates the exit IP.",
                        "default": 5
                    },
                    "maxBlockedFailures": {
                        "title": "Max anti-bot block retries",
                        "minimum": 1,
                        "maximum": 10,
                        "type": "integer",
                        "description": "Retry budget for HTTP 403/429 and challenge pages. Each retry rotates the exit IP.",
                        "default": 5
                    },
                    "timeoutSecs": {
                        "title": "Per-request timeout (seconds)",
                        "minimum": 5,
                        "maximum": 120,
                        "type": "integer",
                        "description": "Hard timeout for each HTTP request. Hung sockets are killed so the next proxy attempt can start.",
                        "default": 15
                    },
                    "rawOutput": {
                        "title": "Include raw user payload",
                        "type": "boolean",
                        "description": "Adds a _raw field with the unprocessed user object.",
                        "default": false
                    },
                    "proxy": {
                        "title": "Proxy",
                        "type": "object",
                        "description": "Proxy configuration. Residential US is recommended — datacenter IPs are blocked frequently.",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "RESIDENTIAL"
                            ],
                            "apifyProxyCountry": "US"
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
