# Threads Profile Scraper – Bios, Followers & Links (`scrapingmonkey/threads-profile-details-scraper`) Actor

Extract public Threads profiles by username. Get biographies, follower counts, bio links, topics, pictures, Instagram links, and account indicators in one row.

- **URL**: https://apify.com/scrapingmonkey/threads-profile-details-scraper.md
- **Developed by:** [ScrapingMonkey](https://apify.com/scrapingmonkey) (community)
- **Categories:**
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.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.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

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

Collect public Threads account details from plain usernames. **Threads Profile Scraper** returns names, biographies, follower counts, profile pictures, bio links, topic tags, and visible account indicators without asking for Threads credentials or cookies.

Use it to enrich a creator list, connect published profile links, or compare profile changes across repeated runs. Each unique processed username produces one row, with links and other repeated details kept in the corresponding columns.

| At a glance | Details |
|---|---|
| 📥 Input | Plain Threads usernames without `@` or profile URLs |
| 📤 Output | Identity, bio, follower count, links, topics, pictures, and account indicators |
| 🔐 Login required | No |
| ⚡ Processing | Up to 5 requests concurrently with automatic retries |
| 💾 Delivery | One dataset row per unique processed username |

### What the Threads profile scraper extracts 👤

Available profile data includes:

- Username, display name, account IDs, and profile URL
- Biography and available text fragments, including public links or mentions
- Follower count, verification, and privacy indicators
- Standard and HD profile pictures, plus available image sizes
- Bio links with titles, URLs, link types, and pinned indicators
- Public topic tags with names, IDs, and search links
- The Instagram profile URL when supplied
- Threads badge, Meta verification, AI-profile, and transparency indicators when exposed

The Actor returns profile information. It does not collect the account's posts or a list of its followers.

### How to scrape Threads profile details 🚀

1. Add plain usernames such as `zuck` or `nasa`.
2. Omit the `@` prefix and full profile URLs.
3. Start the Actor and review success and failed rows.
4. Export the dataset or connect the results to your profile workflow.

```json
{
  "inputList": [
    "zuck",
    "nasa"
  ]
}
```

Duplicate usernames are processed once, ignoring letter case. Each valid unique account is handled independently, so one unavailable profile does not stop the rest of a batch.

### Threads profile fields and output 📦

| Field group | Included data |
|---|---|
| Identity and audience | Username, name, IDs, profile URL, follower count, verification, and privacy |
| Biography | Bio text and available fragments with link or mention details |
| Links | Bio-link titles, destinations, redirects, types, pinned flags, and Instagram URL |
| Topics | Topic IDs, names, and search URLs |
| Pictures | Standard and HD URLs plus each available image's width and height |
| Account indicators | Threads presence, badges, Meta verification, AI, and transparency fields |

Complete illustrative output item with all 38 fields. The account, links, and values below are fictional examples, not a live result:

```json
{
  "input": "sample.creator",
  "status": "success",
  "profile_picture_url": "https://example.com/profile-320.jpg",
  "username": "sample.creator",
  "name": "Alex Morgan",
  "profile_url": "https://www.threads.com/@sample.creator",
  "id": "12345678901",
  "pk": "12345678901",
  "biography": "Writing about design and photography.",
  "followers": 12400,
  "is_verified": false,
  "is_private": false,
  "instagram_url": "https://www.instagram.com/sample.creator/",
  "bio_links.title": [
    "Portfolio",
    "Newsletter"
  ],
  "bio_links.url": [
    "https://example.com/portfolio",
    "https://example.com/newsletter"
  ],
  "bio_links.redirect_url": [
    "",
    ""
  ],
  "bio_links.link_type": [
    "external",
    "external"
  ],
  "bio_links.is_pinned": [
    true,
    false
  ],
  "topics.id": [
    "10001",
    "10002"
  ],
  "topics.name": [
    "Design",
    "Photography"
  ],
  "topics.url": [
    "https://www.threads.com/search?q=Design&serp_type=tags&tag_id=10001",
    "https://www.threads.com/search?q=Photography&serp_type=tags&tag_id=10002"
  ],
  "profile_picture_url_hd": "https://example.com/profile-640.jpg",
  "profile_picture_versions.url": [
    "https://example.com/profile-320.jpg",
    "https://example.com/profile-640.jpg"
  ],
  "profile_picture_versions.width": [
    320,
    640
  ],
  "profile_picture_versions.height": [
    320,
    640
  ],
  "biography_fragments.text": [
    "Writing about design and photography."
  ],
  "biography_fragments.type": [
    "plaintext"
  ],
  "biography_fragments.url": [
    ""
  ],
  "biography_fragments.user_id": [
    ""
  ],
  "biography_fragments.username": [
    ""
  ],
  "biography_fragments.profile_url": [
    ""
  ],
  "has_threads_profile": true,
  "show_threads_badge": true,
  "is_meta_ai_bot": false,
  "transparency_label": "",
  "transparency_product": "",
  "is_verified_by_meta": false,
  "eligible_for_text_app_badge": true
}
```

Each profile is one row in one table. JSON uses the same literal dotted keys as the columns. Entries within a group match by position: for example, the first `bio_links.title` describes the first `bio_links.url`. Topic, picture-version, and biography-fragment columns follow the same rule within their own groups.

Empty collections remain `[]`. Successful profiles can use empty strings, `0`, or `false` when Threads does not supply an optional value; these defaults are not proof of a zero audience or a negative account state. A failed row retains `input`, sets `status` to `failed`, and uses `null` for every profile-data field.

### Input requirements and account coverage ⚙️

| Parameter | Type | Required | Rules |
|---|---|---|---|
| `inputList` | array of strings | Yes | At least one plain Threads username |

Usernames may contain letters, digits, periods, and underscores. Surrounding whitespace is trimmed. Accepted: `zuck`. Rejected: `@zuck`, `https://www.threads.com/@zuck`, blank strings, or names containing spaces.

The Actor collects the profile information Threads exposes publicly. Private or restricted accounts can return limited public details or fail; their privacy flag does not grant access to hidden content.

There is no pagination input because each username targets one profile. Follower counts are aggregate profile values, not follower lists. Topic tags and bio links are the collections supplied with the profile.

### Threads profile data use cases 🎯

#### Creator-list enrichment

Add public biographies, follower counts, topic tags, profile pictures, and links to a known list of Threads creators.

#### Public profile-link research

Collect published bio links and the supplied Instagram URL to connect accounts with their websites or other public profiles.

#### Profile-change tracking

Schedule repeat runs and compare IDs, names, biographies, links, and follower counts in your own database.

#### Topic-based analysis

Use profile topic tags alongside biography text to organize a known account list for research or reporting.

### Pricing and billable profile rows 💰

Check the Actor's **Pricing** tab for the current charging model and rate.

Under dataset-item pricing, each saved success or failed profile row can count as one result. Duplicate usernames are processed once case-insensitively, and automatic retries do not independently add rows.

Bio links, topics, picture variants, and biography fragments remain in the profile row. They are not additional dataset items.

### Threads profile API and integrations 🔌

Replace `$ACTOR_ID` with the ID shown in the Actor's API tab and `$APIFY_TOKEN` with your Apify token:

```bash
curl -X POST "https://api.apify.com/v2/acts/$ACTOR_ID/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"inputList":["zuck","nasa"]}'
```

Run the Actor through REST, Apify client libraries, schedules, or webhooks. Export its default dataset to Google Sheets, Make, Zapier, a creator database, or a reporting workflow.

### Reliability and public profile limits ⚠️

The Actor processes up to five requests concurrently and retries temporary request failures. Invalid usernames, recognized unavailable profiles, and exhausted requests produce failed rows without stopping other accounts in the batch.

Public follower counts and profile settings can change between runs. An omitted follower count may appear as `0`, and optional account indicators may default to `false`. Review these fields together with the rest of the profile before treating them as confirmed values.

Threads can rename, remove, or restrict accounts and change its public responses. Picture URLs are references to available images, not downloaded files, and may stop working later. Dataset-storage failures can stop a run.

### Frequently asked questions ❓

#### Can I submit a Threads profile URL?

Enter the plain username instead. For `https://www.threads.com/@zuck`, submit `zuck`.

#### Does it return posts or individual followers?

No. It collects profile details, including the aggregate follower count when available. Use Threads Post Details Scraper for known post URLs.

#### Are topic tags and bio links kept together?

Yes. They stay in the profile row as separate lists of fields. Matching positions within each group identify the same topic or link.

#### Can it read private account content?

It only returns publicly available profile information. A private account may expose some profile details, but the Actor does not access its hidden content.

#### Why is a follower count zero on a successful row?

The profile may have zero followers, or Threads may have omitted that value. Missing counts default to zero, so the number alone does not distinguish those cases.

#### Does it need a Threads login?

No Threads account, password, or session cookies are required.

### Support, responsible use, and related actors 🛟

For a reproducible issue, share the run ID, a safe public username, and the field or behavior you expected through the Actor's support channel.

Use public profile data in accordance with applicable privacy, contractual, copyright, and platform requirements.

# Actor input Schema

## `inputList` (type: `array`):

Add one Threads username per item, for example zuck. Do not add @ symbols or profile links.

## Actor input object example

```json
{
  "inputList": [
    "zuck"
  ]
}
```

# Actor output Schema

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

One dataset row for every submitted username. Check the status field to distinguish successfully extracted profiles from failed inputs.

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

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

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

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

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

```

## CLI example

```bash
echo '{
  "inputList": [
    "zuck"
  ]
}' |
apify call scrapingmonkey/threads-profile-details-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scrapingmonkey/threads-profile-details-scraper"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/drmNqHokZwNoXG5VY/builds/Z8CwPgYjID3skrSf1/openapi.json
