maxun Documentation

The open-source no-code platform for web scraping, crawling, search and AI data extraction β€’ Turn websites into structured APIs in minutes πŸ”₯

RAW Doc

Docker & Self-Hosted Deployment Verified OCI

Deploy maxun on any server, homelab, or cloud container platform.

1-Click Terminal Command
bash (docker run)
docker run -d --name maxun --restart always getmaxun/maxun-backend:latest
Configured Services & Ports
βš™οΈ postgres
image: postgres:13
πŸ”Œ Ports: ${DB_PORT:-5432}:${DB_PORT:-5432}
βš™οΈ minio
image: minio/minio
πŸ”Œ Ports: ${MINIO_PORT:-9000}:${MINIO_PORT:-9000}, ${MINIO_CONSOLE_PORT:-9001}:${MINIO_CONSOLE_PORT:-9001}
βš™οΈ backend
image: getmaxun/maxun-backend:latest
πŸ”Œ Ports: ${BACKEND_PORT:-8080}:${BACKEND_PORT:-8080}
βš™οΈ frontend
image: getmaxun/maxun-frontend:latest
πŸ”Œ Ports: ${FRONTEND_PORT:-5173}:${FRONTEND_PORT:-5173}
βš™οΈ browser
image: getmaxun/maxun-browser:latest
πŸ”Œ Ports: ${BROWSER_WS_PORT:-3001}:${BROWSER_WS_PORT:-3001}, ${BROWSER_HEALTH_PORT:-3002}:${BROWSER_HEALTH_PORT:-3002}
docker-compose.yml
yaml (docker-compose.yml)
services:
  postgres:
    image: postgres:13
    restart: unless-stopped
    environment:
      POSTGRES_USER: ${DB_USER}
      POSTGRES_PASSWORD: ${DB_PASSWORD}
      POSTGRES_DB: ${DB_NAME}
    ports:
      - "${DB_PORT:-5432}:${DB_PORT:-5432}"
    volumes:
      - postgres_data:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U postgres"]
      interval: 10s
      timeout: 5s
      retries: 5

  minio:
    image: minio/minio
    restart: unless-stopped
    environment:
      MINIO_ROOT_USER: ${MINIO_ACCESS_KEY}
      MINIO_ROOT_PASSWORD: ${MINIO_SECRET_KEY}
    command: server /data --console-address :${MINIO_CONSOLE_PORT:-9001}
    ports:
      - "${MINIO_PORT:-9000}:${MINIO_PORT:-9000}"  # API port
      - "${MINIO_CONSOLE_PORT:-9001}:${MINIO_CONSOLE_PORT:-9001}"  # WebUI port
    volumes:
      - minio_data:/data

  backend:
    # build:
    #   context: .
    #   dockerfile: Dockerfile.backend
    image: getmaxun/maxun-backend:latest
    restart: unless-stopped
    ports:
      - "${BACKEND_PORT:-8080}:${BACKEND_PORT:-8080}"
    env_file: .env
    environment:
      BACKEND_URL: ${BACKEND_URL}
      PLAYWRIGHT_BROWSERS_PATH: /ms-playwright
      PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 0
      CI: "true"
      CONTAINER: "true"
      # DEBUG: pw:api
      # PWDEBUG: 1
      CHROMIUM_FLAGS: '--disable-gpu --no-sandbox --headless=new'
      OLLAMA_BASE_URL: ${OLLAMA_BASE_URL:-http://host.docker.internal:11434}
    extra_hosts:
      - "host.docker.internal:host-gateway"
    security_opt:
    - seccomp=unconfined
    shm_size: '2gb'
    mem_limit: 6g
    depends_on:
      - postgres
      - minio
    volumes:
      - /var/run/dbus:/var/run/dbus

  frontend:
    # build:
    #   context: .
    #   dockerfile: Dockerfile.frontend 
    image: getmaxun/maxun-frontend:latest
    restart: unless-stopped
    ports:
      - "${FRONTEND_PORT:-5173}:${FRONTEND_PORT:-5173}"
    env_file: .env
    environment:
      PUBLIC_URL: ${PUBLIC_URL}
      BACKEND_URL: ${BACKEND_URL}
    depends_on:
      - backend

  browser:
    # build:
    #   context: .
    #   dockerfile: browser/Dockerfile
    #   args:
    #     BROWSER_WS_PORT: ${BROWSER_WS_PORT:-3001}
    #     BROWSER_HEALTH_PORT: ${BROWSER_HEALTH_PORT:-3002}
    image: getmaxun/maxun-browser:latest
    ports:
      - "${BROWSER_WS_PORT:-3001}:${BROWSER_WS_PORT:-3001}"
      - "${BROWSER_HEALTH_PORT:-3002}:${BROWSER_HEALTH_PORT:-3002}"
    environment:
      - NODE_ENV=production
      - DEBUG=pw:browser*
      - BROWSER_WS_PORT=${BROWSER_WS_PORT:-3001}
      - BROWSER_HEALTH_PORT=${BROWSER_HEALTH_PORT:-3002}
      - BROWSER_WS_HOST=${BROWSER_WS_HOST:-browser}
      - PLAYWRIGHT_BROWSERS_PATH=/ms-playwright
    restart: unless-stopped
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:${BROWSER_HEALTH_PORT:-3002}/health"]
      interval: 10s
      timeout: 5s
      retries: 3
      start_period: 10s
    deploy:
      resources:
        limits:
          memory: 2G
          cpus: '1.5'
        reservations:
          memory: 1G
          cpus: '1.0'
    security_opt:
      - seccomp:unconfined
    shm_size: 2gb
    cap_add:
      - SYS_ADMIN

volumes:
  postgres_data:
  minio_data:

File: README.md

text
<a href="https://www.maxun.dev/?ref=ghread">
        
        
        Maxun
    </a>

Turn Any Website Into A Structured API

Sponsors

| | #### IPcook

IPcook provides 55M+ real residential IPs across 185+ countries and regions, delivering fast and reliable proxy solutions for web scraping, automation, and data collection. 99.99% uptime, average response times under 0.5s, and 100,000 concurrency at max. Start with a FREE 100MB Trial to experience IPcook’s proxy service.

Discount Code: WELCOME20 - Get 20% off your first purchase. |
| --- | --- |
| | #### Nodemaven

The most reliable proxy provider for web scrapping with the Highest Quality IP on the market. Why Nodemaven?

  • 99.9% uptime
  • Sticky sessions up to 7 days
  • IP filtering: all proxies have fraud score <97%
  • No KYC required
  • Cashback on traffic - burn GB and earn up to 10% back

Discount Code: MAXUN35 - 35% off to Mobile and Residential Proxies. MAXUN40 - 40% off to ISP (Static) Proxies. |
| | #### Novada

Novada provides high-quality residential proxies and a powerful Scraper API for reliable web data collection at scale. Access real residential IPs worldwide, reduce blocks, and collect the data your scraping workflows need.

Discount Code: GitNOVADA - Get 20% off Rotating Residential Proxies and Scraping solutions. |
| | #### CoreClaw

CoreClaw β€” Production-ready Web Data APIs for AI agents and developers. Extract structured data from the web and build powerful automation workflows. |
| | #### TestMu AI

TestMu AI is the Native AI-Agentic Cloud Platform to Supercharge Quality Engineering. Test Intelligently and Ship Faster. |

What is Maxun?

Maxun is an open-source no-code web data platform for turning the web into structured, reliable data.
It supports extraction, crawling, scraping, and search β€” designed to scale from simple use cases to complex, automated workflows.

Ecosystem

  1. Extract – Emulate real user behavior and collect structured data from any website.

    • Recorder Mode – Record your actions as you browse; Maxun turns them into a reusable extraction robot.
    • AI Mode – Describe what you want in natural language and let LLM-powered extraction do the rest.
  2. Scrape – Convert full webpages into clean Markdown or HTML and capture screenshots.

  3. Crawl – Crawl entire websites and extract content from every relevant page, with full control over scope and discovery.

  4. Search – Run automated web searches to discover or scrape results, with support for time-based filters.

  5. SDK – A complete developer toolkit for scraping, extraction, scheduling, and end-to-end data automation.

  6. CLI – Create robots, trigger runs, and retrieve extracted data from your terminal.

How Does It Work?

Maxun robots are automated tools that help you collect data from websites without writing any code. Think of them as your personal web assistants that can navigate websites, extract information, and organize data just like you would manually - but faster and more efficiently.

There are four types of robots, each designed for a different job.

1. Extract

Extract emulates real user behavior and captures structured data.

  • Recorder Mode - Record your actions as you browse; Maxun turns them into a reusable extraction robot.

Example: Extract 10 Property Listings from Airbnb

https://github.com/user-attachments/assets/recorder-mode-demo-video

  • AI Mode - Describe what you want in natural language and let LLM-powered extraction do the rest.

Example: Extract Names, Rating & Duration of Top 50 Movies from IMDb

https://github.com/user-attachments/assets/f714e860-58d6-44ed-bbcd-c9374b629384

Learn more here.

2. Scrape

Scrape converts full webpages into clean Markdown, HTML and can capture screenshots. Ideal for AI workflows, agents, and document processing.

Learn more here.

3. Crawl

Crawl entire websites and extract content from every relevant page, with full control over scope and discovery.

Learn more here.

Run automated web searches to discover or scrape results, with support for time-based filters.

Learn more here.

Quick Start

Getting Started

The simplest & fastest way to get started is to use the hosted version: https://app.maxun.dev.

Installation

Maxun can run locally with or without Docker

  1. Setup with Docker Compose
  2. Setup without Docker
  3. Environment Variables
  4. SDK

Upgrading & Self Hosting

  1. Self Host Maxun With Docker
  2. Upgrade Maxun With Docker Compose Setup
  3. Upgrade Maxun Without Docker Compose Setup

Features

  • ✨ Extract Data With No-Code – Point and click interface
  • ✨ LLM-Powered Extraction – Describe what you want; use LLMs to scrape structured data
  • ✨ Developer SDK – Programmatic extraction, scheduling, and robot management
  • ✨ Handle Pagination & Scrolling – Automatic navigation
  • ✨ Run Robots On Schedules – Set it and forget it
  • ✨ Turn Websites to APIs – RESTful endpoints from any site
  • ✨ Turn Websites to Spreadsheets – Direct data export to Google Sheets & Airtable
  • ✨ Adapt To Website Layout Changes – Auto-recovery from site updates
  • ✨ Extract Behind Login – Handle authentication seamlessly
  • ✨ Integrations – Connect with your favorite tools
  • ✨ MCP Support – Model Context Protocol integration
  • ✨ LLM-Ready Data – Clean Markdown for AI applications
  • ✨ Self-Hostable – Full control over your infrastructure
  • ✨ Open Source – Transparent and community-driven

Demos

Maxun can be used for various use-cases, including lead generation, market research, content aggregation and more.
View demos here: https://www.maxun.dev/usecases

License

This project is licensed under AGPLv3.

Project Values

We believe in fair and responsible use of open source.
If you rely on this project commercially, please consider contributing back
or supporting its development.

Support Us

Star the repository, contribute if you love what we’re building, or sponsor us.

Contributors

Thank you to the combined efforts of everyone who contributes!


File: docs/self-hosting-docker.md

Self hosting docker guide

So you want to create a bot? Let's get you started!

Requirements (not covered)

  • Webserver (Apache2, nginx, etc.)
  • SSL Certificates (letsencrypt, zerossl, etc)
  • A sub-domain to host maxun i.e. maxun.my.domain
  • Docker
  • Docker compose
  • Probably others...

Guide

For this guide, we assume that before you start, you have a dedicated docker folder to house config files and everything else we need for persistence between docker container reboots and updates. The path in this guide is /home/$USER/Docker/maxun.

  1. Change directory into your docker folder cd /home/$USER/Docker/
  2. Create a new directory for maxun and all the required sub-folders for our docker services mkdir -p maxun/{db,minio,redis}
  3. Change directory to enter the newly created folder cd maxun
  4. Create an environment file to save your variables nano .env with the following contents:
text
NODE_ENV=production
JWT_SECRET=openssl rand -base64 48
DB_NAME=maxun
DB_USER=postgres
DB_PASSWORD=openssl rand -base64 24
DB_HOST=postgres
DB_PORT=5432
ENCRYPTION_KEY=openssl rand -base64 64
SESSION_SECRET=openssl rand -base64 48
MINIO_ENDPOINT=minio
MINIO_PORT=9000
MINIO_CONSOLE_PORT=9001
MINIO_ACCESS_KEY=minio
MINIO_SECRET_KEY=openssl rand -base64 24
REDIS_HOST=maxun-redis
REDIS_PORT=6379
REDIS_PASSWORD=
BACKEND_PORT=8080
FRONTEND_PORT=5173
BACKEND_URL=https://maxun.my.domain
PUBLIC_URL=https://maxun.my.domain
VITE_BACKEND_URL=https://maxun.my.domain
VITE_PUBLIC_URL=https://maxun.my.domain
GOOGLE_CLIENT_ID=
GOOGLE_CLIENT_SECRET=
GOOGLE_REDIRECT_URI=
AIRTABLE_CLIENT_ID=
AIRTABLE_REDIRECT_URI=
MAXUN_TELEMETRY=true
  1. Ctrl + x, Y, Enter will save your changes
  2. Please be sure to READ this file and change the variables to match your environment!!! i.e. BACKEND_PORT=30000
  3. Create a file for docker compose nano docker-compose.yml with the following contents:
text
/* Detailed source-code truncated for AI context efficiency. */
  1. Ctrl + x, Y, Enter will save your changes
  2. This particular setup is "production ready" meaning that maxun is only accessible from localhost. You must configure a reverse proxy to access it!
  3. Start maxun sudo docker compose up -d or sudo docker-compose up -d
  4. Wait 30 seconds for everything to come up
  5. Access your maxun instance at http://localhost:5173 if using defaults

Next steps

You will want to configure a reverse proxy. Click on a link below to check out some examples.