Rastrear la disponibilidad de SKU de TikTok Shop y los cambios en el stock
Lead Scraping Automation Engineer
TL;DR:
- El seguimiento de inventario de TikTok Shop pertenece al nivel de SKU. La disponibilidad de stock y variantes a nivel de producto responde a diferentes preguntas.
- Un evento de stock necesita dos observaciones válidas. Los campos faltantes y las solicitudes fallidas permanecen desconocidos en lugar de convertirse en registros de falta de stock.
- La clave de comparación incluye el contexto del mercado. Mantén juntos el ID del producto, la región devuelta, el ID del SKU y los valores de opción.
- Nuevos, no disponibles y SKUs ausentes son diferentes estados. Una variante que falta en una respuesta debería entrar en revisión en lugar de ser marcada como descontinuada.
- Las instantáneas de productos públicas no son un libro de contabilidad de almacén. No reemplazan el inventario comprometido, reservado o de cumplimiento del lado del vendedor.
- Gratis para comenzar. Las nuevas cuentas de Scrapeless incluyen crédito gratis a través del Scrapeless Dashboard.
Introducción: un producto puede contener muchos estados de disponibilidad
Una página de producto puede estar disponible mientras que una talla o color no lo esté. Monitorear solo el objeto de stock agregado oculta la variante exacta que un comprador puede seleccionar.
Este tutorial expande la skus array devuelto por el actor de TikTok Shop de Scrapeless, almacena una fila por variante y observación, y produce eventos de falta de stock y de reabastecimiento. También mantiene los campos faltantes, fallos de solicitud y SKUs ausentes temporalmente fuera del flujo definitivo de eventos de stock.
La guía del raspador de TikTok Shop explica las capas de respuesta de producto y SKU utilizadas aquí.
Pipeline a Primera Vista
| Etapa | Acción | Salida |
|---|---|---|
| Vigilar | Suministrar pares de ID de producto y región | Lista de vigilancia de productos |
| Obtener | Solicitar cada página pública de producto | Instantánea de producto sin procesar |
| Expandir | Crear una fila por SKU | Tabla de instantáneas de variantes |
| Comparar | Unir cada SKU a su fila válida anterior | Cambios en disponibilidad |
| Revisar | Separar registros ausentes y desconocidos | Cola de calidad de datos |
El pipeline informa los campos de instantánea de producto que enfrenta al comprador. No es un sistema completo de inventario de almacén.
Requisitos Previos
- Una cuenta de Scrapeless y un token API del Scrapeless Dashboard
- Python 3 con la biblioteca estándar y SQLite
- Una lista de vigilancia de ID de productos públicos conocidos de TikTok Shop y regiones
- Un cronograma de observación definido y política de revisión
- Un
SCRAPELESS_API_KEYen vivo para el ejemplo API
El bloque de colección es una brecha de requisito previo porque un credencial y una lista de vigilancia real son suministrados por el lector. Las reglas de normalización siguen la respuesta documentada de la tienda sin presentar una salida en vivo inventada.
Etapa 1: Solicitar un Producto Conocido en una Región Fija
Llama a scraper.tiktok.shop.page con product_id y region. El resultado puede contener el region resuelto, el stock a nivel de producto, options, y skus. Cada SKU puede incluir sku_id, sus pares de opción, datos de precio anidados, available_quantity, in_stock, y una URL de imagen.
Mantén la región devuelta, incluso cuando difiera en mayúsculas del pedido. La región pertenece a cada clave de comparación porque la disponibilidad del producto puede variar según el mercado.
La documentación oficial de búsqueda de inventario de TikTok Shop separa las consultas de ID de producto y ID de SKU. Esa distinción también pertenece a un modelo de instantánea pública.
Etapa 2: Expandir Inventario de Producto y SKU por Separado
El objeto de stock a nivel de producto puede incluir un recuento de SKU, cantidad disponible agregada y una bandera de en stock. Estos campos resumen la respuesta del producto. No deberían sobrescribir las filas de variante.
Una fila normalizada de SKU debería contener:
| Campo | Propósito |
|---|---|
collected_at |
Identifica la observación |
product_id |
Vincula la variante a su producto |
region |
Previene comparaciones cruzadas de mercado |
sku_id |
Clave de comparación de variante estable |
option_signature |
Color legible por humanos, tamaño u otros pares de opción |
available_quantity |
Cantidad devuelta para ese SKU, nullable |
in_stock |
Bandera de disponibilidad devuelta, nullable |
collection_status |
Separa éxito de recopilación fallida |
No derives in_stock = false cuando available_quantity esté ausente. Preserva ambos campos porque la respuesta puede exponer uno sin suficiente evidencia para inferir el otro.
Comienza a Raspar con Scrapeless
¡Potencia tu flujo de trabajo de raspado web y automatización con Scrapeless!
Regístrate hoy y obtén $5 en crédito gratis — sin necesidad de tarjeta de crédito.Reclama tu crédito gratis ahora en el Scrapeless Dashboard.
Etapa 3: Almacenar Instantáneas de Variante en SQLite
Una tabla de solo anexos preserva cada estado observado. La documentación de CREATE TABLE de SQLite define la restricción de clave primaria utilizada aquí.
Nota: El código a continuación requiere un token de API Scrapeless en
SCRAPELESS_API_KEY, además deTIKTOK_SHOP_PRODUCT_IDyTIKTOK_SHOP_REGIONproporcionados por el lector.
python
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"
def fetch_product(product_id, region):
payload = json.dumps({
"actor": "scraper.tiktok.shop.page",
"input": {"product_id": str(product_id), "region": region},
}).encode()
request = Request(
ENDPOINT,
data=payload,
headers={
"x-api-token": os.environ["SCRAPELESS_API_KEY"],
"content-type": "application/json",
},
method="POST",
)
with urlopen(request, timeout=60) as response:
return json.load(response)
raw = fetch_product(
os.environ["TIKTOK_SHOP_PRODUCT_ID"],
os.environ["TIKTOK_SHOP_REGION"],
)
collected_at = datetime.now(timezone.utc).isoformat()
product_id = str(raw.get("product_id") or "")
region = str(raw.get("region") or "")
database = sqlite3.connect("tiktok-shop-inventory.sqlite3")
database.execute("""
CREATE TABLE IF NOT EXISTS sku_snapshots (
collected_at TEXT NOT NULL,
product_id TEXT NOT NULL,
region TEXT NOT NULL,
sku_id TEXT NOT NULL,
option_signature TEXT,
available_quantity INTEGER,
in_stock INTEGER,
PRIMARY KEY (collected_at, product_id, region, sku_id)
)
""")
for sku in raw.get("skus") or []:
options = sku.get("options") or []
signature = " | ".join(
f"{option.get('name', '')}={option.get('value', '')}"
for option in options
)
database.execute(
"INSERT INTO sku_snapshots VALUES (?, ?, ?, ?, ?, ?, ?)",
(
collected_at, product_id, region, str(sku.get("sku_id") or ""),
signature, sku.get("available_quantity"), sku.get("in_stock"),
),
)
database.commit()
database.close()
with open("tiktok-shop-product-raw.json", "w", encoding="utf-8") as output:
json.dump(raw, output, ensure_ascii=False, indent=2)
Almacene identificadores como texto y preserve el JSON sin procesar junto a la tabla normalizada. Esto hace que los cambios en etiquetas de opciones o esquemas sean revisables más tarde.
Etapa 4: Clasificar Cambios de Stock de Manera Conservadora
Un evento de disponibilidad válido compara el mismo ID de producto, región devuelta y ID de SKU a través de dos observaciones exitosas.
| Estado anterior | Estado actual | Evento |
|---|---|---|
true |
false |
out_of_stock |
false |
true |
back_in_stock |
| cantidad cambiada, banderas iguales | cambio de cantidad | quantity_changed |
| sin fila anterior | presente | new_sku_observed |
| presente antes, ausente ahora | no devuelto | sku_absent_review |
| fila anterior válida, solicitud fallida | desconocido | collection_gap |
No convierta sku_absent_review en inventario descontinuado de una observación. Las opciones de producto pueden cambiar, los campos pueden estar ausentes, y una solicitud fallida no contiene pruebas válidas de disponibilidad.
TikTok Shop documenta eventos de cambio de inventario del lado del vendedor con cantidades como disponibles, comprometidas y stock bloqueado por campaña en su especificación de webhook de inventario. Esas dimensiones del lado del vendedor son diferentes de la instantánea pública de la página de la tienda utilizada aquí.
Etapa 5: Producir el Informe de Disponibilidad
El informe debe incluir el nombre del producto, región, ID de SKU, firma de opción, tiempos de observación anteriores y actuales, banderas anteriores y actuales, cantidades anteriores y actuales, y tipo de evento. Mantenga las brechas de colección en una sección de calidad separada.
Agrupe la salida en tres colas:
- Cambios de disponibilidad confirmados
- Variantes recién observadas o ausentes temporalmente
- Campos faltantes y colecciones fallidas que requieren revisión
Esta separación evita que un equipo de operaciones actúe sobre un valor que el colector nunca observó.
Manejar Datos de Producto de Manera Responsable
Recolecte solo los campos de producto y SKU necesarios para la decisión de inventario. Evite duplicar medios de producto cuando almacenar URLs de origen es suficiente, y restrinja el acceso a listas de vigilancia internas o umbrales de alerta. El Marco de Privacidad NIST proporciona controles generales para la minimización y retención de datos.
Scrapeless proporciona el actor de la tienda a través de Scraping API. Revise la página de precios actual antes de establecer el tamaño y el cronograma de la lista de vigilancia.
Conclusión: preserva la incertidumbre en el modelo de eventos
El seguimiento de inventario de TikTok Shop se vuelve confiable cuando el stock de producto y la disponibilidad de SKU permanecen separados. Compare claves de variante exactas a través de instantáneas válidas, preserve datos faltantes como desconocidos y dirija SKU ausentes a revisión antes de declarar un evento de stock.
¿Listo para rastrear variantes de TikTok Shop?
Únete al Discord de Scrapeless o a la comunidad de Telegram para discutir esquemas de historial de variantes. Crea una cuenta en el Tablero de Scrapeless cuando la lista de vigilancia de productos esté lista.
Preguntas Frecuentes
P: ¿Qué debe monitorear un rastreador de inventario de TikTok Shop?
Un rastreador de inventario de TikTok Shop debe preservar el stock a nivel de producto y la disponibilidad de cada SKU como observaciones separadas.
P: ¿Un SKU faltante está automáticamente fuera de stock?
Un SKU faltante no está automáticamente fuera de stock. Márquelo para revisión a menos que una respuesta actual válida establezca explícitamente el estado no disponible.
P: ¿Qué clave identifica una instantánea de SKU comparable?
Utilice el ID de producto, la región devuelta y el ID de SKU. Almacene etiquetas de opción para revisión sin usarlas como la única clave.
P: ¿El stock público de la tienda es igual al inventario del almacén?
El stock público de la tienda no es igual a un libro mayor de almacén completo. Los sistemas del lado del vendedor pueden contener estados de reserva, compromiso, ubicación y cumplimiento no expuestos por la instantánea pública del producto.
P: ¿Necesito gestionar proxies o selectores de la página de la tienda?
El actor maneja su superficie de colección detrás de la solicitud de API. El llamador gestiona la lista de vigilancia, las marcas de tiempo, el almacenamiento, las comparaciones y las notificaciones.
P: ¿Es legal monitorear la disponibilidad pública de TikTok Shop?
La legalidad depende de la jurisdicción, el mercado, el propósito, el método de acceso y los términos aplicables. Utilice datos públicos para un propósito permitido y obtenga asesoría legal para el flujo de trabajo previsto.
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.


