Fait partie du guide Lancer un SaaS : les décisions qu'on ne reprend pas sans payer
Choisir ses prestataires SaaS : ce qui t'engage, ce qui se remplace

Le 13 septembre 2026, le jour où j’ai sorti sycode.fr de Vercel pour le poser sur mon VPS, j’ai fusionné la branche sur main avant d’avoir posé le certificat sur le disque. Ça n’a l’air de rien. Sauf que la fusion déclenche le déploiement, que le déploiement pose les labels Docker, et que le Caddy central de la machine lit ces labels pour se configurer. Un label qui pointe vers un certificat absent, et Caddy refuse sa configuration entière. Pas celle de sycode.fr, toute la configuration, donc les quatre autres sites hébergés sur la même machine.
J’ai annulé le run en vol avec gh run cancel, posé le certificat, relancé. Personne n’a rien vu. Mais ce certificat, c’est un certificat Origin Cloudflare, reconnu par Cloudflare et par personne d’autre : si je coupe le proxy demain, mon serveur répond, et le navigateur du visiteur affiche une erreur de sécurité. La brique que je considérais comme la plus interchangeable de ma pile ne se débranche pas sans opération préalable, et je l’ai découvert en la branchant.
C’est ce que je regarde maintenant avant de créer un compte chez qui que ce soit : pas le prix, ce que la brique emporte le jour où je la retire. Les tarifs cités dans cet article, je les ai relevés sur les pages officielles le 14/09/2026, et ils changent sans préavis.
Ce qui t’engage, ce qui se change en un après-midi
Quand tu montes ta pile, tu as une liste de briques qui se ressemblent toutes sur une grille tarifaire. Le paiement, la base de données, l’identité, l’e-mail, le CDN, les logs. Le réflexe, c’est de les comparer ligne à ligne. Moi je les trie d’abord par ce qu’elles retiennent.
Le paiement t’engage, parce que les données de carte de tes clients ne t’appartiennent pas et ne s’exportent pas librement. La base de données t’engage à moitié : un Postgres se restaure ailleurs, mais les politiques d’accès, les fonctions serverless et l’auth qui vivent autour ne suivent pas au même degré, j’ai fait la sortie deux fois. L’identité t’engage, parce que des mots de passe hachés chez un fournisseur ne se migrent pas toujours, et quand ils ne se migrent pas, tu demandes à tous tes utilisateurs d’en refaire un.
Le reste, e-mail, CDN, observabilité, se remplace en un après-midi si ce qui t’appartient est resté chez toi : ton domaine, ta zone DNS, ton schéma, tes sauvegardes. Le jour où l’actif est chez le prestataire, tu n’as pas choisi un fournisseur, tu as choisi un propriétaire.
Une brique est réversible quand ce qui t’appartient est chez toi, pas chez elle.
Si tu es encore plus en amont, avant même de choisir les briques, l’ordre des étapes est dans lancer un SaaS. Ici je pars du principe que tu sais ce que tu construis et que tu es en train d’ouvrir des comptes.
Le paiement : le prix affiché n’est presque jamais le prix payé
Sur la page tarifaire de Stripe France, le chiffre en gros, c’est 1,5 % + 0,25 € par carte européenne. C’est vrai, et ce n’est presque jamais ce que tu paies. Sur la même page, une carte commerciale, donc la carte avec laquelle une entreprise te règle en B2B, passe à 2,8 % + 0,25 €. Une carte hors Espace économique européen, 3,15 % + 0,25 €. Une devise à convertir, +2 %. Un litige, 20 € de frais de réception quelle que soit l’issue.
Le truc, c’est que ces suppléments s’empilent, et qu’ils décrivent exactement un SaaS B2B qui vend à l’international. Ajoute Billing à 0,7 % du volume et Tax à 0,5 % par transaction, et ta structure de coût est entièrement proportionnelle à ton chiffre d’affaires. Elle ne s’améliore jamais avec la taille.
Sur asap.cool, Stripe est en production depuis le 27 mai 2026. Ce que je fais pour connaître mon vrai taux, c’est ouvrir une facture réellement encaissée et rapprocher chaque ligne du barème : commission de base, supplément de carte, conversion, part Billing, part Tax.
Pour comparer, la page française de Mollie affiche 1,20 % + 0,25 € sur le réseau Cartes Bancaires en consommateur, sous le tarif carte européenne de Stripe, mais 1,80 % + 0,25 € en Visa et Mastercard, au-dessus. Si tes clients paient en CB, ça se voit sur la marge ; s’ils paient en Visa, c’est l’inverse. Ce qui pèse le plus chez moi, c’est le coût d’un litige et le lieu de traitement, que je veux lire avant de signer.
Brancher Stripe proprement, webhooks, idempotence, montants en centimes, c’est un autre sujet, et il est dans ce qui casse quand Stripe passe en production.
Merchant of record : ce que tu transfères, ce que tu perds
Avec les produits Stripe classiques, le marchand officiel de la vente, c’est ton entreprise. Avec Stripe Managed Payments, c’est Stripe. Tout le reste découle de cette ligne.
Ce que ça t’enlève, c’est la TVA. Stripe calcule, collecte, déclare et verse les taxes indirectes dans des dizaines de pays. Ce que ça te coûte d’abord, c’est 3,5 % par transaction en plus des frais de paiement : la part proportionnelle passe de 1,5 % à 5 %. Pour quelqu’un de seul qui vend dans le monde entier, c’est un calendrier de déclarations qui disparaît, et dans les pays non couverts, la responsabilité reste à toi.
Ce que ça te coûte ensuite, la doc le dit aussi. Le relevé bancaire de ton client affiche LINK.COM* suivi de ton libellé. Les reçus et factures partent depuis Link, tes réglages d’e-mails dans le Dashboard n’y changent rien. Pas de domaine personnalisé sur la page de paiement. Et si tu ne réponds pas à un litige sous 48 heures, Stripe peut rembourser sans ton accord.
Avant de te poser la question, regarde si tu y as droit : Managed Payments ne couvre que les produits numériques entièrement automatisés. Les services B2B, conseil, développement, design, support technique, en sont exclus, et une bonne partie des gens qui me lisent vendent exactement ça.
Moi, sur asap.cool, je reste le marchand. asap.cool est un outil de facturation : la relation d’après-vente, la facture au nom de mon entreprise et l’e-mail qui part de mon domaine font partie du produit. Si tu vends un outil qu’on utilise sans jamais te parler, dans vingt pays, les 3,5 % peuvent valoir moins cher qu’un comptable par pays ; en dessous, moi je garde la marge et la relation.
Bird en maintenance, l’OTP retiré : quand une brique lâche en pleine signature
Sur asap.cool, les signatures électroniques pouvaient être confirmées par un code SMS envoyé via Bird. Fin juin 2026, Bird est passé en maintenance. Le signataire arrivait au bout du parcours, demandait son code, et le code ne venait pas.
Ce que j’ai fait, c’est retirer l’option OTP SMS de l’interface plutôt que de laisser un bouton qui promet un code qui n’arrivera pas. Un signataire bloqué sans code, c’est un contrat qui ne se signe pas ce jour-là, et il ne saura jamais que le problème venait d’un prestataire dont il n’a jamais entendu parler. Pour lui, c’est mon produit qui ne marche pas.
C’est le point commun de toutes les briques annexes : elles s’appellent par ton nom quand elles tombent. Et c’est exactement pour ça que sur l’e-mail, la brique annexe la plus répandue, je fais en sorte que le remplaçant se branche en une heure.
L’e-mail : la brique la plus remplaçable, à condition de garder ton domaine chez toi
Le transport d’un e-mail, c’est le même octet vers la même boîte Gmail quel que soit le fournisseur. Ce qui change, c’est le prix : Amazon SES est à 0,10 $ les 1 000 e-mails à la carte, Postmark facture 1,80 $ les 1 000 au-delà de son forfait Basic. Dix-huit fois d’écart. Ce que tu paies chez Postmark ou Resend, c’est l’interface, les logs consultables et la réputation d’IP mutualisée, pas l’acheminement.
Ce qui rend le fournisseur remplaçable, c’est que la délivrabilité ne s’achète pas chez lui. Elle se configure dans ta zone DNS : SPF, DKIM, DMARC. Depuis le 1er février 2024, Google exige SPF ou DKIM pour tout le monde, et les deux plus DMARC aligné au-dessus de 5 000 messages par jour. Ces enregistrements sont chez toi. Changer de fournisseur, c’est changer une clé d’API et deux ou trois lignes TXT.
Pour voir où en est ton domaine, c’est ce que je lance sur les miens :
dig +short TXT sycode.fr | grep -i spf
dig +short TXT _dmarc.sycode.fr
Sur sycode.fr, ça donne v=spf1 mx ~all et v=DMARC1; p=quarantine; pct=100, avec les rapports agrégés envoyés à Cloudflare. Le p=quarantine veut dire qu’un message qui échoue l’alignement part en indésirable au lieu d’être rejeté ; moi je préfère ce cran-là tant que je n’ai pas relu quelques semaines de rapports.
Le piège que j’ai appris à contourner, c’est la région. Resend propose quatre régions d’envoi, dont l’Irlande en eu-west-1, et la région est attachée au domaine sans possibilité de la changer ensuite. Pour en changer, tu supprimes le domaine, tu le recrées, tu refais tous les DNS et tu attends la propagation. Sur un domaine qui envoie déjà, c’est une fenêtre de maintenance.
Du coup, sur GoPronos, Optimo et SimplyJury, chaque domaine Resend a été créé directement en région EU, sur un sous-domaine dédié à l’envoi. Un client B2B qui te demande où partent ses e-mails a sa réponse, et tu n’as pas à refaire les DNS le jour où il pose la question. Le plan gratuit couvre 3 000 e-mails par mois, et surtout 100 par jour : c’est le plafond quotidien qui casse une campagne d’activation, pas le mensuel.
Le token Cloudflare Tunnel tronqué : la brique réseau qu’on ne voit qu’en panne
Le 28 juin 2026, en éditant un autre secret sur asap.cool, j’ai tronqué le token du tunnel Cloudflare. Le serveur n’a aucun port entrant : tout le trafic arrive par ce tunnel. Token tronqué, plus d’entrée réseau du tout. Le serveur tournait, la base répondait, et rien ne pouvait y accéder.
Le CDN ou le tunnel devant ton serveur est invisible tant qu’il marche. Il ne coûte rien, il n’apparaît dans aucun budget, et il tient toute l’entrée. La réversibilité de cette brique ne se constate pas le jour où tu en as besoin, elle se prépare quand tout va bien : un certificat public sur l’origine, une façon d’exposer le serveur sans le tunnel, et un test fait une fois hors production.
Cloudflare est toujours devant sycode.fr, pour de bonnes raisons, et le certificat public de secours est sur ma liste, pas encore sur le disque.
Sortir de Supabase et de Vercel : ce que j’ai fait, deux fois
Fin août 2026, sur un projet client, Supabase a annoncé une restriction : le quota d’egress était dépassé de 390 %. Les pages publiques tapaient la base à chaque affichage, les préversions Vercel partageaient la base de production et se faisaient crawler, et des scripts de développement tournaient contre la base distante.
La réponse a tenu en trois correctifs : cache des pages publiques, scripts qui refusent de démarrer si la base n’est pas locale, noindex sur les préversions. Puis, sur SimplyJury, du 8 au 10 septembre, j’ai ramené 122 accès PostgREST sur Drizzle en deux jours, avec au passage un centre qui ne voit plus les demandes des autres centres. Le Postgres est resté chez Supabase. Ce qui a changé, c’est que le code ne dépend plus de l’API maison du fournisseur, et qu’un dump se restaure ailleurs sans réécrire l’application.
Sur sycode.fr, j’ai fait la sortie deux fois. En avril 2026, la première version du site est passée de Supabase à Prisma avec Auth.js. Le 13 septembre, elle a quitté Vercel pour le VPS, avec un adaptateur Node, une base SQLite, et les quotas en mémoire : sur Vercel, un processus serverless ne survit pas d’une invocation à l’autre, et sa mémoire part avec lui, d’où le KV ; sur un serveur qui ne s’éteint pas, la mémoire suffit. Un jour de travail, et les correctifs des jours suivants sont racontés dans le coût réel d’une infrastructure SaaS.
Pour faire simple, la base de données est du Postgres portable. Le RLS, les Edge Functions et l’auth ne le sont pas au même degré. Ça se sort, mais ça se compte en jours, pas en après-midi, et sur le plan gratuit de Supabase un projet inactif une semaine est mis en pause : parfait pour une maquette, mauvais pour une démo que tu ouvres une fois par mois.
Pappers remplacé par un scraper : quand une brique n’a plus de raison d’exister
Le 24 janvier 2026, sur leads-extractor, j’ai remplacé l’API Pappers par un scraper maison. Pappers servait à récupérer des données d’entreprises pour qualifier des prospects, et six jours après le début du projet il était déjà remplacé : la brique n’avait pas eu le temps de devenir une dépendance.
Le remplacement a tenu en un commit. C’est le contrepoint des briques qui engagent : celle-ci ne retenait rien, ni domaine, ni schéma, ni relation client. Ce genre de brique, tu peux l’essayer sans réfléchir. C’est sur les autres que l’après-midi devient un trimestre.
Ce que tu découvres trop tard si tu ne lis pas le contrat
Un client B2B finira par te demander où sont ses données et qui y accède. Le jour où il le fait, tu as besoin de deux documents par prestataire : un accord de traitement des données, le DPA, et la liste des sous-traitants. Cloudflare sert ici de modèle : son DPA est public, versionné (6.4, en vigueur depuis le 3 avril 2026), la liste des sous-traitants est publiée, et tout ajout est annoncé 30 jours à l’avance, avec dix jours pour s’y opposer avant que le silence vaille accord. Chez moi, un prestataire qui ne publie ni l’un ni l’autre ne rentre pas dans la pile.
Pour les transferts vers les États-Unis, le cadre qui rend Stripe, Cloudflare, Resend et AWS praticables tient encore : la décision d’adéquation EU–US est en vigueur, le recours Latombe a été rejeté le 3 septembre 2025 et un pourvoi est pendant devant la CJUE. Ce que j’en fais, c’est simple : les données de mes clients restent sur des serveurs en France ou en Europe, et les prestataires américains ne voient passer que ce qui doit transiter chez eux, un e-mail, un paiement. Si la Cour renverse le cadre, je change de clauses, pas d’hébergeur.
Le piège que je n’avais lu nulle part, c’est celui de la facturation électronique : une plateforme de dématérialisation partenaire lie son application à un seul SIREN, et un éditeur multi-tenant qui la branche telle quelle attribue toutes les factures de ses clients à sa propre entreprise. Je raconte le blocage dans le pilier du guide ; ce qui compte ici, c’est qu’il était dans le contrat, pas dans le code, et qu’une page de tarifs ne te le montre jamais.
Ce que je fais, moi
Sur asap.cool, je reste le marchand, mon domaine et mes DNS sont chez moi, la base est un Postgres que je sais restaurer, et chaque brique annexe a une façon de disparaître de l’interface sans casser le parcours, parce que Bird me l’a appris. Sur les projets clients, Resend est créé en région EU dès le premier jour, et je ne signe rien qui n’a pas de DPA public. Ce que je n’ai pas encore fait, c’est débrancher Cloudflare pour de vrai.
Choisir des briques remplaçables, c’est la même discipline que d’écrire du code que quelqu’un d’autre peut reprendre, et c’est le principe de ce que je livre en SaaS sur-mesure. Si tu es en train de monter ta pile et que tu veux qu’on regarde ensemble laquelle de tes briques te retient, prends un créneau de 30 minutes.