# Threads Profile Posts Scraper (`igview-owner/threads-scraper-pro`) Actor

Threads Scraper Pro to easily scrape Threads user posts without coding. Enter a username or profile URL, choose how many pages to scrape, and get organized JSON with captions, videos, profile pictures, and engagement stats in seconds.

- **URL**: https://apify.com/igview-owner/threads-scraper-pro.md
- **Developed by:** [Sachin Kumar Yadav](https://apify.com/igview-owner) (community)
- **Categories:** Social media, Videos, Developer tools
- **Features:** Limited permissions
- **Stats:** 474 total users, 20 monthly users, 100.0% runs succeeded, 11 bookmarks
- **User rating**: 2.25 out of 5 stars

## Pricing

from $4.00 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
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

## Threads Profile Posts Scraper

**Fast, reliable, and comprehensive Apify actor to scrape all posts, images, videos, engagement metrics, and author details from any Threads (by Meta) profile by username without requiring login or authentication.**

***

### Table of Contents

- [Overview](#overview)
- [Key Features](#key-features)
- [Input Parameters](#input-parameters)
- [Output Data Structure](#output-data-structure)
- [Usage Examples](#usage-examples)
- [Use Cases](#use-cases)
- [Frequently Asked Questions](#frequently-asked-questions)
- [Privacy & Compliance](#privacy--compliance)
- [Support & Troubleshooting](#support--troubleshooting)
- [SEO Tags & Keywords](#seo-tags--keywords)
- [Related Actors](#related-actors)

***

### Overview

Threads Profile Posts Scraper allows you to extract full post histories and feeds from public Meta Threads accounts. Whether you are conducting competitor intelligence, influencer performance benchmarking, brand audits, or AI training dataset collection, this actor delivers rich and structured data in JSON, CSV, Excel, XML, and HTML formats.

No cookies, passwords, or browser sessions are required. The scraper handles pagination seamlessly and provides resumption cursors for incremental scraping and automated monitoring workflows.

***

### Key Features

| Feature | Description |
|---------|-------------|
| **Username-Based Scraping** | Simply enter any public Threads username without the `@` prefix |
| **Complete Post Metadata** | Extracts post captions, IDs, URLs, language detection, edit status, and pinned status |
| **Comprehensive Engagement Metrics** | Captures likes, replies, reposts, quotes, and shares |
| **High-Resolution Media Extraction** | Downloads best-quality image URLs, video URLs, and multi-slide carousel media |
| **Author Profile Insights** | Includes user ID, handle, full display name, biography, verification badge, and profile picture |
| **Seamless Pagination & Cursor Support** | Automatically traverses pages or resumes from a specific cursor string |
| **No Login Required** | 100% cloud-based extraction with zero need for user login credentials |
| **High Reliability & Rate Limiting** | Built-in smart delay handling, exponential backoff, and load balancing |

***

### Input Parameters

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| **username** | String | Yes | `"natgeo"` | The Threads username / handle to scrape (without `@`). Example: `"natgeo"`, `"meta"`, `"zuck"`. |
| **maxPosts** | Integer | No | `20` | Maximum number of posts to scrape. Set to `0` to fetch all available historical posts. (Ignored when `cursor` is provided). |
| **cursor** | String | No | - | Pagination cursor string to resume scraping from a specific page. Fetches one page when supplied. |

***

### Output Data Structure

Each scraped item in your dataset provides granular, clean, and typed data:

#### Post Identifiers & URLs

| Field | Type | Description |
|-------|------|-------------|
| `postId` | String | Unique numeric ID of the Threads post |
| `postCode` | String | Shortcode string used in Threads post URLs (e.g., `Dfcr5vjiu_9`) |
| `postUrl` | String | Direct permalink URL to the Threads post |

#### Author Information

| Field | Type | Description |
|-------|------|-------------|
| `userId` | String | Unique internal ID of the Threads account |
| `username` | String | Author handle (e.g., `natgeo`) |
| `fullName` | String | Full name displayed on profile |
| `biography` | String | Profile bio text |
| `profilePicUrl` | String | Direct CDN link to profile avatar image |
| `isVerified` | Boolean | Whether account has a verified badge (`true` / `false`) |
| `isPrivate` | Boolean | Whether the account is set to private |

#### Post Content & Media

| Field | Type | Description |
|-------|------|-------------|
| `captionText` | String | Full text content and caption of the post |
| `mediaType` | Integer | Numeric media indicator (`1` = Image, `2` = Video, `8` = Carousel, `19` = Text / Carousel) |
| `hasAudio` | Boolean | Whether video media contains audio |
| `imageUrl` | String | Direct link to best available image preview / cover |
| `videoUrl` | String | Direct playable `.mp4` video URL (when post contains video) |
| `allImages` | Array | Array of all available image links across carousel items |
| `allVideos` | Array | Array of all available video links |
| `originalWidth` | Integer | Original media width in pixels |
| `originalHeight` | Integer | Original media height in pixels |
| `accessibilityCaption`| String | AI accessibility description if available |

#### Engagement Metrics

| Field | Type | Description |
|-------|------|-------------|
| `likeCount` | Integer | Total count of post likes |
| `directReplyCount` | Integer | Total count of direct replies / comments |
| `repostCount` | Integer | Number of times the post was reposted |
| `quoteCount` | Integer | Number of quote posts generated |
| `reshareCount` | Integer | Number of times the post was shared |

#### Context & Thread Metadata

| Field | Type | Description |
|-------|------|-------------|
| `isReply` | Boolean | Whether post is a reply to another post |
| `canReply` | Boolean | Whether replies are open to viewers |
| `replyControl` | String | Who can reply (`"everyone"`, `"accounts_you_follow"`, etc.) |
| `replyToUsername` | String | Target username if post is a reply |
| `isPinnedToProfile` | Boolean | Whether the post is pinned to the user's profile |
| `selfThreadLength` | Integer | Length of self-authored thread chain |
| `linkPreviewUrl` | String | URL of external link attachment (if attached) |
| `linkPreviewTitle` | String | Title of external link attachment |
| `captionIsEdited` | Boolean | Indicates whether the caption was edited |
| `detectedLanguage` | String | Language code of the post content (e.g., `en`, `es`) |

#### Timestamps & Pagination

| Field | Type | Description |
|-------|------|-------------|
| `takenAt` | Integer | Unix timestamp in seconds |
| `takenAtISO` | String | ISO 8601 formatted datetime string (`YYYY-MM-DDTHH:mm:ss.sssZ`) |
| `takenAtFormatted`| String | Localized human-readable date and time |
| `nextCursor` | String | Pagination token for loading subsequent pages |

***

### Usage Examples

#### Example 1: Basic Profile Scrape

Extract recent 20 posts from National Geographic:

```json
{
  "username": "natgeo",
  "maxPosts": 20
}
```

#### Example 2: Deep Historical Extraction

Scrape up to 500 posts from a tech creator or brand account:

```json
{
  "username": "zuck",
  "maxPosts": 500
}
```

#### Example 3: Cursor Pagination / Incremental Scraping

Resume scraping from a previously retrieved cursor token:

```json
{
  "username": "meta",
  "cursor": "QVFBWTVyM3FmXzdtWjkzSUI4U0VONmJnNHdmQUlIUmp3Znk0WjdWQk1sLUVSNFRqMUVuLW9ZYVplLTdPT2E3emNsRF90cS1LLWxvR3VVRXVLWHRvbjNmcA=="
}
```

***

### Output Sample

```json
{
  "postId": "4025189502230276871",
  "postCode": "DfcWIaiESsH",
  "postUrl": "https://www.threads.com/@natgeo/post/DfcWIaiESsH",
  "userId": "63269174602",
  "username": "natgeo",
  "fullName": "National Geographic",
  "biography": "Step into wonder and find your inner explorer with National Geographic",
  "profilePicUrl": "https://scontent.cdninstagram.com/...",
  "isVerified": true,
  "isPrivate": false,
  "captionText": "Just a bison enjoying the snow for National Bison Day",
  "mediaType": 1,
  "hasAudio": false,
  "imageUrl": "https://scontent.cdninstagram.com/v/t51.82787-15/...",
  "videoUrl": "",
  "likeCount": 2600,
  "directReplyCount": 68,
  "repostCount": 209,
  "quoteCount": 25,
  "reshareCount": 26,
  "isReply": false,
  "isPinnedToProfile": false,
  "takenAt": 1793887205,
  "takenAtISO": "2026-11-06T02:20:05.000Z",
  "takenAtFormatted": "11/6/2026, 7:50:05 AM",
  "nextCursor": "QVFBeFZSNUsyYTVtbnNm..."
}
```

***

### Use Cases

#### 1. Competitive Intelligence & Brand Auditing

- Track post frequency, copy strategies, and visual creative formats of market competitors.
- Monitor audience reception and engagement ratios across likes, replies, and reposts.
- Identify top-performing content pillars and viral hooks.

#### 2. Influencer Marketing & Creator Benchmarking

- Validate genuine engagement metrics before executing sponsorship agreements.
- Measure average reply velocity and community interaction patterns.
- Benchmark organic content performance across prospective creator partners.

#### 3. Content Research & Trend Discovery

- Mine historical post themes, seasonal topics, and media usage patterns.
- Study high-engagement captions and discussion triggers in specific industry verticals.
- Extract link attachments and preview metadata shared by thought leaders.

#### 4. AI Training & NLP Research

- Build clean conversational datasets from natural social discussions.
- Perform sentiment analysis, topic modeling, and language classification on brand communications.
- Train language models with authentic social text corpora.

#### 5. Automated Social Archival & Compliance

- Maintain searchable local backups of corporate Threads communications.
- Archive posts and multimedia assets for auditability and regulatory records.

***

### Frequently Asked Questions

#### General Questions

**Q: What is Threads Profile Posts Scraper?**\
A: It is an Apify actor designed to extract all historical and recent posts, videos, images, and engagement statistics from any public Threads profile without requiring user login credentials.

**Q: Do I need a Threads or Meta account to use this scraper?**\
A: No. The actor connects directly to public endpoints and does not require credentials, session cookies, or proxy logins.

**Q: Can I scrape private Threads profiles?**\
A: No. In compliance with user privacy protections, only publicly accessible profiles and posts can be retrieved.

**Q: In what formats can I download the extracted data?**\
A: You can export your dataset directly from the Apify Console in JSON, CSV, Excel (XLSX), XML, HTML, and RSS formats, or consume it programmatically via Apify REST API.

#### Scraping & Limits

**Q: How many posts can I scrape per run?**\
A: You can specify any target count using the `maxPosts` parameter (e.g., `50`, `200`, `1000`). Setting `maxPosts` to `0` allows fetching all available historical posts for the profile.

**Q: How does cursor pagination work?**\
A: The actor automatically iterates through pages. At the end of each run, the latest pagination token is saved in the Key-Value store as `NEXT_CURSOR` and included in the dataset rows. You can pass this token into the `cursor` input parameter to continue extraction from that exact position in future scheduled runs.

**Q: Does the actor handle rate limits?**\
A: Yes. The scraper includes automatic rotation, exponential backoff retries, and request pacing to maintain uninterrupted operation.

***

### Privacy & Compliance

- **Public Data Only:** Only publicly viewable profile content and statistics are collected.
- **No Private Data Interception:** Private accounts, deleted posts, direct messages, and private user details are never accessed.
- **GDPR & CCPA Compliant Design:** Operates within data privacy principles by aggregating only publicly distributed broadcasts.

***

### Support & Troubleshooting

| Issue | Solution |
|-------|----------|
| **User not found (404)** | Ensure the username is spelled correctly without the `@` symbol, and check that the account is active and public. |
| **No posts returned** | The profile may have zero public posts or may have restricted its visibility. |
| **Request timeouts** | The actor automatically retries on transient connection errors. If repeated, check Apify run logs. |
| **Need automation** | Use the Apify Schedule feature to automatically trigger updates daily or weekly. |

***

### SEO Tags & Keywords

`threads profile scraper`, `threads user scraper`, `threads post scraper`, `threads profile posts scraper`, `meta threads post downloader`, `extract threads posts`, `threads api scraper`, `threads engagement scraper`, `threads data extractor`, `threads post analytics`, `threads media downloader`, `scrape threads without login`, `meta threads archive tool`, `threads competitor monitoring`, `threads influencer analytics`, `threads content research`, `social media data extraction`, `threads backup tool`, `threads dataset generator`

***

### Related Actors

Expand your social media intelligence toolset with related Apify actors:

- **[Threads Search Scraper](https://apify.com/igview-owner/threads-search-scraper)** — Search Threads posts by keywords, phrases, dates, and hashtags.
- **[Threads Media Downloader](https://apify.com/igview-owner/threads-media-downloader)** — Download high-definition images and videos from Threads posts.
- **[Threads Profile Followers Scraper](https://apify.com/igview-owner/threads-user-followers-scraper)** — Extract followers list from public profiles.
- **[Threads Profile Following Scraper](https://apify.com/igview-owner/threads-user-following-scraper)** — Extract following list from public accounts.
- **[Threads Replies Scraper](https://apify.com/igview-owner/threads-replies-scraper)** — Extract comments and discussions under any Threads post.

# Actor input Schema

## `username` (type: `string`):

Enter the Threads username to scrape posts from. Example: 'natgeo', 'meta', 'zuck'. Do not include the '@' symbol.

## `maxPosts` (type: `integer`):

Maximum number of posts to scrape from the profile. Set to 0 to scrape all available posts. Ignored when cursor is provided.

## `cursor` (type: `string`):

Resume scraping from a specific cursor position. Use this to fetch the next page of results. The cursor value is returned in the output of a previous run. When cursor is provided, only one page is fetched and maxPosts is ignored.

## Actor input object example

```json
{
  "username": "natgeo",
  "maxPosts": 10
}
```

# Actor output Schema

## `profilePosts` (type: `string`):

Dataset view with an overview of all profile posts including captions, engagement metrics, media, and timestamps.

# 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 = {
    "username": "natgeo",
    "maxPosts": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("igview-owner/threads-scraper-pro").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 = {
    "username": "natgeo",
    "maxPosts": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("igview-owner/threads-scraper-pro").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 '{
  "username": "natgeo",
  "maxPosts": 10
}' |
apify call igview-owner/threads-scraper-pro --silent --output-dataset

```

## MCP server setup

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

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/aSIKxBOI0ZUIwKefZ/builds/mAH0xGp13ngFUtsuH/openapi.json
