Maxun : transformer n'importe quel site en API, sans code
Comment fonctionne ce scraper open source à robots enregistrés, comment l'auto-héberger, et ce qu'il faut savoir avant de récupérer les données d'un site.

Un site affiche exactement les données dont vous avez besoin, et il n'a pas d'API. Les prix d'un concurrent, les offres d'emploi d'un secteur, la liste des exposants d'un salon. La solution classique, c'est un script de scraping. Il fonctionne trois semaines, jusqu'à ce que le site change une classe CSS.
Maxun propose une autre approche. C'est une plateforme open source de scraping où l'on n'écrit pas de sélecteurs : on ouvre le site dans un navigateur intégré, on clique sur ce qu'on veut récupérer, et Maxun en fait un « robot ». Ce robot se relance à la demande, sur un planning, ou depuis une API, et renvoie des données structurées.
Le projet
Le dépôt getmaxun/maxun a été créé fin 2023 et compte près de 18 000 étoiles début octobre 2026. Il est écrit en TypeScript, sous licence AGPLv3, avec Playwright pour piloter le navigateur. La dernière version, la v0.0.48, est sortie le 1er octobre.
Le numéro de version dit quelque chose : après trois ans, le projet est toujours en 0.0.x. Les mises à jour arrivent toutes les deux ou trois semaines, et les notes de version mentionnent régulièrement des migrations de base de données. C'est un outil vivant, pas encore un outil figé.
L'éditeur vend aussi une version hébergée sur app.maxun.dev. La version auto-hébergée est complète, sans fonctionnalité réservée apparente dans le README.
Ce que fait Maxun
Le README range les usages en six familles :
| Fonction | Ce qu'elle produit |
|---|---|
| Extract | Des données structurées (listes, tableaux) tirées d'une page |
| Scrape | La page entière en Markdown, HTML ou capture d'écran |
| Crawl | Le contenu de tout un site, page après page |
| Search | Les résultats d'une recherche web, avec filtres de date |
| Monitoring | Le suivi d'une page dans le temps, avec alerte en cas de changement |
| Documents | L'extraction de données depuis des PDF, DOCX, XLSX, CSV ou images |
L'extraction est la fonction centrale, et elle existe en deux modes.
Mode enregistreur : cliquer au lieu de coder
En mode « Recorder », Maxun ouvre le site cible dans un navigateur intégré à l'interface. On sélectionne une liste, par exemple les fiches produits d'une catégorie. Maxun détecte les éléments qui se répètent et propose les champs : nom, prix, lien, image. On indique comment passer à la page suivante, que ce soit un bouton « suivant », un défilement infini ou un bouton « charger plus ». On peut aussi enregistrer des actions préalables : se connecter, accepter les cookies, remplir un formulaire de recherche.
Le résultat est un robot, c'est-à-dire une suite d'actions rejouables. Pour qui a déjà écrit des scripts avec Puppeteer pour automatiser un navigateur, le gain est évident : pas de waitForSelector, pas de pagination codée à la main, et un robot modifiable par quelqu'un qui ne programme pas.
Mode IA : décrire ce qu'on veut
Le second mode remplace l'enregistrement par une consigne en langage naturel : « récupère le titre, l'entreprise et le salaire de chaque offre ». Un modèle de langage lit la page et en tire les champs demandés.
Le fichier Docker Compose prévoit une variable OLLAMA_BASE_URL qui pointe vers un Ollama local par défaut. On peut donc faire tourner cette extraction sans envoyer les pages à un fournisseur de modèle.
Mon avis : le mode IA est pratique pour une extraction ponctuelle, mais un robot enregistré reste plus prévisible pour une collecte récurrente. Un modèle peut interpréter une page légèrement différemment d'une exécution à l'autre, un sélecteur non.
Le SDK, l'API et le MCP
Chaque robot est accessible par une API REST, et deux SDK officiels, en Node.js et en Python, partagent la même interface depuis la dernière version :
import { Maxun } from 'maxun-sdk'
const maxun = new Maxun({ apiKey: process.env.MAXUN_API_KEY })
const robot = await maxun.scrape('Blog iducation', 'https://iducation.fr', {
formats: ['markdown'],
})
const result = await robot.run()
console.log(result.markdown)Les mêmes méthodes existent pour extract, crawl, search et les documents. Une CLI permet de lancer les robots depuis un terminal, et un serveur MCP pour brancher Maxun sur un agent IA laisse un assistant créer un robot et récupérer ses résultats sans passer par l'interface.
Côté sorties, les données s'exportent en CSV ou en JSON, ou partent directement dans Google Sheets ou Airtable à chaque exécution. Pour un tableau de suivi des prix mis à jour chaque matin, c'est l'intégration la plus utile.
Auto-héberger Maxun
L'installation passe par Docker Compose. La pile compte cinq services : PostgreSQL pour les robots et les exécutions, MinIO pour stocker les captures d'écran, le backend, le frontend, et un service de navigateur Chromium piloté par Playwright.
Commencez par générer trois secrets :
openssl rand -base64 48 # JWT_SECRET
openssl rand -base64 48 # SESSION_SECRET
openssl rand -hex 32 # ENCRYPTION_KEYRécupérez ensuite le fichier ENVEXAMPLE du dépôt, enregistrez-le sous le nom .env, et remplacez-y les trois valeurs. C'est une étape à ne pas sauter : le fichier d'exemple contient des secrets déjà remplis, publics par définition, et un ENCRYPTION_KEY qui chiffre les mots de passe et les proxys que vous enregistrez. Changez aussi les mots de passe de PostgreSQL et de MinIO.
Copiez enfin le docker-compose.yml du dépôt, puis :
docker compose up -dL'interface répond sur http://localhost:5173, l'API sur le port 8080. Deux réglages du Compose méritent un coup d'œil : le backend peut monter jusqu'à 6 Go de mémoire, et le navigateur en réserve 1 Go, plus 2 Go de mémoire partagée pour Chromium. Un petit VPS à 2 Go ne suffira pas.
Le Compose publie aussi les ports de PostgreSQL, de MinIO et du navigateur sur toutes les interfaces. Sur un serveur exposé, retirez ces lignes ports ou limitez-les à 127.0.0.1, et ne laissez passer que le frontend derrière un reverse proxy.
Les proxys et la question des blocages
Le README de Maxun est rempli de sponsors qui vendent des proxys résidentiels. Ce n'est pas un hasard : un scraper sérieux se heurte vite aux protections anti-robots, et la réponse de l'industrie consiste à faire passer les requêtes par des milliers d'adresses IP de particuliers.
Maxun permet de configurer un proxy par robot. Avant d'en arriver là, posez-vous la question de ce que vous contournez. Un site qui vous bloque a souvent exprimé clairement qu'il ne voulait pas être aspiré.
Ce que dit le droit
Récupérer des données publiques n'est pas illégal en soi, mais plusieurs règles s'appliquent. Les conditions d'utilisation du site peuvent interdire l'extraction automatisée. Le producteur d'une base de données est protégé contre l'extraction d'une partie substantielle de son contenu. Et dès que les données concernent des personnes, noms, profils, avis signés, le RGPD s'applique : base légale, information des personnes, durée de conservation. La CNIL a publié des recommandations précises sur le moissonnage, et l'articulation entre le RGPD et les usages d'IA mérite d'être relue avant d'alimenter un modèle avec des données collectées.
En pratique, je me limite à trois cas sans ambiguïté : mes propres sites, les sites qui autorisent la réutilisation (données publiques sous licence ouverte), et la veille sur des informations non personnelles, comme des prix ou des disponibilités, à un rythme qui ne charge pas le serveur cible.
Maxun rend le scraping accessible à quelqu'un qui ne veut pas maintenir des sélecteurs CSS, et ses robots enregistrés tiennent mieux face aux changements mineurs d'un site qu'un script écrit à la va-vite. Le projet reste jeune et demande une machine correcte, mais il couvre en une seule interface ce qui demandait jusqu'ici un script, un planificateur et un tableur. Pour les tâches où il faut naviguer et décider plutôt qu'extraire, Browser Use et ses agents IA dans le navigateur prend le relais.