Back to Blog
Strategy

Brand Partnership Valuation: Use Social Media Data to Set Your Creator Rate

May 11, 2026
7 min read
S
By SociaVault Team
Brand PartnershipsCreator RateInfluencer MarketingValuationAPI

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

TierFollowersIG PostIG ReelTikTokYouTube Integration
Nano5K-25K$100-$300$150-$500$100-$400$200-$500
Micro25K-100K$300-$1,000$500-$2,000$400-$1,500$500-$2,000
Mid100K-500K$1K-$5K$2K-$8K$1.5K-$6K$2K-$10K
Macro500K-2M$5K-$15K$8K-$25K$6K-$20K$10K-$30K
Mega2M+$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 PointFor CreatorFor 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.


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.