Threads Scraper — $0.15/1K · Posts, Profiles & Search avatar

Threads Scraper — $0.15/1K · Posts, Profiles & Search

Pricing

from $0.08 / 1,000 useful record delivereds

Go to Apify Store
Threads Scraper — $0.15/1K · Posts, Profiles & Search

Threads Scraper — $0.15/1K · Posts, Profiles & Search

Collect public Threads profiles and initial-page posts or keyword results. Source text, dates, engagement and media URLs with explicit coverage limits.

Pricing

from $0.08 / 1,000 useful record delivereds

Rating

0.0

(0)

Developer

Apivault Labs

Apivault Labs

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

13 hours ago

Last modified

Categories

Share

Threads public profiles, posts and search — illustrative artwork

Threads public posts, profiles and keyword research

Collect public Threads observations for content research, small account inventories and keyword monitoring. Get the source's post text, author, dates, available engagement counts and media URLs, or a public profile's name, biography and followers. No Threads login, user cookies, external provider key or mandatory paid proxy is required.

Coverage is the public initial page, not a complete archive. Profiles, feed availability and search ranking can vary by time and location. A public-page shell without structured records is an error, not a successful empty scrape. This is an independent tool and is not affiliated with Meta.

Quick start

Choose Recent profile posts, keep nasa and start with five records:

{"mode":"posts","usernames":["nasa"],"maxResults":5}

Inspect the Dataset and SUMMARY. Source may expose fewer posts than requested. A limit of 100 does not force a hundred records or add pagination.

Choose the right mode

GoalModeInputCoverage
Read public profile metadataprofilesusernamesOne profile record per accessible account
Read recent public postspostsusernamesInitial public feed only; primary posts, without contextual replies or quoted posts as extra rows
Search a phrasesearchsearchQueriesInitial public search results; source ranking, no exhaustive keyword coverage

Examples

Read one public profile:

{"mode":"profiles","usernames":["https://www.threads.com/@nasa"],"maxResults":1}

Compare two explicit accounts:

{"mode":"profiles","usernames":["nasa","zuck"],"maxResults":2}

Search a phrase:

{"mode":"search","searchQueries":["space"],"maxResults":5}

Request the recent source ordering:

{"mode":"search","searchQueries":["space"],"searchSort":"recent","maxResults":5}

Filter the accessible feed by date:

{"mode":"posts","usernames":["nasa"],"maxResults":5,"postedAfter":"2026-10-01","postedBefore":"2026-11-01"}

Date examples are historical sample configuration, not an instruction to use those dates forever. Change them to your research window. Filters do not recover older posts outside the initial page.

Output and missing values

RecordFieldsMeaning
Postid, shortcode, postUrl, username, authorId, text, publishedAtPublic identity and source text; source timestamp converted to UTC
EngagementlikeCount, replyCount, repostCount, quoteCountNonnegative source integers; unknown stays null, not zero
MediaimageUrls, videoUrlsSource URLs; files are not downloaded and links may expire
Profileid, username, fullName, biography, followerCount, isVerified, profileImageUrl, bioLinksValidated requested account identity and source metadata
ProvenancerecordType, sourceUrl, observedAtDistinguish collection time from publication time

A useful post must have a real identity/author and source text or media. A useful profile must match the requested handle, have an ID, name and valid follower count. Contextual replies, quoted posts and recommendations are not silently relabeled as the requested author's posts. Unknown fields remain null; real source zero is retained. Media-only posts can have null text. The illustrative contract does not guarantee every field on every record.

Complete input reference

ParameterDefaultPurpose
mode"posts"Select one output type. Public-source coverage is limited; inspect SUMMARY.
usernames["nasa"]For posts/profiles. Enter 1–20 handles or HTTPS threads.com / threads.net profile URLs. Ignored in search.
searchQueries"not set"Search mode only. Enter 1–20 phrases, at most 200 characters each.
searchSort"top"Requested source order, not a relevance or strict chronology guarantee.
maxResults5Global delivered-record cap across all inputs. Does not extend the public initial page.
sourceTimeoutSeconds60Overall source collection deadline, excluding Actor startup and output delivery.
postedAfter"not set"Optional ISO date or RFC3339 timestamp. Inclusive. Filters only accessible posts; does not fetch history.
postedBefore"not set"Optional ISO date or RFC3339 timestamp. Exclusive. Posts/search only; unknown dates are excluded when filtering.
proxyMode"direct"Direct by default. residential explicitly enables paid Apify Residential Proxy (US). Direct cloud IPs may receive HTTP429.

Optional Residential Proxy

Direct cloud requests can be rate limited. Choose the Residential route only if needed; Apify proxy traffic is charged separately in addition to result events and platform usage. This is not included in the per-record tariff. The Actor does not automatically switch to a paid proxy. It does not accept user credentials or cookies. Source refusal still fails visibly.

{"mode":"posts","usernames":["nasa"],"maxResults":3,"proxyMode":"residential"}

Limits, errors and completeness

The collector requests one public HTML page per distinct input, up to 20 inputs. Responses are capped at 6 MB, individual requests at 30 seconds and overall collection at sourceTimeoutSeconds. It does not accept arbitrary network destinations, login credentials or cookies. threads.net profile inputs normalize to the current threads.com domain.

maxResults is global across inputs. IDs are deduplicated within a run. Cross-run history and change detection are not built in; keep previous exports in your own database. Dates use UTC: after is inclusive, before exclusive. Unknown dates are excluded when applying a date filter.

SUMMARY records sources, delivered/collected counts, source-row count and sourceHasNextPage. A source continuation marker is not proof of fetched pagination: paginationConfirmed and fullCoverage remain false. Full post archives, all authored replies, reply-tree reconstruction, user search and private accounts are not supported in this initial version.

Invalid input, unavailable structured records and source HTTP failures go to ERRORS instead of the Dataset. A wholly failed request fails the run. Mixed batches preserve useful records, report PARTIAL and fail visibly so downstream tools can inspect the diagnostics. A valid source response with no matches can finish with zero records. This is different from a login shell or refused request.

Output can stop at the platform charging budget after collection; compare recordsCollected and recordsDelivered. deliveryLimited=true indicates this. No data quality or complete-coverage guarantee is inferred from a green run status alone.

Pricing

The tariff is $0.15 per 1,000 delivered records on FREE, $0.12 on Starter, $0.10 on Scale and $0.08 on Business (current enterprise tiers also $0.08). No start fee. Platform resources are paid separately by the user. A record is one useful post or profile delivered to the Dataset; failed inputs and diagnostics do not create result events.

At the FREE rate, five delivered records cost $0.00075 in result events plus platform usage. A failed or empty run can still incur resources. This is not an all-in cost or free monthly allowance. A charging budget may stop delivery after source collection; metering and termination are not instantaneous.

This is below the compared Automation Lab post/profile event prices; it is not a guarantee of the cheapest total run or equivalent archive coverage. Read the active Apify pricing card before running.

API, agents and automation

Use generic Apify API JSON matching this schema after the Actor is published. Select a single mode, cap the records, and inspect SUMMARY/ERRORS and run status before importing. Store your Apify token in your environment; never place it in an input or public URL.

JSON/CSV/Excel export, scheduling and webhooks use the standard Apify platform. There is no dedicated published n8n node, Python package or custom MCP server for this new Actor yet. Those integrations are not claimed. Permanent Actor ID: rba0ClR6EJZuftwwv. Actor page: https://apify.com/apivault_labs/threads-scraper.

import os
from apify_client import ApifyClient
client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("rba0ClR6EJZuftwwv").call(run_input={"mode":"posts","usernames":["nasa"],"maxResults":5}, max_total_charge_usd=0.02)
if run["status"] != "SUCCEEDED":
raise RuntimeError("Inspect SUMMARY and ERRORS before importing partial data")
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
print(row)

FAQ

Can I fetch every post? No. The public initial feed is a limited observation. A page cursor does not make the archive implemented.

Does search return only exact keyword matches? No. These are Threads' source-ranked results. No local exact-match filter or total-result count is promised.

Are follower counts added to every post author? No. Profile mode returns followers for supplied accounts; posts do not trigger hidden per-author requests or extra billing events.

Are reply counts the replies themselves? No. Counts are metadata. Reply bodies and complete conversations are not collected.

Can this calculate growth or engagement rate? No built-in historical baseline or inferred performance score is provided. Use source counts in your own reviewed analysis.

Will a failed run cost nothing? Result-event charges must correspond to useful delivered rows, while platform usage and any configured start fee remain separate. Read the final published tariff.