Aperçu
Les vendeurs e-commerce perdent le placement Buy Box et la vélocité des ventes lorsque les concurrents baissent leurs prix et qu'ils ne réagissent pas pendant des jours. Ce workflow vérifie les prix des concurrents chaque matin sur Amazon, Walmart et Google Shopping. Les alertes se déclenchent lorsque les prix changent de plus de 5%. Surveiller 100 produits sur 2 plateformes coûte 1 $/jour.
Déclencheur
Cron quotidien à 7h00 UTC.
Planification
Tous les jours à 7h00 UTC
Étapes du workflow
Charger la liste de surveillance des produits concurrents
Lire la liste de surveillance des produits concurrents depuis la base de données ou JSON. Chaque entrée contient la requête de recherche du produit et les plateformes à surveiller.
Vérifier les prix actuels sur toutes les plateformes
Pour chaque produit, rechercher sur Amazon, Walmart ou Google Shopping. Extraire le prix actuel, le titre et l'URL de l'annonce.
Comparer aux prix de référence
Charger les prix d'hier depuis le stockage. Calculer la variation absolue et en pourcentage pour chaque produit.
Alerter en cas de changements significatifs
Envoyer des alertes Slack ou email pour les produits dont le prix a changé de plus que le seuil (par défaut 5%).
Mettre à jour la référence pour demain
Écrire les prix d'aujourd'hui dans le stockage comme nouvelle référence pour la comparaison de demain.
Implémentation Python
import requests, os, json
from pathlib import Path
API_KEY = os.environ["SCAVIO_API_KEY"]
THRESHOLD = 0.05
def check_price(query: str, platform: str) -> dict:
resp = requests.post(
"https://api.scavio.dev/api/v1/search",
headers={"x-api-key": API_KEY, "Content-Type": "application/json"},
json={"query": query, "platform": platform},
timeout=15,
)
data = resp.json()
top = (data.get("organic_results") or [{}])[0]
return {"title": top.get("title", ""), "price": top.get("price"), "url": top.get("link", "")}
watchlist = [
{"query": "sony wh-1000xm6", "platforms": ["amazon", "walmart"]},
{"query": "apple airpods pro 3", "platforms": ["amazon", "google-shopping"]},
]
baseline = json.loads(Path("baseline.json").read_text()) if Path("baseline.json").exists() else {}
alerts = []
for item in watchlist:
for p in item["platforms"]:
result = check_price(item["query"], p)
key = f"{item['query']}_{p}"
if result["price"] and baseline.get(key):
change = abs(result["price"] - baseline[key]) / baseline[key]
if change >= THRESHOLD:
alerts.append(f"{item['query']} ({p}): {baseline[key]} -> {result['price']} ({change*100:.1f}%)")
if result["price"]:
baseline[key] = result["price"]
Path("baseline.json").write_text(json.dumps(baseline, indent=2))
for a in alerts:
print(f"ALERT: {a}")Implémentation JavaScript
const fs = require('fs');
const H = {'x-api-key': process.env.SCAVIO_API_KEY, 'Content-Type': 'application/json'};
async function checkPrice(query, platform) {
const r = await fetch('https://api.scavio.dev/api/v1/search', {method:'POST', headers:H, body:JSON.stringify({query, platform})});
const d = await r.json();
const top = (d.organic_results||[])[0]||{};
return {title:top.title, price:top.price, url:top.link};
}
const watchlist = [{query:'sony wh-1000xm6', platforms:['amazon','walmart']}];
const baseline = fs.existsSync('baseline.json') ? JSON.parse(fs.readFileSync('baseline.json','utf8')) : {};
for (const item of watchlist) {
for (const p of item.platforms) {
const r = await checkPrice(item.query, p);
const key = item.query+'_'+p;
if (r.price && baseline[key] && Math.abs(r.price-baseline[key])/baseline[key] > 0.05) console.log('ALERT: '+item.query+' ('+p+'): '+baseline[key]+'->'+r.price);
if (r.price) baseline[key] = r.price;
}
}
fs.writeFileSync('baseline.json', JSON.stringify(baseline,null,2));Plateformes utilisées
Amazon
Recherche de produits avec prix, notes et avis
Walmart
Recherche de produits avec données de prix et d'exécution
Google Shopping
Résultats shopping avec prix multi-détaillants