# Threads Profile Scraper - Followers, Bio & Engagement (`parseforge/threads-profile-scraper`) Actor

Scrape Threads profiles by username: followers, bio, links, topics, thread count, latest 15 threads and engagement rate. Export CSV, Excel, JSON or XML.

- **URL**: https://apify.com/parseforge/threads-profile-scraper.md
- **Developed by:** [ParseForge](https://apify.com/parseforge) (community)
- **Categories:** Social media, Lead generation, Automation
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.00 / 1,000 profiles

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?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

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

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

![ParseForge Banner](https://raw.githubusercontent.com/ParseForge/apify-assets/main/banner-v4.webp)

## 🧵 Threads Profile Scraper

> 🚀 **Export Threads profiles in seconds.** Paste usernames and get back 21 columns per profile: exact follower count, bio, bio links, topics, total thread count, the latest 15 threads with 16 fields each, and an engagement rate computed from them. No login, no cookies, no Threads account.

This Actor reads the public profile pages of Threads, the text app from Meta, the same pages any logged-out visitor can open at threads.com. It collects the profile card (name, verification, privacy, followers, bio, links and the topic tags a creator picked) and the latest threads on the profile, then turns those threads into averages you can compare across accounts: likes, replies and reposts per thread, and an engagement rate against the follower count.

In a cloud test run, 5 profiles (NASA, National Geographic, Mark Zuckerberg, Nike, Netflix US) came back in 9 seconds on 512 MB without a proxy, each with 15 threads. Usernames, `@handles` and `threads.com` or `threads.net` profile URLs are all accepted and deduplicated.

| 🎯 Target Audience | 💡 Primary Use Cases |
|---|---|
| Influencer marketing teams | Vet creators by real engagement rate, not just follower count |
| Social media managers | Benchmark your brand's Threads account against competitors |
| Agencies | Build monthly Threads reports for many clients in one run |
| Sales and lead generation | Enrich lead lists with Threads audience size and bio links |
| Researchers and journalists | Track public figures' posting activity and audience growth |
| AI agents and automation builders | Feed clean profile data into LLM pipelines, n8n or Make |

### 📋 What the Threads Profile Scraper does

1. Takes your list of usernames or profile URLs and normalises them (`@nasa`, `nasa` and `https://www.threads.net/@nasa` are the same profile).
2. Opens each public Threads profile page and reads the profile card: user ID, name, username, verified badge, private flag, exact follower count, bio, bio links and profile topics.
3. Reads the total number of threads the profile has posted.
4. Collects the latest threads shown on the profile (up to 15), each with text, date, media type, image and video links, and like, reply, repost, quote and share counts, plus pinned and reply flags.
5. Computes average likes, replies and reposts per thread, the engagement rate as a percentage of followers, and the date of the newest thread.
6. Emits one row per profile. Accounts that do not exist, or that Threads does not show to logged-out visitors, come back as free rows with the reason.

> 💡 **Why it matters:** follower counts alone hide whether an audience is alive. Two accounts with 5 million followers can differ tenfold in how many people actually react to each thread. This Actor puts audience size and real engagement on the same row, so a creator shortlist sorts itself.

### 🎬 Full Demo (🚧 Coming soon)

### 📊 Output

Each dataset row is one Threads profile. 21 columns per row, plus 16 fields for every thread in `latestPosts`.

| Field | Type | Description |
|---|---|---|
| 🖼 `imageUrl` | string | Profile picture in the highest resolution Threads serves (up to 640 px) |
| 👤 `username` | string | Threads username |
| 📛 `fullName` | string | Display name |
| 🔗 `url` | string | Profile URL |
| 🆔 `id` | string | Numeric Threads user ID |
| ✔️ `isVerified` | string | `Yes` when the profile has the verified badge |
| 🔒 `isPrivate` | string | `Yes` when the Threads profile is private |
| 👥 `followerCount` | number | Exact follower count |
| 🧵 `threadsCount` | number | Total threads posted (Threads rounds this above 1,000, for example 1,600) |
| 📝 `biography` | string | Bio text |
| 🌐 `bioLinks` | array | Links in the bio |
| 🏷 `profileTags` | array | Topics the creator added to the profile |
| 🕓 `latestPostAt` | string | Date of the newest thread on the profile |
| 🔢 `latestPostsCount` | number | Threads used for the averages (up to 15) |
| ❤️ `avgLikes` | number | Average likes per thread |
| 💬 `avgReplies` | number | Average replies per thread |
| 🔁 `avgReposts` | number | Average reposts per thread |
| 📈 `engagementRatePct` | number | Average likes, replies, reposts and quotes per thread, as a % of followers |
| 🗂 `latestPosts` | array | The latest threads: `imageUrl`, `id`, `code`, `url`, `text`, `postedAt`, `mediaType`, `likeCount`, `replyCount`, `repostCount`, `quoteCount`, `shareCount`, `isPinned`, `isReply`, `videoUrl`, `carouselCount` |
| 🕒 `scrapedAt` | string | When the row was collected |
| ❌ `error` | string | Populated only on rows without data |

#### Real sample records

From the cloud test run. Image links are shortened and `latestPosts` is trimmed to the first of its 15 threads here.

```json
{
  "imageUrl": "https://scontent-iad3-2.cdninstagram.com/v/t51.82787-19/...",
  "username": "nasa",
  "fullName": "NASA",
  "url": "https://www.threads.com/@nasa",
  "id": "28829152388",
  "isVerified": "Yes",
  "isPrivate": "No",
  "followerCount": 12740434,
  "threadsCount": 136,
  "biography": "Making the seemingly impossible, possible. ✨",
  "bioLinks": [],
  "profileTags": ["NASA", "Space Threads", "Science Threads"],
  "latestPostAt": "2026-09-22T17:57:59.000Z",
  "latestPostsCount": 15,
  "avgLikes": 14284,
  "avgReplies": 120,
  "avgReposts": 972,
  "engagementRatePct": 0.121,
  "latestPosts": [
    {
      "imageUrl": "https://scontent-iad3-2.cdninstagram.com/v/t51.82787-15/...",
      "id": "3991969585838706926",
      "code": "DdmUzAeFFDu",
      "url": "https://www.threads.com/@nasa/post/DdmUzAeFFDu",
      "text": "Happy equinox, Earthlings! 🍂\n\nSept. 22 marks the the first day of fall in the Northern Hemisphere. From now until the beginning of spring, nighttime hours will last longer than daylight as the Sun travels a shorter arc across the sky each day.",
      "postedAt": "2026-09-22T17:57:59.000Z",
      "mediaType": "Image",
      "likeCount": 2451,
      "replyCount": 49,
      "repostCount": 156,
      "quoteCount": 15,
      "shareCount": 20,
      "isPinned": "No",
      "isReply": "No",
      "videoUrl": "N/A",
      "carouselCount": 0
    }
  ],
  "scrapedAt": "2026-09-24T19:13:35.851Z",
  "error": null
}
```

```json
{
  "imageUrl": "https://scontent-iad3-2.cdninstagram.com/v/t51.82787-19/...",
  "username": "zuck",
  "fullName": "Mark Zuckerberg",
  "url": "https://www.threads.com/@zuck",
  "id": "63055343223",
  "isVerified": "Yes",
  "isPrivate": "No",
  "followerCount": 5743681,
  "threadsCount": 166,
  "biography": "Mostly superintelligence and MMA takes",
  "bioLinks": [],
  "profileTags": ["AI Threads", "UFC Threads", "AI", "MMA", "memes"],
  "latestPostAt": "2026-09-24T00:07:31.000Z",
  "latestPostsCount": 15,
  "avgLikes": 2077,
  "avgReplies": 580,
  "avgReposts": 155,
  "engagementRatePct": 0.05,
  "latestPosts": [
    {
      "imageUrl": "N/A",
      "id": "3992880350758034895",
      "code": "Ddpj4YZkd3P",
      "url": "https://www.threads.com/@zuck/post/Ddpj4YZkd3P",
      "text": "Here's everything I announced at Meta Connect today 👇",
      "postedAt": "2026-09-24T00:07:31.000Z",
      "mediaType": "Text",
      "likeCount": 1891,
      "replyCount": 451,
      "repostCount": 131,
      "quoteCount": 33,
      "shareCount": 125,
      "isPinned": "No",
      "isReply": "No",
      "videoUrl": "N/A",
      "carouselCount": 0
    }
  ],
  "scrapedAt": "2026-09-24T19:13:36.346Z",
  "error": null
}
```

```json
{
  "imageUrl": "https://scontent-iad3-2.cdninstagram.com/v/t51.82787-19/...",
  "username": "netflix",
  "fullName": "Netflix US",
  "url": "https://www.threads.com/@netflix",
  "id": "63441666146",
  "isVerified": "Yes",
  "isPrivate": "No",
  "followerCount": 8546476,
  "threadsCount": 3400,
  "biography": "📍Hillman College",
  "bioLinks": [],
  "profileTags": ["tvthreads", "FilmThreads", "Book Threads"],
  "latestPostAt": "2026-09-24T19:00:24.000Z",
  "latestPostsCount": 15,
  "avgLikes": 975,
  "avgReplies": 33,
  "avgReposts": 58,
  "engagementRatePct": 0.013,
  "latestPosts": [
    {
      "imageUrl": "https://scontent-iad3-2.cdninstagram.com/v/t51.71878-15/...",
      "id": "3993271916433470712",
      "code": "Ddq86aWj3T4",
      "url": "https://www.threads.com/@netflix/post/Ddq86aWj3T4",
      "text": "Welcome to Hillman \n\nA DIFFERENT WORLD IS NOW ON NETFLIX",
      "postedAt": "2026-09-24T13:07:10.000Z",
      "mediaType": "Video",
      "likeCount": 3546,
      "replyCount": 123,
      "repostCount": 303,
      "quoteCount": 66,
      "shareCount": 268,
      "isPinned": "Yes",
      "isReply": "No",
      "videoUrl": "https://scontent-iad3-1.cdninstagram.com/o1/v/t16/...",
      "carouselCount": 0
    }
  ],
  "scrapedAt": "2026-09-24T19:13:40.957Z",
  "error": null
}
```

### ✨ Why choose this Actor

- 📈 **Engagement rate built in.** Average likes, replies and reposts per thread and an engagement rate against followers, computed on every row. No spreadsheet formulas.
- 🧵 **Total thread count.** How much a profile has posted in total, next to how recently it posted.
- 🏷 **Profile topics.** The topic tags creators pin to their profile, a quick read on what an account is about.
- 🗂 **15 latest threads per profile**, each with text, date, media type, media links and five engagement counters, on the same row.
- 🔓 **No login and no cookies.** Only public data a logged-out visitor sees. Nothing to rotate, nothing to get banned.
- ⚡ **Fast and light.** Plain HTTP, no browser, about 2 seconds per profile, 512 MB is plenty.
- 🧹 **Clean values.** Yes/No flags, ISO dates, numbers as numbers, no `null` in data rows.

### 📈 How it compares to alternatives

| | This Actor | Typical Threads profile scrapers |
|---|---|---|
| Profile card (name, bio, followers, verified, picture) | ✅ | ✅ |
| Bio links | ✅ | ✅ |
| Profile topic tags | ✅ | ❌ usually missing |
| Total thread count | ✅ (rounded by Threads above 1,000) | ❌ usually missing |
| Latest threads with engagement counters | ✅ up to 15 | Sometimes, often as raw nested JSON |
| Average likes, replies, reposts and engagement rate | ✅ computed | ❌ |
| Flat, spreadsheet ready columns | ✅ | Raw API field names |
| Login or cookies required | ❌ | Varies |
| Profiles Threads hides from logged-out visitors | Free error row with the reason | Varies |

Honest limits: Threads shows logged-out visitors the latest 15 threads of a profile, so the averages are computed over those 15. Some accounts are not shown to logged-out visitors at all (in a test on 40 celebrity and brand accounts, 8 redirected to the login page); those come back as free error rows, so you always know your coverage.

### 🚀 How to use

1. Create a free Apify account with $5 of monthly credit: [sign up here](https://console.apify.com/sign-up?fpr=vmoqkp).
2. Open the Threads Profile Scraper and paste usernames or profile URLs, one per line.
3. Set **Max Items** to the number of profiles you want.
4. Leave **Include latest threads** on to get the 15 threads per profile, or switch it off for lighter rows (the averages are still computed).
5. Click **Start**. Each profile takes about 2 seconds.
6. Download the results as CSV, Excel, JSON or XML, or pull them from the API.

Example input:

```json
{
  "usernames": ["zuck", "@nasa", "https://www.threads.com/@natgeo"],
  "maxItems": 10,
  "includeLatestPosts": true
}
```

### 💼 Business use cases

#### 🤝 Influencer vetting

An agency shortlists 200 creators for a sports campaign. One run returns followers, engagement rate and the last posting date for all of them, so dormant accounts and inflated audiences drop out before anyone sends a brief.

#### 📊 Competitor benchmarking

A streaming brand tracks its own Threads account next to five rivals every week. Average likes, replies and reposts per thread show whose content is landing, and the latest threads show what they posted.

#### 🧲 Lead enrichment

A B2B team has a list of founders and companies. Adding Threads follower counts, bios and bio links gives sales a quick signal of reach and a route to each prospect's website or link page.

#### 📰 Media monitoring

A newsroom follows public officials and institutions. Scheduled runs capture every profile's latest threads with timestamps and engagement, building an archive of what was said and how people reacted.

### 🔌 Automating Threads Profile Scraper

- **Make** and **Zapier**: run the Actor on a schedule and send new rows to Google Sheets, Airtable or a CRM.
- **Slack**: post a weekly engagement leaderboard of the accounts you track.
- **Airbyte**: load the dataset into your warehouse next to other social data.
- **GitHub Actions**: trigger runs from a workflow and version the results.
- **Google Drive**: export each run as a spreadsheet automatically.

### 🌟 Beyond business use cases

- **Research:** study how audiences engage with public figures, institutions or topics on Threads.
- **Personal:** keep an eye on the creators you follow and how often they post.
- **Non-profit:** measure how advocacy accounts in your field reach people compared with peers.
- **Experimentation:** build a dataset for a dashboard, a ranking or a model of engagement.

### 🤖 Ask an AI assistant about this scraper

Paste this page into ChatGPT, Claude or Perplexity and ask things like "Which of these accounts has the best engagement rate?" or "Write a Make scenario that runs this Actor every Monday and appends the rows to a Google Sheet."

### ❓ Frequently Asked Questions

#### 🔐 Do I need a Threads or Instagram account?

No. The Actor reads only what a logged-out visitor sees on threads.com. No login, no cookies, no session to manage.

#### 🧵 How many threads per profile do I get?

Up to 15, the latest threads Threads shows to logged-out visitors. Older threads need a logged-in session, which this Actor does not use.

#### 📈 How is the engagement rate calculated?

For each of the latest threads, likes, replies, reposts and quotes are added up. The average across those threads is divided by the follower count and shown as a percentage.

#### 🔢 Why is the thread count a round number for some profiles?

Threads itself publishes the total rounded above 1,000 (for example "1.6K Threads"). Below 1,000 the number is exact. Follower counts are always exact.

#### 🚫 Why did some profiles come back as errors?

Either the account does not exist on Threads, or Threads does not show it to logged-out visitors and sends them to the login page instead. Those rows are free and carry the reason.

#### 🔒 What about private profiles?

When Threads shows the profile card of a private account, the row is flagged with `isPrivate: "Yes"` and carries only the threads Threads makes public. When Threads sends logged-out visitors to the login page instead, the row is a free error row.

#### 🔗 Which input formats are accepted?

Usernames with or without `@`, and profile or post URLs on threads.com or threads.net. Duplicates are removed.

#### 🌍 Do I need a proxy?

No. Profiles load without one. The proxy option is there for very large lists.

#### ⏱ How fast is it?

About 2 seconds per profile with 4 profiles in parallel. 40 profiles took about 35 seconds in a local test.

#### 🖼 Do image and video links expire?

Yes. Threads media links are signed by Meta and stop working after a few days. Download the media you need soon after the run.

#### 📤 Which export formats are available?

CSV, Excel, JSON, JSONL, XML and HTML, plus the Apify API.

#### 🗓 Can I track profiles over time?

Yes. Schedule the Actor daily or weekly with the same list and compare `followerCount`, `threadsCount` and the averages between runs.

### 🔌 Integrate with any app

Use the Apify API, the JavaScript and Python clients, webhooks, or the ready integrations with Make, Zapier, Slack, Airbyte, GitHub and Google Drive to send each run's results wherever you work.

### 🔗 Recommended Actors

- [Threads Scraper - Public Posts by Username](https://apify.com/parseforge/threads-search-scraper)
- [Instagram Profile Scraper](https://apify.com/parseforge/instagram-profile-scraper)
- [TikTok Profile Scraper](https://apify.com/parseforge/tiktok-profile-scraper)
- [Bluesky Profile & Posts Scraper](https://apify.com/parseforge/bluesky-profile-posts-scraper)
- [LinkedIn Profile Scraper](https://apify.com/parseforge/linkedin-profile-scraper)

> 💡 **Pro Tip:** browse the complete [ParseForge collection](https://apify.com/parseforge).

**🆘 Need Help?** [Open our contact form](https://tally.so/r/BzdKgA)

> **⚠️ Disclaimer:** this is an independent tool and is not affiliated with, endorsed by or sponsored by Threads or Meta. It collects only publicly available data.

# Actor input Schema

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

Threads usernames (with or without @) or profile URLs such as https://www.threads.com/@nasa. One per line.

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

Free users: Limited to 10 items (preview). Paid users: Optional, max 1,000,000

## `includeLatestPosts` (type: `boolean`):

Add the latest threads (up to 15, the most Threads shows logged-out visitors) with text, date, media and engagement counts. Engagement averages are computed either way.

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

Threads profiles load without a proxy. Switch one on for very large lists.

## Actor input object example

```json
{
  "usernames": [
    "zuck",
    "nasa",
    "natgeo",
    "nike",
    "netflix"
  ],
  "maxItems": 10,
  "includeLatestPosts": true,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `overview` (type: `string`):

Key profile fields

## `fullData` (type: `string`):

Complete dataset with all 21 fields, latest threads included

# 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": [
        "zuck",
        "nasa",
        "natgeo",
        "nike",
        "netflix"
    ],
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("parseforge/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 = {
    "usernames": [
        "zuck",
        "nasa",
        "natgeo",
        "nike",
        "netflix",
    ],
    "maxItems": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("parseforge/threads-profile-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 '{
  "usernames": [
    "zuck",
    "nasa",
    "natgeo",
    "nike",
    "netflix"
  ],
  "maxItems": 10
}' |
apify call parseforge/threads-profile-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,parseforge/threads-profile-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/XXAqdEi64P9qFB1aM/builds/CbXsiRwc4O2udOjla/openapi.json
