Le problème
Les workflows n8n qui appellent plusieurs API d'enrichissement (recherche, données d'entreprise, profils sociaux) reçoivent des réponses dans des schémas différents. Une API renvoie les résultats dans un tableau 'data', une autre dans 'results', une autre dans 'items'. Les noms de champs diffèrent : 'title' vs 'name' vs 'headline'. Les types diffèrent : prix en chaîne de caractères vs nombre. Chaque nœud en aval doit gérer toutes les variations de schéma possibles, sinon le workflow échoue silencieusement lorsqu'une API change son format de réponse. Déboguer ces échecs dans un constructeur de workflow visuel est pénible car l'erreur apparaît trois nœuds en aval du problème réel.
La solution Scavio
Construisez un sous-workflow normalisateur dans n8n qui se situe entre chaque appel API d'enrichissement et votre logique en aval. Le normalisateur valide la réponse, mappe les champs spécifiques au vendeur vers votre schéma canonique, gère les champs manquants avec des valeurs par défaut, et transmet un objet uniforme en aval. Le schéma de réponse cohérent de Scavio en fait la source la plus facile à normaliser car la même structure JSON revient quelle que soit la plateforme. Un modèle de normalisateur couvre Google, YouTube, Amazon, Walmart, Reddit et TikTok.
Avant
Avant la normalisation, les workflows n8n échouaient silencieusement lorsque les API d'enrichissement changeaient les formats de réponse. Le débogage nécessitait de tracer les données à travers plusieurs nœuds pour trouver où une disparité de nom de champ provoquait une défaillance en aval.
Après
Après avoir ajouté des sous-workflows normalisateurs, chaque nœud en aval reçoit des schémas identiques. Les changements de format d'API sont détectés au niveau du normalisateur, et leur correction nécessite la mise à jour d'un seul sous-workflow au lieu de chaque nœud qui consomme les données.
À qui cela s'adresse
Les créateurs de workflows n8n qui enchaînent plusieurs API d'enrichissement et sont fatigués de déboguer des décalages de schéma trois nœuds en aval. Toute personne construisant des workflows d'automatisation complexes qui consomment des données provenant de plusieurs sources.
Avantages clés
- Schéma canonique en aval quel que soit le format de l'API source
- Les valeurs par défaut des champs manquants évitent les échecs silencieux en aval
- Un modèle de normalisateur couvre les six plateformes Scavio
- Les changements de format d'API sont détectés et corrigés en un seul endroit
- Sous-workflow n8n réutilisable dans plusieurs workflows parents
Exemple Python
import requests
API_KEY = "your_scavio_api_key"
def normalize_scavio_response(raw: dict, platform: str) -> list[dict]:
"""Normalize Scavio response to canonical schema for n8n downstream nodes."""
normalized = []
for item in raw.get("organic", []):
entry = {
"title": item.get("title", ""),
"url": item.get("link", ""),
"description": item.get("snippet", ""),
"position": item.get("position"),
"source_platform": platform,
}
# Platform-specific enrichment
if platform in ("amazon", "walmart"):
entry["price"] = float(item.get("price", 0)) if item.get("price") else None
entry["rating"] = float(item.get("rating", 0)) if item.get("rating") else None
entry["reviews"] = int(item.get("reviews", 0)) if item.get("reviews") else 0
elif platform == "youtube":
entry["views"] = int(item.get("views", 0)) if item.get("views") else 0
entry["channel"] = item.get("channel", "")
elif platform == "reddit":
entry["score"] = int(item.get("score", 0)) if item.get("score") else 0
entry["comments"] = int(item.get("comments", 0)) if item.get("comments") else 0
entry["subreddit"] = item.get("subreddit", "")
normalized.append(entry)
return normalized
def search_and_normalize(query: str, platform: str) -> list[dict]:
res = requests.post(
"https://api.scavio.dev/api/v1/search",
headers={"x-api-key": API_KEY},
json={"platform": platform, "query": query},
timeout=15,
)
res.raise_for_status()
return normalize_scavio_response(res.json(), platform)
# Same downstream schema regardless of platform
google_results = search_and_normalize("project management tool", "google")
amazon_results = search_and_normalize("project management book", "amazon")
reddit_results = search_and_normalize("project management tool recommendation", "reddit")
for source in [google_results, amazon_results, reddit_results]:
if source:
print(f"Platform: {source[0]['source_platform']} - {len(source)} results")
print(f" First: {source[0]['title'][:60]}")Exemple JavaScript
const API_KEY = "your_scavio_api_key";
function normalizeResponse(raw, platform) {
return (raw.organic ?? []).map((item) => {
const entry = {
title: item.title ?? "",
url: item.link ?? "",
description: item.snippet ?? "",
position: item.position ?? null,
sourcePlatform: platform,
};
if (["amazon", "walmart"].includes(platform)) {
entry.price = item.price ? Number(item.price) : null;
entry.rating = item.rating ? Number(item.rating) : null;
entry.reviews = item.reviews ? Number(item.reviews) : 0;
} else if (platform === "youtube") {
entry.views = item.views ? Number(item.views) : 0;
entry.channel = item.channel ?? "";
} else if (platform === "reddit") {
entry.score = item.score ? Number(item.score) : 0;
entry.comments = item.comments ? Number(item.comments) : 0;
entry.subreddit = item.subreddit ?? "";
}
return entry;
});
}
async function searchAndNormalize(query, platform) {
const res = await fetch("https://api.scavio.dev/api/v1/search", {
method: "POST",
headers: { "x-api-key": API_KEY, "content-type": "application/json" },
body: JSON.stringify({ platform, query }),
});
if (!res.ok) throw new Error(`scavio ${res.status}`);
return normalizeResponse(await res.json(), platform);
}
const google = await searchAndNormalize("project management tool", "google");
const amazon = await searchAndNormalize("project management book", "amazon");
console.log(`Google: ${google.length} results, Amazon: ${amazon.length} results`);Plateformes utilisées
Recherche web avec graphe de connaissances, PAA et aperçus IA
YouTube
Recherche de vidéos avec transcriptions et métadonnées
Amazon
Recherche de produits avec prix, notes et avis
Walmart
Recherche de produits avec données de prix et d'exécution
Communauté, publications et commentaires imbriqués de n'importe quel subreddit
TikTok
Découverte de vidéos tendance, créateurs et produits