API

API Amazon.fr : suivre les prix, les offres et les avis d'un produit en JSON

Suivre un prix sur amazon.fr demande plus que le chiffre affiché en haut de la fiche : il y a l'offre mise en avant, les autres vendeurs, l'occasion d'Amazon Seconde main, le badge « Offre à durée limitée ». Cette API lit amazon.fr comme un client non connecté et renvoie tout cela en JSON, prix en euros. Elle ne remplace pas les API d'Amazon : la SP-API sert aux vendeurs à gérer commandes, stock et annonces, et l'API Product Advertising est réservée aux membres du Partenariat Amazon. Ici, ni compte vendeur ni compte Partenaires : l'API se contente de lire, et ne modifie rien chez Amazon. Pour interroger amazon.fr, ajoutez `"marketplace": "fr"` à chaque appel.

Endpoints

endpointCe qui est renvoyéObligatoires
searchRecherche par mot-clé avec fourchette de prix, note minimale, offres du moment et marque ; tri par pertinence, prix croissant ou décroissant, avis, nouveautés ou popularité. Avec `max_results`, les pages suivantes sont lues dans le même appel, jusqu'à la 7e : Amazon ne sert rien au-delà.query
product/detailLa fiche par ASIN : titre, prix, prix barré, marque, points clés, images, variantes, caractéristiques techniques, contenu A+ et les huit premiers avis.asin
product/offersL'offre mise en avant et toutes les autres : prix, vendeur, état (neuf ou d'occasion, avec le niveau), expéditeur et texte de livraison. Sur un lot, le prix unitaire est séparé du prix du pack.asin
product/reviewsLes avis d'un produit : auteur, note, titre, date, texte, mention « Achat vérifié » et votes utiles, plus le résumé « Les clients disent » quand la page en affiche un.asin
product/relatedLes carrousels de recommandations de la fiche, groupés par type (achetés ensemble, vus ensemble…), avec ASIN, prix et note.asin
products_batchJusqu'à 40 ASIN en un appel, en version courte : titre, prix, note, image, coupon. Un ASIN qu'Amazon ne renvoie pas est signalé dans `not_found` au lieu de disparaître.asins
gtin-to-asinD'un code-barres EAN, UPC ou ISBN vers l'ASIN correspondant ; les résultats sponsorisés ne comptent pas, et `verify` vérifie que la fiche affiche bien ce code.tous optionnels
category/browseParcourir un rayon page par page à partir de son identifiant de nœud, pour un assortiment entier plutôt qu'une recherche.node
bestsellersLe classement des meilleures ventes d'un rayon, jusqu'à la 100e place.category
new-releasesLes nouveautés d'un rayon, même format que les meilleures ventes.category
dealsLes offres de la page des promotions : ASIN, titre, prix, prix de référence et pourcentage de réduction.tous optionnels
autocompleteCe qu'Amazon propose sous la barre de recherche pendant la frappe.query
seller/profileLe profil public d'un vendeur tiers : nom, part d'évaluations positives, nombre d'évaluations.seller_id
seller/productsTous les produits proposés par un vendeur tiers, page après page.seller_id
seller/reviewsCe que les acheteurs ont écrit sur un vendeur tiers : note, commentaire, auteur et date.seller_id

Chaque appel est facturé en crédits. Les appels en échec ou bloqués sont gratuits.

Exemple qui fonctionne

Le 27 octobre 2026, la De'Longhi Magnifica S était à 279,99 € dans l'offre mise en avant, expédiée par Amazon. Parmi les 10 autres offres, la moins chère, à 260,08 €, venait d'Amazon Seconde main en état « D'occasion - Bon ». Un relevé qui garde seulement le prix le plus bas compare donc du neuf à de l'occasion : lisez `condition` avant toute comparaison. Le texte de `delivery` est celui de la page, compte à rebours compris. Et `pinned.seller` vaut « Vendeur » au lieu d'un nom : c'est un défaut connu sur amazon.fr, détaillé dans les limites.

Requête
curl -X POST https://api.reefapi.com/amazon/v1/product/offers \
  -H "x-api-key: VOTRE_CLE" \
  -H "content-type: application/json" \
  -d '{"asin": "B00400OMU0", "marketplace": "fr"}'
Réponse (abrégée)
{
  "ok": true,
  "data": {
    "pinned": {
      "price": 279.99,
      "total_price": 279.99,
      "currency": "€",
      "currency_code": "EUR",
      "seller": "Vendeur",
      "ships_from": "Amazon",
      "condition": "Neuf",
      "delivery": "Livraison GRATUITE vendredi 30 octobre . Commandez dans les 11 h 53 min . Détails ... Afficher plus",
      "prime": false
    },
    "offer_count": 10,
    "offers": [
      {
        "price": 260.08,
        "total_price": 260.08,
        "currency_code": "EUR",
        "seller": "Amazon Seconde main",
        "ships_from": "Amazon",
        "condition": "D'occasion - Bon",
        "prime": false
      },
      {
        "price": 309.0,
        "currency_code": "EUR",
        "seller": "...",
        "ships_from": "Amazon",
        "condition": "Neuf"
      },
      {
        "price": 315.45,
        "currency_code": "EUR",
        "seller": "...",
        "ships_from": "...",
        "condition": "Neuf",
        "delivery": "Livraison GRATUITE 27 - 30 novembre lors de votre première commande. Détails ... Afficher plus"
      },
      ...
    ]
  },
  "meta": { "record_count": 11, "marketplace": "fr", "currency_code": "EUR", "cache_hit": false, "mode": "live" }
}

Un scraper Amazon en Python : les champs remplis… avec la mauvaise valeur

Premier piège, le prix barré. Sur la fiche, Amazon donne les mêmes classes CSS au prix de référence et au prix à l'unité (au kilo, au litre, à la pièce), qu'il affiche d'ailleurs en premier ; une autre classe sert à la fois au prix d'achat ponctuel du bloc « Prévoyez et Économisez » et au prix du neuf rappelé sur la ligne d'occasion. Notre propre `list_price` s'y est fait prendre : mesuré sur 68 fiches avant la correction du 8 octobre 2026, il contenait 39 fois un prix unitaire et 5 fois le prix d'un abonnement Kindle Unlimited. Après correction, les 29 valeurs encore publiées sur ces mêmes fiches portaient toutes l'étiquette de prix de référence de la page, et le champ reste null quand la page n'en affiche pas.

Le titre aussi a bougé. Vers le 1er septembre 2026, Amazon a scindé le titre des cartes de recherche en deux lignes, la marque d'un côté et le produit de l'autre. Un sélecteur qui prend le premier titre trouvé récupère la marque : sur une recherche « nike », les 48 cartes s'intitulaient « Nike ». La correction a été vérifiée sur 524 cartes d'amazon.com, .co.uk, .de, .fr et .co.jp.

Troisième exemple, la recherche par code-barres : pour un code qu'Amazon ne vend pas, toutes les cartes sont sponsorisées, et le premier résultat est donc une publicité. Sur 8 correspondances relevées par un client, 6 étaient des annonces. `gtin-to-asin` ne retient désormais que les résultats organiques.

Télécharger une page Amazon est la partie facile. La partie difficile consiste à s'apercevoir qu'une colonne bien remplie contient autre chose que ce que dit son nom : aucun de ces trois défauts ne produisait la moindre erreur.

Limites et remarques honnêtes

  • Amazon n'édite ni n'approuve ce service : l'accès est non officiel, sans contrat ni partenariat avec Amazon.
  • Sur amazon.fr, `pinned.seller` renvoie le libellé « Vendeur » au lieu du nom du vendeur de l'offre mise en avant (2 fiches sur 2 le 27 octobre 2026). Les noms sont corrects dans `offers`. `ships_from` désigne l'expéditeur, pas le vendeur : il ne suffit pas à savoir si l'offre principale est vendue par Amazon.
  • Le prix peut manquer sur une carte de recherche. Pour « aspirateur balai sans fil », 16 lignes sur 20 sont revenues avec `price: null` au premier appel, puis 1 sur 20 au second ; « machine à café grains » n'en avait aucune. Traitez null comme une donnée absente et relisez le produit avec `product/offers` ou `products_batch`.
  • `brand` était vide sur les 60 cartes de nos trois recherches sur amazon.fr ; pour la marque, passez par `product/detail`.
  • `prime` valait false sur les 22 offres de nos deux appels, y compris celles expédiées par Amazon : ce champ ne permet pas de repérer les offres Prime.
  • Pas d'historique de prix dans les réponses, amazon.fr n'en affichant pas. Une courbe de prix se construit en stockant vous-même chaque relevé avec sa date.
  • Oublier `marketplace` renvoie les données d'amazon.com, prix en dollars.
  • Coût : `search`, `bestsellers` et `new-releases` 1 crédit par page de résultats lue ; `product/detail` et `product/offers` 2 crédits ; `products_batch` 10 crédits ; `product/reviews` et `seller/reviews` 1 crédit par tranche de 25 avis ; les autres actions 1 crédit par appel.