# Threads Post Scraper (`sinam7/threads-post-scraper`) Actor

Scrape Threads posts and comments, post author only.

- **URL**: https://apify.com/sinam7/threads-post-scraper.md
- **Developed by:** [sinam7](https://apify.com/sinam7) (community)
- **Categories:** Social media, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

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

## 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 Post Scraper

Scrape Threads posts and comments from a single post URL. Filters out profile images and recommended posts, returning only the original post and its related replies.

### What this actor does

- Accepts a single Threads post URL
- Extracts post content, author info, timestamps, images, and comments
- Automatically filters out:
  - Profile thumbnails (s150x150, s42x42)
  - Unrelated recommended posts from Threads feed
- Returns only posts from the original author or replies to the original post

### Input

#### Example input
```json
{
  "url": "https://www.threads.net/@username/post/ABC123"
}
````

#### Input fields

| Field | Type | Required | Notes |
|-------|------|----------|-------|
| url | string | Yes | Full Threads post URL (e.g., https://www.threads.net/@username/post/ABC123) |

### Output

The actor outputs an array of post objects to the dataset.

#### Example output item

```json
[
  {
    "authorId": "/@hyle_edu.kr",
    "authorName": null,
    "content": "hyle_edu.kr\nDesign Threads\nCursor 디자인 총괄이 말아주는(낋여주는) 스타트업 랜딩 페이지 리뷰 영상\nUI/UX 디자이너분들께 실전 레이아웃·카피 피드백이 꽤 도움 될 것 같습니다.\n5가지 핵심 교훈:\n1) 첫 화면에서 한 줄로 정체를 밝혀라.\n2) 누구를 위한 제품인지 콕 집어 말해라.\n3) 한 화면에 CTA는 딱 하나만 둬라.\n4) 보라 그라디언트·AI 템플릿 느낌을 버려라.\n5) 말로 돌리지 말고, 바로 데모를 보여줘라.  \nTranslate",
    "timestamp": "2025-11-27T08:04:22.000Z",
    "images": [
      "https://scontent-iad3-2.cdninstagram.com/v/t51.2885-15/588000954_17852930637589530_3115163017750846664_n.jpg?stp=dst-jpg_e35_tt6&efg=eyJ2ZW5jb2RlX3RhZyI6InRocmVhZHMuRkVFRC5pbWFnZV91cmxnZW4uMjE2MHgxMjA2LnNkci5mODI3ODcuZGVmYXVsdF9pbWFnZS5jMiJ9&_nc_ht=scontent-iad3-2.cdninstagram.com&_nc_cat=106&_nc_oc=Q6cZ2QHgrxrOBEi_eqXMrmfiDdX3j_o7E4JnDU2yJd9VGNapB_a-senBjgZIZW_Il9lVgJI&_nc_ohc=WeCMxiN7Zc4Q7kNvwGggxko&_nc_gid=CZmmu7zoN4syiEHB2bNy1A&edm=APs17CUBAAAA&ccb=7-5&ig_cache_key=Mzc3NDk2Mjg2NDU1NDcxNzQwMg%3D%3D.3-ccb7-5&oh=00_Afm3SeH-ljp6D7EhRYx0phszFpE84lTMXT6l5lDUhMFC8Q&oe=69360721&_nc_sid=10d13b"
    ],
    "postUrl": "https://www.threads.net/@hyle_edu.kr/post/DRjXLmGEzDa",
    "isOriginalAuthor": true
  },
  {
    "authorId": "/@hyle_edu.kr",
    "authorName": null,
    "content": "hyle_edu.kr\nDesign Threads\nAuthor\nyoutube.com/watch…\nyoutube.com\nCursor Head of Design Reviews Startup Websites",
    "timestamp": "2025-11-27T08:04:27.000Z",
    "images": [
      "https://external-iad3-1.xx.fbcdn.net/emg1/v/t13/4510717797100347293?stp=dst-src&url=https%3A%2F%2Fi.ytimg.com%2Fvi%2FRynySryqM_0%2Fmaxresdefault.jpg&utld=ytimg.com&_nc_gid=CZmmu7zoN4syiEHB2bNy1A&_nc_oc=AdnnBnpQiJ-ImFHLB1zQ6KdkwE3eYgejFX751eNz-RdBMIC6qxpnkF8Fk2HROXnpQZk&ccb=13-1&oh=06_Q3-5AXm8t92Bc1cF_D9RD01869Pwh9uLvqptfXeRGYMGpgoL&oe=6931F0AD&_nc_sid=1d65fc"
    ],
    "postUrl": "https://www.threads.net/@hyle_edu.kr/post/DRjXMNbE5Ds",
    "isOriginalAuthor": true
  }
]
```

#### Output fields

| Field | Type | Description |
|-------|------|-------------|
| authorId | string | Author's Threads ID (e.g., "/@username") |
| authorName | string|null | Author's display name (often null in current implementation) |
| content | string | Post text content, newline-separated |
| timestamp | string | ISO 8601 timestamp |
| images | string\[] | Array of image URLs (excludes profile pictures) |
| postUrl | string | Full URL to the post |
| isOriginalAuthor | boolean | Whether this post is from the original thread author |

### Features

#### Smart filtering

**Profile image exclusion**: Automatically removes profile thumbnails by detecting thumbnail size patterns (s150x150, s42x42) in URLs.

**Feed recommendation filtering**: Threads shows recommended posts mixed with replies. This actor filters them out by:

- Identifying the original post author from the URL
- Keeping only posts from that author or replies to their posts
- Excluding unrelated recommended content

#### Stable selectors

Uses DOM attributes that are less likely to change:

- `div[data-pressable-container="true"]` for post containers
- `a[href^="/@"]` for author links
- `time` elements for timestamps
- `span[dir="auto"]` for text content

Avoids obfuscated React Native class names like `x1lliihq` that change frequently.

### Usage

#### Via Apify Console

1. Open the actor in Apify Console
2. Click **Run**
3. Enter a Threads post URL in the input
4. Start the run
5. View results in the **Dataset** tab

#### Via API

##### Start a run

```bash
curl -X POST "https://api.apify.com/v2/acts/YOUR_ACTOR_ID/runs?token=YOUR_TOKEN&waitForFinish=120" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://www.threads.net/@username/post/ABC123"
  }'
```

The `waitForFinish=120` parameter makes the request wait up to 120 seconds for results (synchronous mode).

##### Fetch results from dataset

```bash
curl "https://api.apify.com/v2/datasets/DATASET_ID/items?token=YOUR_TOKEN"
```

#### Integration with n8n

This actor is designed to work with n8n Cloud via a sub-workflow:

1. **HTTP Request** node calls the actor
2. **HTTP Request** node fetches results from the dataset
3. Results are passed to AI for summarization

See the [blog post](https://sinam7.tistory.com) for detailed n8n integration guide.

### Limitations

- **Public content only**: No login/cookies support
- **DOM structure dependency**: Threads may change their HTML structure at any time
- **Rate limiting**: Respect Apify's rate limits and Threads' terms of service
- **No pagination**: Fetches only initially loaded comments (typically first 10-20)

### Notes

- The actor waits 3 seconds after page load to ensure dynamic content is rendered

- `authorName` is often null because Threads stores author names in complex nested structures

- Image URLs are CDN links that may expire after some time

- This actor is optimized for single post scraping, not bulk operations

- Update the size filters (s150x150, s42x42) in the code

# Actor input Schema

## `url` (type: `string`):

Threads post url to scrape

## Actor input object example

```json
{
  "url": "https://www.threads.net/@username/post/xxxxx"
}
```

# Actor output Schema

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

No description

# 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 = {
    "url": "https://www.threads.net/@username/post/xxxxx"
};

// Run the Actor and wait for it to finish
const run = await client.actor("sinam7/threads-post-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 = { "url": "https://www.threads.net/@username/post/xxxxx" }

# Run the Actor and wait for it to finish
run = client.actor("sinam7/threads-post-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 '{
  "url": "https://www.threads.net/@username/post/xxxxx"
}' |
apify call sinam7/threads-post-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Threads Post Scraper",
        "description": "Scrape Threads posts and comments, post author only.",
        "version": "0.0",
        "x-build-id": "Dk7JhUGJ95XcmMUfD"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/sinam7~threads-post-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-sinam7-threads-post-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/sinam7~threads-post-scraper/runs": {
            "post": {
                "operationId": "runs-sync-sinam7-threads-post-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/sinam7~threads-post-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-sinam7-threads-post-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": [
                    "url"
                ],
                "properties": {
                    "url": {
                        "title": "Threads URL",
                        "type": "string",
                        "description": "Threads post url to scrape"
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
