Article Extractor API — Title, Author, Date & Full Text
Pricing
$0.50 / 1,000 articles
Article Extractor API — Title, Author, Date & Full Text
Extracts the article from any news or blog URL: title, author, published date, full text, Markdown, lead image and language. Works on paywall-free pages. Unofficial Article Extractor API.
Give it news or blog links, get back one clean record per article: title, author, publish date, lead image, language, site name, the full text and the same text as Markdown. It works on any public, paywall-free page in any language — the main content is found with the Readability algorithm that powers reader mode in Firefox, so navigation, footers, cookie banners and "related articles" boxes are left out.
Try it in 1 minute: press Start with the prefilled input (a Wikipedia article and the Apify blog). In a few seconds you get two records with title, author, publishedAt, text, markdown, wordCount and readingTimeMinutes. Price: $0.50 per 1,000 articles; pages that give no article are free.
Use it to:
- 📰 Feed news into an LLM — clean Markdown with headings, lists, links and tables instead of raw HTML saves tokens and improves answers.
- 🔎 Monitor coverage — pair it with a news search or RSS Actor and store the full text of every article that mentions your brand.
- 🧠 Build a RAG corpus — one record per URL with stable field names, ready for your vector database.
- 📊 Analyse content — word counts, reading time, publish dates and authors for thousands of URLs in one run.
- 🤖 Give an agent a "read this page" tool — call it from the Apify MCP server or the API with a list of links.
How it works
- Each URL is fetched over plain HTTP with browser-like headers, redirects followed, a 30-second timeout and up to three attempts (a network error is retried through the Apify proxy).
robots.txtis read once per site; pages it disallows are skipped with a freeROBOTS_DISALLOWEDrecord (you can turn this off for sites you have permission to read).- The page's metadata is collected from Open Graph, Twitter cards, JSON-LD and standard meta tags; the main article is isolated with Mozilla Readability and converted to Markdown (tables, lists, links and images kept, addresses made absolute).
- E-mail addresses and phone numbers in the article text are removed. Everything is delivered as one record with a
status.
No browser is started, so a run is fast and cheap. Pages that only render in JavaScript come back thin (readable: false, few words) — use Minimum words to turn them into free NO_CONTENT records.
Input
| Field | Meaning | Default |
|---|---|---|
urls | Article or page links, one per line | (required) |
outputFormat | both, markdown or text | both |
respectRobotsTxt | Skip pages the site's robots.txt disallows | true |
minWords | Below this word count a page is a free NO_CONTENT record | 0 |
includeHtml | Also deliver the cleaned article HTML | false |
includeLinks | Also deliver every link on the page (up to 500) | false |
maxTextLength | Cut text and Markdown after N characters | 0 (no limit) |
maxConcurrency | Pages read in parallel | 5 |
proxyConfiguration | Proxy for retries after a network error | Apify proxy |
Output
| Field | What it is |
|---|---|
url, canonicalUrl | the final address after redirects, and the canonical one the page declares |
title, description, siteName, language | from Open Graph / meta tags; language as the page declares it (en, de, …) |
author, publishedAt | byline and ISO 8601 publish time from the page's metadata |
image | lead image (absolute address) |
text, markdown | the article as plain text and as Markdown (title as first heading) |
wordCount, readingTimeMinutes, headings | size of the article and its heading outline |
readable | true when a main article was found; false when the whole body minus chrome was used |
linksCount, links | number of unique links on the page, and the links themselves with includeLinks |
contentHtml | cleaned article HTML, with includeHtml |
input, status, error, httpStatus, scrapedAt | what you gave, OK or a reason code, and when |
Statuses: OK (charged) — NOT_FOUND, NOT_HTML, NO_CONTENT, ROBOTS_DISALLOWED, TOO_LARGE, INVALID_INPUT, FAILED (free, with error saying why).
Example
{"input": "https://journal.example.com/articles/web-scraping","url": "https://journal.example.com/articles/web-scraping","title": "Web Scraping Explained","author": "Jane Example","publishedAt": "2026-03-04T09:15:00.000Z","siteName": "Example Journal","description": "What web scraping is and how it works.","language": "en","canonicalUrl": "https://journal.example.com/articles/web-scraping","image": "https://journal.example.com/img/lead.jpg","text": "Web scraping is the practice of collecting data from websites with a program instead of a browser. …","markdown": "# Web Scraping Explained\n\nWeb scraping is the practice of collecting data from websites …\n\n## Common steps\n\n- Fetch the page\n- Parse the HTML\n- Extract and store the fields\n\n| Tool | Language |\n| --- | --- |\n| Cheerio | JavaScript |","wordCount": 168,"readingTimeMinutes": 1,"readable": true,"headings": [{ "level": 2, "text": "Common steps" }, { "level": 2, "text": "Tools compared" }],"linksCount": 6,"httpStatus": 200,"status": "OK","scrapedAt": "2026-10-19T12:00:00.000Z"}
Pricing
You pay per article delivered ($0.50 per 1,000). Dead links, non-HTML files, pages without an article and pages blocked by robots.txt are free. Set a Maximum charge on the run to cap the cost; the run stops cleanly when it is reached and tells you how many links were left.
FAQ
Is this an official API? No, it's an unofficial API built on public pages.
Does it work behind paywalls or logins? No. It reads what a logged-out visitor can read, and it does not bypass paywalls, captchas or bot walls.
Why is author or publishedAt empty? The page does not state them in its metadata (Open Graph, JSON-LD, <time> or meta tags). Fields are never guessed.
Why did a page come back with a few words and readable: false? The page builds its content in JavaScript, so a plain HTTP fetch sees only the shell. A headless-browser version is on the roadmap; for now use Minimum words to make such pages free NO_CONTENT records.
Can I pass thousands of URLs? Yes — raise Parallel pages to 10–20 for big batches. Each URL is one record; the run's status message tells you how many were delivered.
Like it? A short review on the Store page helps other people find this Actor. Something missing or broken? Tell us on the Issues tab — we read every one.
Related Actors
- RSS & Atom Feed Reader — any feed or website as one clean list
- Substack Scraper — posts and full text from Substack
- Hacker News Scraper — stories, comments and search
- URL to Markdown API — clean Markdown from any URL for LLMs
- News Search API — news by keyword with date range and full text