Tu veux vendre des produits numériques sans te ruiner en frais de service, ni exposer tes fichiers à tout Internet ? Moi aussi.

📦 Contexte : ras-le-bol des frais et des plateformes

Comme je l’ai déjà raconté dans mon premier article sur le VPS, j’ai toujours eu un faible pour les solutions artisanales.

J’ai horreur de cette logique de « faut vendre toujours plus pour juste rembourser ses outils ». Eliott Meunier avait, lui aussi, fait ce constat. Il en était à 8000€ de frais mensuels en service. À ce moment-là, t'es pris dans une espèce de course au toujours plus pour payer tes frais. Il te faut de plus en plus de clients alors que finalement, tu pourrais vivre de ton travail avec beaucoup moins de clients.

En privilégiant de l'open-source ou du gratuit, tu as moins de stress, plus d'authenticité et de qualité, moins d'harcelage marketing pour rentrer dans les frais.

Je suis donc parti, il y a déjà 8 mois, sur un setup "do it yourself" avec plein d'outils gratuits (pas forcément open source). Mais suite à une mise à jour du modèle économique de Make, j'ai dû améliorer mon set up récemment. Aujourd’hui, je ne reviendrais pour rien au monde sur Gumroad, Podia, Kajabi ou encore Systeme.io.


⚙️ L’idée : construire son propre système de vente

Voici ce que je voulais :

  • Garder ma boutique WooCommerce (WordPress)
  • Utiliser Stancer comme terminal de paiement (0,7% de frais, qui dit mieux ?)
  • Envoyer un email automatique via Brevo après achat
  • Donner un lien de téléchargement temporaire (valide 7 jours)
  • Sans passer par Make (devenu payant), mais via n8n auto-hébergé

Et le tout devait tourner sans interface immonde type partage de fichier Google Drive, ni dépendre d’un service SaaS susceptible d’augmenter ses prix.


🧱 Prérequis

  • Une boutique WooCommerce fonctionnelle
  • Un compte Stancer
  • Un compte Brevo (anciennement Sendinblue)
  • Une instance n8n auto-hébergée
  • Un projet Supabase avec table + bucket

💠 Étapes de mise en place

Je vais te guider pas à pas dans l'élaboration de ce système. On va donc commencer par mettre en place différents composants puis les relier grâce à une automatisation N8N.

1. Création de la table produits dans Supabase

Pour commencer, il te faudra un endroit où tu vas stocker tes produits digitaux à télécharger. C'est le bucket Supabase, ou Supabase Storage

Ensuite, il te faudra une base donnée pour lister quels sont tes produits digitaux. C'est juste une table Supabase. Elle se présentera comme suit

Nom de la colonne Type Détail
id uuid Valeur générée automatiquement (PK)
sku texte Code unique d'identification produit
titre texte Nom du produit
description texte Description du produit
fichier_path texte Nom du fichier dans Supabase Storage
actif booléen Produit actif ou non (true/false)
type_produit texte Catégorie ou type de produit
tags array texte Tags pour classification
date_creation timestamp Généré automatiquement

Tu peux recréer cette table très facilement avec cette commande SQL que tu met dans l'éditeur SQL de supabase :

create table public.produits (
  id uuid primary key default gen_random_uuid(),
  sku text not null unique,
  titre text not null,
  description text,
  fichier_path text not null,
  actif boolean default true,
  type_produit text,
  tags text[],
  date_creation timestamptz default now()
);

2. Enregistrement du produit digital

Upload des fichiers dans Supabase Storage

Je range les fichiers dans un bucket dédié que je crée aussi dans la foulée. Je l'appelle "produits" aussi, comme la table. Attention : un bucket, c’est différent d’une table. C’est un espace où l’on stocke des fichiers, pas des données tabulaires.

Ensuite, j’uploade manuellement le fichier numérique, qui est mon produit à livrer. Je note bien son nom et son chemin. Par exemple, s’il est à la racine du bucket, dans mon cas j’aurai :

automatisation-woocommerce.zip

⚠️ Évite les noms trop longs ou avec des espaces.

🛠️ Cette étape reste manuelle, parce que c’est souvent plus rapide que de vouloir tout automatiser. C’est un bon rappel : tout n’a pas besoin d’être scripté si ce n’est fait qu’une fois par mois.

Création d'une ligne dans la table supabase

Chaque fois que je crée un produit digital, je l'ajoute à ma boutique WooCommerce (création d'un sku, ou UGS en français), je l'upload dans mon bucket, puis je crée sa ligne dans la table supabase. Je remplie les différentes colonnes de la table à la main.

3. Création du lien de téléchargement temporaire

Voici une vue du workflow n8n qui te permet den saisir les principales étapes.

Dans le workflow n8n, voici le déroulé :

  • Déclenchement via un nœud WooCommerce Trigger à l’événement order.created
  • Récupération du sku de chaque produit (on fait une boucle sur les line_items)
  • Requête Supabase : on vérifie que ce sku correspond à une entrée dans la table produits
  • Création d’un lien signé (temporaire et unique) vers le fichier stocké
  • Ajout du lien dans les données transmises à l’email puis envoie de l'email

👉 Le SKU (ou UGS – Unité de Gestion des Stocks) est un identifiant unique dans Woocommerce. Dans Supabase, la colonne sku est unique not null, donc deux produits ne peuvent pas avoir la même valeur : c’est ce qui garantit la correspondance entre WooCommerce et le bon fichier.

En revanche, si tu télécharges le workflow, tu verras qu'il n'y a pas un, mais deux workflow. Pourquoi ?
Parce que N8N ne relance pas les doubles boucles. Si on exécute la première boucle. Celle-ci va itérer pour chaque produit de la commande. En revanche, la deuxième boucle ne se relancera pas s'il y a à deux produits ou plus, car il est considéré qu'elle a déjà tourné lors du premier produit.
Donc si on garde qu'un seul workflow, il ne peut fonctionner que pour les commandes avec un seul produit.

Voici donc à quoi ressemble les deux workflow. C'est plus compliqué, c'est pourquoi j'ai préférer d'abord te montrer le workflow seul

Workflow 1 :

  • Récupération des informations WooCommerce
  • Itération par produit
  • Actualisation du statut de la commande
Pourquoi tous ces fichiers enregistrés sur le disque

Tu remarques que j'enregistre pas mal de fichier sur le disque grâce a un enchainement de 3 nœud : set —> convert to file —> write on disk

Pourquoi je fais ça ? Parce que dans n8n les données sont parfois écrasées dans le workflow. Les variables dynamiques des premiers nœuds exécutés ne sont parfois plus accessibles, surtout après avoir exécuté une boucle.

La solution ? Stocker ces valeurs dynamiques en texte sur votre VPS. A chaque nouvelle exécution du workflow, ces données seront écrasées, mais ce n'est pas grave. Le but c'est qu'elles permettent au workflow d'aller jusqu'au bout.
Ainsi je stocke en fichier texte :
- Le numéro de la commande
- L'email du client
- Le sku de chaque produit qui est écrasé lors de l'exécution de chaque tour de boucle de la première boucle du workflow 1, mais qui a tout de même le temps d'être transmise au workflow 2

Workflow 2

  • Comparaison du sku du produit avec le contenu de supabase
  • Création du lien signé
  • Envoie de l'email

Pourquoi choisir Brevo pour envoyer l'email ?

On peut envoyer notre lien avec un email HTML, via un nœud Brevo (anciennement Sendinblue). Exemple :

Bonjour {{ prénom }},

Merci pour ton achat !

Ton fichier est prêt :  
👉 <a href="{{ lien }}">Clique ici pour le télécharger</a> (valable 7 jours)

À bientôt,  
Matthieu

Mais on aurait pu aussi utiliser un template Brevo.

💡 Pourquoi Brevo plutôt qu’un simple send email ?

Parce que Brevo permet de :

  • Centraliser tous tes contacts dans un CRM
  • Lancer des campagnes marketing (envoi ciblé, newsletters…)
  • Suivre les performances (ouvertures, clics, rebonds)

➡️ C’est encore sous-utilisé de mon côté, mais je documenterai mes campagnes dès que j’aurai plus de volume !


🚀 Ce que ce workflow change

  • 0 abonnement, 0 frais cachés
  • Une expérience propre pour l’utilisateur
  • Et un contrôle total sur mon système

Tu veux envoyer un autre lien ? Tu peux.
Tu veux désactiver un fichier ? Tu peux.
Tu veux arrêter complètement les ventes sans continuer à payer ? Tu peux.


🧠 En bonus : ce que j’en retiens

  • n8n permet de vraiment te faire ton système sur mesure. En auto-hébergé, il te permet de faire des sauvegardes de fichier sur le serveur ce qui peut être pratique (utilisé dans ce workflow).
  • Stancer est encore peu connu, mais vraiment efficace pour les petits créateurs.
  • Supabase fait office de mini backend robuste pour les produits numériques.
  • Et surtout… je dors tranquille. Pas de hausse soudaine de tarif, pas de fichier leaké.

👉 Si tu veux appliquer ce workflow à ton business et que tu utilises les mêmes outils que moi, j'ai mis en ligne un workflow prêt à l'emploi que tu peux télécharger ici :