Vérifier les créateurs TikTok avant un sponsoring à l'aide d'une checklist API permet d'évaluer programmatiquement les taux d'engagement, le nombre d'abonnés, la cohérence du contenu et la fréquence de publication, au lieu de se fier à des captures d'écran ou à des métriques auto-déclarées. Ce tutoriel montre comment extraire un profil de créateur via l'API Scavio TikTok, calculer les signaux de confiance clés et noter les créateurs selon une grille de validation réussite/échec, afin d'allouer votre budget d'influenceurs en toute confiance.
Prérequis
- Clé API Scavio avec accès TikTok (250 crédits gratuits/mois sur scavio.dev)
- Python 3.9+ ou Node.js 18+
- Une liste de noms d'utilisateur de créateurs TikTok à évaluer
Parcours
Étape 1: Récupérer les données du profil du créateur
Utilisez le point de terminaison des informations utilisateur Scavio TikTok pour extraire le profil du créateur, incluant le nombre d'abonnés, le nombre d'abonnements, le total de likes, le nombre de vidéos et la bio. Cela vous donne les chiffres bruts nécessaires pour votre grille de validation.
import requests
API_KEY = 'your_scavio_api_key'
def get_creator_profile(username):
resp = requests.post(
'https://api.scavio.dev/api/v1/tiktok/user/info',
headers={'Authorization': f'Bearer {API_KEY}'},
json={'username': username}
)
resp.raise_for_status()
return resp.json()
profile = get_creator_profile('target_creator')
print(f'Followers: {profile.get("follower_count", 0):,}')
print(f'Total likes: {profile.get("total_likes", 0):,}')
print(f'Videos: {profile.get("video_count", 0)}')Étape 2: Extraire les vidéos récentes pour analyser l'engagement
Récupérez les publications récentes du créateur pour calculer des métriques d'engagement réelles. Les moyennes auto-déclarées ne sont pas fiables. Vous avez besoin de données par vidéo pour repérer les tendances et les valeurs aberrantes.
def get_recent_videos(username, count=20):
resp = requests.post(
'https://api.scavio.dev/api/v1/tiktok/user/posts',
headers={'Authorization': f'Bearer {API_KEY}'},
json={'username': username, 'count': count}
)
resp.raise_for_status()
return resp.json().get('posts', [])
videos = get_recent_videos('target_creator', count=20)Étape 3: Calculer le taux d'engagement et le score de cohérence
Calculez le taux d'engagement médian (likes + commentaires + partages divisé par les vues) sur les vidéos récentes. Utilisez la médiane plutôt que la moyenne pour éviter les biais dus à un seul contenu viral. Calculez également le coefficient de variation pour mesurer la régularité de leurs performances.
import statistics
def compute_engagement_metrics(videos):
rates = []
for v in videos:
views = v.get('views', 0)
if views < 100:
continue
engagement = v.get('likes', 0) + v.get('comments', 0) + v.get('shares', 0)
rates.append(engagement / views)
if not rates:
return {'median_rate': 0, 'consistency': 0, 'sample_size': 0}
median_rate = statistics.median(rates)
mean_rate = statistics.mean(rates)
stdev = statistics.stdev(rates) if len(rates) > 1 else 0
cv = stdev / mean_rate if mean_rate > 0 else 0
return {
'median_rate': round(median_rate * 100, 2),
'consistency': round((1 - min(cv, 1)) * 100, 1),
'sample_size': len(rates),
}
metrics = compute_engagement_metrics(videos)
print(f'Median engagement: {metrics["median_rate"]}%')
print(f'Consistency score: {metrics["consistency"]}%')Étape 4: Exécuter la checklist de validation
Notez le créateur selon une grille réussite/échec couvrant le nombre minimum d'abonnés, le seuil de taux d'engagement, le seuil de cohérence et la fréquence minimale de publication. Chaque vérification renvoie un résultat réussite/échec avec la valeur réelle afin que vous puissiez prendre des décisions éclairées.
def vet_creator(profile, metrics, videos):
checks = []
follower_count = profile.get('follower_count', 0)
checks.append({
'check': 'Min 10K followers',
'pass': follower_count >= 10000,
'value': f'{follower_count:,}',
})
checks.append({
'check': 'Engagement rate >= 3%',
'pass': metrics['median_rate'] >= 3.0,
'value': f'{metrics["median_rate"]}%',
})
checks.append({
'check': 'Consistency score >= 60%',
'pass': metrics['consistency'] >= 60,
'value': f'{metrics["consistency"]}%',
})
checks.append({
'check': 'At least 2 posts/week',
'pass': len(videos) >= 8,
'value': f'{len(videos)} posts in sample',
})
passed = sum(1 for c in checks if c['pass'])
return {'checks': checks, 'passed': passed, 'total': len(checks)}
result = vet_creator(profile, metrics, videos)
for c in result['checks']:
status = 'PASS' if c['pass'] else 'FAIL'
print(f'[{status}] {c["check"]}: {c["value"]}')
print(f'\nScore: {result["passed"]}/{result["total"]}')Exemple Python
import requests
import statistics
API_KEY = 'your_scavio_api_key'
def get_creator_profile(username):
resp = requests.post(
'https://api.scavio.dev/api/v1/tiktok/user/info',
headers={'Authorization': f'Bearer {API_KEY}'},
json={'username': username}
)
resp.raise_for_status()
return resp.json()
def get_recent_videos(username, count=20):
resp = requests.post(
'https://api.scavio.dev/api/v1/tiktok/user/posts',
headers={'Authorization': f'Bearer {API_KEY}'},
json={'username': username, 'count': count}
)
resp.raise_for_status()
return resp.json().get('posts', [])
def compute_engagement(videos):
rates = []
for v in videos:
views = v.get('views', 0)
if views < 100:
continue
eng = v.get('likes', 0) + v.get('comments', 0) + v.get('shares', 0)
rates.append(eng / views)
if not rates:
return {'median_rate': 0, 'consistency': 0}
median_rate = statistics.median(rates)
mean_rate = statistics.mean(rates)
stdev = statistics.stdev(rates) if len(rates) > 1 else 0
cv = stdev / mean_rate if mean_rate > 0 else 0
return {
'median_rate': round(median_rate * 100, 2),
'consistency': round((1 - min(cv, 1)) * 100, 1),
}
def vet_creator(username):
profile = get_creator_profile(username)
videos = get_recent_videos(username, count=20)
metrics = compute_engagement(videos)
checks = [
('Min 10K followers', profile.get('follower_count', 0) >= 10000),
('Engagement >= 3%', metrics['median_rate'] >= 3.0),
('Consistency >= 60%', metrics['consistency'] >= 60),
('2+ posts/week', len(videos) >= 8),
]
for label, passed in checks:
print(f'[{"PASS" if passed else "FAIL"}] {label}')
print(f'Score: {sum(p for _, p in checks)}/{len(checks)}')
vet_creator('target_creator')Exemple JavaScript
const API_KEY = 'your_scavio_api_key';
async function getProfile(username) {
const resp = await fetch('https://api.scavio.dev/api/v1/tiktok/user/info', {
method: 'POST',
headers: { 'Authorization': `Bearer ${API_KEY}`, 'Content-Type': 'application/json' },
body: JSON.stringify({ username }),
});
return resp.json();
}
async function getRecentVideos(username, count = 20) {
const resp = await fetch('https://api.scavio.dev/api/v1/tiktok/user/posts', {
method: 'POST',
headers: { 'Authorization': `Bearer ${API_KEY}`, 'Content-Type': 'application/json' },
body: JSON.stringify({ username, count }),
});
const data = await resp.json();
return data.posts || [];
}
function computeEngagement(videos) {
const rates = videos
.filter(v => (v.views || 0) >= 100)
.map(v => ((v.likes || 0) + (v.comments || 0) + (v.shares || 0)) / v.views);
if (!rates.length) return { medianRate: 0, consistency: 0 };
const sorted = [...rates].sort((a, b) => a - b);
const median = sorted[Math.floor(sorted.length / 2)];
const mean = rates.reduce((a, b) => a + b, 0) / rates.length;
const stdev = Math.sqrt(rates.reduce((s, r) => s + (r - mean) ** 2, 0) / rates.length);
const cv = mean > 0 ? stdev / mean : 0;
return {
medianRate: Math.round(median * 10000) / 100,
consistency: Math.round((1 - Math.min(cv, 1)) * 1000) / 10,
};
}
async function vetCreator(username) {
const profile = await getProfile(username);
const videos = await getRecentVideos(username, 20);
const metrics = computeEngagement(videos);
const checks = [
['Min 10K followers', (profile.follower_count || 0) >= 10000],
['Engagement >= 3%', metrics.medianRate >= 3.0],
['Consistency >= 60%', metrics.consistency >= 60],
['2+ posts/week', videos.length >= 8],
];
for (const [label, passed] of checks) {
console.log(`[${passed ? 'PASS' : 'FAIL'}] ${label}`);
}
console.log(`Score: ${checks.filter(c => c[1]).length}/${checks.length}`);
}
vetCreator('target_creator');Sortie attendue
[PASS] Min 10K followers
[PASS] Engagement >= 3%
[FAIL] Consistency >= 60%
[PASS] 2+ posts/week
Score: 3/4