Le besoin en 30 secondes
Vous travaillez sur un produit qui touche l’écosystème Shopify : outil d’enrichissement CRM, plateforme de prospection automatisée, outil d’analyse retail, application place de marché B2B. À un moment, vous avez besoin de la liste des marchands Shopify, idéalement filtrée par stack technique (Klaviyo, Plus, Judge.me, Recharge).
Sauf que cette donnée n’existe pas en API officielle. Shopify n’expose pas d’« annuaire des marchands ». BuiltWith vend la technologie mais pas la base structurée. Wappalyzer pareil. Du coup, vous codez votre propre outil d’exploration. Première semaine ça tourne. Troisième semaine, Cloudflare commence à bloquer vos IPs résidentielles. Sixième semaine, Shopify change un fragment de DOM sur le checkout et votre détecteur Klaviyo casse en silence pendant 4 jours avant que quelqu’un s’en aperçoive.
Le résultat : 5 heures par semaine à corriger un flux de données qui n’est même pas votre cœur de produit.
Ce qui se passe sans accès propre
Le scénario typique. Vous démarrez avec un script Python rapide qui interroge /products.json sur une liste de domaines Shopify connus. Ça marche : /products.json est public, c’est même la signature canonique pour identifier un site Shopify (voir le guide reconnaître un site Shopify).
Puis vous voulez la stack secondaire. Klaviyo se détecte au regex sur le HTML rendu. Shopify Plus se devine sur des indices indirects (checkout personnalisé, applications Plus uniquement, en-têtes admin). Judge.me se voit dans les <script src>. Vous écrivez un détecteur par technologie, vous lancez en planificateur toutes les 24 heures sur 50 000 domaines.
Puis arrivent les vrais problèmes :
- Les marchands sous Hydrogen ou avec un proxy découplé ne renvoient pas le HTML attendu. Faux négatifs en cascade.
- Cloudflare anti-robots vous bloque après 10 000 requêtes en 1 heure. Vous achetez des proxies résidentiels à 50 $/Go. Le coût grimpe.
- Shopify renomme une classe CSS sur l’admin Liquid. Votre détecteur Plus passe en faux positif sur 2 000 boutiques pendant une semaine.
- Votre développeur junior passe 3 jours à remonter pourquoi Klaviyo a chuté de 40 % en données alors qu’aucun marchand n’a vraiment migré.
C’est de la dette technique pure. L’outil d’exploration Shopify maison n’est pas un avantage concurrentiel pour votre produit, c’est une distraction.
Le flux avec l’API annuaire-shopify
L’idée est simple : on fait tourner l’exploration. Vous consommez le résultat propre.
Étape 1 — Récupération initiale en lot avec filtres. Vous appelez /v1/stores avec les filtres pertinents pour votre cas. Pagination par curseur, 100 résultats par page.
curl -H "Authorization: Bearer $API_KEY" \
"https://api.annuaire-shopify.fr/v1/stores?theme=Dawn&tld=fr&limit=100&cursor=eyJp..."
Réponse JSON :
{
"data": [
{
"id": "str_a8f3c2",
"domain": "exemple-marchand.fr",
"name": "Exemple Marchand",
"tld": "fr",
"theme": "Dawn",
"theme_version": "12.0.1",
"first_seen": "2024-08-12",
"last_verified": "2026-04-22"
}
],
"next_cursor": "eyJp...",
"remaining_quota": 49823
}
Note honnête : les booléens techno secondaires (Klaviyo, Shopify Plus, Judge.me, Recharge, Yotpo) ne sont pas en base aujourd’hui. C’est sur la roadmap publique — étapes 1 et 2. Vous récupérez la valeur dès qu’elle est calculée sans rien changer côté code.
Étape 2 — Notification automatique (webhook) sur les nouveaux marchands détectés. Vous configurez un point de réception sur votre infrastructure et vous l’enregistrez dans le tableau de bord. Dès qu’un nouveau domaine Shopify est ajouté à la base, un POST signé HMAC-SHA256 part vers votre point de réception.
# Vérification de la signature côté serveur
import hmac, hashlib
def verify_webhook(body: bytes, signature_header: str, secret: str) -> bool:
expected = hmac.new(
secret.encode(), body, hashlib.sha256
).hexdigest()
return hmac.compare_digest(expected, signature_header)
Quota Pro avec API : 5 notifications automatiques actives simultanées, ce qui suffit pour séparer les flux (nouveaux marchands .fr, nouveaux thèmes premium, etc.).
Étape 3 — Intégration dans votre stack. Vous écrivez le payload dans Postgres / Mongo / BigQuery. Pattern classique : table shopify_merchants indexée sur domain et last_verified. Si vous travaillez en n8n, Make ou Zapier, c’est un flux de 4 étapes : récepteur webhook → filtre → mise à jour base de données → notification Slack.
Étape 4 — Déclencher des actions en aval. Une fois la fiche en base, vous déclenchez ce qui colle à votre produit : synchronisation vers Lemlist pour prospection, ajout dans HubSpot pour enrichir un compte existant, création d’une ligne Customer.io pour scoring de prospects, ou simple notification Slack pour un opérateur humain.
Pourquoi le format Pro avec API à 199 €/mois
Trois formats vous concernent en théorie, un seul vous va vraiment.
| Format | Prix | API | Notifications | Verdict pour un développeur |
|---|---|---|---|---|
| CSV ponctuel | 149 € | non | non | Instantané figé, à éviter si vous voulez de la fraîcheur. |
| Pro | 99 €/mois | non | non | Tableau de bord humain, exports manuels. Pas votre flux. |
| Pro avec API | 199 €/mois | oui | 5 | Le bon choix. |
| Accord sur mesure | sur devis | oui | illimités | Au-delà de 50 000 appels/mois. |
Le format Pro avec API à 199 € donne :
- 50 000 appels API / mois — large pour la majorité des cas (un planificateur quotidien sur 1 000 domaines = 30 000 appels, vous gardez de la marge).
- 5 notifications automatiques actives — suffisant pour segmenter par filtre.
- 3 sièges utilisateur sur le tableau de bord — utile si votre équipe veut configurer les notifications à plusieurs.
- Mises à jour mensuelles de la base sous-jacente.
- 20 000 boutiques accessibles / mois dans les listings (au-delà, basculer accord sur mesure).
- 25 places ouvertes au lancement.
Si votre adéquation produit demande > 50 000 appels/mois ou > 5 notifications, vous basculez en accord sur mesure. Le Pro avec API est calibré pour le développeur solo ou l’équipe au début qui prototype, pas pour un outil qui sert 100 000 requêtes par jour à ses propres clients.
Combien ça coûte vraiment face à un outil maison
Faisons le calcul honnête.
Outil maison sérieux, par mois :
- Développeur junior, 3 j/mois sur maintenance (déboguer, corriger les regex, surveiller) à 350 € HT/jour = 1 050 €
- Proxies résidentiels rotatifs (volume modeste, ~50 Go/mois) = 150 à 300 €
- Serveur d’exploration (workers Python + file d’attente) = 40 à 80 €
- Stockage et journaux = 20 €
- Bug en production qui casse 1 fonctionnalité produit pendant 4 jours, 1 fois par trimestre = coût caché variable
Total visible mensuel : 1 250 à 1 450 €, sans compter la dette technique et le coût d’opportunité (votre développeur junior pourrait coder votre vraie fonctionnalité à la place).
Pro avec API : 199 €/mois, 50 000 appels et 5 notifications inclus.
Le seuil de rentabilité est trivial : il est atteint dès que votre développeur passe plus d’une demi-journée par mois à corriger l’outil maison.
Précisions techniques
Transparence d’abord, on ne vend pas ce qu’on n’a pas.
Disponibilité des filtres techno secondaires. Les booléens klaviyo, shopify_plus, judge_me, recharge, yotpo, bold ne sont pas en base aujourd’hui. C’est sur la roadmap publique. Le thème Shopify utilisé est disponible aujourd’hui comme proxy partiel de maturité.
Champ vertical (secteur) idem. Le classement sectoriel automatique des 70 000 boutiques est sur la roadmap (étape 3). Tant qu’il n’est pas livré, le filtre sectoriel n’existe pas dans l’API.
Quotas durs. Au-delà de 50 000 appels API/mois, vous êtes en 429 Too Many Requests. Pas de débit silencieux, pas de surfacturation cachée. Si vous croisez le seuil 2 mois d’affilée, on rebascule en accord sur mesure avec quotas adaptés.
Pas de SDK officiel. REST + JSON, c’est tout. Documentation OpenAPI 3.1 sur la page API. Un SDK Python communautaire est sur la liste, mais on préfère stabiliser la signature de l’endpoint avant de la geler.
Géo-distribution mono-région. API servie depuis AWS eu-west-3 (Paris). Si vous opérez majoritairement aux US ou en APAC, la latence sera moins bonne.
Questions fréquentes pour ce cas d’usage
Vous donnez accès à un SDK Python ou Node officiel ?
Pas de SDK officiel pour l’instant. L’API est une REST classique JSON. N’importe quel client HTTP (requests, httpx, axios, fetch) suffit.
Le webhook est-il signé HMAC ?
Oui. Chaque payload est signé HMAC-SHA256 avec un secret partagé que vous générez dans le tableau de bord. Vérification côté serveur avec compare_digest en temps constant.
Que se passe-t-il si je dépasse les 50 000 appels par mois ?
À 45 000 appels consommés, le tableau de bord envoie une alerte email. Au-delà de 50 000, les requêtes additionnelles renvoient un 429 jusqu’au prochain cycle de facturation. Si le pattern se confirme sur 2 mois consécutifs, on bascule en accord sur mesure.
Quelle latence sur l’endpoint /v1/stores ?
P50 autour de 180 ms, P95 sous 500 ms sur les requêtes paginées de 100 résultats. Mesurée depuis Paris, AWS eu-west-3.
Voir aussi
- Équipes de prospection e-commerce — si vos collègues commerciaux ont besoin du tableau de bord avec exports CSV.
- Commercial Excel — si l’équipe vente préfère un fichier figé livré une fois par trimestre.
- Fusion-acquisition e-commerce — si vous travaillez sur un outil de sourcing fusion-acquisition.
- Fournisseurs en gros et dropshipping — si votre outil sert un vertical précis.
Branchez l’API à la place de l’outil maison. Documentation complète sur la page API, tarifs et quotas détaillés sur la page tarifs, retour aux 5 cas d’usage ou retour à l’accueil.