El dropshipping exitoso comienza con la búsqueda de productos que tengan una fuerte demanda, buenos márgenes y una competencia manejable. La investigación manual de productos en Amazon y Walmart es tediosa y lenta. Este tutorial crea un proceso automatizado de investigación de productos que consulta ambas plataformas a través de la API de Scavio, calcula márgenes potenciales a partir de diferencias de precios, filtra por calidad de revisión y genera una lista clasificada de oportunidades de productos.
Requisitos previos
- Python 3.10 o superior
- solicita biblioteca instalada
- Una clave API de Scavio
- Una lista de nichos de productos para investigar
Guia paso a paso
Paso 1: Definir nichos de productos a investigar
Comience con categorías amplias de productos que tienden a tener un buen desempeño en el dropshipping. El script buscará en ambas plataformas cada nicho.
NICHES = [
"portable blender",
"posture corrector",
"led strip lights",
"phone tripod",
]Paso 2: Busque en ambas plataformas para cada nicho
Consulta Amazon y Walmart a través de la API de Scavio y recopila los mejores productos de cada uno.
from concurrent.futures import ThreadPoolExecutor
def search_platform(platform: str, query: str) -> list[dict]:
r = requests.post(
"https://api.scavio.dev/api/v1/search",
headers={"x-api-key": API_KEY},
json={"platform": platform, "query": query, "marketplace": "US"}
)
r.raise_for_status()
return r.json().get("products", [])[:10]
def research_niche(niche: str) -> dict:
with ThreadPoolExecutor(max_workers=2) as ex:
amazon_fut = ex.submit(search_platform, "amazon", niche)
walmart_fut = ex.submit(search_platform, "walmart", niche)
return {"amazon": amazon_fut.result(), "walmart": walmart_fut.result()}Paso 3: Puntuación de productos por oportunidad
Calcule una puntuación de oportunidad basada en el precio, la calificación y el volumen de reseñas. Calificaciones más altas con menor competencia indican buenas oportunidades.
def score_product(product: dict) -> float:
price = float(product.get("price", "0").replace("$", "").replace(",", "") or 0)
rating = float(product.get("rating", "0") or 0)
reviews = int(product.get("reviews_count", 0) or 0)
if price < 10 or price > 200:
return 0
review_score = min(reviews / 1000, 5)
return round(rating * review_score * (1 if 20 < price < 80 else 0.5), 2)Paso 4: Oportunidades clasificadas de salida
Ordene todos los productos en ambas plataformas por puntuación de oportunidad e imprima los mejores candidatos.
def find_opportunities(niches: list[str]) -> list[dict]:
all_products = []
for niche in niches:
data = research_niche(niche)
for platform, products in data.items():
for p in products:
p["platform"] = platform
p["niche"] = niche
p["score"] = score_product(p)
all_products.append(p)
return sorted(all_products, key=lambda x: x["score"], reverse=True)[:20]Ejemplo en Python
import os
import requests
from concurrent.futures import ThreadPoolExecutor
API_KEY = os.environ.get("SCAVIO_API_KEY", "your_scavio_api_key")
ENDPOINT = "https://api.scavio.dev/api/v1/search"
NICHES = ["portable blender", "posture corrector", "led strip lights"]
def search(platform: str, query: str) -> list[dict]:
r = requests.post(ENDPOINT, headers={"x-api-key": API_KEY},
json={"platform": platform, "query": query, "marketplace": "US"})
r.raise_for_status()
return r.json().get("products", [])[:10]
def score(p: dict) -> float:
price = float((p.get("price") or "0").replace("$", "").replace(",", "") or 0)
rating = float(p.get("rating") or 0)
if price < 10 or price > 200 or rating < 3.5:
return 0
return round(rating * min(int(p.get("reviews_count") or 0) / 500, 5), 2)
if __name__ == "__main__":
results = []
for niche in NICHES:
for platform in ["amazon", "walmart"]:
for p in search(platform, niche):
p["score"] = score(p)
p["src"] = platform
results.append(p)
for p in sorted(results, key=lambda x: x["score"], reverse=True)[:10]:
print(f"[{p['src']}] {p.get('title', '')[:50]} | {p.get('price')} | score: {p['score']}")Ejemplo en JavaScript
const API_KEY = process.env.SCAVIO_API_KEY || "your_scavio_api_key";
const ENDPOINT = "https://api.scavio.dev/api/v1/search";
async function search(platform, query) {
const res = await fetch(ENDPOINT, {
method: "POST",
headers: { "x-api-key": API_KEY, "Content-Type": "application/json" },
body: JSON.stringify({ platform, query, marketplace: "US" })
});
const data = await res.json();
return (data.products || []).slice(0, 10);
}
async function main() {
const niches = ["portable blender", "posture corrector"];
const results = [];
for (const niche of niches) {
const [amazon, walmart] = await Promise.all([
search("amazon", niche), search("walmart", niche)
]);
amazon.forEach(p => results.push({ ...p, src: "amazon" }));
walmart.forEach(p => results.push({ ...p, src: "walmart" }));
}
results.forEach(p => {
const price = parseFloat((p.price || "0").replace(/[$,]/g, ""));
p.score = price > 10 && price < 100 ? parseFloat(p.rating || 0) * 2 : 0;
});
results.sort((a, b) => b.score - a.score).slice(0, 10)
.forEach(p => console.log(`[${p.src}] ${p.title?.slice(0, 50)} | ${p.price}`));
}
main().catch(console.error);Salida esperada
[amazon] BlendJet 2 Portable Blender | $29.99 | score: 22.5
[walmart] Portable Blender USB Rechargeable | $19.99 | score: 18.0
[amazon] VOKKA Posture Corrector for Men and Women | $25.99 | score: 17.5
[amazon] Govee LED Strip Lights 50ft | $34.99 | score: 16.8