Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
kreuzberg-dev avatar

Scraping Html To Markdown

  • 1 installs
  • 26 repo stars
  • Updated July 27, 2026
  • kreuzberg-dev/plugins

Scrapes a single URL to clean Markdown plus structured metadata (links, images, JSON-LD, HTTP info) using kreuzcrawl scrape.

About

Covers `kreuzcrawl scrape <url>` for rendering one page to Markdown with a full JSON payload of metadata, links, images, and JSON-LD. A developer uses it to convert a single article or page into LLM context or structured data.

  • Markdown or JSON output with fit_content LLM-optimised variant
  • Metadata includes Open Graph, headings, links, images, tables, and HTTP response

Scraping Html To Markdown by the numbers

  • 1 all-time installs (skills.sh)
  • Ranked #1,980 of 2,715 Automation & Workflows skills by installs in the Skillselion catalog
  • Data as of Aug 4, 2026 (Skillselion catalog sync)
npx skills add https://github.com/kreuzberg-dev/plugins --skill scraping-html-to-markdown

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs1
repo stars26
Last updatedJuly 27, 2026
Repositorykreuzberg-dev/plugins

What it does

Scrapes a single URL to clean Markdown plus structured metadata (links, images, JSON-LD, HTTP info) using kreuzcrawl scrape.

Files

SKILL.mdMarkdownGitHub ↗

Scraping HTML to Markdown

kreuzcrawl scrape <url> is the right tool when the user has a single page in mind. It returns Markdown plus a full structured payload (metadata, links, images, JSON-LD, HTTP response info).

Quick recipe

kreuzcrawl scrape https://example.com/article --format markdown

JSON form (default) when downstream needs metadata:

kreuzcrawl scrape https://example.com/article --format json

Flag surface

FlagDefaultPurpose
--formatjsonjson or markdown.
--timeout30000Per-request timeout in ms.
--proxyHTTP, HTTPS, or SOCKS5 proxy URL.
--user-agentOverride request UA.
--respect-robots-txtoffHonour robots.txt.
--browser-modeautoauto, always, never — see headless-fallback skill.
--browser-endpointExternal CDP ws:// URL.
--configInline JSON or @file.json for full CrawlConfig.

Output shape

Markdown mode

Prints the rendered Markdown only. Use when piping to a file the user will read, or when the result becomes LLM context downstream.

JSON mode

Top-level PageResult with:

  • url, final_url (after redirects), status_code.
  • markdown: { content, fit_content, warnings }fit_content is a

pruned LLM-optimised variant.

  • metadata: Open Graph, Twitter Card, Dublin Core, article tags, JSON-LD,

headings (H1–H6), feeds, favicons, hreflang.

  • links: arrays for Internal, External, Anchor, and Document.
  • images: <img>, <picture>, srcset, og:image.
  • tables: structured table data preserved separately from Markdown.
  • response: HTTP headers, content type, charset, body size.

Read result.markdown.content for the Markdown string when scripting.

Common pitfalls

Empty or stub content

Static fetch returned a JS shell. Symptoms in JSON output:

  • markdown.content is short or only contains nav/footer chrome.
  • markdown.warnings mentions JS-render-required.
  • metadata.headings is empty when the page clearly has headings.

Re-run with --browser-mode always and see the headless-fallback skill.

WAF block

Auto mode detects 8 WAF vendors and retries through headless Chrome automatically. If you forced --browser-mode never, the WAF response will fall through. Check response.status_code — 403/406/503 with WAF headers (server: cloudflare, x-amz-cf-id, etc.) is the giveaway.

Robots.txt blocking the fetch

If --respect-robots-txt is set and the path is disallowed, the scrape returns an error rather than partial content. Drop the flag only on hosts you own or have authorisation for.

Wrong charset

Most pages declare UTF-8. Pages that lie about their charset surface as mojibake in markdown.content. Override via --config '{"force_encoding":"latin-1"}' or similar.

Examples

Scrape an article for downstream LLM context

kreuzcrawl scrape https://blog.example.com/post-123 --format markdown \
  > /tmp/article.md

Scrape with proxy and custom UA

kreuzcrawl scrape https://example.com \
  --proxy http://proxy.internal:3128 \
  --user-agent "kreuzcrawl (research@example.com)" \
  --format json

Extract just the OG metadata

kreuzcrawl scrape https://example.com --format json \
  | jq '.metadata | {title: .og.title, description: .og.description, image: .og.image}'

When to reach for crawl or interact instead

  • The user wants the whole site, not one page → crawling-a-site skill.
  • The user needs to click, type, or scroll before extracting → use

kreuzcrawl interact with the action list.

  • The user only wants the list of URLs → kreuzcrawl map.

Related skills

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.