Employer Branding Analytics: Track Your Company's Hiring Reputation on Social
Every company is a brand to potential employees. And candidates research you on social media before they ever apply. If your LinkedIn posts get 12 likes and your competitor's get 1,200, candidates notice.
Here's how to track and improve your employer brand with data.
Benchmark Your Employer Brand vs Competitors
Compare your company's social presence against hiring competitors:
const API_KEY = process.env.SOCIAVAULT_API_KEY;
const BASE = 'https://api.sociavault.com/v1/scrape';
const headers = { 'X-API-Key': API_KEY };
async function benchmarkEmployerBrands(companies) {
const results = [];
for (const company of companies) {
const entry = { name: company.name, linkedin: null, instagram: null, twitter: null };
// LinkedIn company data
if (company.linkedin) {
const res = await fetch(
`${BASE}/linkedin/company?url=${encodeURIComponent(company.linkedin)}`,
{ headers }
);
const data = (await res.json()).data;
if (data) {
entry.linkedin = {
followers: data.followerCount || 0,
staff: data.staffCount || 0,
industry: data.industry || 'N/A',
followersPerEmployee: data.staffCount > 0
? Math.round((data.followerCount || 0) / data.staffCount)
: 0
};
}
await new Promise(r => setTimeout(r, 1500));
}
// Instagram
if (company.instagram) {
const res = await fetch(
`${BASE}/instagram/profile?username=${encodeURIComponent(company.instagram)}`,
{ headers }
);
const data = (await res.json()).data;
if (data) {
entry.instagram = {
followers: data.follower_count || 0,
posts: data.media_count || 0
};
}
await new Promise(r => setTimeout(r, 1200));
}
// Twitter
if (company.twitter) {
const res = await fetch(
`${BASE}/twitter/profile?username=${encodeURIComponent(company.twitter)}`,
{ headers }
);
const data = (await res.json()).data;
if (data) {
entry.twitter = {
followers: data.legacy?.followers_count || 0,
tweets: data.legacy?.statuses_count || 0
};
}
await new Promise(r => setTimeout(r, 1200));
}
results.push(entry);
}
console.log('\nEmployer Brand Benchmark');
console.log('═'.repeat(65));
console.log(`${' Company':<25} ${'LinkedIn':>12} ${'IG':>12} ${'Twitter':>12} ${'Follow/Emp':>12}`);
console.log(' ' + '─'.repeat(60));
results.forEach(r => {
const li = r.linkedin?.followers?.toLocaleString() || '-';
const ig = r.instagram?.followers?.toLocaleString() || '-';
const tw = r.twitter?.followers?.toLocaleString() || '-';
const ratio = r.linkedin?.followersPerEmployee?.toLocaleString() || '-';
console.log(` ${r.name.padEnd(23)} ${li.padStart(12)} ${ig.padStart(12)} ${tw.padStart(12)} ${ratio.padStart(12)}`);
});
return results;
}
benchmarkEmployerBrands([
{
name: 'Stripe',
linkedin: 'https://www.linkedin.com/company/stripe',
instagram: 'stripe',
twitter: 'stripe'
},
{
name: 'Shopify',
linkedin: 'https://www.linkedin.com/company/shopify',
instagram: 'shopify',
twitter: 'shopify'
},
{
name: 'Notion',
linkedin: 'https://www.linkedin.com/company/notionhq',
instagram: 'notionhq',
twitter: 'NotionHQ'
}
]);
The followers-per-employee ratio is an underrated metric. It tells you how well your brand reaches beyond your own workforce. A ratio under 10 means your social presence is mostly your own employees. Over 50 means you've built genuine external interest.
Monitor Employee Sentiment on Social
What current and former employees say on Reddit and Twitter carries enormous weight with candidates:
import os
import time
import requests
API_KEY = os.environ["SOCIAVAULT_API_KEY"]
BASE = "https://api.sociavault.com/v1/scrape"
HEADERS = {"X-API-Key": API_KEY}
def monitor_employee_sentiment(company_names):
"""Track what people say about working at these companies"""
results = []
for company in company_names:
queries = [
f"working at {company}",
f"{company} employee review",
f"{company} work culture"
]
all_posts = []
all_tweets = []
for q in queries:
# Reddit
r = requests.get(f"{BASE}/reddit/search", headers=HEADERS,
params={"query": q})
posts = r.json().get("data", [])
all_posts.extend(posts)
time.sleep(1)
# Twitter
r = requests.get(f"{BASE}/twitter/search", headers=HEADERS,
params={"query": q})
tweets = r.json().get("data", [])
all_tweets.extend(tweets)
time.sleep(1)
# Basic sentiment analysis
positive_words = [
"love", "great", "amazing", "best", "excellent",
"recommend", "awesome", "fantastic", "good culture",
"work-life", "growth", "supportive", "flexible"
]
negative_words = [
"toxic", "burnout", "terrible", "worst", "layoff",
"overworked", "underpaid", "management sucks", "micromanage",
"politics", "crunch", "fire", "quit"
]
reddit_texts = [f"{p.get('title', '')} {p.get('selftext', '')}" for p in all_posts]
twitter_texts = [(t.get("legacy") or {}).get("full_text", "") for t in all_tweets]
all_texts = reddit_texts + twitter_texts
pos_count = sum(1 for t in all_texts
for w in positive_words if w in t.lower())
neg_count = sum(1 for t in all_texts
for w in negative_words if w in t.lower())
total = pos_count + neg_count
sentiment_score = (pos_count / max(total, 1)) * 100
# Top themes
theme_counts = {}
themes = {
"Work-Life Balance": ["work-life", "wlb", "hours", "overtime", "flexible"],
"Compensation": ["salary", "pay", "compensation", "benefits", "stock", "equity"],
"Management": ["manager", "management", "leadership", "boss", "lead"],
"Culture": ["culture", "team", "people", "environment", "vibe"],
"Growth": ["growth", "career", "promotion", "learning", "opportunity"],
"Remote/Hybrid": ["remote", "hybrid", "wfh", "office", "return to office"]
}
for theme, keywords in themes.items():
count = sum(1 for t in all_texts for k in keywords if k in t.lower())
if count > 0:
theme_counts[theme] = count
top_themes = sorted(theme_counts.items(), key=lambda x: x[1], reverse=True)[:5]
results.append({
"company": company,
"reddit_posts": len(all_posts),
"twitter_mentions": len(all_tweets),
"sentiment_score": round(sentiment_score, 1),
"top_themes": top_themes,
"total_volume": len(all_texts)
})
# Print results
print("\n🏢 Employee Sentiment Analysis")
print("=" * 55)
for r in results:
sentiment_label = (
"Very Positive" if r["sentiment_score"] > 70
else "Positive" if r["sentiment_score"] > 55
else "Mixed" if r["sentiment_score"] > 40
else "Negative"
)
print(f"\n {r['company']}:")
print(f" Sentiment: {r['sentiment_score']}% positive ({sentiment_label})")
print(f" Volume: {r['reddit_posts']} Reddit posts, {r['twitter_mentions']} tweets")
print(f" Top Themes: {', '.join(f'{t[0]} ({t[1]})' for t in r['top_themes'])}")
# Comparison
print("\n Sentiment Ranking:")
for i, r in enumerate(sorted(results, key=lambda x: x["sentiment_score"], reverse=True)):
bar = "█" * int(r["sentiment_score"] / 5)
print(f" {i + 1}. {r['company']}: {bar} {r['sentiment_score']}%")
return results
monitor_employee_sentiment(["Google", "Meta", "Apple", "Microsoft", "Netflix"])
Track Job Posting Engagement
Your careers content is employer branding too. Monitor which posts resonate:
async function analyzeCareerContent(accounts) {
console.log('\nCareer Content Performance');
console.log('═'.repeat(55));
for (const account of accounts) {
const res = await fetch(
`${BASE}/instagram/posts?username=${encodeURIComponent(account.instagram)}`,
{ headers }
);
const posts = (await res.json()).data || [];
const careerKeywords = [
'hiring', 'join us', 'career', 'job', 'team',
'we\'re looking', 'open position', 'apply', 'workplace'
];
const careerPosts = [];
const normalPosts = [];
for (const p of posts) {
const caption = ((p.caption?.text) || '').toLowerCase();
const isCareer = careerKeywords.some(k => caption.includes(k));
const entry = {
likes: p.like_count || 0,
comments: p.comment_count || 0,
isCareer
};
if (isCareer) {
careerPosts.push(entry);
} else {
normalPosts.push(entry);
}
}
const avgCareerLikes = careerPosts.length > 0
? Math.round(careerPosts.reduce((s, p) => s + p.likes, 0) / careerPosts.length)
: 0;
const avgNormalLikes = normalPosts.length > 0
? Math.round(normalPosts.reduce((s, p) => s + p.likes, 0) / normalPosts.length)
: 0;
console.log(`\n @${account.instagram} (${account.name})`);
console.log(` Career posts: ${careerPosts.length}/${posts.length} (${Math.round(careerPosts.length / posts.length * 100)}% of content)`);
console.log(` Career avg likes: ${avgCareerLikes.toLocaleString()}`);
console.log(` Normal avg likes: ${avgNormalLikes.toLocaleString()}`);
console.log(` Career content performance: ${avgNormalLikes > 0 ? Math.round(avgCareerLikes / avgNormalLikes * 100) : 0}% of normal`);
await new Promise(r => setTimeout(r, 1500));
}
}
analyzeCareerContent([
{ name: 'HubSpot', instagram: 'hubspot' },
{ name: 'Salesforce', instagram: 'salesforce' },
{ name: 'Adobe', instagram: 'adobe' }
]);
Employer Brand Content Benchmarks
| Content Type | Typical Engagement | Candidate Intent |
|---|---|---|
| Employee day-in-the-life | 3-6% | High |
| Office/workspace tours | 2-4% | Medium |
| Team celebration/wins | 4-8% | High |
| Hiring announcement posts | 1-3% | Direct conversion |
| Company values/mission | 1-2% | Low (too corporate) |
| Interview tips (from recruiter) | 3-7% | Attracts applicants |
| Employee growth/promotion stories | 4-8% | Very high |
| Tech stack / tools we use | 2-5% | High for tech roles |
The winning pattern: show real people, not stock photos. Employee-generated content outperforms corporate content 3-5x on every platform.
Platform Strategy for Employer Branding
| Platform | Use | Content |
|---|---|---|
| Primary employer brand platform | Thought leadership, hiring posts, employee spotlights | |
| Culture showcase | Office life, team events, behind-the-scenes | |
| TikTok | Gen Z recruitment | Day-in-the-life, intern content, honest takes |
| Twitter/X | Industry presence | Company news, tech discussions, team achievements |
| Threads | Casual brand voice | Authentic team conversations, work culture takes |
Get Started
Sign up free — start tracking your employer brand reputation across social platforms.
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.