Volver al blog

Informe de Campaña de TikTok con Métricas de Publicaciones Públicas

Daniel Kim
Daniel Kim

Lead Scraping Automation Engineer

02-Sep-2026

TL;DR:

  • La elaboración de informes de campañas en TikTok comienza con una lista definida por el usuario. Enumere las cuentas de campaña y los ID de publicaciones antes de hacer coincidir cualquier registro recopilado.
  • Una publicación de campaña debe existir en la muestra recopilada. Mantenga visibles las entradas de la lista no coincidentes en lugar de convertir las publicaciones faltantes en rendimiento cero.
  • Las instantáneas con marcas de tiempo convierten contadores acumulativos en deltas. Reste el valor observado anteriormente de una publicación de su valor observado más tarde solo cuando ambos registros compartan el mismo ID de publicación y métrica.
  • El compromiso público no es atribución. Las cuentas de reproducciones, me gusta, comentarios, compartidos, recopilados y rebotes no prueban el alcance único, las ventas o el retorno de inversión.
  • Las distribuciones muestran la forma de la campaña. Informe las medianas, rangos y la participación de las publicaciones principales junto con los totales.
  • Gratis para comenzar. Las nuevas cuentas de Scrapeless incluyen crédito gratuito; cree una cuenta en el Panel de Scrapeless.

Introducción: la membresía de la campaña debe ser explícita

Las métricas de publicaciones públicas responden a una pregunta estrecha: ¿qué contadores eran visibles para una publicación conocida en un momento registrado? No identifican quién vio la publicación, quién compró un producto o qué interacción causó una conversión.

Esta guía construye la elaboración de informes de campañas en TikTok alrededor de ese límite. Un usuario proporciona las cuentas participantes y los ID de publicaciones, la tubería empareja esos ID con las muestras de publicaciones públicas recopiladas, y las instantáneas repetidas producen deltas métricas. El informe final separa publicaciones coincidentes, entradas de lista no coincidentes, valores acumulativos y cambios en intervalos.

Para el paso de resolución de cuentas que precede a la recolección de publicaciones, consulte la guía del scraper de perfiles de TikTok.

Tubería a Simple Vista

Un informe de campaña de publicaciones públicas tiene seis etapas:

  1. Definir la lista de campaña y los límites de informe.
  2. Resolver cada cuenta pública listada a sec_uid.
  3. Recopilar una muestra limitada de publicaciones para cada cuenta.
  4. Hacer coincidir los elementos recopilados con los ID de publicaciones de campaña proporcionados.
  5. Guardar instantáneas métricas con marcas de tiempo y calcular deltas comparables.
  6. Resumir la cobertura coincidente, distribuciones y publicaciones notables.

La lista define la membresía de atribución para este informe. El scraper no descubre qué publicaciones pertenecen a la campaña, y una mención o hashtag por sí sola no debería agregar una publicación a menos que las reglas de informe lo digan.

Requisitos Previos

  • Una cuenta de Scrapeless y un token de API del Panel de Scrapeless
  • Una lista de campaña que contenga nombres de usuario de cuentas y ID de publicaciones exactos
  • Una política de recolección fija y al menos dos observaciones con marcas de tiempo para deltas
  • Un token en vivo exportado como SCRAPELESS_API_KEY para el código a continuación

El ejemplo tiene una brecha de requisito previo porque depende de las credenciales de API del lector, la lista de campaña y las publicaciones públicas en vivo. No se presenta ninguna salida de muestra como un resultado real de campaña.

Etapa 1: Construir la Lista de Campaña

La lista es la tabla de control para el informe. Cada fila debe contener un ID de campaña, nombre de usuario público, ID de publicación, URL de publicación esperada cuando se conozca, fecha de publicación planificada si la proporciona el equipo de campaña y una etiqueta legible por humanos.

campaign_id username post_id asset_label
autumn_launch creator_a 1234567890123456789 Demostración de producto
autumn_launch creator_b 2345678901234567890 Tutorial

Mantenga los IDs de publicación como cadenas. Los identificadores grandes pueden perder precisión cuando las herramientas de hojas de cálculo o análisis los convierten en números.

La lista también debe distinguir entre publicaciones requeridas y opcionales. Una publicación requerida que no aparece en la muestra recopilada necesita un estado unmatched y una nota de revisión; sus métricas son desconocidas, no cero.

Etapa 2: Recopilar Publicaciones Públicas para las Cuentas Listadas

El camino de recolección utiliza scraper.tiktok.user.detail para resolver unique_id en sec_uid, seguido de scraper.tiktok.user.work para solicitar publicaciones públicas. La solicitud de publicaciones admite cursor y count, y su respuesta contiene un arreglo items.

Utilice la misma cantidad solicitada para cuentas comparables, pero informe la cantidad devuelta para cada una. La documentación disponible confirma la entrada del cursor sin establecer un bucle de historia completa universal. Si una publicación de campaña se encuentra fuera de la muestra recopilada, márkela como no coincidente y amplíe la recolección solo a través de una regla de continuación verificada en la respuesta actual y la documentación.

Cada ejecución de recolección necesita su propia marca de tiempo UTC. Almacene la respuesta del actor sin procesar bajo esa ejecución para que las métricas a nivel de publicación puedan ser reconstruidas si la lógica del informe cambia.

Comience a Raspando con Scrapeless

¡Potencie su flujo de trabajo de raspado web y automatización con Scrapeless!
Regístrese hoy y obtenga $5 en crédito gratuitosin necesidad de tarjeta de crédito.
Reclama tu crédito gratuito ahora en el Scrapeless Dashboard.

Etapa 3: Coincidir Publicaciones Sin Ocultar Gaps

Coincide en la cadena exacta del ID de publicación siempre que sea posible. Las URL pueden ayudar a los revisores, pero el análisis de URL no debe reemplazar un identificador estable cuando ambos están disponibles.

La tabla de coincidencias debe preservar cada fila de la lista:

estado significado tratamiento del informe
matched El ID de publicación exacto aparece en los elementos recopilados Guarda una instantánea con marca de tiempo
unmatched El ID de publicación está en la lista pero ausente de la muestra Mostrar como cobertura faltante, no cero
unexpected Una publicación recopilada no está en la lista de la campaña Mantener fuera de los totales de la campaña
duplicate El mismo ID de publicación aparece más de una vez en la entrada o almacenamiento Resolver antes de la agregación

Este paso de reconciliación es la pista de auditoría entre las operaciones de la campaña y la recopilación de datos públicos. Previene que un panel de control elimine silenciosamente una publicación requerida o añada una no relacionada porque usó un hashtag similar.

Etapa 4: Almacenar Instantáneas de Métricas con Marca de Tiempo

Una fila de instantáneas debe incluir ID de campaña, ID de publicación, cuenta, URL de publicación, tiempo de colección, tiempo de creación y cada contador público presente en la respuesta. Almacene los campos faltantes como nulos en lugar de cero.

SQLite funciona bien para un historial local compacto porque una clave compuesta puede prevenir observaciones duplicadas. La documentación de SQLite CREATE TABLE describe las restricciones de clave primaria y de tabla que pueden hacer cumplir una fila por publicación y tiempo de colección.

sql Copy
CREATE TABLE IF NOT EXISTS campaign_post_snapshots (
    campaign_id TEXT NOT NULL,
    post_id TEXT NOT NULL,
    collected_at TEXT NOT NULL,
    account TEXT NOT NULL,
    post_url TEXT,
    play_count INTEGER,
    like_count INTEGER,
    comment_count INTEGER,
    share_count INTEGER,
    collect_count INTEGER,
    repost_count INTEGER,
    PRIMARY KEY (campaign_id, post_id, collected_at)
);

Este esquema local no tiene un requisito externo y puede ser probado antes de que una credencial de API esté disponible. El código de recopilación a continuación crea la misma tabla e inserta registros coincidentes.

Etapa 5: Calcular Deltas y Distribución del Rendimiento

Un delta de métrica es el valor observado más tarde menos el valor observado antes para la misma publicación y campo. Cálculo solo cuando ambos valores están presentes. Si una corrección de plataforma o reinicio de campo produce un resultado negativo, manténguelo para revisión en lugar de reescribirlo a cero.

Use un par compartido de tiempos de instantáneas al comparar publicaciones. Una publicación observada durante 72 horas no debe clasificarse directamente contra una observada durante 6 horas sin una etiqueta de edad o intervalo explícita.

Los resúmenes de campaña se benefician de varias vistas:

  • Publicaciones coincidentes divididas por publicaciones de la lista
  • Últimos totales de métricas acumulativas
  • Deltas por publicación sobre un intervalo de instantánea común
  • Mediana y rango para cada métrica
  • Participación de la publicación principal del total de reproducciones o interacciones observadas
  • Conteo de métricas nulas y entradas de lista no coincidentes

La documentación del módulo statistics de Python define los cálculos de mediana. Una vista de distribución ayuda a mostrar si el rendimiento es amplio o concentrado, pero sigue siendo una descripción de los contadores públicos.

TikTok Ads Manager proporciona un entorno de primera parte separado para informes de campañas pagadas. Su guía de rendimiento de la campaña no debe confundirse con este flujo de trabajo de publicaciones públicas: las fuentes de datos, el acceso y las métricas disponibles difieren.

Etapa 6: Ensamblar la Canalización de Informes en Python

El siguiente script lee un CSV de la lista, recopila una muestra inicial limitada para cada cuenta listada, reconcilia los IDs de publicación exactos, inserta instantáneas coincidentes en SQLite y escribe un archivo de cobertura para revisión.

Nota: El código a continuación requiere un token de API de Scrapeless en SCRAPELESS_API_KEY, un campaign-roster.csv proporcionado por el lector y publicaciones de campaña públicas que aparecen en las muestras recopiladas.

python Copy
import csv
import json
import os
import sqlite3
from datetime import datetime, timezone
from urllib.request import Request, urlopen

ENDPOINT = "https://api.scrapeless.com/api/v1/scraper/request"
TOKEN = os.environ["SCRAPELESS_API_KEY"]
REQUESTED_COUNT = 35


def run_actor(actor, actor_input):
    data = json.dumps({"actor": actor, "input": actor_input}).encode()
    request = Request(
        ENDPOINT,
        data=data,
        headers={"x-api-token": TOKEN, "content-type": "application/json"},
        method="POST",
    )
    with urlopen(request, timeout=60) as response:
        return json.load(response)


with open("campaign-roster.csv", newline="", encoding="utf-8") as roster_file:
    roster = list(csv.DictReader(roster_file))

for row in roster:
    row["username"] = row["username"].lstrip("@")
    row["post_id"] = str(row["post_id"])

collected_at = datetime.now(timezone.utc).isoformat()
items_by_account = {}

for username in sorted({row["username"] for row in roster}):
    profile = run_actor("scraper.tiktok.user.detail", {"unique_id": username})
    response = run_actor(
        "scraper.tiktok.user.work",
        {"sec_uid": profile["sec_uid"], "cursor": "0", "count": REQUESTED_COUNT},
    )
    with open(f"{username}-{collected_at[:10]}-raw.json", "w", encoding="utf-8") as raw_file:
        json.dump(response, raw_file, ensure_ascii=False, indent=2)
    items_by_account[username] = {
        str(item.get("id") or item.get("post_id") or ""): item
        for item in response.get("items") or []
    }

connection = sqlite3.connect("campaign-reporting.db")
connection.execute("""
CREATE TABLE IF NOT EXISTS campaign_post_snapshots (
    campaign_id TEXT NOT NULL,
    post_id TEXT NOT NULL,
    collected_at TEXT NOT NULL,
    account TEXT NOT NULL,
    post_url TEXT,
    play_count INTEGER,
    like_count INTEGER,
    comment_count INTEGER,
    share_count INTEGER,
    collect_count INTEGER,
    repost_count INTEGER,
    PRIMARY KEY (campaign_id, post_id, collected_at)
)
""")

coverage = []
for row in roster:
    item = items_by_account.get(row["username"], {}).get(row["post_id"])
    status = "matched" if item else "unmatched"
    coverage.append({**row, "status": status, "collected_at": collected_at})
    if not item:
        continue
    connection.execute(
        """INSERT OR REPLACE INTO campaign_post_snapshots VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)""",
        (
            row["campaign_id"], row["post_id"], collected_at, row["username"],
            item.get("url") or item.get("post_url"), item.get("play_count"),
            item.get("like_count"), item.get("comment_count"), item.get("share_count"),
            item.get("collect_count"), item.get("repost_count"),
        ),
    )

connection.commit()
connection.close()

with open("campaign-coverage.csv", "w", newline="", encoding="utf-8") as output:
    writer = csv.DictWriter(output, fieldnames=coverage[0].keys())
    writer.writeheader()
    writer.writerows(coverage)

Ejecute la misma recopilación en el siguiente tiempo de observación planificado, luego una las filas de instantáneas consecutivas por ID de campaña e ID de publicación. Calcule cada delta solo donde ambos valores métricos no son nulos y mantenga las dos marcas de tiempo de colección en el resultado.

Plantilla de Informe de Campaña

El informe debe separar la cobertura del rendimiento:

Sección Campos requeridos Frontera de interpretación
Cobertura de la lista Publicaciones requeridas, publicaciones coincidentes, publicaciones no coincidentes Mide la cobertura de colección, no el éxito de la campaña
Tiempo de instantánea Primer y último tiempos de colección, intervalo Hace que las ventanas de delta sean comparables
Últimas métricas Contadores públicos por publicación Observaciones acumulativas, no personas únicas
Cambios en métricas Deltas por publicación para intervalos comunes Cambio entre dos instantáneas
Distribución Mediana, rango, participación de la publicación principal Muestra concentración en publicaciones coincidentes
Cola de revisión Campos faltantes, deltas negativos, IDs no coincidentes Requiere investigación humana
Si la campaña incluye medios pagados, ventas de afiliados, enlaces rastreados o eventos de conversión, une esos conjuntos de datos de primera parte en una capa claramente etiquetada. No sustituyas los recuentos de participación pública por esas medidas.

Manejar los Datos de la Campaña de Manera Responsable

Los informes de campaña pueden conectar el contenido público de los creadores con contratos, etiquetas internas o decisiones comerciales. Restringe el acceso a la lista y las anotaciones internas, minimiza los datos personales retenidos y define quién puede corregir un error de atribución.

Para programas de influencers, la guía de divulgación de la FTC es una referencia primaria útil para las responsabilidades de divulgación en los Estados Unidos. No reemplaza el asesoramiento legal ni las reglas que se aplican en otra jurisdicción.

Scrapeless proporciona el perfil y las publicaciones de actores a través de Scraping API. Revisa la página de precios actual antes de elegir recuentos de cuentas y frecuencia de instantáneas.

Conclusión: informa lo que las instantáneas demuestran

Los informes de campaña de TikTok necesitan una lista explícita, emparejamiento exacto de ID de publicaciones, observaciones con sello de tiempo y brechas de cobertura visibles. Esos controles convierten los contadores públicos en un registro auditado de publicaciones emparejadas y cambios métricos, manteniendo el alcance, las ventas y las reclamaciones de atribución en sus fuentes de datos adecuadas.

¿Listo para Crear un Informe de Métricas de Campaña?

Únete al Discord de Scrapeless o a la comunidad de Telegram para comparar patrones de modelado de datos. Crea una cuenta en el Tablero de Scrapeless cuando la lista de la campaña esté lista.

FAQ

Q: ¿Qué es el informe de campaña de TikTok con métricas de publicaciones públicas?

El informe de campaña de TikTok con métricas de publicaciones públicas rastrea contadores visibles para un conjunto definido de publicaciones de campaña en tiempos registrados. Mide esas observaciones y sus cambios, no el alcance único, las ventas o la atribución causal.

Q: ¿Cómo decide el flujo de trabajo qué publicaciones pertenecen a una campaña?

La lista proporcionada por el usuario decide la membresía de la campaña. La canalización empareja ID de publicaciones exactos y mantiene las publicaciones faltantes o inesperadas fuera de los totales de rendimiento hasta que se revisen.

Q: ¿Cuál es la diferencia entre una instantánea métrica y un delta?

Una instantánea es un contador público acumulativo observado en un momento. Un delta es la diferencia entre dos instantáneas válidas para la misma publicación, métrica e intervalo definido.

Q: ¿Se puede informar el recuento de reproducciones como alcance de campaña?

El recuento de reproducciones no debe informarse como alcance único de campaña. Es un contador de publicaciones públicas y no establece cuántas personas distintas vieron el contenido.

Q: ¿Deben las publicaciones de campaña no emparejadas recibir métricas cero?

Las publicaciones de campaña no emparejadas deben recibir un estado de unmatched y métricas nulas. Cero afirmaría un valor observado que la colección no produjo.

Q: ¿Reemplaza el flujo de trabajo el Administrador de Anuncios de TikTok?

El flujo de trabajo de publicaciones públicas no reemplaza el Administrador de Anuncios de TikTok ni otros sistemas de campaña de primera parte. Produce un conjunto de datos separado de los campos de publicaciones públicas admitidos.

Q: ¿Es legal la recolección de datos de campañas públicas?

La legalidad depende de la jurisdicción, el propósito, los datos, el método de acceso, los contratos y los términos aplicables. Limita la recolección a los campos públicos necesarios, protege los datos de la lista interna y obtiene asesoría legal para el programa específico.

En Scrapeless, solo accedemos a datos disponibles públicamente y cumplimos estrictamente con las leyes, regulaciones y políticas de privacidad del sitio web aplicables. El contenido de este blog es sólo para fines de demostración y no implica ninguna actividad ilegal o infractora. No ofrecemos garantías y renunciamos a toda responsabilidad por el uso de la información de este blog o enlaces de terceros. Antes de realizar cualquier actividad de scraping, consulte a su asesor legal y revise los términos de servicio del sitio web de destino u obtenga los permisos necesarios.

Artículos más populares

Catalogar