# Website Content Crawler Pro — Markdown for AI & RAG (`hipersoft/web-content-crawler-pro`) Actor

Crawl any website into clean Markdown or text for LLMs, RAG and AI. HTTP + JS-browser modes, main-content (readability) extraction, sitemaps, URL glob filters, cookie-banner removal and CSS selectors. No login, no API key.

- **URL**: https://apify.com/hipersoft/web-content-crawler-pro.md
- **Developed by:** [hiper soft](https://apify.com/hipersoft) (community)
- **Categories:** Developer tools, AI
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.003 / page crawled

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Website Content Crawler Pro — Clean Markdown for AI, RAG & LLMs

Turn any website into clean, LLM-ready **Markdown** (or text) in one run. Built for feeding documentation, blogs and knowledge bases into **RAG pipelines, vector databases and AI agents**. Crawls with a fast HTTP engine *or* a full JavaScript browser, extracts just the main content (no nav, ads or cookie banners), and follows internal links with precise glob and sitemap control. No account, no API key.

![Website Content Crawler Pro input — start URLs, crawler type and page cap in the Apify Console](https://api.apify.com/v2/key-value-stores/SUfvnaFLd9z9eBCtV/records/web-content-crawler-pro-input.png?v=2)

### Features

- 📝 **Markdown output** — clean, structured Markdown per page, ideal for LLMs, RAG and vector DBs (plus plain text and optional HTML)
- 🌐 **HTTP or Browser mode** — fast HTTP crawling for static sites, or full Chromium rendering for JavaScript/SPA sites
- 🧹 **Main-content extraction** — Readability strips navigation, ads, footers and cookie banners, keeping the real article
- 🗺️ **Sitemap + glob crawling** — seed from `sitemap.xml`, and include/exclude URLs with glob patterns
- 🔗 **Smart link following** — configurable depth, same-domain-only, and total page cap
- 🎯 **CSS control** — keep-only or remove specific elements; wait for selectors and dynamic content in browser mode
- ⚡ **Fast & parallel** — tunable concurrency, retries and proxy support

### What you get

![Website Content Crawler Pro output example — one page as clean Markdown with title and metadata as structured JSON](https://api.apify.com/v2/key-value-stores/SUfvnaFLd9z9eBCtV/records/web-content-crawler-pro-output.png?v=5)

One record per page:

```json
{
  "url": "https://docs.example.com/guide",
  "title": "Getting Started",
  "description": "A short guide to …",
  "author": null,
  "siteName": "Example Docs",
  "lang": "en",
  "wordCount": 812,
  "markdown": "# Getting Started\n\nThis guide walks you through …",
  "text": "Getting Started This guide walks you through …"
}
```

#### Output schema

| Field | Type | Description |
|-------|------|-------------|
| `url` | string (URL) | Page URL that was crawled. |
| `title` | string | Page title. |
| `description` | string | Meta description of the page. |
| `canonical` | string (URL) | Canonical URL declared by the page. |
| `lang` | string | Detected page language code (e.g. `en`). |
| `author` | string | Article author, if the page declares one. |
| `siteName` | string | Name of the site the page belongs to. |
| `wordCount` | integer | Number of words in the extracted content. |
| `markdown` | string | Main page content as clean Markdown. |
| `text` | string | Main page content as plain text. |

### Input

```json
{
  "urls": ["https://docs.apify.com/academy"],
  "crawlerType": "http",
  "crawl": true,
  "maxCrawlPages": 200,
  "includeUrlGlobs": ["https://docs.apify.com/academy/**"],
  "saveMarkdown": true
}
```

| Field | Description |
|-------|-------------|
| `urls` | Start URLs to crawl. |
| `crawlerType` | `http` (fast) or `browser` (JS rendering). |
| `crawl` | Follow internal links from the start URLs. |
| `maxCrawlPages` / `maxCrawlDepth` | Total page cap and link-hop depth. |
| `includeUrlGlobs` / `excludeUrlGlobs` | Glob filters for which URLs to crawl. |
| `useSitemaps` | Seed from each site's `sitemap.xml`. |
| `saveMarkdown` / `saveText` / `saveHtml` | Output formats. |
| `htmlTransformer` | `readability` (main content) or `none` (full body). |

### Use cases

- **RAG & AI knowledge bases** — turn docs sites into Markdown for retrieval-augmented generation
- **LLM fine-tuning datasets** — collect clean article text at scale
- **Docs & blog migration** — export a site's content to Markdown
- **Competitive/content research** — pull structured page content across a domain

### Pricing

Pay-per-event: a small amount per page crawled. See the **Pricing** tab for current rates.

### FAQ

**What's the difference from a basic content scraper?**
This Pro version outputs clean **Markdown** (not just text), renders **JavaScript** sites with a real browser, extracts the **main content** with Readability, and supports **sitemaps + glob filters** — everything a RAG/LLM pipeline needs.

**Do I need an API key?**
No. Just give it URLs and run — no account or key required.

**Can it handle JavaScript / single-page apps?**
Yes. Set `crawlerType` to `browser` and, if needed, `waitForSelector` or `dynamicContentWaitSecs` so client-rendered content loads before extraction.

**What output format is best for AI/RAG?**
Markdown. It preserves headings, lists and links in a compact form that LLMs and chunkers handle well. Plain text and HTML are also available.

**How many pages can it crawl?**
Up to tens of thousands per run via `maxCrawlPages`, with sitemap seeding and glob filters to target exactly the pages you want.

**Can I connect this to other apps and services?**
The Website Content Crawler Pro can be connected with almost any cloud service or web app thanks to [integrations on the Apify platform](https://apify.com/integrations). It works with [Make](https://apify.com/integrations/make), [Zapier](https://apify.com/integrations/zapier), [Slack](https://docs.apify.com/platform/integrations/slack), [Airbyte](https://docs.apify.com/platform/integrations/airbyte), [GitHub](https://docs.apify.com/platform/integrations/github), [Google Drive](https://docs.apify.com/platform/integrations/drive) and [many more](https://apify.com/integrations), plus the [Apify API](https://docs.apify.com/api/v2), JavaScript/Python clients and MCP. Or use [webhooks](https://docs.apify.com/platform/integrations/webhooks) to trigger an action whenever a run finishes.

### Related Actors

- [Website Content Crawler](https://apify.com/hipersoft/website-content-crawler) — the lightweight text-only crawler
- [Website Contact Scraper](https://apify.com/hipersoft/website-contact-scraper) — emails, phones and socials from any site
- [RAG Web Browser](https://apify.com/hipersoft/rag-web-browser) — search the web and return page content for AI agents
- [Bulk URL Checker](https://apify.com/hipersoft/bulk-url-checker) — status, redirects and metadata for a list of URLs

### Notes

Original clean-room implementation using open-source libraries (Crawlee, Mozilla Readability, Turndown). Respects the target site's content; use responsibly and within each site's terms. This is an independent tool, not affiliated with any site it crawls.

# Actor input Schema

## `urls` (type: `array`):

URLs to crawl. One per line.

## `startUrls` (type: `array`):

Advanced: start URLs as request objects.

## `crawlerType` (type: `string`):

http = fast, no JavaScript. browser = full Chromium for JS/SPA sites.

## `crawl` (type: `boolean`):

Crawl internal links from the start URLs (otherwise only the given URLs).

## `maxCrawlPages` (type: `integer`):

Maximum pages to crawl in total.

## `maxCrawlDepth` (type: `integer`):

How many link-hops from a start URL to follow.

## `sameDomainOnly` (type: `boolean`):

Only follow links on the same domain as the start URL.

## `includeUrlGlobs` (type: `array`):

Only crawl URLs matching these glob patterns, e.g. https://site.com/docs/\*\*.

## `excludeUrlGlobs` (type: `array`):

Skip URLs matching these glob patterns.

## `useSitemaps` (type: `boolean`):

Seed the crawl from each site's sitemap.xml.

## `saveMarkdown` (type: `boolean`):

Output clean Markdown (ideal for LLMs/RAG).

## `saveText` (type: `boolean`):

Output plain text.

## `saveHtml` (type: `boolean`):

Include the cleaned content HTML.

## `saveLinks` (type: `boolean`):

Include the list of links found on each page.

## `htmlTransformer` (type: `string`):

readability = extract the main article (strip nav/ads). none = keep the whole page body.

## `removeElementsCssSelector` (type: `string`):

CSS selector of elements to strip before extraction (e.g. nav, footer, .ads).

## `keepElementsCssSelector` (type: `string`):

If set, keep only content inside this CSS selector.

## `removeCookieWarnings` (type: `boolean`):

Strip common cookie/consent banners.

## `dynamicContentWaitSecs` (type: `integer`):

Browser mode: wait this many seconds for JS content to load.

## `waitForSelector` (type: `string`):

Browser mode: wait until this CSS selector appears.

## `textMaxChars` (type: `integer`):

Truncate each page's text/markdown to this many characters (0 = no limit).

## `maxConcurrency` (type: `integer`):

Max pages crawled in parallel.

## `proxyConfiguration` (type: `object`):

Proxy configuration.

## Actor input object example

```json
{
  "urls": [
    "https://docs.apify.com/academy/web-scraping-for-beginners"
  ],
  "crawlerType": "http",
  "crawl": false,
  "maxCrawlPages": 50,
  "maxCrawlDepth": 3,
  "sameDomainOnly": true,
  "useSitemaps": false,
  "saveMarkdown": true,
  "saveText": true,
  "saveHtml": false,
  "saveLinks": false,
  "htmlTransformer": "readability",
  "removeCookieWarnings": true,
  "dynamicContentWaitSecs": 0,
  "textMaxChars": 0,
  "maxConcurrency": 10,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "urls": [
        "https://docs.apify.com/academy/web-scraping-for-beginners"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("hipersoft/web-content-crawler-pro").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "urls": ["https://docs.apify.com/academy/web-scraping-for-beginners"] }

# Run the Actor and wait for it to finish
run = client.actor("hipersoft/web-content-crawler-pro").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "urls": [
    "https://docs.apify.com/academy/web-scraping-for-beginners"
  ]
}' |
apify call hipersoft/web-content-crawler-pro --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=hipersoft/web-content-crawler-pro",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/NFcgd7wCQ1gh2JcS6/builds/JLpAk9qnyFI1Qw1W6/openapi.json
