ForHosting KIT · Web Scraping & Monitoring

Extract an article

A news article is maybe 400 words wrapped in a page that's 4,000 words of chrome — related-stories widgets, comment sections, subscription nags, three separate ad networks. This article extraction API is reader mode as an endpoint: send a URL, get back the title, author, date and body, and nothing else.

● StablePer request + per URL$0.040
Use it from WebAPIEmailApp soonTelegram soon

Run this on our servers with your account. Free tools run in your browser; this one bills your KIT balance per the price above.

The reader-mode idea, and why it still matters

Browser reader modes exist because publishers optimize pages for ad revenue and engagement, not for the person who just wants to finish reading. That tension hasn't gone away — if anything, cookie banners, auto-playing video and infinite related-content rails have made a raw article page noisier over time. This endpoint applies the same instinct browsers use for a single click, but as an API any pipeline can call at scale.

What the extraction actually identifies

The page is rendered first so paywalled-by-JavaScript or lazily-loaded content isn't missed, then the main content region is separated from navigation, sidebars, comments and related-article widgets using structural and textual signals — content density, tag patterns, and typical article markup. The output separates out title, author when available, publish date when available, and the article body as clean text or light Markdown.

Where article extraction came from

The technique traces back to early browser reader-mode implementations and RSS-era 'readability' libraries built to solve one narrow problem: given an arbitrary news page, find the article inside it. That problem turned out to be reusable well beyond browsers — anywhere a system needs the substance of a page without a human eyeballing which div is the real content.

Why it isn't the same job as the Markdown or text converters

The Markdown and plain-text endpoints convert the whole page's readable content, which is right for documentation or arbitrary pages. Article extraction is narrower and more opinionated — it specifically identifies a single article's byline, date and body and discards everything structurally identified as not-the-article, which matters when a page is mostly navigation and a small amount is the actual story.

How it plugs into automated reading

Feed extracted articles into a summarizer, a translation call, a sentiment pipeline, or a personal read-later archive, and every input arrives in the same shape regardless of which of a thousand different news sites it came from. Because delivery is async by webhook or a 24-hour signed link, a news-monitoring pipeline can extract dozens of articles a day without holding a single connection open.

News monitoring pipelines

Extract clean article bodies from dozens of news sources daily to feed a summarization or alerting system without site-specific scrapers.

Read-later and archiving tools

Save the article, not the page, so a personal library stays readable years after the original site redesigns or disappears.

Content aggregation

Pull consistent title, author and body fields from articles across many publishers with different markup and layouts.

Research and citation gathering

Extract the body text of source articles for a research summary without manually copying text out of ad-heavy pages.

What does article extraction return?

Title, author when available, publish date when available, and the article body as clean text, with navigation, ads and comments removed.

Does it work on JavaScript-heavy news sites?

Yes, the page is rendered first so client-side-loaded content is captured before the article is identified and extracted.

Can it get past paywalls?

No, it extracts what's present in the rendered page; content genuinely gated behind a paywall your account can't access won't appear.

Is there a free tier?

There's no free tier — free tiers get abused and slow everyone down. Access runs on a prepaid ForHosting KIT balance: top up from $10.00 (it never expires) and each request is charged at its published price, so a call with no balance returns HTTP 402. No subscription, no tokens, no invented credits, and a failed task is never charged.

How is it priced?

$0.040 per request plus $0.001 per URL, the same published rate whether the source is a blog post or a major outlet.

How accurate is the extraction on unusual page layouts?

It relies on structural and content signals common to article pages; heavily nonstandard layouts occasionally include extra fragments, which is why results are meant for review, not blind ingestion.

What happens if extraction fails?

The task retries automatically up to three times; a page that still fails returns a clear error and is not charged.

How do I get the extracted article?

Via signed webhook when the task completes, or a signed link valid 24 hours if you'd rather retrieve it yourself.

Everything on this page is available programmatically. This section is for teams who want to wire it into their own systems; everyone else can just use the tool above.

POSThttps://api.kit.forhosting.com/web/article

Prefer to automate it? One authenticated POST creates the task; the result comes back by webhook or a signed link. The same capability also runs here on the web, and soon from our app, email and Telegram.

curl -X POST https://api.kit.forhosting.com/web/article \
  -H "Authorization: Bearer $KIT_KEY" \
  -H "Content-Type: application/json" \
  -d '{"url":"https://ejemplo.com"}'
{
  "url": "https://ejemplo.com"
}
{
  "task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
  "type": "web.article",
  "status": "queued",
  "_links": {
    "result": "/tasks/tsk_…/result"
  }
}

The API is asynchronous: the call returns a task_id immediately and the result arrives by webhook. Polling is capped at 1 req/s per task.

Per request$0.040
Per URL$0.001

Published price — no tokens, no invented credits. A failed task is never charged.

timeout_sec30
max_crawl_pages25
HTTPCodeMeaning
401unauthorizedMissing or invalid API key.
402insufficient_balanceYour balance doesn't cover the task price.
404unknown_typeThat task type doesn't exist.
429rate_limitedToo many requests. Use the webhook instead of polling.
422task_failedThe task failed after 3 retries. You are never charged for it.

Read the full KIT documentation →