Skip to content

About

Every public post from a Threads profile, by username. Python, Node.js and cURL clients for the Threads Profile Scraper on Apify, pay per result.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

Threads Profile Scraper: Posts by Username

Scrape every public post from one or more Threads profiles by username. Text, timestamps, likes, replies, reposts, media URLs and permalinks. Monitor mode returns only posts new since the last run. No login, no API key.

Run it on Apify: apify.com/themineworks/threads-profile-scraper Docs, FAQ and pricing: themineworks.com/actors/threads-profile-scraper

Price: From $1.20 per 1,000 posts on Apify's higher plans ($2.00 on the free plan), plus a $0.005 start fee per run. Failed and empty results are never charged.

What it returns

  • Fetch by username, multiple profiles per run
  • Full post text, timestamps, and engagement counts
  • Media URLs and permalinks per post
  • Monitor mode bills only for posts new since the last run
  • No login, no API key

Quick start

You need a free Apify account and its API token (Settings, API & Integrations).

Python

pip install apify-client
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("themineworks/threads-profile-scraper").call(run_input={
    "profileUsernames": [
        "zuck"
    ],
    "maxPosts": 25
})

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

Node.js

npm install apify-client
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('themineworks/threads-profile-scraper').call({
    "profileUsernames": [
        "zuck"
    ],
    "maxPosts": 25
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

cURL

One request that runs the actor and returns the results in the response (for runs under 5 minutes):

curl -X POST "https://api.apify.com/v2/acts/themineworks~threads-profile-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"profileUsernames": ["zuck"], "maxPosts": 25}'

Command line

This repo includes ready-made clients that save results to JSON and CSV:

python3 threads_profile_scraper.py --token YOUR_APIFY_TOKEN --profile-usernames "zuck" --max-posts "25"
node threads_profile_scraper.mjs --token YOUR_APIFY_TOKEN --profile-usernames "zuck" --max-posts "25"

Input

Field Type Default Description
profileUsernames (required) array ["zuck"] Threads usernames (without @) to scrape, used when mode=profile
maxPosts integer 25 Maximum posts to return across the whole run
includeReplies boolean false If true, include reply posts in the output
includeReposts boolean false If true, include reposts in the output
monitorMode boolean false Run on a schedule and get ONLY posts not delivered in a previous run, so you pay per new post instead of…

Output

One row per result, as JSON, CSV, Excel or through the API.

Field Type Description
post_id string Unique numeric post ID
code string Threads post shortcode
url string Full URL to the Threads post
username string Username of the post author
user_full_name string Display name of the post author
text string Text content of the post
posted_at string ISO 8601 timestamp when the post was published
like_count integer Number of likes on the post
reply_count integer Number of replies to the post
repost_count integer Number of reposts
quote_count integer Number of quote posts
media_type string Type of media attached (text, image, video, carousel)
hashtags array List of hashtags used in the post
scraped_at string ISO 8601 timestamp of when the record was scraped

Use it from an AI agent

The actor works as a tool in Claude, Cursor or any MCP client through Apify's MCP server:

https://mcp.apify.com/?tools=themineworks/threads-profile-scraper

FAQ

Can I scrape more than one profile in a run?

Yes. Pass a list of usernames and each one is fetched in the same run.

What does monitor mode do?

Remembers every post already delivered for a given username, so a scheduled run returns and bills only for posts new since the last one.

Does it work on private accounts?

No. It reads public profile timelines only, the same posts a logged-out visitor would see.

What fields come back per post?

Post text, timestamp, like/reply/repost counts, media URLs, and the permalink, plus author metadata.

How is this different from Threads Scraper?

This one is scoped to profile timelines only. Threads Scraper covers profile, post, search, and hashtag modes in one actor.

How much does the Threads Profile Scraper cost?

From $1.20 per 1,000 posts on Apify's higher plans ($2.00 on the free plan), plus a $0.005 start fee per run. Failed and empty results are never charged. You can cap what a single run may spend with the maximum cost setting on Apify.

Can I export the results to CSV or Excel?

Yes. Every run saves to an Apify dataset you can download as JSON, CSV, Excel or XML, or read through the API. The Python and Node clients in this repo also write the results to local files.

Can I run it on a schedule?

Yes. Save your input as a task on Apify and attach a schedule, or call the API from your own cron job. Scheduled runs are billed the same way as manual ones.

Related scrapers

Part of The Mine Works: 151 pay-per-result scrapers with no login and no browser setup on your side.

License

MIT © The Mine Works

About

Every public post from a Threads profile, by username. Python, Node.js and cURL clients for the Threads Profile Scraper on Apify, pay per result.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages