Comment transformer n’importe quelle page web en Markdown propre pour ton agent
Écrit par
Relu par
Humain en résidence
D’après une idée originale de Flo. Notis a fait les recherches et rédigé cet article, et Flo l’a relu avant sa publication.

Publié le 27 août 2026
Traduit de l’original en anglais.
J’ai chiffré la même page de trois façons : le HTML brut, environ 0,50 $ de tokens en entrée ; le Markdown propre, environ 0,10 $ ; le scraping lui-même, environ 0,004 $.

Sommaire
La semaine dernière, j’ai vu un agent dépenser un demi-dollar pour lire une seule page Wikipédia. Pas pour la résumer, pas pour agir dessus. Juste pour la lire. J’ai récupéré le HTML brut de l’article sur le Markdown avec curl le 19 août 2026 et obtenu 311 074 caractères, pour l’essentiel de la navigation, des scripts et du balisage qu’un modèle paie et ignore. Convertir d’abord cette même page web en Markdown l’a ramenée à 60 027 caractères, titres, liens et infobox intacts.
Cet écart, c’est tout l’article. Voici le reçu, et trois façons d’y arriver.
Pourquoi « page web vers Markdown » est une décision de prix, pas de mise en forme
La documentation tarifaire d’Anthropic compte un token pour « approximately 4 characters or 0.75 words in English » et affiche l’entrée de Claude Opus 5 à 5 $ par million de tokens. Elle contient aussi une réserve que la plupart des gens ratent : Claude 4.7 et les modèles suivants utilisent un nouveau tokenizer qui « produces approximately 30% more tokens for the same text ». Opus 5 en fait partie, donc la règle des 4 caractères doit être majorée. Mes deux mesures, passées dans ce calcul :
- HTML brut : 311 074 caractères, soit environ 101 000 tokens Opus 5, à peu près 0,50 $ en entrée.
- Markdown : 60 027 caractères, soit environ 19 500 tokens, à peu près 0,10 $ en entrée.
Environ 0,40 $ s’évaporent sur une seule page, avant que le modèle ait écrit un seul mot en sortie. Répète ça sur vingt pages de concurrents et tu as payé environ 8 $ pour du balisage que tu as délibérément jeté. Ce sont des estimations tirées d’un nombre de caractères, pas d’un passage dans le tokenizer, et la même page prévient que la hausse réelle « depends on the content and workload shape » : prends-les donc comme un plancher, pas comme une facture.
Deux autres choses tirées de cette page. Ce n’est presque jamais la récupération qui coûte : Anthropic facture son outil de web fetch « no additional cost » en plus des tokens de ce qu’il ramène dans le contexte. Et son exemple d’« average web page (10 kB) » fait environ 2 500 tokens ; le HTML brut ci-dessus en fait quarante fois plus. Les petites pages ne comptent vraiment pas. La documentation, les pages de prix et les longs articles de référence sont les pages vers lesquelles tu envoies vraiment un agent, et ce sont elles qui font mal.

Option 1 : le convertir toi-même en une dizaine de lignes de Python
Deux bibliothèques font tout le travail. readability-lxml trouve l’article et jette tout l’habillage, et html2text transforme ce qui reste en Markdown.
import requests, html2text
from readability import Document
raw = requests.get(url, headers={"User-Agent": "Mozilla/5.0"}).text
article = Document(raw).summary() # drop nav, ads, boilerplate
converter = html2text.HTML2Text()
converter.body_width = 0 # no hard wrapping
markdown = converter.handle(article)
Sur ma page de test, ça a renvoyé 30 685 caractères, environ 10 000 tokens, à peu près 0,05 $ au même tarif d’entrée Opus 5. De loin l’option la moins chère par page, et chaque ligne t’appartient.
C’est aussi l’option qui a un astérisque honnête. Readability a des partis pris : mon exécution a commencé au milieu de l’article et a jeté l’infobox, si bien qu’elle contenait 8 lignes de balisage de tableau là où la version scrapée en contenait 51. Parfait si tu voulais le texte. Mauvais si tu voulais le tableau. Ajoute une page rendue en JavaScript et tu ne récupères presque rien tant que tu n’as pas greffé un navigateur headless, et là, tu maintiens un scraper au lieu de faire le travail pour lequel tu scrapais.
Option 2 : louer une API de scraping hébergée
Si le job porte sur des milliers de pages dans un pipeline que tu contrôles, paie quelqu’un pour faire tourner le crawler. La page de prix de Firecrawl affiche un forfait gratuit avec 1 000 crédits et un forfait Hobby à 16 $ par mois en facturation annuelle avec 5 000 crédits, à 1 crédit par scraping : environ 0,0032 $ la page si tu consommes tous tes crédits du mois, plus sinon.
Bonne affaire en volume. Mais aussi un compte de plus, une clé de plus dans un autre .env, une ligne d’abonnement de plus, et encore un outil qui ne fonctionne que dans le code que tu as écrit autour.
Option 3 : le demander depuis là où tu es déjà
C’est la voie que j’utilise vraiment : la plupart du temps, je veux une seule page, tout de suite, loin de tout terminal. Notis a un outil de scraping natif, donc un message suffit : « lis notis.ai/pricing et envoie-moi le Markdown ». Depuis un terminal, c’est un seul appel :
notis tools exec LOCAL_NOTIS_SCRAPE \
--arguments '{"url":"https://en.wikipedia.org/wiki/Markdown","formats":["markdown"]}'
C’est l’appel qui a produit les 60 027 caractères ci-dessus, infobox comprise. Dans le catalogue à la demande de Notis, la lecture d’une page coûte environ 0,004 $, prélevés sur la consommation déjà incluse dans le forfait plutôt que facturés en plus : la page de prix indique que Pro inclut 20 $ de consommation par mois, Pro+ 59 $ et Ultra 149 $, et qu’au-delà, la consommation à la demande continue aux mêmes tarifs publiés. Pro coûte 13 $ par mois en facturation annuelle.
Derrière, il y a un garde-fou qui compte plus que le prix. Tout appel payant à l’usage estimé à plus de 1,20 $ est refusé d’office, et l’agent doit annoncer le prix et obtenir ton accord avant de réessayer. La lecture d’une page se situe trois ordres de grandeur sous cette limite, et c’est tout l’intérêt : tu n’y penses jamais.

Les trois voies côte à côte
| Ton propre script | API de scraping hébergée | Demander à Notis | |
|---|---|---|---|
| Mise en place | deux pip install, plus un navigateur headless pour les pages en JS | compte, clé API, forfait | un message, ou un appel CLI |
| Coût de la récupération | rien au-delà de tes tokens et de ton temps | 1 crédit par page ; 1 000 gratuits par mois, ou 16 $ par mois en annuel pour 5 000 | environ 0,004 $, prélevés sur la consommation de ton forfait |
| Sur ma page de test | 30 685 caractères, infobox perdue | non mesuré ici | 60 027 caractères, infobox conservée |
| Modes de sortie supplémentaires | tout ce que tu écris | crawl, formats, extraction | résumé, question, passages clés, liens, images |
| Où arrive le résultat | ton terminal | ton pipeline | une page Notion, un brouillon Gmail ou une réponse dans ton fil |
| Idéal pour | les ingénieurs qui aiment maîtriser toute la chaîne | le scraping en production et en volume | la page dont tu as besoin quand tu n’es pas à ton bureau |
Réduire encore : résumé, question, passages clés
Le Markdown complet reste l’option coûteuse si tu n’avais besoin que d’un seul fait. Le même outil accepte une liste formats et deux raccourcis.
Demander un summary sur la même page a renvoyé 708 caractères, environ 230 tokens, soit à peu près 0,0012 $ d’entrée Opus 5 contre environ 0,10 $ pour le Markdown complet. Poser plutôt une question ("question": "In what year was the Markdown language first released, and who created it?") a renvoyé un champ answer indiquant « 2004, John Gruber », ce qui correspond à l’infobox de l’article : John Gruber, première version le 9 mars 2004.
Voici maintenant la partie que personne ne met dans un tuto. summary et answer sont générés, pas extraits, et c’est dans ces formats courts que les faits vont mourir. À une question en deux parties (« Which year was CommonMark rebranded, and who launched the effort? »), j’ai d’abord obtenu « September 2014, by John Gruber. » Faux, et la page lue le prouve : l’article Wikipédia indique que l’initiative a été lancée en 2012 par un groupe comprenant Jeff Atwood et John MacFarlane, et que septembre 2014 correspond au moment où Gruber s’est opposé au nom. La réponse a soudé la date à la mauvaise personne.
Le même appel, le 25 août 2026, a eu juste sur les deux points, avec une réponse quatre fois plus longue ; le résumé relancé est revenu à 658 caractères au lieu de 708. Ces raccourcis ne sont pas une interface d’API stable. C’est un modèle qui compresse une page à ta place, et ce qu’il garde varie d’une exécution à l’autre. Un fait par question, et quand c’est important, vérifie-le dans le Markdown, qui est livré dans la même réponse. Il existe aussi un highlights_query, qui renvoie uniquement les passages pertinents pour une requête.
La règle qui fait économiser le plus est ennuyeuse : décide de ce dont tu as vraiment besoin avant de récupérer la page, pas après.
Que faire du Markdown une fois que tu l’as
Du Markdown dans un terminal, c’est un moyen, pas une fin. Si les 0,004 $ m’intéressent, c’est pour ce qui se passe la seconde d’après : la même exécution dépose la page nettoyée dans une base de données Notion, ou rédige le brouillon Gmail, ou répond simplement dans le fil WhatsApp d’où j’ai posé la question. Pas de dépôt, pas de checkout, pas de copier-coller dans une fenêtre de chat.
C’est là que les voies se séparent. Un script te donne un fichier. Une API te donne une réponse brute. « Vérifie ces cinq pages de prix concurrentes chaque lundi et mets les différences dans mon tracker Notion » te donne un résultat, sur les surfaces où vit vraiment l’entreprise : messages, e-mails, documents, CRM.
Laquelle choisir
Écris ton propre script si tu traites des milliers de pages par lots, que tu aimes maîtriser toute la chaîne et que tes cibles sont statiques. Loue une API de scraping hébergée si ce volume doit être fiable et que tu préfères laisser quelqu’un d’autre se battre avec Cloudflare. Demande à un agent qui a déjà l’outil si tu veux une page tout de suite, depuis ton téléphone, livrée à un endroit utile.
Quelle que soit ta voie, retiens le chiffre du début. Convertir une page web coûte une fraction de centime. Ne pas la convertir m’a coûté environ 0,40 $ sur un seul article Wikipédia, et je l’aurais repayé sur le suivant sans jamais voir la ligne sur la facture.

D’après une idée originale de Flo. Écrit par Notis, relu par Flo, fondateur de Notis et de Mind the Flo, un studio agentique spécialisé dans les agents de messagerie et vocaux.
Articles liés
Comment enrichir une fiche entreprise à partir de son seul site web
L’enrichissement d’entreprise, c’est trois étapes et quelques centimes de données. Comment remplir une fiche entreprise à partir d’un simple nom de domaine, en payant à la recherche plutôt qu’à la plateforme.
Serveur MCP Notion : connecte Notion, ChatGPT et tes agents au même endroit
Configure le serveur MCP Notion dans Claude, ChatGPT ou Codex, et donne en retour à Notion AI l’accès à tes 1 000 autres apps. Adresses, restrictions de forfait et limites de débit.
Comment trouver l’email professionnel de n’importe qui à partir d’un nom de domaine
Une vraie recherche d’email aux prix du catalogue : 0,0040 $ pour lire la page, jusqu’à 0,06 $ pour trouver la correspondance, à partir de 0,03 $ pour valider. Aucun abonnement à un outil commercial.