claudeers.
// Uncategorized / Others

anakin

Open-source web scraping API. Turn any website into clean markdown or structured JSON. Anti-detect browser, proxy auto-selection, self-hosted. One command: m…

// Uncategorized / Others[ cli ][ api ][ web ][ claude ]#claude#ai#anti-detect#golang#markdown#open-source#playwright#scraper#uncategorizedAGPL-3.0$open-sourceupdated 20 days ago
Actively maintained
100/100
last commit 4 days ago
last release 5 months ago
releases 2
open issues 26
// star history+621 this week (+41.2%)

Install with your AI

Paste into Claude Code, Cursor, or any agent — it reads the repo and wires the tool into your project.

Install and set up anakin (release-binary project) into my current project.
Found on https://claudeers.com/anakin
Repo: https://github.com/Anakin-Inc/anakin
Homepage/docs: https://anakin.io
Detected install method: release-binary → inspect the README
Category: uncategorized. Platforms: cli, api, web.
Read the repo's README for exact setup and env vars, then install it and wire it into my project.

Claudeers Health Verdict:
active; community-verified: false. Confirm the source before running anything.
// or install directly (release-binary)

Grab the latest release asset from GitHub.

# download a build from https://github.com/Anakin-Inc/anakin/releases
// or clone
git clone https://github.com/Anakin-Inc/anakin

// compatibility

Platformscli, api, web
Operating systems
AI compatibilityclaude
LicenseAGPL-3.0
Pricingopen-source
LanguageGo

AnakinScraper OSS

The open-source web scraping API for AI. Turn any website into LLM-ready markdown or structured data.

Self-host with a single command. No cloud dependencies. Powers RAG pipelines, AI agents, and data extraction at scale.

git clone https://github.com/Anakin-Inc/anakinscraper-oss.git && cd anakinscraper-oss && make up

# Scrape any website — one curl, full result:
curl -s -X POST http://localhost:8080/v1/scrape \
  -H "Content-Type: application/json" \
  -d '{"url": "https://example.com"}' | jq .markdown

Why AnakinScraper?

AnakinScraperFirecrawlCrawleeScrapy
Anti-detect browserCamoufox (Firefox)Headless ChromePlaywrightNo
Smart proxy selectionThompson Sampling (ML)Round-robinManualManual
Zero-config startgo run — no DB neededDocker requirednpm installpip install
Single binaryGo — one 30MB binaryNode.jsNode.jsPython
Handler chain fallbackHTTP → Browser → APISingle modeSingle modeSingle mode
Structured JSON (AI)Gemini extractionLLM extractionNoNo

Features

  • Handler chain with fallback — HTTP fetch → anti-detect browser → external API. Each handler tries in order; if one fails, the next picks up automatically. Most pages resolve on the free local HTTP handler — paid APIs are only called for the ~5% that actually need them. Docs →
  • Custom API handlers — plug in any third-party scraping service as a chain fallback. Only invoked when local handlers fail — saves 90%+ on API costs vs routing everything through a paid service. Built-in anakin.io handler included. How to add your own →
  • Domain configs — per-domain scraping strategies: choose which handlers to use, set timeouts, retries, custom headers, block domains, and validate content with pattern matching. Docs →
  • Failure detection — define failure patterns and required patterns per domain. If the scraped content matches a failure pattern (e.g. CAPTCHA page) or misses a required pattern, the job auto-retries with the next handler. Docs →
  • Anti-detect browserCamoufox (anti-detect Firefox) with realistic fingerprints, not headless Chrome. Docs →
  • Proxy auto-selectThompson Sampling picks the best proxy per domain, learning from success/failure in real time. Docs →
  • Structured JSON extraction — use Gemini AI to extract structured data from any page (bring your own API key)
  • Sync + async + batch APIPOST /v1/scrape for instant results, /v1/url-scraper for async with polling, batch up to 10 URLs
  • LLM-ready markdown — automatic boilerplate removal, clean content extraction. Feed directly into RAG pipelines, Claude, GPT, or any LLM without preprocessing
  • Web dashboard — built-in React UI for scraping, job tracking, domain config management, and proxy monitoring
  • Zero-config mode — run with just Go, no database needed. Or use Docker for the full stack
  • Self-contained — no Redis, no AWS, no message queues. Single Go binary. Optional PostgreSQL for persistence

Quick Start (no Docker, no database)

Just Go 1.25+. Two commands:

cd server && go run cmd/server/main.go

# In another terminal:
curl -s -X POST http://localhost:8080/v1/scrape \
  -H "Content-Type: application/json" \
  -d '{"url": "https://example.com"}' | jq .markdown

Jobs are stored in memory (lost on restart). For persistence, set DATABASE_URL. For JavaScript-heavy sites, add the browser service via Docker.

Self-Host (Docker — full stack)

Prerequisites

Start

git clone https://github.com/Anakin-Inc/anakinscraper-oss.git
cd anakinscraper-oss
make up

That's it. Three containers start:

ServicePortDescription
Server8080REST API + worker pool
Browser Service9222Camoufox anti-detect browser (WebSocket)
PostgreSQL5432Job storage

Web Dashboard

A built-in web UI is included for visual scraping, job tracking, and configuration:

cd webapp && npm install && npm run dev

Open http://localhost:3000 — the dashboard proxies API calls to the server on port 8080.

Pages: Dashboard (health + quick scrape) | Scrape (sync/async/batch with live results) | Jobs (tracked history with status filters) | Domain Configs (CRUD with handler chain management) | Proxy Scores (Thompson Sampling performance)

Scrape a URL

Synchronous (recommended for getting started):

curl -s -X POST http://localhost:8080/v1/scrape \
  -H "Content-Type: application/json" \
  -d '{"url": "https://example.com"}' | jq .

One request, full result back. No polling. Timeout: 30 seconds.

Asynchronous (for long-running scrapes):

# Submit
curl -s -X POST http://localhost:8080/v1/url-scraper \
  -H "Content-Type: application/json" \
  -d '{"url": "https://example.com"}'

# Poll for result
curl -s http://localhost:8080/v1/url-scraper/JOB_UUID | jq .

With AI-powered JSON extraction (requires GEMINI_API_KEY):

curl -s -X POST http://localhost:8080/v1/scrape \
  -H "Content-Type: application/json" \
  -d '{"url": "https://example.com", "generateJson": true}' | jq .generatedJson

No API keys required for the scraper itself. Just JSON in, results out.

Architecture

                    ┌─────────────────┐
                    │   Your App      │
                    │   (cURL / CLI)  │
                    └────────┬────────┘
                             │ HTTP
                             ▼
                    ┌─────────────────┐         ┌──────────┐
                    │     Server      │────────▶│  Gemini  │
                    │   (Go/Fiber)    │ optional│  (JSON)  │
                    │   Port 8080     │         └──────────┘
                    └──┬──────┬───┬──┘
                       │      │   │
            ┌──────────┘      │   └────────────┐
            ▼                 ▼                 ▼
      ┌──────────┐   ┌──────────────┐   ┌──────────────┐
      │ Storage  │   │   Browser    │   │ API Handler  │
      │ Postgres │   │   Service    │   │ (anakin.io   │
      │ or memory│   │  (Camoufox)  │   │  or custom)  │
      │(optional)│   │  (optional)  │   │  (optional)  │
      └──────────┘   └──────────────┘   └──────────────┘

The server is a single Go binary that runs with zero dependencies. Optionally add PostgreSQL for persistence, the browser service for JavaScript-heavy sites, and API handlers for hard-to-scrape sites. Workers execute the handler chain (HTTP → browser → API fallback), convert HTML to markdown, and optionally extract structured JSON via Gemini.

API Reference

See docs/API.md for the complete API reference. Quick overview:

MethodEndpointDescription
POST/v1/scrapeSync — scrape a URL and get the result back directly (30s timeout)
POST/v1/url-scraperAsync — submit a scrape job, returns job ID
GET/v1/url-scraper/:idPoll for async job result
POST/v1/url-scraper/batchBatch scrape up to 10 URLs
GET/v1/url-scraper/batch/:idPoll for batch result
POST/v1/domain-configsCreate a per-domain scraping config
GET/v1/domain-configsList all domain configs
GET/v1/proxy/scoresView proxy Thompson Sampling scores
GET/v1/telemetry/statusView telemetry state and next payload (details)
GET/healthHealth check

Request Fields

FieldTypeDefaultDescription
urlstringrequiredURL to scrape
useBrowserboolfalseSkip HTTP handler, go straight to browser
generateJsonboolfalseExtract structured JSON via Gemini AI (requires GEMINI_API_KEY)

Response

{
  "id": "550e8400-...",
  "status": "completed",
  "url": "https://example.com",
  "html": "<html>...</html>",
  "cleanedHtml": "<main>...</main>",
  "markdown": "# Page Title\n\nContent...",
  "generatedJson": {
    "status": "success",
    "data": {"title": "Page Title", "content": "..."}
  },
  "durationMs": 1234
}

generatedJson is only present when generateJson: true and GEMINI_API_KEY is configured.

Handler Chain

Each scrape job goes through the handler chain. On failure, it falls back to the next handler:

HTTP Handler (fast, ~200ms) ──fail──▶ Browser Handler (Camoufox) ──fail──▶ API Handler (optional)

HTTP Handler — direct HTTP GET with a browser user-agent. Handles static HTML, server-rendered pages. No browser overhead.

Browser Handler — connects to Camoufox (anti-detect Firefox) over WebSocket via Playwright protocol. Full JavaScript rendering, network-idle detection, realistic browser fingerprints. Handles SPAs, lazy-loaded content, and sites with anti-bot protection.

API Handler (optional) — delegates to an external scraping API when local handlers fail. Set ANAKIN_API_KEY to enable the built-in anakin.io fallback for hard-to-scrape sites (Cloudflare, DataDome, etc.). See Adding Custom API Handlers below.

Adding Custom API Handlers

The API handler pattern makes it easy to integrate any third-party scraping service as a chain fallback. The built-in anakin.io handler (server/internal/handler/api.go) is a working example — copy and modify it for your provider:

  1. Copy api.go to my_provider.go
  2. Add a constructor like NewAnakinHandler — set your provider's URL, auth header name, and response format
  3. Register in main.go:
    if cfg.MyProviderAPIKey != "" {
        handlers = append(handlers, handler.NewAPIHandler(handler.APIHandlerConfig{
            Name:       "my-provider",
            APIURL:     "https://api.my-provider.com/scrape",
            APIKey:     cfg.MyProviderAPIKey,
            AuthHeader: "Authorization",  // or "X-API-Key", "Bearer", etc.
        }))
    }
    
  4. Add env var to config.go: MyProviderAPIKey: os.Getenv("MY_PROVIDER_API_KEY")

API keys always come from environment variables — never hardcoded. The handler only activates when its key is set.

Extending the Chain

Implement the ScrapingHandler interface:

type ScrapingHandler interface {
    Name() string
    CanHandle(ctx context.Context, req *HandlerRequest) bool
    Scrape(ctx context.Context, req *HandlerRequest) (*ScrapeResult, error)
    IsHealthy() bool
}

See examples/custom-handler/.

Configuration

All configuration via environment variables:

VariableDefaultDescription
PORT8080Server port
DATABASE_URLPostgreSQL connection string (optional — uses in-memory storage when not set)
BROWSER_WS_URLws://localhost:9222/camoufoxBrowser service WebSocket URL
BROWSER_TIMEOUT60Page navigation timeout (seconds)
BROWSER_LOAD_WAIT2Extra wait after page load (seconds)
WORKER_POOL_SIZE5Concurrent scrape workers
JOB_BUFFER_SIZE100Job queue buffer size
JOB_TIMEOUT120Max job duration (seconds)
PROXY_URLDefault HTTP proxy for the HTTP handler
PROXY_URLSComma-separated proxy pool for auto-selection (Thompson Sampling)
GEMINI_API_KEYGoogle Gemini API key for structured JSON extraction (get one free)
ANAKIN_API_KEYanakin.io API key — enables hosted API as chain fallback for hard-to-scrape sites
LOG_LEVELINFOLog level (DEBUG, INFO, WARN, ERROR)
TELEMETRYonAnonymous usage telemetry (off to disable — see TELEMETRY.md)
TELEMETRY_URLCustom telemetry endpoint (defaults to https://telemetry.anakin.io/v1/collect)
DISABLE_HOSTED_HINTSSet to true to suppress hosted service tips in error messages

Project Structure

anakinscraper-oss/
├── server/                     # Go server (API + workers)
│   ├── cmd/server/             # Entry point
│   └── internal/
│       ├── config/             # Environment config
│       ├── models/             # Data types
│       ├── worker/             # Channel-based worker pool
│       ├── handler/            # Scraping handlers (HTTP, Browser)
│       ├── converter/          # HTML → Markdown
│       ├── gemini/             # Gemini AI JSON extraction
│       ├── domain/             # Domain configs + failure detection
│       ├── store/              # Job storage (PostgreSQL or in-memory)
│       ├── proxy/              # Proxy pool + Thompson Sampling
│       ├── telemetry/          # Anonymous usage telemetry
│       ├── processor/          # Job processing
│       └── http/
│           ├── handlers/       # API request handlers
│           └── router/         # Route registration
├── browser-service/            # Camoufox anti-detect browser server
├── webapp/                     # React web dashboard (Vite + Tailwind)
├── openclaw-skill/             # OpenClaw skill wrapper
├── examples/                   # Usage examples
├── docker-compose.yml          # Full stack (3 containers)
├── scripts/init-db.sql         # Database schema
└── .env.example                # Config template

Development

Running Locally (without Docker)

Minimal (Go only):

cd server && go run cmd/server/main.go

No database, no browser service. HTTP handler scrapes static sites. Jobs stored in memory.

Full local stack (Go + Python + PostgreSQL):

# Terminal 1: PostgreSQL
docker compose up postgres -d

# Terminal 2: Browser Service (for JS-heavy sites)
cd browser-service && pip install -r requirements.txt && python server.py

# Terminal 3: Server with persistence
cd server && DATABASE_URL="postgres://postgres:postgres@localhost:5432/anakinscraper?sslmode=disable" go run cmd/server/main.go

Running Tests

cd server && go test ./...

Building

cd server && go build -o server ./cmd/server

CLI

Use the Anakin CLI to scrape from your terminal. It works against both self-hosted and the hosted API:

# Install
pip install anakin-cli

# Scrape via your local instance (no API key needed)
anakin scrape "https://example.com" --api-url http://localhost:8080

# Or set it as your default
export ANAKIN_API_URL="http://localhost:8080"
anakin scrape "https://example.com"

# Extract structured JSON
anakin scrape "https://example.com" --format json --api-url http://localhost:8080

# Batch scrape
anakin scrape-batch "https://example.com" "https://httpbin.org/html" --api-url http://localhost:8080

The same CLI also supports AI web search and deep research via the hosted API — get a free API key to unlock those features.

See the anakin-cli repo for full usage.

Integrations

OpenClaw Skill

Use AnakinScraper as an OpenClaw skill:

cp -r openclaw-skill ~/.openclaw/workspace/skills/anakinscraper

See openclaw-skill/SKILL.md.

Self-Hosted vs Hosted

This repo gives you the full scraping engine. anakin.io adds the infrastructure you'd otherwise build yourself:

FeatureSelf-Hosted (this repo)Hosted (anakin.io)
Sync + async scrapingYesYes
Batch scrapingYesYes
Anti-detect browserYesYes
Structured JSON extractionYes (bring your own Gemini key)Yes (built-in)
Domain configsYesYes
Proxy auto-selectionYes (bring your own proxies)Yes (195 countries included)
Geo-targeted proxies195 countries
AI web searchYes
Deep agentic researchYes
Zero infrastructureYes

Already self-hosting? Switch to hosted with one line — same API, same CLI:

anakin login --api-key "ak-xxx"   # get your key at anakin.io/dashboard
anakin scrape "https://example.com"  # now routes through hosted

Try it free →

Community

Join our Discord for questions, discussion, and support.

Contributing

See CONTRIBUTING.md.

License

AGPL-3.0 — free to self-host. If you modify the code and offer it as a hosted service, you must open-source your changes.


Built by Anakin-Inc. If you find this useful, give us a star!

// faq

What is anakin?

Open-source web scraping API. Turn any website into clean markdown or structured JSON. Anti-detect browser, proxy auto-selection, self-hosted. One command: make up. It is open-source on GitHub.

Is anakin free to use?

anakin is open-source under the AGPL-3.0 license, so it is free to use.

What category does anakin belong to?

anakin is listed under uncategorized in the Claudeers registry of Claude-compatible tools.

3 views
2,127 stars
unclaimed
updated 20 days ago

// embed badge

anakin on Claudeers
[![Claudeers](https://claudeers.com/api/badge/anakin.svg)](https://claudeers.com/anakin)

// retro hit counter

anakin hit counter
[![Hits](https://claudeers.com/api/counter/anakin.svg)](https://claudeers.com/anakin)

// reviews

// guestbook

0/500

// related in Uncategorized / Others

🔓

Fair-code workflow automation platform with native AI capabilities. Combine visual building with custom code, self-host or cloud, 400+ integrations.

// uncategorizedn8n-io/TypeScript201,386NOASSERTION[ claude ]
🔓

The agent engineering platform.

// uncategorizedlangchain-ai/Python144,291MIT[ claude ]
🔓

FULL Augment Code, Claude Code, Cluely, CodeBuddy, Comet, Cursor, Devin AI, Junie, Kiro, Leap.new, Lovable, Manus, NotionAI, Orchids.app, Perplexity, Poke, Q…

// uncategorizedx1xhlol/142,855GPL-3.0[ claude ]
🔓

100+ AI Agent & RAG apps you can actually run — clone, customize, ship.

// uncategorizedShubhamsaboo/Python133,607Apache-2.0[ claude ]

// built by

→ see how anakin connects across the ecosystem