Threads Brand Monitor avatar

Threads Brand Monitor

Pricing

from $3.00 / 1,000 results

Go to Apify Store
Threads Brand Monitor

Threads Brand Monitor

Monitor Threads for brand mentions, competitor posts, keyword activity, and alerts with scheduled Apify runs.

Pricing

from $3.00 / 1,000 results

Rating

0.0

(0)

Developer

DigitalNomadPH

DigitalNomadPH

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

9 days ago

Last modified

Share

Track brand mentions, competitor posts, and keyword activity on Threads from scheduled Apify runs — without needing a Threads account or API access.


What does Threads Brand Monitor do?

Threads Brand Monitor fetches recent posts from Threads handles and keyword searches, normalises them into structured records, and emits per-group summaries and alerts. You configure one or more watchlists — each watchlist is a named group of handles and/or keywords — and the actor produces:

  • Post records for every matched Threads post
  • Profile records with follower counts, bios, and verification status for each monitored handle
  • Summary records per watchlist group with volume, engagement, sentiment breakdown, and change vs. the previous run
  • Alert records when thresholds are crossed (risk keyword hit, mention spike, high-engagement post)
  • A run summary with totals and timing

Run it on a schedule (daily or hourly) to track how a brand, competitor, or campaign evolves on Threads over time.


Why use Threads Brand Monitor?

  • No Threads account required — works with publicly accessible Threads pages
  • Scheduled monitoring — pair with Apify's built-in scheduler for daily or hourly reports
  • Delta mode — on repeat runs, only new posts since the last run are flagged is_new_since_last_run: true, avoiding duplicates in downstream tools
  • Multi-group watchlists — track your brand, competitors, and campaign hashtags in a single run, each with its own summary
  • Alerts included — get notified when a risk keyword appears, volume spikes, or a post goes viral
  • Structured output — clean JSON records ready for Google Sheets, BigQuery, Zapier, or any webhook

How to use

  1. Open the actor on Apify Console and click Try for free
  2. Configure your watchlists — add at least one group with handles or keywords to monitor (see Input section below)
  3. Set your risk keywords — words that trigger alert records when found in post text (e.g. outage, refund, bug)
  4. Enable Delta Mode if you plan to run on a schedule — this flags only new posts on each run
  5. Click Start — the actor runs and saves results to the default dataset
  6. Export or connect — download as CSV/JSON from the Output tab, or connect via Apify's API or integrations

For scheduled monitoring:

  • Go to Schedules → Create schedule → select this actor
  • Run daily at 08:00 UTC for a morning brand briefing
  • Enable Delta Mode so each run only surfaces new activity

Input

FieldTypeDefaultDescription
watchlistsarrayRequired. One or more named groups to monitor. Each group has a name, type, and lists of handles and/or keywords.
maxPostsPerHandleinteger25Max posts to collect per handle per run. Threads embeds ~4–8 posts in the initial page load.
maxPostsPerKeywordinteger50Max posts to collect per keyword search.
includeRepliesbooleanfalseInclude reply posts from handle timelines.
includeProfileStatsbooleantrueEmit a profile record per handle with follower count, bio, and verification status.
deltaModebooleanfalseOnly flag posts newer than the last run as is_new_since_last_run: true. Recommended for scheduled runs.
riskKeywordsarray["outage","refund","bug",...]Posts containing these words trigger negative_post alert records.
minEngagementinteger0Skip posts with fewer total interactions (likes + replies + reposts). Applies to handle posts only; keyword results always pass through.
alertThresholdsobject{mentionSpikeMultiplier: 3, minEngagementForAlert: 100}Controls when mention_spike and new_high_engagement_post alerts fire.
proxyConfigurationobjectApify residentialResidential proxies are recommended for keyword search. Threads may block datacenter IPs on search routes.

Example input

{
"watchlists": [
{
"name": "Our Brand",
"type": "brand",
"keywords": ["our-product-name", "#ourhashtag"],
"handles": ["our-threads-handle"]
},
{
"name": "Competitors",
"type": "competitor",
"handles": ["competitor-a", "competitor-b"],
"keywords": []
},
{
"name": "Campaign — Launch Week",
"type": "campaign",
"keywords": ["#launchweek", "product launch"],
"handles": []
}
],
"maxPostsPerHandle": 25,
"maxPostsPerKeyword": 50,
"deltaMode": true,
"riskKeywords": ["outage", "bug", "refund", "broken", "cancel", "scam"],
"alertThresholds": {
"mentionSpikeMultiplier": 3,
"minEngagementForAlert": 500
}
}

Output

All records land in the actor's default dataset. Each record has a record_type field to distinguish them.

Record types

record_typeOne row perKey fields
postEach matched Threads posttext, author_handle, published_at, like_count, reply_count, repost_count, risk_flags, sentiment_direction, is_new_since_last_run
profileEach monitored handlehandle, display_name, follower_count, bio, verified_status
summaryEach watchlist grouptotal_posts_seen, new_posts, top_post_url, risk_post_count, volume_change_vs_previous_run
alertEach threshold crossedalert_type, severity, message, trigger_value, post_url
run_summaryEntire runtotal_posts_returned, new_posts_returned, alerts_generated, run_started_at, run_finished_at

Sample post record

{
"record_type": "post",
"group_name": "Our Brand",
"group_type": "brand",
"match_type": "keyword",
"query": "our-product-name",
"platform": "threads",
"post_id": "3906263078447871896",
"post_url": "https://www.threads.net/@someuser/post/3906263078447871896",
"author_handle": "someuser",
"author_name": "Some User",
"text": "Just tried our-product-name for the first time and it's great!",
"published_at": "2026-05-27T11:54:28.000Z",
"like_count": 42,
"reply_count": 7,
"repost_count": 3,
"risk_flags": [],
"sentiment_direction": "positive",
"is_new_since_last_run": true
}

Sample summary record

{
"record_type": "summary",
"group_name": "Our Brand",
"group_type": "brand",
"new_posts": 12,
"total_posts_seen": 12,
"unique_authors": 9,
"total_likes": 847,
"total_replies": 134,
"top_post_url": "https://www.threads.net/@topuser/post/...",
"risk_post_count": 1,
"positive_post_count": 7,
"negative_post_count": 1,
"neutral_post_count": 4,
"volume_change_vs_previous_run": 4,
"summary_generated_at": "2026-05-27T12:03:11.000Z"
}

Sample alert record

{
"record_type": "alert",
"alert_type": "negative_post",
"severity": "medium",
"group_name": "Our Brand",
"trigger_value": 1,
"threshold": 1,
"post_url": "https://www.threads.net/@user/post/...",
"message": "1 post(s) matched risk keywords for \"Our Brand\"",
"generated_at": "2026-05-27T12:03:11.000Z"
}

Pricing and cost estimation

This actor is billed per dataset item. Results include post, profile, summary, alert, and run_summary records. The estimates below assume pay-per-result pricing around $1 per 1,000 dataset items and typical runs where most items are post records.

ScenarioApprox. dataset items per runEstimated cost
1 brand + 2 competitors, 3 keywords, daily~50-170 items~$0.05-$0.17/run
5 watchlist groups, 10 keywords, hourly~300-650 items~$0.30-$0.65/run
Large campaign with 20 keywords~500-1,050 items~$0.50-$1.05/run

Residential proxy usage (recommended for keyword search) adds a small additional cost per run. Enable delta mode on scheduled runs to minimise volume — each run only surfaces new activity.


Tips

Recommended schedule for brand monitoring:

  • Daily at 08:00 UTC — morning briefing cadence
  • Enable deltaMode: true to avoid re-processing the same posts
  • Set includeProfileStats: true to track follower count changes over time

Keyword search quality:

  • Threads keyword search returns posts by relevance, not recency — results vary between runs
  • Common keywords return more spam; use specific brand names or product handles for cleaner signal
  • Hashtags (e.g. #yourhashtag) work as keywords

Proxy configuration:

  • Residential proxies are pre-selected and recommended — Threads blocks datacenter IPs on search routes
  • Handle-based monitoring works without proxies; keyword search benefits most from residential IPs

Connecting results to other tools:

  • Use Apify's Google Sheets integration to append each run's posts to a tracking sheet
  • Use the webhook trigger to POST alert records to Slack or a CRM when severity: "high"
  • Filter the dataset by record_type: "summary" for a quick daily briefing

FAQ

Does this require a Threads login? No. The actor accesses public Threads pages only. Private accounts and login-gated content are not accessible.

How many posts does it return per handle? Threads embeds 4–8 posts in the initial page load per handle. Setting maxPostsPerHandle higher than this will not return more posts — the limit is what Threads serves in the public page, not a parameter we control.

Why are engagement metrics null for keyword search results? Keyword search uses Playwright to render the search results page. Engagement counts (likes, replies) are not reliably extractable from the rendered DOM without brittle class selectors. Handle-based posts include full engagement metrics from Threads' embedded JSON.

What languages does it support? All languages. Threads is a global platform and search results include posts in any language. Sentiment detection uses English keyword matching only — non-English posts will return sentiment_direction: null.

Does delta mode work across platform runs? Yes. Delta state is stored in Apify Key-Value Store, which persists between runs of the same actor. Each handle and keyword feed has its own anchor (last seen post ID and timestamp).

What happens if a handle doesn't exist or is private? The actor logs a warning and skips that handle. Other handles and keywords in the same watchlist group continue processing normally.


Support

Found a bug or have a feature request? Use the Issues tab on the actor page, or contact via the Apify Console support chat.