# Meta Threads Profile Scraper (`quiet_bark/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/quiet\_bark/threads-profile-scraper.md
- **Developed by:** [ApiMaster](https://apify.com/quiet_bark) (community)
- **Categories:** Social media
- **Stats:** 2 total users, 0 monthly users, 100.0% runs succeeded, NaN 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

A fast, lightweight scraper that extracts public profile data from **Meta Threads** (`threads.com`). Add one or more Threads usernames, hit Start, and download the dataset in JSON, CSV, Excel, XML, or HTML.

### What you get

For each Threads username the scraper returns:

- **Public profiles** — Threads URL, user ID (`pk`), full name, biography, follower count, verification status, profile picture (with HD versions), bio links, and the user's **latest posts** (with captions, media, like counts, repost/quote counts, timestamps).
- **Private profiles** — limited info: URL, ID, profile picture, username, full name, follower count.
- **Non-existent handles** — flagged with `found: false` so they're easy to filter out.

### Use cases

- 📊 Competitor analysis and market research
- 📈 Tracking influencer engagement and campaign impact
- 🛒 Spotting trends, customer preferences, and product demand
- 📝 Generating content ideas and refining audience targeting
- 📉 Monitoring brand reputation and sentiment in real time
- 👩‍🔬 Research and social listening

### How to use

1. Open the actor in the Apify Console.
2. In **Input**, fill in the fields:
   - **Threads usernames** — list of usernames without `@`, e.g. `["zuck", "selenagomez", "puregymofficial"]`.
   - **Proxy** — leave the default (Apify Residential, US).
   - Other fields can stay at defaults.
3. Click **Start**.
4. When the run finishes, open **Storage → Dataset** and export in JSON, JSONL, CSV, Excel, XML, or HTML.

### Input

The minimum input is a list of Threads usernames:

```json
{
  "profiles": ["puregymofficial"]
}
````

| Field | Type | Default | Description |
|---|---|---|---|
| `profiles` | array of strings | — (required) | Threads usernames without `@` |
| `maxConcurrency` | integer | `5` | Number of profiles fetched in parallel |
| `maxRetries` | integer | `5` | Retry budget for HTTP 5xx / parse errors |
| `maxProxyFailures` | integer | `5` | Retry budget for connection / proxy errors |
| `maxBlockedFailures` | integer | `5` | Retry budget for HTTP 403/429 and challenge pages |
| `timeoutSecs` | integer | `15` | Per-request timeout in seconds |
| `rawOutput` | boolean | `false` | Add a `_raw` field with the unprocessed user object |
| `proxy` | object | Apify Residential US | Apify proxy configuration |

### Output

Each profile becomes one record in the dataset. Excerpt:

```json
{
  "url": "https://www.threads.com/@selenagomez",
  "is_private": false,
  "pk": "63031310061",
  "id": "63031310061",
  "username": "selenagomez",
  "full_name": "Selena Gomez",
  "follower_count": 20714545,
  "is_verified": true,
  "biography": "“I Said I Love You First” Out Now 🖤",
  "profile_pic_url": "https://scontent.cdninstagram.com/...",
  "hd_profile_pic_versions": [{ "height": 320, "url": "..." }, { "height": 640, "url": "..." }],
  "bio_links": [{ "url": "https://linktr.ee/selenagomez", "is_verified": false }],
  "latestPosts": [
    {
      "code": "DHrrGkIxM6r",
      "pk": "3597158294504132267",
      "caption": { "text": "Thank you for all the support..." },
      "like_count": 8149,
      "taken_at": 1743034706,
      "media_type": 1,
      "image_versions2": { "candidates": [...] },
      "video_versions": null,
      "carousel_media": null,
      "text_post_app_info": {
        "direct_reply_count": 1445,
        "repost_count": 187,
        "quote_count": 13,
        "reshare_count": 94
      }
    }
  ]
}
```

`media_type` codes: `1` = image, `2` = video, `8` = carousel, `19` = reel.

### Why this scraper

- ⚡ **Fast** — pure HTTP, no headless browser, no Playwright. Runs 5–10× faster than browser-based scrapers.
- 💾 **Cheap to run** — 512 MB RAM by default.
- 🛡️ **Anti-bot resilient** — Chrome TLS impersonation (JA3/JA4, HTTP/2 SETTINGS), three independent retry budgets, soft-block detector, fresh session and exit-IP per retry.
- 🌍 **Residential-proxy ready** — sticky-session rotation works out of the box with Apify Residential.
- 🚀 **Bulk and parallel** — process many usernames in one run with configurable concurrency.

### FAQ

**Does it scrape Instagram?**
No. Threads and Instagram share usernames, but this scraper reads from `threads.com` only. Profile picture URLs point to `cdninstagram.com` because Meta uses the same media CDN for both apps.

**Do I need to be logged in?**
No. Public profiles are readable without authentication. Private profiles return only basic info (no posts).

**Is it legal to scrape Threads?**
This scraper only extracts data the user has chosen to share publicly. It does not collect private info such as emails, gender, or location. Public data may still contain personal information — make sure you have a legitimate basis before processing it. If you're unsure, consult a lawyer.

**Do I need proxies?**
Yes. Residential US proxies are recommended and included with Apify's Starter plan. Datacenter IPs get blocked frequently.

**Can I integrate with other apps?**
Yes. Through the Apify platform you can connect to Make, Zapier, Slack, Google Sheets, Airbyte, LangChain, webhooks, and more.

**Can I use this through the API?**
Yes, via the Apify API. Check the **API** tab on the actor page for ready-to-use code samples in Node.js (`apify-client` NPM) and Python (`apify-client` PyPI).

### Feedback

If you spot a bug or want a new feature, open an issue on the actor's **Issues** tab in the Apify Console.

# 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("quiet_bark/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("quiet_bark/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 quiet_bark/threads-profile-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=quiet_bark/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": "X9e4R5gv2OT0QZNJi"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/quiet_bark~threads-profile-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-quiet_bark-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/quiet_bark~threads-profile-scraper/runs": {
            "post": {
                "operationId": "runs-sync-quiet_bark-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/quiet_bark~threads-profile-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-quiet_bark-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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
