Webpage to Markdown avatar

Webpage to Markdown

Pricing

from $1.00 / 1,000 results

Go to Apify Store
Webpage to Markdown

Webpage to Markdown

Get the main content of any page as Markdown. Great for LLMs and AI agent workflows.

Pricing

from $1.00 / 1,000 results

Rating

0.0

(0)

Developer

Epic Scrapers

Epic Scrapers

Maintained by Community

Actor stats

2

Bookmarked

11

Total users

1

Monthly active users

18 days ago

Last modified

Share

Webpage to Markdown: extract the main content of any URL as clean Markdown, HTML or JSON

Webpage to Markdown fetches web pages and returns their main content without menus, sidebars, footers and ads. You get clean Markdown for LLM, RAG and note-taking pipelines, or HTML and JSON when you need more. Each result also has the page's title, author, publish date, site name, language, image and word count.

  • Main-content extraction. Built on the open-source Defuddle library, which removes page clutter and keeps headings, links, images and code.
  • Three output formats. markdown (default), html, or json with Markdown, HTML, meta tags and Schema.org data together.
  • Metadata on every page. title, author, published, site, domain, description, image, favicon, language, wordCount.
  • Override when needed. Pass a CSS selector as contentSelector to pick the content block yourself, and a language to send an Accept-Language header.
  • Fast and light. It downloads the page with one plain HTTP request and runs no browser.
  • No login or API key. Failed URLs get a row with an error, so one bad link doesn't stop the run. Export to JSON, CSV or Excel.

Scope: This Actor reads the HTML a server returns. It doesn't run JavaScript, log in, or crawl links. To find article URLs first, use Google News Scraper.

What can you do with Webpage to Markdown?

GoalHow
Feed articles to an LLMUse outputFormat: "markdown" and read content.
Build a RAG knowledge baseSend a list of documentation URLs in urls and store content with url and title.
Turn news results into textPass the link field from Google News Scraper into urls.
Archive articlesKeep content with author, published and site.
Check page metadataUse outputFormat: "json" for metaTags and schemaOrgData.
Fix a badly extracted pageSet contentSelector to the element holding the article, such as article or .post-body.

How it compares

What you needWebpage to MarkdownCopy-paste or browser saveGeneric crawlers
Boilerplate removedYes, automaticallyBy handOften full page HTML
LLM-ready MarkdownYesNoUsually needs extra conversion
MetadataAuthor, date, site, languageBy handVaries
JavaScript-rendered pagesNoYesSome, with a browser

Quick start

  1. Click Try for free and sign in to Apify.
  2. Add one or more URLs to URLs.
  3. Choose an Output format and click Start.
  4. Open the Output tab and export the data.
{
"urls": ["https://tim.blog/2026/04/24/how-to-keep-your-brain-sharp/"],
"outputFormat": "markdown"
}

Input reference

FieldTypeDefaultEffect
urlsArray of stringsRequiredPages to process, one result each.
outputFormatString"markdown""markdown", "html" or "json".
languageStringEmptyLanguage tag such as en or ja. Sent as Accept-Language and passed to extraction.
contentSelectorStringEmptyCSS selector for the main content. Falls back to auto-detection if nothing matches.

Output

Each URL produces one dataset row. This is a real row, with the content shortened:

{
"url": "https://tim.blog/2026/04/24/how-to-keep-your-brain-sharp/",
"title": "How to Keep Your Brain Sharp: A Practical Playbook Beyond the Basics",
"description": "The following is a guest post from Dr. Tommy Wood (@drtommywood), associate professor of pediatrics and neuroscience at the University of Washington, where his research focuses on brain health.",
"author": "Tim Ferriss",
"published": "2026-04-24T18:46:08+00:00",
"domain": "tim.blog",
"site": "The Blog of Author Tim Ferriss",
"image": "https://tim.blog/wp-content/uploads/2026/04/milad-fakurian-58Z17lnVS4U-unsplash-scaled.jpg",
"favicon": "https://i0.wp.com/tim.blog/wp-content/uploads/2025/05/favicon.png?fit=32%2C32&quality=80&ssl=1",
"language": "en-US",
"wordCount": 7961,
"parseTime": 167,
"outputFormat": "markdown",
"content": "..."
}

Notes on fields

  • With markdown or html, the page body is in content.
  • With json, content is replaced by contentHtml and contentMarkdown, and the row adds metaTags and schemaOrgData.
  • If a page can't be fetched (for example an HTTP 403 or 404), the row has only url, error and outputFormat.
  • parseTime is milliseconds. Fields the page doesn't provide are empty.

FAQ

Why is the content empty or incomplete?

The Actor doesn't run JavaScript. Pages that build their text in the browser return little. Try contentSelector if the wrong block was picked.

Why did a URL return an error?

The site refused the request or returned an error status. The Actor makes a plain request with no proxy or login, so some sites block it.

Can it crawl a whole site?

No. It processes the URLs you give it. Use Google News Scraper to collect article links for a topic.

How do I use it with LLMs?

Use Markdown output and split content by headings into chunks. Pair it with YouTube Transcript Scraper for video sources.

It reads publicly available pages. You are responsible for how you use the content, including copyright, site terms and laws such as GDPR.

Convert pages on a schedule

Schedule the Actor to re-extract pages you track, such as documentation or articles.

1. Save your input as a task

Open the Actor, set your input, then click Save as a new task. A task is a saved input you can run again with one click or on a schedule.

2. Schedule the task

In Apify Console, go to Schedules, click Create new, choose how often to run, and add your task. See Schedules and How to create a schedule.

Watch how to schedule an Actor:

Or schedule a saved task:

Common schedules:

Use caseFrequencyCron expression
Refresh docs for a RAG indexWeekly (Monday)0 6 * * 1
Track a changing pageDaily0 6 * * *

3. Send the results to a spreadsheet

Connect Google in the task's Integrations tab to save every run to Google Sheets or Google Drive automatically:

4. Compare runs

  • Changed pages: compare content per url between runs.
  • Updated articles: watch published and wordCount for each url.
  • Failures: filter rows that have an error field.

Cost

Pricing is set on the Pricing tab, which always shows the current price. Runs are light because each page is one HTTP request with no browser.

Support

Report problems or request features in the Issues tab. Include the run ID and the input.

This Actor uses the open-source Defuddle library and is not affiliated with any website it processes.