Aller au contenu

Suivi des prix des concurrents sur Magento : guide pratique

Publie le 18 août 2026 par Niccolò

Suivre les concurrents sur Magento, pas le prix de Magento

Une clarification avant tout : ce guide porte sur ce que facturent les autres boutiques, pas sur ce que coûte Magento. Cherchez « prix Magento » ou « tarifs Adobe Commerce » et la plupart des résultats parlent de licences : Open Source est gratuit, Adobe Commerce se négocie sous contrat annuel sur devis. C'est une autre question. Si vous vendez sur Magento et voulez savoir à quel prix vos rivaux proposent les produits que vous avez tous les deux en catalogue, vous êtes sur la bonne page.

Ensuite, un repère de version. Tout ce qui suit techniquement vaut pour Magento Open Source et Adobe Commerce 2.4.x sur une vitrine par défaut dérivée de Luma. La version 2.4.9 est sortie en mai 2026, et le support de la 2.4.6 a pris fin en août 2026 (Adobe, consulté en août 2026). Gardez une réserve en tête tout du long : Adobe Commerce as a Cloud Service, les vitrines headless et Edge Delivery, ainsi que les thèmes tiers comme Hyva, Porto ou BSS n'émettent pas nécessairement du balisage Luma : un concurrent sur l'un d'eux peut n'exposer rien de reconnaissable comme du Magento.

Le tableau commercial n'est pas celui que dépeignent la plupart des articles : Magento recule en nombre de boutiques pendant que celles qui restent grossissent. StoreLeads comptabilise 104 546 boutiques Magento en activité, en baisse de 14 % sur un an et environ 35 % sous le pic du quatrième trimestre 2021, à 161 970 (StoreLeads, juillet 2026). Celles qui sont parties étaient surtout petites, poussées dehors d'abord par la fin du support de Magento 1 décidée par Adobe en juin 2020 (Help Net Security, juin 2020), ensuite par le coût d'une licence Adobe Commerce. W3Techs, qui mesure l'usage des plateformes sur les sites qu'il examine plutôt qu'une part des ventes en ligne, situe Magento à 1,5 % de l'ensemble des systèmes e-commerce (W3Techs, août 2026). Petite part, grosses boutiques : vos concurrents Magento sont moins nombreux et plus gros qu'il y a trois ans, chacun de leurs mouvements tarifaires compte donc davantage.

Le reste de ce guide traite d'une seule idée et de ses conséquences. Le nombre affiché sur une page produit Magento est le résultat d'une formule, pas un champ dans une base de données. Pour le même travail sur d'autres plateformes, voyez les guides Shopify et WooCommerce.

La formule du prix final d'Adobe est tout le problème

Commencez par la formule, car tous les modes de défaillance ci-dessous en découlent. Adobe l'énonce directement :

Final Price = Min(Regular(Base) Price, Group(Tier) Price, Special Price, Catalog Price Rule) + Sum(Min Price per each required custom option)

Elle provient de la documentation d'Adobe sur les prix spéciaux (Adobe, consulté en août 2026), et c'est le paragraphe le plus utile de toute la documentation Magento pour qui construit un historique de prix.

Lisez ce qu'elle implique. Quatre mécanismes se disputent le nombre que voit l'acheteur, le plus bas l'emporte, et seul le premier correspond au prix que le marchand considère comme le prix. Les trois autres sont délimités par des conditions qu'un visiteur anonyme ne maîtrise pas et, dans un cas, ne peut même pas voir.

MécanismeEffet sur le prix de la page produitVisible pour un visiteur anonymePortée
Prix normal (de base)La valeur par défaut, et le perdant dès que quoi que ce soit d'autre est plus basOuiSite web
Prix par palier ou par groupeUne remise sur quantité s'affiche en « Achetez-en 6 à 5,95 $ l'unité et économisez 15 % » ; un prix de groupe s'applique « lorsque l'acheteur est connecté à son compte »En partie. Les paliers du groupe invité s'affichent, les prix réservés à un groupe nonSite web et groupe de clients, plus la quantité pour les prix par palier
Prix spécialRemplace le prix normal pendant une fenêtre programméeOuiSite web et fenêtre de dates
Règle de prix catalogueLes remises « entrent en vigueur avant que le produit ne soit placé dans le panier », le prix affiché sur la page produit change doncOui, si la règle cible le groupe invitéSite web, groupe de clients et fenêtre de dates

Deux détails méritent d'être fixés. Un prix spécial court « immédiatement après minuit au début de la date de début (00:01) et se poursuit jusqu'à juste avant minuit (23:59) la veille de la date de fin », la date de fin est donc exclusive et une promotion que vous attendez le dernier jour est déjà passée. Et le sélecteur de groupe de clients d'Adobe propose à la fois « ALL GROUPS » et « NOT LOGGED IN ». Votre surveillance vit en permanence dans le second.

Mode de défaillance 1 : le prix affiché est un minimum dérivé

Magento compte quatre types de produits et un seul se comporte comme un outil de suivi des prix le suppose. Un produit simple a un prix et un SKU. Un produit configurable non : Adobe est explicite, « le prix du produit configurable est dérivé de ses produits enfants In Stock » (Adobe, consulté en août 2026). Les produits grouped (groupés) héritent du même comportement, et les bundles à prix dynamique affichent une fourchette au lieu d'un prix.

La conséquence ruine les historiques de prix. Quand la variante en stock la moins chère part en rupture, le prix affiché saute à la deuxième moins chère. Personne n'a modifié de prix. Votre série enregistre une hausse, votre alerte se déclenche, et vous répondez à une rupture de stock comme s'il s'agissait d'une décision tarifaire. Si vous avez vu le prix d'un concurrent osciller sur un rythme de deux jours sans logique commerciale derrière, c'est en général la raison.

Suivez donc la variante et non le parent, ce qui suppose de lire les prix par variante dans la page plutôt que le prix affiché en tête. Sur l'API GraphQL, Adobe vous livre un indice net (Adobe, consulté en août 2026) : « Si vous choisissez d'interroger un produit qui n'est pas un produit composite, les prix minimum et maximum sont identiques. » Un minimum_price différent du maximum_price est donc un drapeau lisible par machine qui signifie : ceci est la borne d'une fourchette, ne déclenchez pas d'alerte dessus.

Mode de défaillance 2 : le vrai prix peut être sous condition d'accès

Vous pouvez suivre un concurrent au prix catalogue pendant des mois alors que ses clients paient 20 % de moins, sans que rien dans vos données ne paraisse anormal.

Le mécanisme, c'est la tarification par groupe : la remise s'applique, selon les mots d'Adobe, « lorsque l'acheteur est connecté à son compte ». Adobe Commerce creuse l'écart, car l'édition sous licence ajoute les Customer Segments et les catalogues partagés B2B par-dessus les simples groupes de clients, et la tarification d'un catalogue partagé prime sur les tarifs de groupe standard. Magento Open Source n'a ni l'un ni l'autre. Pour un concurrent B2B sur Adobe Commerce, le prix réellement pratiqué peut se trouver dans un catalogue partagé qu'aucune requête anonyme ne renverra jamais, et le prix public est un plafond plutôt qu'un prix de marché.

Trois indices que des prix sous condition d'accès sont en jeu : une invitation du type « connectez-vous pour voir le prix » ou « connectez-vous pour accéder aux tarifs revendeurs », un tableau de paliers qui n'apparaît qu'après connexion, et un bouton « Demander un devis » là où devrait se trouver le bouton d'ajout au panier. Enregistrez ces relevés comme prix catalogue avec le prix réel sous condition d'accès, pas comme des points de données propres.

Pour être clair sur le contournement évident : créer de faux comptes pour atteindre ces prix relève des conditions d'utilisation, pas de la technique. Ne bâtissez pas votre surveillance là-dessus.

Mode de défaillance 3 : un prix, trois rendus

Celui-ci est vicieux parce que rien n'a jamais l'air cassé. Chaque relevé est cohérent avec lui-même.

Magento sépare sites web, boutiques et vues de boutique, et le prix s'attache à un autre niveau que la devise. La documentation d'Adobe sur la portée des prix catalogue indique que « Commerce ne permet pas de définir un prix produit par boutique. Mais vous pouvez modifier le prix par site web » (Adobe, consulté en août 2026). Le prix varie par site web, jamais par vue de boutique. La devise de base se règle à l'échelle du site web, la devise d'affichage par vue de boutique, et l'affichage des taxes peut montrer les prix hors taxes, toutes taxes comprises, ou les deux à la fois.

Combinez ces trois axes et un même SKU à un même prix de site web se rend de trois manières. Les nombres ci-dessous sont illustratifs, pas mesurés.

Vue de boutiqueCe que la page affiche
US, hors taxes, USD99,00
DE, toutes taxes comprises, EUR120,79
UK trade, les deux affichés99,00 (120,79 TTC)

La vue de boutique se sélectionne par le chemin de l'URL ou par un cookie ou un paramètre store : une nouvelle tentative qui atterrit sur une autre vue, ou une redirection géographique suivie sans le dire par votre collecteur, décale le prix enregistré exactement du taux de TVA, ou en change la devise. Un tracker qui ne fixe pas la vue de boutique mesure une série de vues de boutique, pas une série de prix.

Les parades sont peu spectaculaires. Conservez l'URL exacte de la vue de boutique, repérez les redirections géographiques au lieu de les suivre aveuglément, envoyez l'en-tête Store sur GraphQL, et sauvegardez le code de la devise avec chaque point de prix, en traitant un changement de devise comme un incident d'intégrité des données plutôt que comme un changement de prix.

Mode de défaillance 4 : le MAP cache le prix derrière un geste

Les politiques de prix minimum annoncé sont une fonctionnalité native de Magento, et elles cassent le scraping naïf dans la direction la plus coûteuse.

La fonctionnalité MAP d'Adobe comporte un réglage « Display Actual Price » à trois valeurs : In Cart, Before Order Confirmation et On Gesture, la dernière masquant le prix derrière une fenêtre « Click for Price ». Dans les trois cas, le nombre présent dans le balisage est le prix public conseillé, par construction le chiffre le plus élevé plausible. Un scraper l'enregistre, en conclut que vous êtes moins cher que le concurrent, et vous maintenez un prix que vous n'aviez aucun besoin de maintenir. C'est fréquent en électronique grand public, instruments de musique, optique, outillage électroportatif et électroménager.

Le MAP ne s'applique pas uniformément. Pour les produits grouped, les prix des produits simples associés n'apparaissent que selon le réglage Display Actual Price. Et le MAP ne vaut que pour les bundles à prix fixe : il « n'est pas disponible pour les produits bundle à tarification dynamique » (Adobe, consulté en août 2026), un marchand qui bascule un bundle en tarification dynamique désactive donc silencieusement la suppression du prix.

Détectez le MAP plutôt que de l'analyser. Enregistrez le produit comme prix sur demande et excluez-le des calculs de positionnement tarifaire au lieu d'écrire un prix conseillé dans votre historique. Si vous faites respecter vos propres planchers de prix, le suivi MAP est la discipline connexe.

Mode de défaillance 5 : vous n'avez pas besoin d'un navigateur headless pour cela

Presque tous les articles sur le scraping de Magento vous disent de faire le rendu de la page dans un navigateur headless. Pour l'extraction de prix, ce conseil est généralement faux, et la documentation frontend d'Adobe explique pourquoi.

Magento initialise ses widgets JavaScript via une balise <script type="text/x-magento-init"> dont les clés de premier niveau sont des sélecteurs CSS, "*" signifiant non lié à un élément. Adobe décrit ce que fait le mécanisme : il « prépare toute la configuration côté backend et l'écrit dans le code source de la page à l'aide d'outils standard » (Adobe, consulté en août 2026). La configuration des widgets, prix compris, est sérialisée côté serveur et livrée dans le HTML. Il n'y a aucun XHR à attendre et aucun calcul de prix côté client à reproduire. Faire le rendu de la page ajoute du coût et de la latence, et ne rapporte rien de nouveau.

Pour un produit configurable, la charge utile qui vous intéresse est l'objet de configuration que lit le widget produit configurable de Magento, Magento_ConfigurableProduct/js/configurable. Il est par convention associé à la clé spConfig. Adobe documente x-magento-init lui-même, mais ne documente pas cet objet par son nom : traitez donc la forme ci-dessous comme une convention observée plutôt que comme un contrat.

{
  "attributes": {
    "93": {
      "code": "color",
      "options": [{ "id": "50", "label": "Blue", "products": ["1234"] }]
    }
  },
  "optionPrices": {
    "1234": { "finalPrice": { "amount": 79 }, "oldPrice": { "amount": 99 } }
  },
  "salable": { "93": { "50": ["SKU-BLUE-M"] } },
  "currencyCode": "USD"
}

Trois éléments y gagnent leur place. optionPrices.<childId>.finalPrice.amount est le vrai prix par variante, et oldPrice face à finalPrice vous donne le couple prix barré et prix courant. salable est la carte honnête des stocks : une option absente de son axe, ou renvoyant vers une liste vide, est inachetable même si elle porte encore une entrée dans optionPrices. Et le prix rendu avant toute sélection est le minimum dérivé du parent, qui n'appartient à aucun SKU.

Attendez-vous à trois formes d'émission. Le Luma standard utilise le bloc x-magento-init indexé par sélecteurs. Beaucoup de thèmes tiers émettent un appel inline initConfigurableOptions() dont le troisième argument facultatif porte un message de stock par enfant valant littéralement « In Stock » ou « Out of Stock », qui fait autorité lorsqu'il est présent. Les thèmes de la famille BSS placent la même matrice sous un composant nommé autrement.

Quatre emplacements, quatre réponses

La page contient souvent plusieurs prix qui se contredisent, et le plus facile à atteindre est le moins fiable.

CoucheFiabilité
spConfig.optionPrices.<childId>.finalPrice.amountFait autorité par variante
DOM priceBox, data-price-amount sur la boîte finalPriceFait autorité pour la sélection en cours, et encore présent sur les pages en rupture de stock
JSON-LD Product.offers.priceSouvent absent, et souvent imbriqué dans le mainEntity d'un nœud WebPage plutôt qu'au premier niveau
Balise meta og:price:amount ou product:price:amountFréquemment obsolète

Lisez-les dans cet ordre, et descendez récursivement dans mainEntity avant de conclure que le JSON-LD ne porte aucune offre. Un extracteur qui attrape d'abord l'OpenGraph, ce qui est la chose la plus facile à écrire, enregistrera allègrement le prix du mois dernier.

Vos concurrents ne sont pas tous sur Magento

Vos acheteurs se moquent de la plateforme utilisée par qui que ce soit. Ils comparent votre produit à celui de quiconque le vend, ce qui inclut des boutiques Shopify, des sites WooCommerce, des annonces sur les places de marché et de grandes enseignes sur des piles sur mesure.

Une bonne surveillance lit les pages produits publiques quelle que soit la plateforme : construisez donc votre liste de surveillance autour de qui se dispute l'acheteur plutôt que de qui partage votre pile technique. Les mêmes mécaniques, avec d'autres modes de défaillance, s'appliquent à une boutique Shopify et à une boutique WooCommerce.

Fixer la fréquence de vérification

Chaque vérification a un coût : hiérarchisez donc la liste au lieu de traiter tous les produits de la même façon.

  • Produits phares : toutes les une à quelques heures, puisqu'un mouvement de concurrent y change vos ventes de la semaine.
  • Produits de milieu de gamme : quotidiennement, avec une bande de tolérance plus large et une réponse hebdomadaire sauf en cas de mouvement spectaculaire.
  • Produits de longue traîne : hebdomadairement, pour protéger la marge plutôt que courir après l'alignement.

Magento ajoute une complication. Comme les parents configurables bougent au gré du stock et non des décisions tarifaires, augmenter la fréquence sur l'un d'eux génère du mouvement fantôme, pas du signal, tant que vous ne lisez pas les prix par variante. Corrigez d'abord l'extraction. Pour le cadre général, voyez à quelle fréquence vérifier les prix des concurrents.

Ce que Respot lit sur une page Magento

Respot n'a aucune intégration Magento et aucune extension à installer. Il lit des URL de produits publiques, ce qui est la bonne architecture ici, puisque le prix d'un concurrent ne vit pas à l'intérieur de votre boutique.

Ce qu'il a en revanche, c'est une extraction conçue pour les modes de défaillance ci-dessus. Il analyse l'objet de configuration des variantes de Magento, se rabat sur l'attribut data-price-amount de la priceBox, et parcourt le JSON-LD de façon récursive pour ne pas manquer une offre imbriquée dans mainEntity, le tout sans navigateur headless. Le suivi se fait par variation, la couleur la moins chère d'un concurrent qui part en rupture est donc enregistrée comme une rupture de stock et non comme une hausse de prix.

Le plan gratuit couvre 5 trackers sans carte bancaire et 7 jours d'historique de prix, de quoi tester si vos pages les plus disputées s'analysent proprement. Les plans payants s'adaptent à 100, 400 ou 2 000 trackers, avec 30, 90 jours d'historique ou un historique illimité.

Par où commencer

Choisissez vos dix produits les plus disputés, trouvez les URL des concurrents, puis faites une chose avant d'en ajouter le moindre à un moniteur : ouvrez chaque page et décidez quel mode de défaillance s'applique. Le prix affiché est-il un minimum de produit configurable ? Y a-t-il une barrière de connexion pour voir le prix ? L'URL fixe-t-elle une vue de boutique, et la devise est-elle celle que vous attendez ? Un geste « Click for Price » tient-il lieu de nombre ?

Cet audit prend un après-midi et décide si les six prochains mois d'historique de prix veulent dire quelque chose. Un tracker pointé sur un produit parent Magento avec un prix supprimé par le MAP et une vue de boutique non fixée produit un joli graphique de nombres qui ne décrivent rien.

Réussissez l'extraction et Magento devient l'une des plateformes les plus faciles à suivre, parce qu'Adobe place délibérément les données dans le code source de la page. Commencez à suivre vos concurrents une fois que vous savez ce que chaque page vous raconte.