{"name":"url-to-markdown-summary","id":"sfoln/url-to-markdown-summary","title":"URL to Markdown & Article Extractor","description":"Turn web pages into clean markdown with the main article only: title, author, publish date, site name, word and token counts. Optional AI summary with key points, keywords and entities. Built for RAG, agents and content pipelines. $1.50 per 1,000 pages; summaries $4 per 1,000.","version":"0.1","status":"ready","family":{"id":"ai-agent-web-toolkit","name":"Web toolkit for agents","description":"Web search for retrieval, pages and sites converted to Markdown, AI extraction to JSON, URL metadata and safety checks, sitemaps, feeds, change monitoring and academic paper search.","actors":11},"categories":["AI","AGENTS","DEVELOPER_TOOLS"],"availability":"on_request","seoTitle":"URL to Markdown API – Article Extractor for LLMs and RAG","seoDescription":"Convert any web page to clean markdown with title, author, date and token count, plus an optional AI summary. $1.50 per 1,000 pages, no subscription.","summary":"Turn web pages into clean markdown of their main article, ready for LLMs, RAG pipelines and AI agents. For every URL you get the article as GitHub-flavoured markdown (headline, headings, paragraphs, lists, links and tables; menus, ads, share buttons, cookie banners and footers removed), its metadata (title, author, publish date, site name, canonical URL, Open Graph image), word and token counts and, optionally, a structured AI summary: a short abstract, 3–7 key points, keywords, named entities, the language and the content type. $1.50 per 1,000 pages, summaries $4 per 1,000; broken, missing or non-HTML pages are free.","pricing":{"model":"pay-per-event","currency":"USD","billedBy":"Apify","freePlanMaxItemsPerRun":10,"events":[{"name":"url-markdown","title":"Markdown page","description":"Charged once per URL whose page was fetched and its main content converted to readable markdown with metadata.","priceUsd":0.0015},{"name":"url-summary","title":"Page summary","description":"Charged once per URL for which the AI summary (summary, key points, keywords, entities, language, content type) was generated.","priceUsd":0.004,"paidPlanOnly":true}]},"input":{"description":"List web page URLs. Each URL produces one dataset record with markdown, metadata and (optionally) a structured summary.","required":["urls"],"fields":[{"name":"urls","title":"URLs","type":"array","required":true,"description":"Web page URLs (http/https), one per line. Accounts on the Apify free plan can process up to 10 URLs per run.","prefill":["https://en.wikipedia.org/wiki/Web_scraping"],"editor":"stringList"},{"name":"summarize","title":"Summarize with AI","type":"boolean","required":false,"description":"Add a structured summary (summary, key points, keywords, entities, language, content type) generated by Mistral AI. Charged per summarized URL (url-summary).","default":true},{"name":"summaryLanguage","title":"Summary language","type":"string","required":false,"description":"Language for the summary and key points, e.g. \"English\" or \"de\". Empty = the page's own language.","editor":"textfield"},{"name":"maxWords","title":"Max summary words","type":"integer","required":false,"description":"Upper limit for the summary length in words (20–300).","default":120,"minimum":20,"maximum":300},{"name":"includeMarkdown","title":"Include markdown","type":"boolean","required":false,"description":"Include the page's readable content as markdown (up to 200,000 characters). Turn off if you only need the summary.","default":true},{"name":"extractor","title":"Extractor","type":"string","required":false,"description":"article: the page's main article (Mozilla Readability with a safety net, the default). full: every section of the page's main region, as before v2 (documentation and landing pages).","default":"article","enum":["article","full"],"editor":"select"},{"name":"maxUrls","title":"Max URLs","type":"integer","required":false,"description":"Safety cap on how many URLs are processed in this run; URLs beyond it are reported as dropped.","default":1000,"minimum":1,"maximum":10000},{"name":"concurrency","title":"Concurrency","type":"integer","required":false,"description":"URLs processed in parallel (1–10).","default":3,"minimum":1,"maximum":10}]},"exampleInput":{"urls":["https://en.wikipedia.org/wiki/Web_scraping"]},"outputFields":[{"name":"input","type":"string | object","title":"Input","description":"The input item this record corresponds to."},{"name":"status","type":"string","title":"Status","description":"ok | not_found | error | skipped_invalid | skipped_budget | skipped_free_plan"},{"name":"charged","type":"boolean","title":"Charged","description":"Whether the record's main event was charged."},{"name":"chargedEvent","type":"string | null","title":"Charged event","description":"Event charged by the runner for this record, if any."},{"name":"source","type":"string","title":"Source","description":"Upstream data source."},{"name":"fetchedAt","type":"string","title":"Fetched at","description":"ISO timestamp."},{"name":"warnings","type":"array | null","title":"Warnings","description":"Non-fatal problems (pages not reachable, truncation, budget limits)."},{"name":"error","type":"object | null","title":"Error","description":"{ code, message, provider?, status? } when status is not ok."},{"name":"url","type":"string | null","title":"URL","description":"Normalized input URL."},{"name":"finalUrl","type":"string | null","title":"Final URL","description":"URL after redirects."},{"name":"title","type":"string | null","title":"Title","description":"Page <title> (or og:title)."},{"name":"description","type":"string | null","title":"Description","description":"Meta description / og:description."},{"name":"canonical","type":"string | null","title":"Canonical URL","description":"rel=canonical or og:url."},{"name":"author","type":"string | null","title":"Author","description":"Author line (Readability byline, meta author or JSON-LD article author)."},{"name":"publishedAt","type":"string | null","title":"Published at","description":"ISO 8601 (UTC) publication time from the page (article:published_time, JSON-LD datePublished or Readability), when it states a valid one."},{"name":"siteName","type":"string | null","title":"Site name","description":"og:site_name or the publisher name."},{"name":"ogImage","type":"string | null","title":"Open Graph image","description":"og:image URL."},{"name":"markdown","type":"string | null","title":"Markdown","description":"The page's main content as GitHub-flavoured markdown (headline, headings, paragraphs, lists, links, tables), max 200,000 characters."},{"name":"markdownTruncated","type":"boolean | null","title":"Markdown truncated","description":"true when the markdown was cut at 200,000 characters."},{"name":"wordCount","type":"integer | null","title":"Word count","description":"Words in the extracted markdown."},{"name":"tokenEstimate","type":"integer | null","title":"Token estimate","description":"Rough LLM token count of the markdown (about 4 characters per token)."},{"name":"extractor","type":"string | null","title":"Extractor","description":"readability (Mozilla Readability's article) | fallback (full main region: used when Readability would drop part of the page, for very large pages, and with extractor full) | text (a plain-text page)."},{"name":"summary","type":"string | null","title":"Summary","description":"AI summary (≤ maxWords words)."},{"name":"keyPoints","type":"array | null","title":"Key points","description":"3–7 key points."},{"name":"keywords","type":"array | null","title":"Keywords","description":"Up to 10 keywords."},{"name":"entities","type":"object | null","title":"Entities","description":"{ people[], organizations[], places[] } mentioned on the page."},{"name":"language","type":"string | null","title":"Language","description":"ISO 639-1 code of the page language (from the summary, else the html lang attribute)."},{"name":"contentType","type":"string | null","title":"Content type","description":"article | product | docs | other (null without summary)."},{"name":"summaryCharged","type":"boolean | null","title":"Summary charged","description":"true when url-summary was charged for this URL."},{"name":"summaryInputTruncated","type":"boolean | null","title":"Summary input truncated","description":"true when only the first ≈4,000 tokens of the page were summarized."},{"name":"tokensUsed","type":"object | null","title":"Tokens used","description":"{ input, output } Mistral tokens for the summary."}],"outputExample":{"input":"https://acme.com/blog/widgets","url":"https://acme.com/blog/widgets","finalUrl":"https://acme.com/blog/widgets","title":"Widgets explained | Acme Blog","description":"All about widgets.","canonical":"https://acme.com/blog/widgets","author":"Jane Example","publishedAt":"2026-09-30T08:00:00.000Z","siteName":"Acme Blog","ogImage":"https://acme.com/img/widgets.png","markdown":"# Widgets explained\n\nWidgets are small mechanical parts ...\n\n- Cheap\n- Durable","markdownTruncated":false,"wordCount":1240,"tokenEstimate":1910,"extractor":"readability","summary":"Widgets are small mechanical parts made by Acme Corp in Berlin ...","keyPoints":["Widgets are cheap","They are durable","Acme makes them in Berlin"],"keywords":["widgets","Acme","manufacturing"],"entities":{"people":["Jane Example"],"organizations":["Acme Corp"],"places":["Berlin"]},"language":"en","contentType":"article","summaryCharged":true,"summaryInputTruncated":false,"tokensUsed":{"input":1812,"output":196},"status":"ok","charged":true,"chargedEvent":"url-markdown","source":"website+mistral","fetchedAt":"2026-10-14T10:00:00.000Z"},"faq":[{"question":"How is the main content found?","answer":"Each page is parsed with Mozilla Readability (the engine of Firefox Reader View) on a full DOM with links made absolute. Its result is used only when it keeps the opening paragraphs and at least 85% of the text of the page's main region; otherwise a second extractor that keeps every section is used (documentation pages, for example; also for very large pages, over 800 KB of HTML, 10,000 elements or 128 levels of nesting, and when extractor is full). Navigation, share buttons, tag clouds and other page chrome are removed, tables become GitHub-flavoured markdown tables, and the markdown starts with the article's headline."},{"question":"Which pages do not work?","answer":"Pages that build their content with JavaScript, sit behind a login or a bot check return little or no text: such URLs end as no_text or thin_content errors and are not charged. PDFs and other files are not converted (not_html)."}],"mcpExamplePrompt":"Convert https://en.wikipedia.org/wiki/Web_scraping to markdown and give me its key points.","related":["rag-web-search","website-to-markdown","ai-web-scraper","url-metadata","sitemap-url-extractor","rss-feed-reader","google-search-results"],"urls":{"site":"https://www.sfoln.com/actors/url-to-markdown-summary/","siteJson":"https://www.sfoln.com/actors/url-to-markdown-summary.json","siteMarkdown":"https://www.sfoln.com/actors/url-to-markdown-summary.md","runSync":"https://api.apify.com/v2/actors/sfoln~url-to-markdown-summary/run-sync-get-dataset-items","runAsync":"https://api.apify.com/v2/actors/sfoln~url-to-markdown-summary/runs","mcp":"https://mcp.apify.com?tools=sfoln/url-to-markdown-summary","requestAccess":"mailto:contact@sfoln.com?subject=Access%20request%3A%20URL%20to%20Markdown%20%26%20Article%20Extractor%20(sfoln%2Furl-to-markdown-summary)&body=Please%20publish%20url-to-markdown-summary.%20What%20we%20plan%20to%20use%20it%20for%3A"},"publisher":{"name":"SFOLN LLC","apifyUsername":"sfoln","url":"https://www.sfoln.com","apifyProfile":"https://apify.com/sfoln","email":"contact@sfoln.com"},"generatedAt":"2026-10-22T04:28:58.477Z"}