Skip to main content

Campaign Discovery Workflow

A comprehensive, step-by-step workflow for finding the perfect influencers for your marketing campaigns using the Influship API.

Overview

This guide walks you through the complete process: from defining campaign requirements to final creator selection, with code examples and best practices.

Step 1: Define Campaign Requirements

Before making any API calls, clearly define your campaign parameters:
  • Demographics: Age, gender, location
  • Interests: Specific topics, niches, categories
  • Platforms: Instagram, TikTok, YouTube, etc.
  • Brand awareness: Reach and impressions
  • Conversions: Sales, sign-ups, downloads
  • Engagement: Comments, shares, saves
  • Authenticity: Genuine connections with audience
  • Creator tier: Micro (10k-100k), Mid (100k-500k), Macro (500k+)
  • Number of creators: Campaign size
  • Engagement thresholds: Minimum engagement rate
  • Content requirements: Photos, videos, stories, reels
  • Brand values: Sustainability, inclusivity, etc.
  • Content style: Professional, casual, humorous
  • Past partnerships: Similar brands, competitors
Use AI-powered search with natural language to find relevant creators:
curl -X POST 'https://api.influship.com/v1/search' \
  -H 'X-API-Key: YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
    "query": "sustainable fashion influencers with engaged audiences who create authentic content",
    "filters": {
      "platform_filters": [
        {
          "platform": "instagram",
          "min_followers": 10000,
          "max_followers": 500000,
          "min_engagement_rate": 3.0
        }
      ]
    },
    "mode": "detailed",
    "limit": 25
  }'
{
  "items": [
    {
      "id": "550e8400-e29b-41d4-a716-446655440000",
      "name": "Emma Green",
      "avatar_url": "https://example.com/avatar.jpg",
      "bio": "Sustainable fashion advocate | Eco-conscious living",
      "profiles": [
        {
          "id": "prof_abc123",
          "platform": "instagram",
          "username": "emmagreen_style",
          "follower_count": 125000,
          "engagement_rate": 4.5,
          "verified": true,
          "avg_likes": 5625,
          "avg_comments": 312,
          "posts_per_week": 3.5
        }
      ],
      "ai_recommendation": {
        "score": 0.94,
        "explanation": "Strong sustainability focus with highly engaged audience. Consistent eco-fashion content and authentic partnerships."
      }
    }
  ],
  "filtered_total": 247,
  "has_more": true,
  "next_cursor": "eyJpZCI6MjV9"
}
Key metrics to review:
  • ai_recommendation.score - AI relevance score (0-1)
  • ai_recommendation.explanation - Why this creator matches
  • engagement_rate - Audience engagement quality
  • follower_count - Reach potential

Step 3: Analyze Top Candidates

Review AI recommendations and filter by relevance score:
// Sort by AI recommendation score
const topCreators = searchResults.items
  .sort((a, b) => b.ai_recommendation.score - a.ai_recommendation.score)
  .slice(0, 10);

// Filter by minimum AI score threshold
const qualifiedCreators = searchResults.items.filter(
  creator => creator.ai_recommendation.score >= 0.85
);

console.log(`Top candidates: ${topCreators.length}`);
console.log(`Qualified creators: ${qualifiedCreators.length}`);
What to look for:
  • High AI recommendation scores (>0.85)
  • Strong engagement rates (>3%)
  • Authentic audience growth
  • Relevant content themes

Step 4: Expand with Lookalike Discovery

Use your best candidates as seeds to find similar creators:
curl -X POST 'https://api.influship.com/v1/lookalike' \
  -H 'X-API-Key: YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
    "seeds": [
      {
        "id": "550e8400-e29b-41d4-a716-446655440000",
        "weight": 1.0
      },
      {
        "id": "987fcdeb-51a2-43d1-9f12-345678901234",
        "weight": 0.8
      }
    ],
    "filters": {
      "platform": ["instagram"],
      "audience_size": {
        "min": 50000,
        "max": 300000
      },
      "engagement_rate": {
        "min": 0.03
      }
    },
    "mode": "detailed",
    "limit": 30
  }'
Seed selection tips:
  • Use 2-5 seed creators for best results
  • Weight your best performers higher (1.0)
  • Use lower weights (0.5-0.8) for experimental seeds
  • Mix different creator types for diversity

Step 5: Brand Safety Analysis

Before finalizing, analyze creators for brand safety:
curl -X POST 'https://api.influship.com/v1/brand-safety/creators' \
  -H 'X-API-Key: YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
    "creator_ids": [
      "550e8400-e29b-41d4-a716-446655440000",
      "987fcdeb-51a2-43d1-9f12-345678901234"
    ]
  }'
{
  "results": [
    {
      "creator_id": "550e8400-e29b-41d4-a716-446655440000",
      "risk_level": "low",
      "risk_score": 0.15,
      "flags": [],
      "analysis": {
        "content_appropriateness": "safe",
        "past_controversies": "none_found",
        "language_analysis": "professional"
      }
    }
  ]
}
Risk levels:
  • Low (0-0.3): Safe for partnership
  • Medium (0.3-0.6): Review manually
  • High (0.6-1.0): Avoid or investigate further

Step 6: Deep Content Analysis

Analyze recent posts to understand content style:
// Get recent posts for each creator
async function analyzeCreatorContent(creatorId) {
  const posts = await fetch(
    `https://api.influship.com/v1/posts/by-creator?creator_id=${creatorId}&limit=20`,
    {
      headers: { 'X-API-Key': process.env.INFLUSHIP_API_KEY }
    }
  ).then(r => r.json());

  // Calculate content metrics
  const avgEngagement = posts.items.reduce((sum, post) => 
    sum + post.engagement_rate, 0) / posts.items.length;
  
  const contentTypes = posts.items.reduce((types, post) => {
    types[post.type] = (types[post.type] || 0) + 1;
    return types;
  }, {});

  return {
    creator_id: creatorId,
    avg_engagement: avgEngagement,
    content_types: contentTypes,
    post_count: posts.items.length
  };
}

// Analyze all finalists
const contentAnalysis = await Promise.all(
  safeCreators.map(c => analyzeCreatorContent(c.creator_id))
);

Step 7: Score and Rank Creators

Use the match endpoint to score creators against your campaign:
curl -X POST 'https://api.influship.com/v1/match' \
  -H 'X-API-Key: YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
    "creators": [
      {"id": "550e8400-e29b-41d4-a716-446655440000"},
      {"id": "987fcdeb-51a2-43d1-9f12-345678901234"}
    ],
    "search_intent": {
      "query": "sustainable fashion campaign targeting eco-conscious millennials",
      "context": "Brand launch for sustainable clothing line focusing on ethical manufacturing"
    }
  }'

Step 8: Final Selection

Combine all data points for final decision:
function scoreCreator(creator, safetyResult, matchResult, contentAnalysis) {
  return {
    id: creator.id,
    name: creator.name,
    platform: creator.profiles[0].platform,
    username: creator.profiles[0].username,
    
    // Metrics
    followers: creator.profiles[0].follower_count,
    engagement_rate: creator.profiles[0].engagement_rate,
    
    // Scores
    ai_relevance: creator.ai_recommendation.score,
    match_score: matchResult.match_score,
    brand_safety: 1 - safetyResult.risk_score,
    
    // Content
    posts_per_week: creator.profiles[0].posts_per_week,
    avg_engagement: contentAnalysis.avg_engagement,
    
    // Composite score (weighted)
    overall_score: (
      creator.ai_recommendation.score * 0.3 +
      matchResult.match_score * 0.3 +
      (1 - safetyResult.risk_score) * 0.2 +
      (creator.profiles[0].engagement_rate / 100) * 0.2
    )
  };
}

// Generate final rankings
const finalRankings = rankedCreators.map(matchResult => {
  const creator = topCreators.find(c => c.id === matchResult.creator_id);
  const safety = safetyAnalysis.results.find(s => s.creator_id === matchResult.creator_id);
  const content = contentAnalysis.find(c => c.creator_id === matchResult.creator_id);
  
  return scoreCreator(creator, safety, matchResult, content);
}).sort((a, b) => b.overall_score - a.overall_score);

console.log('Top 10 Creators for Campaign:', finalRankings.slice(0, 10));

Complete Example: End-to-End Workflow

async function discoverCreatorsForCampaign(campaignQuery, filters) {
  const API_KEY = process.env.INFLUSHIP_API_KEY;
  
  // Step 1: Search for creators
  console.log('🔍 Searching for creators...');
  const search = await fetch('https://api.influship.com/v1/search', {
    method: 'POST',
    headers: { 'X-API-Key': API_KEY, 'Content-Type': 'application/json' },
    body: JSON.stringify({ query: campaignQuery, filters, limit: 25 })
  }).then(r => r.json());
  
  console.log(`✅ Found ${search.items.length} creators`);
  
  // Step 2: Find lookalikes using top 3 creators
  console.log('👥 Finding similar creators...');
  const topSeeds = search.items
    .sort((a, b) => b.ai_recommendation.score - a.ai_recommendation.score)
    .slice(0, 3);
  
  const lookalikes = await fetch('https://api.influship.com/v1/lookalike', {
    method: 'POST',
    headers: { 'X-API-Key': API_KEY, 'Content-Type': 'application/json' },
    body: JSON.stringify({
      seeds: topSeeds.map(c => ({ id: c.id, weight: 1.0 })),
      limit: 30
    })
  }).then(r => r.json());
  
  console.log(`✅ Found ${lookalikes.items.length} similar creators`);
  
  // Step 3: Combine and deduplicate
  const allCreators = [...search.items, ...lookalikes.items];
  const uniqueCreators = [...new Map(
    allCreators.map(c => [c.id, c])
  ).values()];
  
  // Step 4: Brand safety check
  console.log('🛡️ Analyzing brand safety...');
  const safety = await fetch('https://api.influship.com/v1/brand-safety/creators', {
    method: 'POST',
    headers: { 'X-API-Key': API_KEY, 'Content-Type': 'application/json' },
    body: JSON.stringify({ creator_ids: uniqueCreators.map(c => c.id) })
  }).then(r => r.json());
  
  const safeCreators = safety.results.filter(r => r.risk_level !== 'high');
  console.log(`✅ ${safeCreators.length} creators passed safety check`);
  
  // Step 5: Match and score
  console.log('🎯 Scoring creators for campaign...');
  const matches = await fetch('https://api.influship.com/v1/match', {
    method: 'POST',
    headers: { 'X-API-Key': API_KEY, 'Content-Type': 'application/json' },
    body: JSON.stringify({
      creators: safeCreators.map(s => ({ id: s.creator_id })),
      search_intent: { query: campaignQuery }
    })
  }).then(r => r.json());
  
  // Step 6: Final rankings
  const rankings = matches.results
    .map(match => {
      const creator = uniqueCreators.find(c => c.id === match.creator_id);
      const safetyScore = safety.results.find(s => s.creator_id === match.creator_id);
      
      return {
        ...creator,
        match_score: match.match_score,
        safety_score: 1 - safetyScore.risk_score,
        overall_score: (match.match_score + creator.ai_recommendation.score) / 2
      };
    })
    .sort((a, b) => b.overall_score - a.overall_score);
  
  console.log(`✅ Campaign discovery complete! Top ${rankings.length} creators ranked.`);
  
  return rankings;
}

// Usage
const results = await discoverCreatorsForCampaign(
  'sustainable fashion influencers with engaged millennial audiences',
  {
    platform_filters: [{
      platform: 'instagram',
      min_followers: 10000,
      max_followers: 500000,
      min_engagement_rate: 3.0
    }]
  }
);

console.log('Top 10 Creators:', results.slice(0, 10));

Cost Optimization Tips

Start with Lite Mode

Use mode: "lite" for initial search, upgrade to detailed only for finalists

Batch Safety Checks

Run brand safety analysis on shortlist only, not all discovered creators

Smart Pagination

Request 25-50 results initially, paginate only if needed

Cache Results

Cache creator data for 24-48 hours to avoid repeated API calls

Expected Costs

For a typical campaign discovery workflow:
  • Initial search: 25 creators × 2.0 = 50 credits
  • Lookalike discovery: 30 creators × 1.0 = 30 credits
  • Brand safety (20 finalists): 20 × 2.0 = 40 credits
  • Creator matching (20 finalists): 20 × 0.1 = 2 credits
Total: ~122 credits per campaign

Best Practices

  • Start broad, then narrow with filters
  • Use descriptive, natural language queries
  • Include audience characteristics in search
  • Review AI explanations for insights
  • Prioritize engagement rate over follower count
  • Look for consistent engagement across posts
  • Check for authentic comments vs generic responses
  • Verify engagement matches audience size
  • Always run brand safety before outreach
  • Review recent content manually
  • Check for past brand partnerships
  • Verify creator values align with campaign
  • Mix micro (10k-100k) and mid-tier (100k-500k) creators
  • Include different content styles
  • Balance reach with engagement
  • Consider multiple platforms

Next Steps