Importer des produits en masse
L'import de produits vous permet de créer ou de mettre à jour un grand nombre de produits en une seule opération, à partir d'un fichier. Vous y renseignez l'ensemble des informations de la fiche produit : descriptif, référencement, images, attributs, offres, packs, produits complémentaires et stock initial. C'est la méthode recommandée pour codifier un parc entier sans saisir chaque produit à la main.
1. Le principe
Une ligne = un produit. La ligne d'en-tête, qui contient les noms de colonnes, ne doit jamais être modifiée. Les colonnes que vous laissez vides sont simplement ignorées : vous n'êtes pas obligé de toutes les remplir.
Deux formats de fichier sont acceptés : .csv (séparateur point-virgule ;) et .xlsx.
Attention : votre fichier doit être encodé en UTF-8, sans quoi les accents et les caractères spéciaux risquent de ne pas être repris correctement.
Comment la plateforme reconnaît un produit
À chaque ligne, la plateforme cherche à savoir si le produit existe déjà. Elle procède dans cet ordre :
1. Le SKU (colonne sku).
2. À défaut, l'identifiant du produit (colonne product_id).
3. À défaut, la référence d'import (colonne import_ref).
4. À défaut, le nom du produit (colonne product_name).
Si aucune correspondance n'est trouvée, le produit est créé.
Bon à savoir : un exemple complet, couvrant un produit simple, un produit décliné, un abonnement et un pack, est disponible au chapitre 12 de ce tutoriel. Vous pouvez le reprendre tel quel comme point de départ.
Bon à savoir : c'est ce mécanisme qui rend l'import réutilisable. Réimporter un fichier contenant les mêmes SKU met à jour les produits existants au lieu de créer des doublons. Des SKU uniques et stables dès la codification de votre parc sont donc essentiels.
2. Lancer l'import depuis le back-office
1. Rendez-vous au menu Catalogue > Produits.
2. Cliquez sur le bouton "Importer des produits", situé au-dessus de la liste de vos produits.
3. Dans la fenêtre "Importer un fichier", cliquez sur "Parcourir" ou déposez directement votre fichier dans la zone prévue à cet effet.
4. Cliquez sur "Lancer la vérification".
La plateforme analyse alors votre fichier ligne par ligne, sans rien enregistrer. Cette étape vous permet de contrôler le contenu avant l'import réel.
5. Consultez le résultat de l'analyse, réparti en onglets :
- "Total" : l'ensemble des lignes de votre fichier.
- "A corriger" : les lignes contenant une erreur bloquante.
- "Nouvelles lignes" : les produits qui seront créés.
- "Mises à jour" : les produits existants qui seront modifiés.
6. Si des lignes apparaissent dans l'onglet "A corriger", corrigez-les. Vous pouvez soit modifier la ligne directement dans la fenêtre "Editer une ligne d'import", soit corriger votre fichier et recommencer.
Attention : tant que des erreurs bloquantes subsistent, l'import n'est pas lancé. Un message vous indique le nombre de lignes concernées.
7. Cliquez sur "Importer".
8. Une notification "Import terminé" s'affiche à la fin du traitement. Si certaines lignes ont échoué, le message devient "Import terminé avec erreurs" et vous retrouvez le détail dans les onglets "Importés" et "Echec d'importation".
9. Cliquez sur "Télécharger le rapport" pour conserver le détail de l'opération.
Bon à savoir : sur un fichier volumineux, l'import est découpé en plusieurs lots et se poursuit en arrière-plan. Vous recevez alors une notification par e-mail lorsqu'il est terminé, et vous pouvez fermer la fenêtre sans interrompre le traitement. Les boutons "Mettre en pause" et "Reprendre" vous permettent de suspendre puis de relancer l'opération.
3. Identifier le produit
| Colonne | À renseigner |
|---|---|
product_type | rental pour un produit de location, additional pour un produit complémentaire. Par défaut : rental. |
product_name | Le nom du produit. Obligatoire. |
sku | La référence unique du produit, 100 caractères maximum. C'est l'identifiant principal. |
product_id | L'identifiant interne du produit sur la plateforme, si vous le connaissez. |
import_ref | Une référence d'import stable, 255 caractères maximum, utile si vos SKU sont amenés à changer. |
product_model | Le modèle du produit. |
family_code | Le code famille, pour vos exports personnalisés. |
categories | Une ou plusieurs catégories séparées par ;. Une catégorie qui n'existe pas encore est créée automatiquement. |
display_online | 1 ou yes pour afficher le produit en ligne, 0 ou no sinon. |
archived | 1 ou true pour archiver le produit, 0 ou false sinon. |
Attention : dans un fichier
.csv, le point-virgule sert à la fois de séparateur de colonnes et de séparateur de valeurs multiples. Les champs concernés (categories,tags,pack_product_sku,additional_prod_sku,variant_sku) doivent donc impérativement être entourés de guillemets.
4. Renseigner la fiche produit
| Colonne | À renseigner |
|---|---|
description_short | Le résumé du produit, au format HTML. |
description | Le descriptif complet du produit, au format HTML. |
tags | Un ou plusieurs tags séparés par ;. |
product_cover | L'image de couverture du produit. |
video_link | Le lien de la vidéo du produit. |
video_cover | L'image de couverture de la vidéo. |
external_link_1 | Un premier lien externe, 500 caractères maximum. |
external_link_2 | Un second lien externe, 500 caractères maximum. |
Attention : pour les images, le lien fourni doit pointer directement vers le fichier image (par exemple
https://mon-site.fr/velo.jpg). Les liens de prévisualisation ne fonctionnent pas : un lien Google Drive du typehttps://drive.google.com/file/d/ID/viewrenvoie une page web, pas l'image elle-même.
5. Renseigner le référencement (SEO)
| Colonne | À renseigner |
|---|---|
seo_url | L'URL de la page produit sur votre front-end, 255 caractères maximum. |
seo_title | La balise titre, 255 caractères maximum. |
seo_meta_description | La balise méta description, 500 caractères maximum. |
Dès que l'un de ces trois champs est renseigné, la page produit correspondante est créée ou mise à jour sur votre front-end.
6. Renseigner les attributs
Les attributs sont renseignés par paires, de attribute_name_0 / attribute_value_0 jusqu'à attribute_name_10 / attribute_value_10, soit 11 attributs maximum par produit.
Exemple : attribute_name_0 = Couleur et attribute_value_0 = Noir Mat.
Un attribut ou une valeur qui n'existe pas encore sur votre plateforme est créé automatiquement.
Attention : un nom d'attribut renseigné sans sa valeur, ou l'inverse, bloque la ligne à la vérification. Les deux colonnes vont toujours par paire.
7. Renseigner les prix
Tous les prix sont saisis TTC. Le montant hors taxes est recalculé automatiquement selon le groupe de taxe du produit. La décimale s'écrit indifféremment avec une virgule ou un point (par exemple 39 ou 39,90).
Prix d'achat et prix soldé
| Colonne | À renseigner |
|---|---|
original_price_ttc | Le prix d'origine TTC. |
sale_price_ttc | Le prix soldé TTC. |
Location date à date
| Colonne | À renseigner |
|---|---|
punctual_offer_price | Le prix de la location ponctuelle. |
punctual_offer_period | day obligatoirement, en minuscules. |
punctual_offer_active | 1 pour activer la location date à date, 0 sinon. |
punctual_offer_template_price_id | L'identifiant d'un modèle de prix existant, si vous en utilisez un. |
Abonnements et formules
Vous pouvez renseigner jusqu'à 11 offres sur un même produit : la première sans numéro (offer_name, offer_price_ttc…), puis offer_1_, offer_2_, et ainsi de suite jusqu'à offer_10_.
| Colonne | À renseigner |
|---|---|
offer_name | Le nom de la formule. |
offer_price_ttc | Le prix TTC de la formule. |
offer_commitment | La durée d'engagement, en mois. |
offer_duration | La durée de l'offre, en mois. |
offer_reference | La référence de l'offre, 100 caractères maximum. |
offer_price_method | La méthode de calcul du prix. |
offer_template_price_id | L'identifiant d'un modèle de prix existant. |
Attention : dès que vous renseignez un prix ou un modèle de prix pour une offre, son nom devient obligatoire. Une offre sans nom bloque la ligne à la vérification.
Tarifs dégressifs selon la durée
La colonne product_specific_pricing vous permet de définir des tarifs dégressifs par tranche de durée de location. Chaque tranche s'écrit sous la forme specific_<durée minimale>_<durée maximale>_day=<prix TTC>, les tranches étant séparées par :.
Exemple : specific_1_7_day=12:specific_8_14_day=24:specific_15_30_day=36
Ici, une location de 1 à 7 jours est facturée 12 € TTC, de 8 à 14 jours 24 € TTC, et de 15 à 30 jours 36 € TTC.
NB :
dayetjoursont équivalents dans cette notation.
Bon à savoir : ces tarifs ne s'appliquent qu'en location date à date. Un réimport met à jour les tranches existantes sans créer de doublon.
8. Composer un pack
Un pack se crée sur sa propre ligne, avec son propre SKU. Ses composants sont listés dans la colonne pack_product_sku, séparés par ;.
Chaque composant s'écrit sous la forme SKU suivi d'options séparées par : :
| Marqueur | Effet |
|---|---|
SKU seul | Composant obligatoire, quantité 1 par défaut. |
:opt | Composant optionnel : le client choisit de le prendre ou non. |
:minN | Quantité minimale. |
:maxN | Quantité maximale. |
:freeN | Quantité offerte. Par défaut, égale à la quantité minimale. |
:price_daily=X | Prix unitaire à la journée, en location date à date. |
:price_monthly=X | Prix unitaire au mois, en abonnement. |
:price_offer_REF_daily=X | Prix du composant pour l'offre dont la référence est REF, en location date à date. |
:price_offer_REF_monthly=X | Prix du composant pour l'offre dont la référence est REF, en abonnement. |
Exemple : VELO-VILLE-01:max1;CASQUE-SMART:opt:max2:free1
La colonne pack_item_qty vous permet de définir une quantité par défaut, appliquée à tous les composants pour lesquels vous n'avez pas précisé de :minN ou de :maxN.
Attention : un pack doit obligatoirement avoir son propre SKU. Une ligne avec
pack_product_skurenseigné maisskuvide est bloquée à la vérification.
NB : les composants d'un pack acceptent également les tarifs dégressifs, avec la même notation qu'au chapitre précédent :
VELO-VILLE-01:max1:specific_1_7_day=12:specific_8_14_day=24.
9. Associer des produits complémentaires
La colonne additional_prod_sku vous permet de rattacher des produits complémentaires à un produit de location. Renseignez leurs SKU, séparés par ;.
Ajoutez :opt après un SKU pour rendre le produit complémentaire facultatif. Sans ce marqueur, il est obligatoire.
Exemple : CASQUE-SMART;ANTIVOL-PRO:opt
Attention : les produits complémentaires doivent exister sur votre plateforme, ou figurer dans le même fichier d'import avec
product_type=additional.
10. Créer des variantes
Une variante relie plusieurs produits entre eux, afin que le client puisse passer de l'un à l'autre depuis la fiche produit (par exemple pour choisir une couleur ou une taille).
Le produit maître porte la liste de ses déclinaisons dans la colonne variant_sku, séparées par ;. Chaque entrée s'écrit SKU:label=Libellé.
| Colonne | À renseigner |
|---|---|
variant_sku | Les déclinaisons du produit, au format SKU:label=Libellé. |
variant_default_label | Le libellé de la déclinaison correspondant au produit maître lui-même. |
variant_placeholder | Le texte affiché dans le sélecteur de variantes en front-end. |
master_product_name | Le nom du produit maître auquel se rattache la déclinaison. À renseigner sur les lignes des produits déclinés. |
Exemple, sur la ligne du produit maître : CASQUE-ROS-BLANC:label=Blanc;CASQUE-ROS-ROUGE:label=Rouge avec variant_default_label = Noir.
Attention : placez les lignes des produits déclinés avant celle du produit maître dans votre fichier. C'est l'ordre qui garantit la liaison dans tous les cas.
Bon à savoir : si une déclinaison figure malgré tout après son produit maître, la plateforme rattrape la liaison en fin d'import.
NB : pour éviter que chaque déclinaison n'apparaisse séparément sur votre front-end, renseignez
display_online=0sur les lignes des produits déclinés, etdisplay_online=1sur la seule ligne du produit maître.
11. Renseigner le stock initial
La colonne stock_qty vous permet de renseigner une quantité de stock au moment de la création du produit.
Il s'agit d'un stock global, tous points de vente confondus : la quantité indiquée est appliquée à l'ensemble de vos points de vente actifs, et uniquement à ceux qui ne disposent pas encore de stock pour ce produit.
Attention : cette colonne ne permet ni de répartir des quantités différentes entre vos points de vente, ni de corriger un stock déjà saisi.
Pour attribuer un stock point de vente par point de vente, utilisez l'import de stocks dédié, accessible depuis le bouton "Importer stocks" de la page Catalogue > Produits. Pour plus d'informations, consultez le tutoriel Importer les stocks produits.
12. Un exemple complet
L'exemple ci-dessous décrit la location de matériel de ski. Il compte huit produits et couvre les quatre situations que vous rencontrerez le plus souvent.
Cas 1 — un produit simple loué à la journée
| Colonne | Valeur | Pourquoi |
|---|---|---|
product_type | rental | Produit de location. |
product_name | Ski Rossignol Experience 76 | Le nom affiché. |
sku | SKI-EXP76 | La référence unique, clé de mise à jour. |
categories | Ski;Skis alpins | Deux catégories, créées si elles n'existent pas. |
stock_qty | 20 | Stock initial. |
display_online | 1 | Visible sur le front-end. |
attribute_name_0 / attribute_value_0 | Longueur / 170 cm | Première caractéristique. |
attribute_name_1 / attribute_value_1 | Niveau / Intermédiaire | Deuxième caractéristique. |
punctual_offer_price | 20 | 20 € TTC par jour. |
punctual_offer_period | day | Location à la journée. |
punctual_offer_active | 1 | Active la location date à date. |
Cas 2 — un produit décliné en trois couleurs
Ce cas occupe trois lignes : une par couleur. Le casque noir joue le rôle de produit maître.
Lignes 1 et 2 — les déclinaisons, placées avant le maître :
| Colonne | Casque blanc | Casque rouge |
|---|---|---|
sku | CASQUE-ROS-BLANC | CASQUE-ROS-ROUGE |
display_online | 0 | 0 |
attribute_name_0 / attribute_value_0 | Couleur / Blanc | Couleur / Rouge |
punctual_offer_price | 6 | 6 |
Ligne 3 — le produit maître :
| Colonne | Valeur | Pourquoi |
|---|---|---|
sku | CASQUE-ROS-NOIR | Le maître porte la couleur affichée par défaut. |
display_online | 1 | Seul le maître apparaît sur le front-end. |
variant_sku | CASQUE-ROS-BLANC:label=Blanc;CASQUE-ROS-ROUGE:label=Rouge | Relie les deux autres couleurs. |
variant_default_label | Noir | Le libellé du maître dans le sélecteur. |
variant_placeholder | Choisissez la couleur | Le texte affiché au-dessus du sélecteur. |
punctual_offer_price | 6 | Le prix se renseigne sur le maître et sur chaque déclinaison. |
Cas 3 — un produit vendu en abonnement
| Colonne | Valeur | Pourquoi |
|---|---|---|
sku | PASS-SAISON | La référence unique. |
offer_name | Saison Découverte | La première formule. |
offer_price_ttc | 39 | 39 € TTC par mois. |
offer_commitment | 5 | Engagement de 5 mois. |
offer_duration | 5 | Durée de 5 mois. |
offer_reference | SAISON-DEC | Permet de cibler cette formule lors d'une mise à jour. |
offer_1_name … offer_1_reference | Saison Premium / 59 / 5 / 5 / SAISON-PREM | La seconde formule, sur le même produit. |
Cas 4 — un pack
Le pack est un produit à part entière, avec son propre SKU. Les produits qui le composent doivent figurer dans le même fichier ou exister déjà sur la plateforme.
| Colonne | Valeur | Pourquoi |
|---|---|---|
sku | PACK-SKI-COMPLET | Obligatoire pour un pack. |
pack_product_sku | SKI-EXP76:min1:max1;CHAUSS-SALOMON:min1:max1;CASQUE-ROS-NOIR:opt | Skis et chaussures imposés en 1 exemplaire, casque facultatif. |
pack_item_qty | 1 | Quantité par défaut des composants. |
additional_prod_sku | ASSURANCE-CASSE:opt | Une assurance proposée en option. |
punctual_offer_price | 40 | 40 € TTC par jour pour le pack entier. |
NB : l'assurance est un produit complémentaire : elle occupe sa propre ligne, avec
product_type=additional.
Le fichier d'import correspondant
Copiez le bloc ci-dessous dans un éditeur de texte, enregistrez-le en .csv au format UTF-8, et vous obtenez un fichier directement importable. Vous pouvez également le coller dans un tableur pour le modifier plus confortablement.
"product_type";"product_name";"sku";"product_model";"family_code";"categories";"tags";"description_short";"description";"stock_qty";"display_online";"archived";"variant_sku";"variant_default_label";"variant_placeholder";"pack_product_sku";"pack_item_qty";"additional_prod_sku";"attribute_name_0";"attribute_value_0";"attribute_name_1";"attribute_value_1";"offer_name";"offer_price_ttc";"offer_commitment";"offer_duration";"offer_reference";"offer_price_method";"offer_1_name";"offer_1_price_ttc";"offer_1_commitment";"offer_1_duration";"offer_1_reference";"offer_1_price_method";"punctual_offer_price";"punctual_offer_period";"punctual_offer_active"
"rental";"Ski Rossignol Experience 76";"SKI-EXP76";"Experience 76";"SKI-ALPIN";"Ski;Skis alpins";"ski;piste";"Ski all-mountain, fixations incluses.";"Ski polyvalent piste et hors-piste léger. Fixations réglées en magasin.";"20";"1";"0";"";"";"";"";"";"";"Longueur";"170 cm";"Niveau";"Intermédiaire";"";"";"";"";"";"";"";"";"";"";"";"";"20";"day";"1"
"rental";"Casque de ski Rossignol - Blanc";"CASQUE-ROS-BLANC";"";"CASQUE";"Ski;Protection";"";"";"";"15";"0";"0";"";"";"";"";"";"";"Couleur";"Blanc";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"6";"day";"1"
"rental";"Casque de ski Rossignol - Rouge";"CASQUE-ROS-ROUGE";"";"CASQUE";"Ski;Protection";"";"";"";"15";"0";"0";"";"";"";"";"";"";"Couleur";"Rouge";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"6";"day";"1"
"rental";"Casque de ski Rossignol";"CASQUE-ROS-NOIR";"";"CASQUE";"Ski;Protection";"casque;sécurité";"Casque de ski réglable, disponible en 3 couleurs.";"Casque homologué, mousse intérieure amovible et lavable.";"15";"1";"0";"CASQUE-ROS-BLANC:label=Blanc;CASQUE-ROS-ROUGE:label=Rouge";"Noir";"Choisissez la couleur";"";"";"";"Couleur";"Noir";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"6";"day";"1"
"rental";"Chaussures de ski Salomon";"CHAUSS-SALOMON";"";"CHAUSSURE";"Ski;Chaussures";"";"Chaussures de ski confort.";"";"18";"1";"0";"";"";"";"";"";"";"Pointure";"42";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"10";"day";"1"
"rental";"Pass matériel saison";"PASS-SAISON";"";"PASS";"Ski;Forfaits";"saison;abonnement";"Location du matériel complet sur toute la saison.";"Abonnement saison : matériel entretenu et échangeable tout l'hiver.";"100";"1";"0";"";"";"";"";"";"";"";"";"";"";"Saison Découverte";"39";"5";"5";"SAISON-DEC";"fixed";"Saison Premium";"59";"5";"5";"SAISON-PREM";"fixed";"";"";""
"additional";"Assurance casse matériel";"ASSURANCE-CASSE";"";"ASSURANCE";"Services";"";"Couverture en cas de casse du matériel loué.";"";"";"0";"0";"";"";"";"";"";"";"";"";"";"";"Assurance";"5";"";"";"";"fixed";"";"";"";"";"";"";"";"";""
"rental";"Pack ski complet Intersport";"PACK-SKI-COMPLET";"";"PACK";"Ski;Packs";"pack;économique";"Skis + chaussures + casque : l'équipement complet.";"Le pack tout-en-un pour skier sereinement. Casque en option.";"";"1";"0";"";"";"";"SKI-EXP76:min1:max1;CHAUSS-SALOMON:min1:max1;CASQUE-ROS-NOIR:opt";"1";"ASSURANCE-CASSE:opt";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"40";"day";"1"
13. Conseils avant de vous lancer
1. Commencez par un fichier de quelques lignes pour valider votre structure, avant d'importer l'ensemble de votre parc.
2. Servez-vous systématiquement de l'étape "Lancer la vérification" : elle n'enregistre rien et vous évite d'avoir à corriger des produits déjà créés.
3. Fixez vos SKU avant tout, et ne les modifiez plus ensuite. Ce sont eux qui feront la différence entre une mise à jour et un doublon lors de vos prochains imports.
4. Si votre fichier contient à la fois des produits complémentaires et des produits de location qui les référencent, vous pouvez tout importer en une seule fois : les liaisons sont résolues en fin d'import.