Brand Partnership Valuation: Use Social Media Data to Set Your Creator Rate
"How much should I charge?" is the most common question creators ask. And "how much should we pay?" is the most common question brands ask. Both sides guess, and both sides usually get it wrong.
Here's how to use actual performance data to calculate a fair rate.
Calculate Your True Media Value
Your rate should be based on what your audience attention is actually worth, not follower count:
const API_KEY = process.env.SOCIAVAULT_API_KEY;
const BASE = 'https://api.sociavault.com/v1/scrape';
const headers = { 'X-API-Key': API_KEY };
// Industry CPMs for sponsored content
const NICHE_CPMS = {
finance: { ig: 25, tk: 18, yt: 30 },
beauty: { ig: 18, tk: 12, yt: 20 },
tech: { ig: 22, tk: 15, yt: 25 },
fitness: { ig: 15, tk: 10, yt: 18 },
food: { ig: 12, tk: 8, yt: 15 },
travel: { ig: 14, tk: 10, yt: 18 },
fashion: { ig: 20, tk: 14, yt: 22 },
gaming: { ig: 10, tk: 8, yt: 12 },
education: { ig: 16, tk: 12, yt: 20 },
general: { ig: 15, tk: 10, yt: 18 }
};
async function calculateCreatorRate(username, niche = 'general') {
const cpms = NICHE_CPMS[niche] || NICHE_CPMS.general;
// Instagram
const igProfileRes = await fetch(
`${BASE}/instagram/profile?username=${encodeURIComponent(username.instagram)}`,
{ headers }
);
const igProfile = (await igProfileRes.json()).data;
const igPostsRes = await fetch(
`${BASE}/instagram/posts?username=${encodeURIComponent(username.instagram)}`,
{ headers }
);
const igPosts = (await igPostsRes.json()).data || [];
await new Promise(r => setTimeout(r, 1200));
// TikTok
const tkProfileRes = await fetch(
`${BASE}/tiktok/profile?username=${encodeURIComponent(username.tiktok)}`,
{ headers }
);
const tkProfile = (await tkProfileRes.json()).data;
const tkPostsRes = await fetch(
`${BASE}/tiktok/user/posts?username=${encodeURIComponent(username.tiktok)}`,
{ headers }
);
const tkPosts = (await tkPostsRes.json()).data || [];
await new Promise(r => setTimeout(r, 1200));
// Calculate metrics
const igFollowers = igProfile?.follower_count || 0;
const igAvgLikes = igPosts.length > 0
? Math.round(igPosts.reduce((s, p) => s + (p.like_count || 0), 0) / igPosts.length) : 0;
const igAvgComments = igPosts.length > 0
? Math.round(igPosts.reduce((s, p) => s + (p.comment_count || 0), 0) / igPosts.length) : 0;
const igEngRate = igFollowers > 0
? ((igAvgLikes + igAvgComments) / igFollowers * 100) : 0;
const igEstImpressions = igAvgLikes * 12; // Estimate from likes
const tkFollowers = tkProfile?.stats?.followerCount || 0;
const tkAvgViews = tkPosts.length > 0
? Math.round(tkPosts.reduce((s, v) => s + (v.stats?.playCount || 0), 0) / tkPosts.length) : 0;
const tkAvgLikes = tkPosts.length > 0
? Math.round(tkPosts.reduce((s, v) => s + (v.stats?.diggCount || 0), 0) / tkPosts.length) : 0;
// Rate calculations
const igRate = Math.round(igEstImpressions / 1000 * cpms.ig);
const tkRate = Math.round(tkAvgViews / 1000 * cpms.tk);
// Apply engagement multiplier (high engagement = premium)
const engMultiplier = igEngRate > 5 ? 1.5 : igEngRate > 3 ? 1.2 : igEngRate > 1.5 ? 1.0 : 0.8;
const igAdjustedRate = Math.round(igRate * engMultiplier);
const tkAdjustedRate = Math.round(tkRate * engMultiplier);
console.log(`\nš° Brand Partnership Rate Card: @${username.instagram}`);
console.log('ā'.repeat(55));
console.log(` Niche: ${niche} (CPM: IG $${cpms.ig} | TK $${cpms.tk})`);
console.log(` Engagement multiplier: ${engMultiplier}x`);
console.log('\n Instagram:');
console.log(` Followers: ${igFollowers.toLocaleString()}`);
console.log(` Avg likes: ${igAvgLikes.toLocaleString()} | Avg comments: ${igAvgComments}`);
console.log(` Engagement rate: ${igEngRate.toFixed(2)}%`);
console.log(` Est impressions/post: ${igEstImpressions.toLocaleString()}`);
console.log(` Base rate: $${igRate.toLocaleString()}`);
console.log(` Adjusted rate: $${igAdjustedRate.toLocaleString()}/post`);
console.log('\n TikTok:');
console.log(` Followers: ${tkFollowers.toLocaleString()}`);
console.log(` Avg views: ${tkAvgViews.toLocaleString()} | Avg likes: ${tkAvgLikes.toLocaleString()}`);
console.log(` Base rate: $${tkRate.toLocaleString()}`);
console.log(` Adjusted rate: $${tkAdjustedRate.toLocaleString()}/video`);
// Package suggestions
console.log('\n Suggested Packages:');
console.log(` Single IG post: $${igAdjustedRate.toLocaleString()}`);
console.log(` Single TikTok: $${tkAdjustedRate.toLocaleString()}`);
console.log(` IG + TikTok bundle: $${Math.round((igAdjustedRate + tkAdjustedRate) * 0.85).toLocaleString()} (15% bundle discount)`);
console.log(` Monthly retainer (4+4): $${Math.round((igAdjustedRate * 4 + tkAdjustedRate * 4) * 0.70).toLocaleString()} (30% retainer discount)`);
return { igRate: igAdjustedRate, tkRate: tkAdjustedRate, engRate: igEngRate };
}
calculateCreatorRate(
{ instagram: 'gymshark', tiktok: 'gymshark' },
'fitness'
);
Brand-Side: Evaluate if a Creator is Worth the Price
Brands should verify creator metrics before paying:
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 evaluate_creator_value(username_ig, username_tk, asking_rate, niche_cpm=15):
"""Evaluate if a creator's asking rate is fair"""
print(f"\nš Creator Value Evaluation")
print("=" * 55)
print(f" Creator asking rate: ${asking_rate:,}")
# Instagram
r = requests.get(f"{BASE}/instagram/profile", headers=HEADERS,
params={"username": username_ig})
ig_profile = r.json().get("data", {})
time.sleep(1)
r = requests.get(f"{BASE}/instagram/posts", headers=HEADERS,
params={"username": username_ig})
ig_posts = r.json().get("data", [])
time.sleep(1)
# TikTok
r = requests.get(f"{BASE}/tiktok/profile", headers=HEADERS,
params={"username": username_tk})
tk_profile = r.json().get("data", {})
time.sleep(1)
r = requests.get(f"{BASE}/tiktok/user/posts", headers=HEADERS,
params={"username": username_tk})
tk_posts = r.json().get("data", [])
# Calculate real metrics
ig_followers = ig_profile.get("follower_count", 0)
ig_avg_likes = sum(p.get("like_count", 0) for p in ig_posts) / max(len(ig_posts), 1)
ig_avg_comments = sum(p.get("comment_count", 0) for p in ig_posts) / max(len(ig_posts), 1)
ig_eng_rate = (ig_avg_likes + ig_avg_comments) / max(ig_followers, 1) * 100
tk_followers = (tk_profile.get("stats") or {}).get("followerCount", 0)
tk_avg_views = sum((v.get("stats") or {}).get("playCount", 0) for v in tk_posts) / max(len(tk_posts), 1)
# Fair rate calculation
est_impressions = ig_avg_likes * 12
fair_rate_ig = est_impressions / 1000 * niche_cpm
fair_rate_tk = tk_avg_views / 1000 * (niche_cpm * 0.8)
combined_fair = fair_rate_ig + fair_rate_tk
# Verdict
rate_ratio = asking_rate / max(combined_fair, 1)
print(f"\n Instagram: @{username_ig}")
print(f" Followers: {ig_followers:,} | Eng rate: {ig_eng_rate:.2f}%")
print(f" Avg likes: {ig_avg_likes:,.0f} | Comments: {ig_avg_comments:.0f}")
print(f" Fair IG rate: ${fair_rate_ig:,.0f}")
print(f"\n TikTok: @{username_tk}")
print(f" Followers: {tk_followers:,}")
print(f" Avg views: {tk_avg_views:,.0f}")
print(f" Fair TK rate: ${fair_rate_tk:,.0f}")
print(f"\n Combined fair rate: ${combined_fair:,.0f}")
print(f" Asking rate: ${asking_rate:,}")
print(f" Ratio: {rate_ratio:.1f}x fair value")
if rate_ratio < 0.8:
print(f" Verdict: GREAT DEAL ā below market value")
elif rate_ratio < 1.2:
print(f" Verdict: FAIR ā aligned with data")
elif rate_ratio < 1.8:
print(f" Verdict: ABOVE MARKET ā negotiate or justify with audience quality")
else:
print(f" Verdict: OVERPRICED ā data doesn't support this rate")
# Red flags
flags = []
if ig_eng_rate < 1.0 and ig_followers > 50000:
flags.append("Low engagement rate ā possible inactive or fake followers")
if tk_avg_views < tk_followers * 0.05:
flags.append("Very low view/follower ratio on TikTok")
if ig_avg_comments < ig_avg_likes * 0.01 and ig_followers > 100000:
flags.append("Suspiciously low comment-to-like ratio")
if flags:
print(f"\n ā ļø Red Flags:")
for f in flags:
print(f" - {f}")
return {"fair_rate": combined_fair, "ratio": rate_ratio, "flags": flags}
evaluate_creator_value("creator_handle", "creator_handle", asking_rate=5000, niche_cpm=18)
Rate Card Benchmarks by Tier
| Tier | Followers | IG Post | IG Reel | TikTok | YouTube Integration |
|---|---|---|---|---|---|
| Nano | 5K-25K | $100-$300 | $150-$500 | $100-$400 | $200-$500 |
| Micro | 25K-100K | $300-$1,000 | $500-$2,000 | $400-$1,500 | $500-$2,000 |
| Mid | 100K-500K | $1K-$5K | $2K-$8K | $1.5K-$6K | $2K-$10K |
| Macro | 500K-2M | $5K-$15K | $8K-$25K | $6K-$20K | $10K-$30K |
| Mega | 2M+ | $15K-$50K | $25K-$100K | $20K-$80K | $30K-$150K |
These ranges vary by niche. Finance creators command 2-3x the rates of general lifestyle creators.
Negotiation Data Points
What to bring to the negotiation table:
| Data Point | For Creator | For Brand |
|---|---|---|
| Engagement rate | "My ER is 5.2%, 3x the average for my tier" | "Your ER is 1.1%, below average" |
| View consistency | "My last 20 videos averaged 500K views" | "Your views range from 10K to 2M ā inconsistent" |
| Audience demographics | "82% of my audience is in your target demo" | "Only 30% of your audience matches our target" |
| Conversion data | "My last brand post had 3.2% link click rate" | "What are your typical conversion rates?" |
| Content longevity | "My content gets 40% of views in the tail" | "Most engagement happens in the first 24 hrs" |
Get Started
Sign up free ā start calculating fair creator rates with real performance data.
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.