Real Estate Social Media Analytics: Agent & Brokerage Performance Tracking
Real estate is one of the most competitive local markets on social media. Agents who build strong Instagram and TikTok presences get more leads, close more deals, and dominate their market. But most agents track nothing — they post sporadically and hope for the best.
Whether you're an individual agent, a brokerage managing 50 agents, or a PropTech company, this guide shows you how to use social data to actually compete.
Track Competitor Agents
Every market has top agents on social media. Track them:
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 compareAgents(handles) {
const results = [];
for (const handle of handles) {
// Get Instagram profile
const profileRes = await fetch(
`${BASE}/instagram/profile?handle=${encodeURIComponent(handle)}`,
{ headers }
);
const profile = (await profileRes.json()).data;
// Get recent posts
const postsRes = await fetch(
`${BASE}/instagram/posts?handle=${encodeURIComponent(handle)}`,
{ headers }
);
const posts = (await postsRes.json()).data || [];
const avgEng = posts.reduce(
(sum, p) => sum + (p.like_count || 0) + (p.comment_count || 0), 0
) / Math.max(posts.length, 1);
results.push({
handle,
name: profile?.full_name || handle,
followers: profile?.follower_count || 0,
posts: profile?.media_count || 0,
avgEngagement: Math.round(avgEng),
engRate: ((avgEng / Math.max(profile?.follower_count, 1)) * 100).toFixed(2),
bio: profile?.biography || '',
website: profile?.external_url || ''
});
await new Promise(r => setTimeout(r, 1500));
}
results.sort((a, b) => b.followers - a.followers);
console.log('\nReal Estate Agent Comparison:');
console.table(results.map(r => ({
Agent: r.name,
Handle: `@${r.handle}`,
Followers: r.followers.toLocaleString(),
'Avg Eng': r.avgEngagement.toLocaleString(),
'ER %': r.engRate
})));
return results;
}
// Compare agents in your market
compareAgents([
'ryanseacrest_realestate',
'theagencygroup',
'sothebysrealty',
'your_handle_here'
]);
Analyze What Real Estate Content Works
Different types of real estate content perform very differently:
async function analyzeRealEstateContent(handle) {
const postsRes = await fetch(
`${BASE}/instagram/posts?handle=${encodeURIComponent(handle)}`,
{ headers }
);
const posts = (await postsRes.json()).data || [];
const categories = {
listing_tour: {
keywords: ['listing', 'just listed', 'for sale', 'tour', 'walkthrough', 'sq ft', 'beds', 'baths'],
posts: [], totalEng: 0
},
sold: {
keywords: ['sold', 'just sold', 'closed', 'congrats', 'new homeowner'],
posts: [], totalEng: 0
},
market_update: {
keywords: ['market', 'rates', 'inventory', 'prices', 'mortgage', 'forecast'],
posts: [], totalEng: 0
},
tips_advice: {
keywords: ['tip', 'advice', 'mistake', 'first time', 'how to', 'should you'],
posts: [], totalEng: 0
},
personal_brand: {
keywords: ['grateful', 'journey', 'why I', 'my story', 'team', 'anniversary'],
posts: [], totalEng: 0
},
neighborhood: {
keywords: ['neighborhood', 'area', 'community', 'downtown', 'suburb', 'best place'],
posts: [], totalEng: 0
},
};
for (const post of posts) {
const caption = (post.caption?.text || '').toLowerCase();
const eng = (post.like_count || 0) + (post.comment_count || 0);
for (const [cat, config] of Object.entries(categories)) {
if (config.keywords.some(kw => caption.includes(kw))) {
config.posts.push(post);
config.totalEng += eng;
break;
}
}
}
console.log(`\nContent Performance for @${handle}:`);
console.log('─'.repeat(65));
const sorted = Object.entries(categories)
.filter(([, c]) => c.posts.length > 0)
.sort((a, b) => (b[1].totalEng / b[1].posts.length) - (a[1].totalEng / a[1].posts.length));
for (const [cat, config] of sorted) {
const avg = Math.round(config.totalEng / config.posts.length);
console.log(` ${cat.padEnd(20)} ${config.posts.length} posts — avg eng: ${avg.toLocaleString()}`);
}
}
analyzeRealEstateContent('theagencygroup');
Content Type Performance (Typical)
| Content Type | Engagement | Lead Gen Potential |
|---|---|---|
| Luxury listing tours | Very high | Medium |
| "Just Sold" celebrations | High | High (social proof) |
| First-time buyer tips | High | Very high |
| Market updates | Medium-high | High (authority) |
| Neighborhood guides | Medium | High (local SEO) |
| Personal stories | Medium | Medium |
| Behind-the-scenes (open houses) | Medium | Low |
TikTok for Real Estate
TikTok has become a massive lead gen channel for real estate agents. Track what's working:
async function findRealEstateTrends() {
const keywords = [
'house tour million',
'real estate agent day',
'first time homebuyer',
'house hunting',
'luxury real estate',
'home inspection fails',
'dream house tour',
'closing day realtor'
];
const results = [];
for (const keyword of keywords) {
const res = await fetch(
`${BASE}/tiktok/search/videos?query=${encodeURIComponent(keyword)}`,
{ headers }
);
const videos = (await res.json()).data || [];
const totalViews = videos.reduce((sum, v) => sum + (v.stats?.playCount || 0), 0);
results.push({
keyword,
videos: videos.length,
totalViews,
avgViews: Math.round(totalViews / Math.max(videos.length, 1))
});
await new Promise(r => setTimeout(r, 1000));
}
results.sort((a, b) => b.totalViews - a.totalViews);
console.log('\nReal Estate TikTok Trends:');
console.table(results.map(r => ({
Trend: r.keyword,
Videos: r.videos,
'Total Views': r.totalViews.toLocaleString(),
'Avg Views': r.avgViews.toLocaleString()
})));
}
findRealEstateTrends();
Brokerage-Level Analytics
For brokerage managers tracking agent performance across social:
async function brokerageReport(agents) {
const report = [];
for (const agent of agents) {
const profileRes = await fetch(
`${BASE}/instagram/profile?handle=${encodeURIComponent(agent.handle)}`,
{ headers }
);
const profile = (await profileRes.json()).data;
report.push({
name: agent.name,
handle: agent.handle,
followers: profile?.follower_count || 0,
posts: profile?.media_count || 0,
postsPerMonth: profile?.media_count ? Math.round(profile.media_count / 12) : 0,
bio: profile?.biography || '',
hasWebsite: !!profile?.external_url
});
await new Promise(r => setTimeout(r, 1000));
}
// Rankings
const byFollowers = [...report].sort((a, b) => b.followers - a.followers);
const byActivity = [...report].sort((a, b) => b.posts - a.posts);
console.log('\n📊 Brokerage Social Media Report\n');
console.log('Top Agents by Followers:');
byFollowers.slice(0, 10).forEach((a, i) => {
console.log(` ${i + 1}. ${a.name} (@${a.handle}) — ${a.followers.toLocaleString()}`);
});
console.log('\nMost Active Agents:');
byActivity.slice(0, 10).forEach((a, i) => {
console.log(` ${i + 1}. ${a.name} (@${a.handle}) — ${a.posts} total posts`);
});
// Identify agents who need coaching
const lowActivity = report.filter(a => a.posts < 50);
if (lowActivity.length > 0) {
console.log(`\n⚠ Agents needing social media coaching (< 50 posts):`);
lowActivity.forEach(a => {
console.log(` - ${a.name}: ${a.posts} posts, ${a.followers} followers`);
});
}
return report;
}
brokerageReport([
{ name: 'Agent One', handle: 'agent1_realty' },
{ name: 'Agent Two', handle: 'agent2_homes' },
// Add your brokerage agents
]);
Facebook for Real Estate
Facebook is still the #1 platform for real estate lead generation, especially for local markets and older demographics:
import os
import requests
import time
API_KEY = os.environ["SOCIAVAULT_API_KEY"]
BASE = "https://api.sociavault.com/v1/scrape"
HEADERS = {"X-API-Key": API_KEY}
def analyze_facebook_presence(handle):
"""Analyze a real estate agent's Facebook page"""
# Get page info
r = requests.get(f"{BASE}/facebook/profile", headers=HEADERS, params={"handle": handle})
profile = r.json().get("data", {})
# Get recent posts
r2 = requests.get(f"{BASE}/facebook/profile/posts", headers=HEADERS, params={"handle": handle})
posts = r2.json().get("data", [])
followers = profile.get("followers", 0) or profile.get("follower_count", 0)
likes = profile.get("likes", 0) or profile.get("like_count", 0)
print(f"\nFacebook Analysis: {handle}")
print(f" Page Followers: {followers:,}")
print(f" Page Likes: {likes:,}")
print(f" Recent Posts: {len(posts)}")
if posts:
total_reactions = sum(p.get("reactions", 0) or p.get("reaction_count", 0) for p in posts)
total_comments = sum(p.get("comments", 0) or p.get("comment_count", 0) for p in posts)
avg_reactions = total_reactions // max(len(posts), 1)
print(f" Avg Reactions/Post: {avg_reactions}")
print(f" Avg Comments/Post: {total_comments // max(len(posts), 1)}")
return {"handle": handle, "followers": followers, "posts": len(posts)}
# Compare competitor Facebook pages
agents = ["competitor1_realty", "competitor2_homes"]
for agent in agents:
analyze_facebook_presence(agent)
time.sleep(1.5)
Real Estate Agent Social Media Checklist
Use this checklist to evaluate your own social media presence against the data:
| Metric | Below Average | Average | Above Average | Top 10% |
|---|---|---|---|---|
| Instagram followers | <500 | 500-2K | 2K-10K | 10K+ |
| Posts per month | <4 | 4-8 | 8-15 | 15+ |
| Engagement rate | <1% | 1-3% | 3-5% | 5%+ |
| Video content % | 0% | 10-20% | 20-40% | 40%+ |
| Story frequency | Rarely | 2-3/week | Daily | Multiple daily |
Agent Lead Gen Strategy
Based on the data patterns we see from successful real estate agents:
- Post listing tours as Reels/TikToks — Video walkthroughs consistently get 3-5x more engagement than static photos
- Share "Just Sold" posts — Social proof that builds trust faster than any ad
- Create neighborhood guides — These rank well on Google AND perform on social
- Go live for open houses — Even 5-10 viewers generates real leads
- Track your top competitor — Whatever's working for them, adapt it
Get Started
Sign up free — start tracking real estate agents and brokerage performance today.
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.