Las herramientas de escucha social cobran entre 200 y 500 dólares al mes por el seguimiento multiplataforma. Este canal cubre menciones web de Reddit, TikTok, YouTube y Google desde una única API a $0,020 por escaneo. Unifica los formatos de menciones, califica el sentimiento, rastrea el alcance y genera un informe de escucha diario.
Requisitos previos
- Python 3.8+
- solicita biblioteca
- Una clave API de Scavio de scavio.dev
- Términos de marca y nombres de competidores
Guia paso a paso
Paso 1: Configurar una colección de menciones multiplataforma
Consulta cada plataforma en busca de menciones de marca utilizando el punto final API correcto.
import os, requests, json
from datetime import datetime
from collections import Counter, defaultdict
API_KEY = os.environ['SCAVIO_API_KEY']
SH = {'x-api-key': API_KEY, 'Content-Type': 'application/json'}
TH = {'Authorization': f'Bearer {API_KEY}', 'Content-Type': 'application/json'}
BRAND = 'Scavio'
COMPETITORS = ['Tavily', 'SerpAPI']
def collect_mentions(brand):
mentions = []
# Google web mentions
data = requests.post('https://api.scavio.dev/api/v1/search',
headers=SH, json={'query': brand, 'country_code': 'us'}).json()
for r in data.get('organic_results', [])[:5]:
mentions.append({'platform': 'google', 'title': r.get('title', ''), 'text': r.get('snippet', ''), 'link': r.get('link', ''), 'reach': 0})
# Reddit mentions
data = requests.post('https://api.scavio.dev/api/v1/search',
headers=SH, json={'query': brand, 'platform': 'reddit', 'country_code': 'us'}).json()
for r in data.get('organic_results', [])[:5]:
mentions.append({'platform': 'reddit', 'title': r.get('title', ''), 'text': r.get('snippet', ''), 'link': r.get('link', ''), 'reach': 0})
# YouTube mentions
data = requests.post('https://api.scavio.dev/api/v1/search',
headers=SH, json={'query': brand, 'platform': 'youtube', 'country_code': 'us'}).json()
for r in data.get('organic_results', [])[:5]:
mentions.append({'platform': 'youtube', 'title': r.get('title', ''), 'text': r.get('snippet', ''), 'link': r.get('link', ''), 'reach': 0})
# TikTok mentions
data = requests.post('https://api.scavio.dev/api/v1/tiktok/search/videos',
headers=TH, json={'query': brand}).json()
for v in (data.get('videos', data.get('data', {}).get('videos', [])))[:5]:
mentions.append({'platform': 'tiktok', 'title': v.get('desc', '')[:80], 'text': v.get('desc', ''), 'link': '', 'reach': v.get('stats', {}).get('playCount', 0)})
return mentions
all_mentions = collect_mentions(BRAND)
by_platform = Counter(m['platform'] for m in all_mentions)
print(f'{BRAND}: {len(all_mentions)} total mentions')
for p, c in by_platform.most_common():
print(f' {p}: {c} mentions')
print(f'Cost: $0.020')Paso 2: Unificar la puntuación de sentimiento en todas las plataformas
Aplique un análisis de sentimiento consistente a todos los tipos de menciones.
POSITIVE = ['best', 'great', 'love', 'recommend', 'amazing', 'excellent', 'game changer', 'solid']
NEGATIVE = ['worst', 'terrible', 'avoid', 'hate', 'broken', 'expensive', 'scam', 'disappointed']
def score_sentiment(text):
text_lower = text.lower()
pos = sum(1 for w in POSITIVE if w in text_lower)
neg = sum(1 for w in NEGATIVE if w in text_lower)
if pos > neg: return 'positive'
if neg > pos: return 'negative'
return 'neutral'
def sentiment_by_platform(mentions):
results = defaultdict(lambda: Counter())
for m in mentions:
sentiment = score_sentiment(f'{m["title"]} {m["text"]}')
m['sentiment'] = sentiment
results[m['platform']][sentiment] += 1
print(f'\n=== Sentiment by Platform ===')
for platform, sentiments in results.items():
total = sum(sentiments.values())
pos_pct = sentiments['positive'] / total * 100 if total else 0
neg_pct = sentiments['negative'] / total * 100 if total else 0
print(f' {platform:10} | +{sentiments["positive"]} ~{sentiments["neutral"]} -{sentiments["negative"]} | {pos_pct:.0f}% positive')
return results
sentiment_by_platform(all_mentions)Paso 3: Generar informe de escucha social
Recopile todos los datos en un informe de escucha social procesable.
def social_listening_report(brand, mentions, competitors):
print(f'\n{"=" * 60}')
print(f' SOCIAL LISTENING REPORT - {brand}')
print(f' Date: {datetime.now().strftime("%Y-%m-%d")}')
print(f'{"=" * 60}')
# Overview
total = len(mentions)
positive = sum(1 for m in mentions if m.get('sentiment') == 'positive')
negative = sum(1 for m in mentions if m.get('sentiment') == 'negative')
total_reach = sum(m.get('reach', 0) for m in mentions)
print(f'\n Mentions: {total} | Reach: {total_reach:,}')
print(f' Sentiment: +{positive} ~{total-positive-negative} -{negative}')
# Platform breakdown
print(f'\n Platform Breakdown:')
by_platform = defaultdict(list)
for m in mentions:
by_platform[m['platform']].append(m)
for p, items in by_platform.items():
reach = sum(m.get('reach', 0) for m in items)
print(f' {p:10} | {len(items):3} mentions | reach: {reach:,}')
# Top mentions by reach
high_reach = sorted(mentions, key=lambda m: m.get('reach', 0), reverse=True)[:3]
if any(m.get('reach', 0) > 0 for m in high_reach):
print(f'\n Top by Reach:')
for m in high_reach:
if m.get('reach', 0) > 0:
print(f' [{m["platform"]}] {m["reach"]:,} reach: {m["title"][:40]}')
# Competitor comparison
if competitors:
print(f'\n Competitor Comparison:')
for comp in competitors:
comp_mentions = collect_mentions(comp)
print(f' {comp:15} | {len(comp_mentions)} mentions')
print(f'\n Cost: $0.020 per brand scan')
social_listening_report(BRAND, all_mentions, COMPETITORS)Ejemplo en Python
import os, requests
SH = {'x-api-key': os.environ['SCAVIO_API_KEY'], 'Content-Type': 'application/json'}
TH = {'Authorization': f'Bearer {os.environ["SCAVIO_API_KEY"]}', 'Content-Type': 'application/json'}
def listen(brand):
for platform in [None, 'reddit', 'youtube']:
body = {'query': brand, 'country_code': 'us'}
if platform: body['platform'] = platform
data = requests.post('https://api.scavio.dev/api/v1/search', headers=SH, json=body).json()
print(f'{platform or "google"}: {len(data.get("organic_results", []))} mentions')
tt = requests.post('https://api.scavio.dev/api/v1/tiktok/search/videos', headers=TH, json={'query': brand}).json()
print(f'tiktok: {len(tt.get("videos", []))} mentions')
listen('Scavio')
print('Cost: $0.020')Ejemplo en JavaScript
const SH = { 'x-api-key': process.env.SCAVIO_API_KEY, 'Content-Type': 'application/json' };
for (const p of [null, 'reddit', 'youtube']) {
const body = { query: 'Scavio', country_code: 'us', ...(p && { platform: p }) };
const data = await fetch('https://api.scavio.dev/api/v1/search', {
method: 'POST', headers: SH, body: JSON.stringify(body)
}).then(r => r.json());
console.log(`${p || 'google'}: ${(data.organic_results || []).length} mentions`);
}Salida esperada
Scavio: 18 total mentions
google: 5 mentions
reddit: 5 mentions
youtube: 4 mentions
tiktok: 4 mentions
Cost: $0.020
============================================================
SOCIAL LISTENING REPORT - Scavio
Date: 2026-05-20
============================================================
Mentions: 18 | Reach: 125,000
Sentiment: +10 ~6 -2
Platform Breakdown:
google | 5 mentions | reach: 0
reddit | 5 mentions | reach: 0
youtube | 4 mentions | reach: 0
tiktok | 4 mentions | reach: 125,000
Cost: $0.020 per brand scan