How to Monitor Brand Mentions on Threads Automatically
People are talking about your brand on Threads. You just don't know about it.
Unlike Twitter/X, Threads doesn't have a notifications feature for brand keywords. There's no "mention alerts" toggle. No built-in search monitoring. If someone posts "SociaVault is incredible" or "SociaVault sucks" — you won't see it unless you manually search every day.
For small brands, that's annoying. For brands with reputation management needs, it's a liability. And for social media managers tracking multiple brands, it's impossible to do manually.
This guide shows you how to build automated brand monitoring for Threads — search for mentions, analyze sentiment, track mention volume over time, and get alerted when someone talks about your brand.
What You Can Monitor
Threads search gives you access to:
| Search Type | What You Get | Use Case |
|---|---|---|
| Brand name search | Posts mentioning your brand | Reputation monitoring |
| Product name search | Posts about specific products | Product feedback |
| Competitor search | Posts mentioning competitors | Competitive intelligence |
| Industry keyword search | Posts about your space | Trend awareness |
| User search | Find accounts talking about you | Influencer discovery |
Both post search and user search are available, giving you full coverage.
Basic Brand Mention Search
Start by pulling all recent mentions of your brand:
const axios = require('axios');
const API_KEY = process.env.SOCIAVAULT_API_KEY;
const BASE_URL = 'https://api.sociavault.com';
async function searchBrandMentions(brandName) {
const response = await axios.get(`${BASE_URL}/v1/scrape/threads/search`, {
params: { query: brandName },
headers: { 'X-API-Key': API_KEY }
});
const posts = response.data.data?.posts || [];
console.log(`\n=== BRAND MENTIONS: "${brandName}" ===`);
console.log(`Found ${posts.length} mentions\n`);
posts.forEach((post, i) => {
const text = post.caption?.text || '[no text]';
const likes = post.like_count || 0;
const replies = post.text_post_app_info?.direct_reply_count || 0;
const reposts = post.text_post_app_info?.reshare_count || 0;
const author = post.user?.username || 'unknown';
console.log(`${i + 1}. @${author} (${likes} likes, ${replies} replies, ${reposts} reposts)`);
console.log(` "${text.substring(0, 150)}${text.length > 150 ? '...' : ''}"`);
console.log('');
});
return posts;
}
await searchBrandMentions('SociaVault');
Cost: 1 credit per search.
Sentiment Analysis on Mentions
Knowing someone mentioned your brand isn't enough — you need to know if they're happy or angry:
import requests
import os
import re
API_KEY = os.getenv('SOCIAVAULT_API_KEY')
BASE_URL = 'https://api.sociavault.com'
headers = {'X-API-Key': API_KEY}
def analyze_mention_sentiment(brand_name):
"""Search for brand mentions and analyze sentiment"""
response = requests.get(
f'{BASE_URL}/v1/scrape/threads/search',
params={'query': brand_name},
headers=headers
)
posts = response.json().get('data', {}).get('posts', [])
positive_words = [
'love', 'amazing', 'great', 'best', 'awesome', 'excellent', 'perfect',
'recommend', 'incredible', 'fantastic', 'beautiful', 'helpful', 'worth',
'impressed', 'game changer', 'lifesaver', 'obsessed', 'chef\'s kiss'
]
negative_words = [
'hate', 'terrible', 'worst', 'awful', 'bad', 'broken', 'scam', 'trash',
'waste', 'disappointed', 'sucks', 'overpriced', 'buggy', 'frustrating',
'annoying', 'useless', 'avoid', 'ripoff', 'rip off'
]
results = {'positive': [], 'negative': [], 'neutral': []}
for post in posts:
text = (post.get('caption', {}).get('text', '') or '').lower()
author = post.get('user', {}).get('username', 'unknown')
likes = post.get('like_count', 0)
pos_count = sum(1 for w in positive_words if w in text)
neg_count = sum(1 for w in negative_words if w in text)
entry = {
'author': author,
'text': text[:150],
'likes': likes,
'replies': post.get('text_post_app_info', {}).get('direct_reply_count', 0)
}
if pos_count > neg_count:
results['positive'].append(entry)
elif neg_count > pos_count:
results['negative'].append(entry)
else:
results['neutral'].append(entry)
total = len(posts)
print(f'\n=== SENTIMENT REPORT: "{brand_name}" ({total} mentions) ===\n')
print(f'Positive: {len(results["positive"])} ({len(results["positive"])/max(total,1)*100:.0f}%)')
print(f'Negative: {len(results["negative"])} ({len(results["negative"])/max(total,1)*100:.0f}%)')
print(f'Neutral: {len(results["neutral"])} ({len(results["neutral"])/max(total,1)*100:.0f}%)')
if results['negative']:
print('\n⚠️ NEGATIVE MENTIONS (respond to these):')
for m in results['negative']:
print(f' @{m["author"]} ({m["likes"]} likes): "{m["text"]}..."')
if results['positive']:
print('\n✅ POSITIVE MENTIONS (amplify/thank these):')
for m in results['positive'][:5]:
print(f' @{m["author"]} ({m["likes"]} likes): "{m["text"]}..."')
return results
analyze_mention_sentiment('Nike')
The keyword-based approach isn't as accurate as proper NLP, but it catches 80% of clearly positive or negative mentions. If you need higher accuracy, pipe the text through an LLM for classification.
Monitor Multiple Brands + Competitors
Track your brand alongside competitors in one sweep:
async function competitiveMonitoring(brands) {
const report = {};
for (const brand of brands) {
const response = await axios.get(`${BASE_URL}/v1/scrape/threads/search`, {
params: { query: brand },
headers: { 'X-API-Key': API_KEY }
});
const posts = response.data.data?.posts || [];
// Calculate mention metrics
const totalLikes = posts.reduce((s, p) => s + (p.like_count || 0), 0);
const totalReplies = posts.reduce((s, p) =>
s + (p.text_post_app_info?.direct_reply_count || 0), 0
);
const avgEngagement = posts.length > 0
? Math.round(totalLikes / posts.length)
: 0;
// Find most-engaged mention
const topMention = posts.sort((a, b) =>
(b.like_count || 0) - (a.like_count || 0)
)[0];
report[brand] = {
mentionCount: posts.length,
totalLikes,
totalReplies,
avgEngagement,
topMention: topMention ? {
author: topMention.user?.username,
text: topMention.caption?.text?.substring(0, 100),
likes: topMention.like_count
} : null
};
}
console.log('\n=== COMPETITIVE MENTION REPORT ===\n');
Object.entries(report).forEach(([brand, data]) => {
console.log(`"${brand}": ${data.mentionCount} mentions | ${data.totalLikes} total likes | avg ${data.avgEngagement} likes/mention`);
if (data.topMention) {
console.log(` Top: @${data.topMention.author} (${data.topMention.likes} likes) "${data.topMention.text}..."`);
}
});
return report;
}
// Monitor your brand vs competitors
await competitiveMonitoring(['Nike', 'Adidas', 'New Balance', 'Puma']);
Find Influential Users Discussing Your Brand
Sometimes the most important insight isn't what's being said, but who's saying it. Use user search to find accounts related to your brand:
def find_brand_advocates(brand_name):
"""Find users who discuss or relate to your brand"""
response = requests.get(
f'{BASE_URL}/v1/scrape/threads/search-users',
params={'query': brand_name},
headers=headers
)
users = response.json().get('data', {}).get('users', [])
print(f'\n=== USERS RELATED TO "{brand_name}" ===\n')
for user in users:
username = user.get('username', 'unknown')
full_name = user.get('full_name', '')
followers = user.get('follower_count', 0)
verified = user.get('is_verified', False)
bio = user.get('biography', '')
badge = '✓' if verified else ' '
print(f'{badge} @{username} — {full_name}')
print(f' {followers:,} followers')
if bio:
print(f' Bio: {bio[:100]}')
print('')
return users
find_brand_advocates('Notion')
This surfaces brand accounts, fan accounts, reviewers, and influencers who talk about the brand — all potential outreach targets.
Automated Daily Monitoring Script
Put it all together into a daily monitoring pipeline:
const fs = require('fs');
async function dailyBrandMonitor(config) {
const { brands, competitors, keywords, outputFile } = config;
const timestamp = new Date().toISOString();
const report = { timestamp, brands: {}, competitors: {}, keywords: {} };
// Monitor own brands
for (const brand of brands) {
const response = await axios.get(`${BASE_URL}/v1/scrape/threads/search`, {
params: { query: brand },
headers: { 'X-API-Key': API_KEY }
});
const posts = response.data.data?.posts || [];
report.brands[brand] = {
mentions: posts.length,
totalEngagement: posts.reduce((s, p) =>
s + (p.like_count || 0) + (p.text_post_app_info?.direct_reply_count || 0), 0
),
posts: posts.slice(0, 5).map(p => ({
author: p.user?.username,
text: p.caption?.text?.substring(0, 200),
likes: p.like_count || 0
}))
};
}
// Monitor competitors
for (const comp of competitors) {
const response = await axios.get(`${BASE_URL}/v1/scrape/threads/search`, {
params: { query: comp },
headers: { 'X-API-Key': API_KEY }
});
const posts = response.data.data?.posts || [];
report.competitors[comp] = { mentions: posts.length };
}
// Monitor industry keywords
for (const kw of keywords) {
const response = await axios.get(`${BASE_URL}/v1/scrape/threads/search`, {
params: { query: kw },
headers: { 'X-API-Key': API_KEY }
});
const posts = response.data.data?.posts || [];
report.keywords[kw] = { mentions: posts.length };
}
// Append to log
let history = [];
if (fs.existsSync(outputFile)) {
history = JSON.parse(fs.readFileSync(outputFile, 'utf-8'));
}
history.push(report);
fs.writeFileSync(outputFile, JSON.stringify(history, null, 2));
// Print summary
console.log(`\n📊 Daily Brand Monitor — ${timestamp.split('T')[0]}\n`);
Object.entries(report.brands).forEach(([brand, data]) => {
console.log(`${brand}: ${data.mentions} mentions, ${data.totalEngagement} total engagement`);
});
console.log('\nCompetitor mention counts:');
Object.entries(report.competitors).forEach(([comp, data]) => {
console.log(` ${comp}: ${data.mentions}`);
});
return report;
}
// Run daily
await dailyBrandMonitor({
brands: ['YourBrand'],
competitors: ['Competitor1', 'Competitor2', 'Competitor3'],
keywords: ['social media analytics', 'influencer marketing'],
outputFile: 'threads-brand-monitor.json'
});
Schedule this with a cron job or a workflow automation tool like Make.com. After a week of data, you'll see trends in mention volume and can spot PR crises or viral moments early.
What to Do With Brand Mention Data
| Scenario | Action |
|---|---|
| Positive mention from large account | Thank publicly, ask to reshare |
| Negative mention with valid complaint | Respond with fix/solution within 2 hours |
| Competitor criticism thread | Monitor — don't pile on, but note the pain points |
| Question about your product | Answer directly — it's free customer support |
| Influencer praising your product organically | DM to explore partnership |
| Trending industry keyword | Create content responding to the trend |
The speed of response matters more than the response itself. Accounts that respond to mentions within 1 hour get 3x more positive sentiment in follow-up posts.
Get Started
Sign up free — start monitoring brand mentions on Threads today.
Full Threads API docs: docs.sociavault.com/api-reference/threads
Related Reading
Found this helpful?
Share it with others who might benefit
Ready to Try SociaVault?
Start extracting social media data with our powerful API. No credit card required.