Web Page to Markdown Extractor

Convert public URLs into clean Markdown, text, metadata, links, images, and optional HTML for AI and automation workflows.

Data fields

FieldTypeDescription
urllinkInput URL exported in the dataset view.
finalUrllinkFinal URL exported in the dataset view.
statusCodevalueStatus exported in the dataset view.
titlevalueTitle exported in the dataset view.
descriptionvalueDescription exported in the dataset view.
markdowntextMarkdown exported in the dataset view.
texttextText exported in the dataset view.
linksvalueLinks exported in the dataset view.

Input preview

startUrlsStart URLs *
renderModeRender mode
maxPagesMaximum pages
includeLinksInclude links
includeImagesInclude images
includeHtmlInclude source HTML

API and agents

This actor can be run through Apify API, datasets, webhooks, schedules, and the official Apify MCP server.

Ready-to-run examples

Open a saved Apify example, adjust the input, and run the actor in your own Apify account.

View all examples

How this actor works

See example inputs, outputs, API usage, and practical limits before running this actor on Apify.

Open Apify page

Convert public web pages into clean Markdown, readable text, metadata, links, images, and optional HTML for AI agents, RAG, support automation, research, and no-code workflows.

Use it when you have public URLs and need LLM-ready page content without maintaining a scraper, browser script, or HTML cleanup pipeline.

At a glance

  • Markdown extraction: Convert public HTTP/HTTPS pages into Markdown, plain text, metadata, links, images, and optional HTML.
  • AI-ready content: Prepare pages for prompts, embeddings, RAG, summarization, classification, and agent context.
  • Render control: Use fast HTTP mode by default, browser mode for JavaScript-heavy pages, or auto mode for fallback.
  • Predictable runs: Limit pages, timeout per page, HTML bytes, images, links, and source HTML output.
  • Inspectable failures: Save error rows so a batch can finish while still showing which URLs failed.

What can it do?

Web Page to Markdown Extractor turns public URLs into clean, LLM-ready page content.

  • Convert public web pages to Markdown with readable text, page title, description, and metadata.
  • Extract links and images for research, crawling, source inspection, and content workflows.
  • Choose HTTP, browser, or auto rendering depending on whether the page needs JavaScript.
  • Save error rows for failed URLs so large batches remain auditable.
  • Use it as a URL-to-Markdown API for AI agents, RAG, support automation, research, and no-code workflows.

What data can you extract?

Field Description
url Original input URL
finalUrl Final URL after redirects or rendering
statusCode HTTP/browser response status when available
title Extracted page title
description Meta description or article excerpt
markdown Clean Markdown content
text Plain text content
links Normalized links and anchor text
images Normalized image URLs and alt text
metadata Meta tags and extraction flags
renderModeUsed http or browser
html Optional truncated HTML
error Error message for failed pages

Quick start

  1. Open the actor on Apify.
  2. Paste one or more public URLs into startUrls.
  3. Choose renderMode.
  4. Keep maxPages small for your first test.
  5. Run the actor.
  6. Export the dataset as JSON, CSV, XML, Excel, or RSS.

Input

The required input is startUrls.

{
  "startUrls": [
    { "url": "https://example.com" }
  ],
  "renderMode": "http",
  "maxPages": 10,
  "includeLinks": true,
  "includeImages": false,
  "includeHtml": false,
  "timeoutSecs": 20
}

Output example

{
  "url": "https://example.com/",
  "finalUrl": "https://example.com/",
  "statusCode": 200,
  "title": "Example Domain",
  "description": "This domain is for use in documentation examples without needing permission.",
  "markdown": "This domain is for use in documentation examples...",
  "text": "This domain is for use in documentation examples...",
  "links": [
    { "url": "https://iana.org/domains/example", "text": "Learn more" }
  ],
  "images": [],
  "metadata": { "viewport": "width=device-width, initial-scale=1" },
  "renderModeUsed": "http",
  "error": null
}

Render modes

HTTP

Use HTTP mode for normal articles, documentation, blog posts, help pages, and static websites.

HTTP mode is fastest and usually cheapest.

Browser

Use browser mode when the page needs JavaScript before content appears.

Browser mode is useful for client-rendered sites but costs more and takes longer.

Auto

Auto mode tries HTTP extraction first and can use browser rendering when the page appears to be JavaScript-heavy or nearly empty after HTTP extraction.

Tips for best results

  • Start with one URL before running a large batch.
  • Use HTTP mode unless you know the page needs JavaScript.
  • Set includeHtml only when you need it.
  • Set includeImages only when image URLs matter.
  • Use waitForSelector for browser pages that load content slowly.
  • Keep timeoutSecs realistic; long timeouts can raise costs.
  • Use maxBytes to control very large pages.

Common workflows

  • Turn public documentation pages into Markdown for LLM prompts.
  • Extract help-center pages into a support knowledge base.
  • Convert public product pages into readable summaries.
  • Collect article text for monitoring or research.
  • Build a URL enrichment step in a no-code automation.
  • Prepare website content for embeddings and vector search.

Integrations

You can connect this actor to:

  • Make scenarios for URL enrichment
  • Zapier workflows for content handoff
  • n8n automations for AI pipelines
  • Airtable bases for research tracking
  • Google Sheets exports for editorial review
  • Apify webhooks for event-driven processing
  • Vector databases after dataset export

API usage with Node.js

import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('fetch_cat/web-page-to-markdown-extractor').call({
  startUrls: [{ url: 'https://example.com' }],
  renderMode: 'http',
  maxPages: 1
});
console.log(run.defaultDatasetId);

API usage with Python

from apify_client import ApifyClient

client = ApifyClient('APIFY_TOKEN')
run = client.actor('fetch_cat/web-page-to-markdown-extractor').call(run_input={
    'startUrls': [{'url': 'https://example.com'}],
    'renderMode': 'http',
    'maxPages': 1,
})
print(run['defaultDatasetId'])

API usage with cURL

curl -X POST 'https://api.apify.com/v2/acts/fetch_cat~web-page-to-markdown-extractor/runs?token=APIFY_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{"startUrls":[{"url":"https://example.com"}],"renderMode":"http","maxPages":1}'

MCP and AI agents

Use this actor from MCP-compatible AI tools through Apify MCP.

MCP server URL pattern:

https://mcp.apify.com?tools=fetch_cat/web-page-to-markdown-extractor

Add it to Claude Code with:

claude mcp add apify-web-page-markdown https://mcp.apify.com?tools=fetch_cat/web-page-to-markdown-extractor

Example MCP JSON configuration:

{
  "mcpServers": {
    "apify-web-page-markdown": {
      "url": "https://mcp.apify.com?tools=fetch_cat/web-page-to-markdown-extractor"
    }
  }
}

Example prompts:

  • "Convert this public URL into Markdown and summarize it."
  • "Extract the links from this documentation page."
  • "Fetch these three article URLs and prepare text for a knowledge base."

Limits and scope

This actor processes public pages only.

It does not log in, accept private cookies, submit forms, perform social engagement, or automate arbitrary browser tasks.

Some websites block automated access. In those cases the output may contain a status code or an error message.

Troubleshooting

Why is the Markdown empty?

The page may require JavaScript rendering, block automated requests, or contain mostly media. Try renderMode: browser with a small maxPages value.

Why did browser mode cost more?

Browser rendering starts a real browser and waits for page content. Use it only for pages that need JavaScript.

Why do I see an error row instead of a failed run?

The actor saves error rows so you can inspect which URLs failed while still getting data for the pages that worked.

Legality

Use this actor only for public web pages you are allowed to access and process. Respect website terms, copyright, robots policies where applicable, privacy laws, and platform rules.

Do not use it to access private account data, bypass authentication, or collect sensitive personal information.

Support

If a URL does not extract as expected, include the input URL, render mode, and a sample dataset item when reporting the issue.

Common questions

Questions and answers reused from the canonical actor README.

Can this actor access pages behind a login?

No. It is designed for public URLs only and does not accept private cookies or account sessions.

Should I use HTTP or browser mode?

Use HTTP first. Switch to browser mode only for pages where important content is rendered by JavaScript.