Back to Blog
Strategy

Employer Branding Analytics: Track Your Company's Hiring Reputation on Social

May 6, 2026
7 min read
S
By SociaVault Team
Employer BrandingHiringSocial Media AnalyticsLinkedInRecruitment

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 TypeTypical EngagementCandidate Intent
Employee day-in-the-life3-6%High
Office/workspace tours2-4%Medium
Team celebration/wins4-8%High
Hiring announcement posts1-3%Direct conversion
Company values/mission1-2%Low (too corporate)
Interview tips (from recruiter)3-7%Attracts applicants
Employee growth/promotion stories4-8%Very high
Tech stack / tools we use2-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

PlatformUseContent
LinkedInPrimary employer brand platformThought leadership, hiring posts, employee spotlights
InstagramCulture showcaseOffice life, team events, behind-the-scenes
TikTokGen Z recruitmentDay-in-the-life, intern content, honest takes
Twitter/XIndustry presenceCompany news, tech discussions, team achievements
ThreadsCasual brand voiceAuthentic team conversations, work culture takes

Get Started

Sign up free — start tracking your employer brand reputation across social platforms.


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.