# Article Content Extractor — URL to Clean Markdown for RAG (`taroyamada/article-content-extractor`) Actor

Batch article/blog/news URLs → clean title, author, publish date, excerpt and main body as Markdown or plain text (CSV export). Built for RAG/LLM ingest; per-URL warnings. No login.

- **URL**: https://apify.com/taroyamada/article-content-extractor.md
- **Developed by:** [naoki anzai](https://apify.com/taroyamada) (community)
- **Categories:** AI, SEO tools, News
- **Features:** Limited permissions
- **Stats:** 19 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $8.00 / 1,000 useful article rows

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Article Content Extractor — Clean Text for RAG & LLM

**What you get:** Clean article body, byline, publish date, excerpt, and optional hero image for RAG/LLM and content QA. Export Markdown/CSV. No login.

**Batch audit (opt-in):** Set `generateReport: true` to add one `article-content-audit-report` row that summarizes the batch (article count, full vs partial, word totals, confidence, per-URL warnings). It charges **$2.50** once per run when at least one article is usable; leave it off for the first ≈$0.008 proof.

**Sample output** (2 real rows from recent default-input runs, 2026-10-13):

| title | siteName | publishedDate | wordCount |
|---|---|---|---|
| New touch-up tools in Google Photos’ image editor let you make quick,… | Google | 2026-04-20 | 123 |
| Web scraping - Wikipedia | Wikimedia Foundation, Inc. | 2005-09-17 | 4401 |

**Use it for:**

- RAG ingestion: turn article URLs into clean Markdown with title, byline and date.
- Content QA: check that published posts have a title, description and publish date.
- Research digests: collect clean text from news and blog posts for summarising.

**CTA:** Open **Input** (link below) → leave the prefilled Wikipedia URL → **Start**. Leave report/export OFF. First paid proof ≈ **$0.008**. From **$8/1k** useful rows.
[Open Input (leave defaults → Start)](https://console.apify.com/actors/yyg7LdbdGh1Tko3Ic/input)

Paid first run ≈ **USD 0.008** total (1 article URL): useful row USD 0.008. Leave `includeImages`, `generateReport`, and `emitExport` **OFF** for first proof. Open Console Input (deep link above) and run this JSON.

```json
{
  "urls": [
    "https://en.wikipedia.org/wiki/Web_scraping"
  ],
  "outputFormat": "markdown",
  "includeImages": false,
  "generateReport": false,
  "emitExport": false,
  "delivery": "dataset",
  "dryRun": false
}
```

Paste 1 article URL and Start. Charged $0.008 per useful row only.

### Schedule example (recurring runs)

Create an Apify Schedule that starts this Actor on your cadence (daily/weekly). Keep the same URL list and leave the expensive flags off until the first few runs look right. When you want a per-run summary for the batch, set `generateReport: true` (still opt-in; default off):

```json
{
  "urls": [
    "https://en.wikipedia.org/wiki/Web_scraping",
    "https://en.wikipedia.org/wiki/Web_crawler"
  ],
  "generateReport": true,
  "emitExport": false,
  "delivery": "dataset",
  "dryRun": false
}
```

Cost: the article rows as usual ($0.008 each) plus one `article-content-audit-report` row ($2.50 + $0.008 row) per run, only when at least one article is usable. On a schedule this is charged on every run, so use it for batches where a summary is worth it, and set **Max cost per run** to your budget. Both `generateReport` and `emitExport` stay OFF by default.

### High-value example (batch export or Site QA handoff)

For a buyer-facing deliverable on top of the cheap article rows, pick one:

1. **In-actor export handoff** — set `emitExport: true` for one `article-batch-export` row ($5.00 + $0.008 row) when at least one article is usable:

```json
{
  "urls": [
    "https://en.wikipedia.org/wiki/Web_scraping",
    "https://en.wikipedia.org/wiki/Web_crawler"
  ],
  "generateReport": false,
  "emitExport": true,
  "delivery": "dataset",
  "dryRun": false
}
```

2. **Linked Site QA / RAG report** — keep this Actor as the low-cost extraction step, then send the same URLs to [Site QA Content Report Scraper](https://apify.com/taroyamada/site-qa-content-report-scraper), [Site QA Indexability AI Crawler Report Scraper](https://apify.com/taroyamada/site-qa-indexability-ai-crawler-report-scraper), or [Website RAG Readiness Audit](https://apify.com/taroyamada/website-rag-readiness-audit). Keep extraction and the report as separate runs so the first cost and the high-value deliverable stay clear.

### Store Quickstart

Run the low-cost extraction with a single authorized URL; leave images and paid reports OFF (~$0.008):

```json
{
  "urls": ["https://en.wikipedia.org/wiki/Web_scraping"],
  "includeImages": false,
  "generateReport": false,
  "emitExport": false,
  "delivery": "dataset",
  "dryRun": false
}
```

### Use with Apify MCP

Exact actor: `taroyamada/article-content-extractor`

Sample input JSON:

```json
{
  "urls": [
    "https://en.wikipedia.org/wiki/Web_scraping"
  ],
  "outputFormat": "markdown",
  "includeImages": false,
  "generateReport": false,
  "emitExport": false,
  "delivery": "dataset",
  "dryRun": false
}
```

### Run the next report

Turn a small extraction into a decision-ready Site QA workflow:

- [Run a content QA report](https://apify.com/taroyamada/site-qa-content-report-scraper) for source-linked title, metadata, thin-content, and page-quality issues.

- [Run an indexability and AI crawler report](https://apify.com/taroyamada/site-qa-indexability-ai-crawler-report-scraper) for robots, sitemap, canonical, noindex, schema, and crawler-access findings.

- [Run a website RAG readiness report](https://apify.com/taroyamada/website-rag-readiness-audit) for retrieval structure, coverage, and source-linked readiness findings.

This follow-on actor uses user-supplied public URLs only. It does not provide ranking guarantees, legal advice, or automated messaging workflows.

Content teams and QA teams provide public article URLs they own or are allowed to audit.
Use the extracted URLs as the source step for a Site QA report or export, then review source-linked issues rather than raw HTML alone.

The report actors below produce the buyer-facing deliverable; this actor remains the bounded extraction step.

### High-value Site QA/RAG handoff

See **High-value example** above for the `emitExport` JSON and linked report Actors. Use this actor as the low-cost source step, then send the same URLs to one linked Site QA or RAG report actor. Keep extraction and the buyer-facing report as separate runs so the first cost and the high-value deliverable are clear.

### Input examples

#### Article URLs (images ON — opt-in)

```json
{
  "urls": ["https://en.wikipedia.org/wiki/Web_scraping"],
  "includeImages": true,
  "delivery": "dataset",
  "dryRun": false
}
```

#### Press pages

```json
{
  "urls": ["https://example.com/press/release"],
  "includeImages": false,
  "delivery": "dataset",
  "dryRun": false
}
```

### Value path output preview

The report/export output is the buyer-facing result. The extraction row below is only the source step:

```json
{
  "actorName": "site-qa-content-report-scraper",
  "rowType": "site_qa_report",
  "billingEventName": "site-qa-report-generated",
  "sourceUrl": "https://example.com/news/example",
  "issueCount": 2,
  "reportStatus": "action_needed"
}
```

### Article value events

Use generateReport=true to emit one article-content-audit-report row at $2.50, or emitExport=true to emit one article-batch-export row at $5.00, when at least one article is usable. These are the buyer-facing batch deliverables; raw article rows remain source context.

### Output fields

- rowType
- url
- headline
- author
- publishedAt
- articleText
- excerpt
- heroImage
- sourceUrl

Rows also include source URLs, fetch timestamps, warnings when a source is partial, and stable IDs when the workflow supports recurring change detection.

### Pricing and no-change runs

$0.00005 actor start, $0.008 per useful article row, $2.50 per article content audit report, and $5.00 per batch export. Failed/no-content rows stay out of the default dataset.

The default dataset is the canonical billable surface. Dry runs, validation-only runs, error-only runs, and no-usable-row recurring polls do not write payable rows. A webhook is sent only after dataset billing succeeds and is best effort; a failed webhook is not retried and never creates a second charge.

Request limits are bounded at 300 URLs, 3 redirects, and 5 MiB per HTML response by default. maxRedirects and maxResponseBytes can be lowered for stricter runs; the runtime never permits more than 10 redirects or 10 MiB.

### Compliance guardrails

- Fetch public article pages supplied by the user.

- Do not imply content ownership transfer or publisher endorsement.

- Use output for research, QA, and internal workflows.

- Do not use provider emblems or wording that implies approval by an upstream data provider.

- Only fetch public HTTP(S) URLs that you own or are authorized to audit. Loopback, private, link-local, metadata, reserved, and DNS-resolved private targets are rejected, as are non-HTML responses, excessive redirects, and oversized responses.

### See Also

The three report paths in Run the next report are the complete Site QA/RAG handoff for this actor. Use one of those paths instead of adding more raw extraction volume.

> 💾 **Save it for later**: click the bookmark icon at the top of the Apify Store page if you'd like to come back to it. Bookmarks help other engineers find this actor via Apify's discovery surfaces.

### Feedback

Use the Apify Store rating and issue controls on the actor page for feedback. The three report paths above remain the only cross-actor workflow links.

### Related Actors

- [`taroyamada/website-content-extractor`](https://apify.com/taroyamada/website-content-extractor)
- [`taroyamada/rss-feed-aggregator`](https://apify.com/taroyamada/rss-feed-aggregator)
- [`taroyamada/google-news-scraper`](https://apify.com/taroyamada/google-news-scraper)
- [`taroyamada/broken-link-checker`](https://apify.com/taroyamada/broken-link-checker)
- [`taroyamada/meta-tag-analyzer`](https://apify.com/taroyamada/meta-tag-analyzer)

### Works well with

- [Apple Podcasts Scraper](https://apify.com/taroyamada/apple-podcast-scraper) — search shows, look up IDs, pull recent episodes and listener reviews
- [Trade Show Exhibitor Intelligence](https://apify.com/taroyamada/trade-show-exhibitor-intelligence) — turn exhibitor pages into booth and lead lists
- [Apple Podcasts Chart Tracker](https://apify.com/taroyamada/apple-podcast-chart-tracker) — track top-chart ranks by country/genre with movement reports

# Actor input Schema

## `urls` (type: `array`):

Leave the prefilled Wikipedia URL and click Start for the first run (≈ $0.008). Do not clear — empty fails validation (required). Or paste 1–10 public article/news/blog URLs. Keep report/export OFF.

## `outputFormat` (type: `string`):

Content output format. Markdown is recommended for first-run proof and LLM ingestion.

## `includeImages` (type: `boolean`):

Leave off for the first proof (~$0.008). Include the inline images array in the result; the heroImage field can still be returned separately when available.

## `concurrency` (type: `integer`):

Parallel article requests (1-10).

## `timeoutMs` (type: `integer`):

Request timeout per article in milliseconds.

## `maxResponseBytes` (type: `integer`):

Reject HTML responses larger than this limit before parsing.

## `maxRedirects` (type: `integer`):

Maximum public HTTP redirects followed per article.

## `generateReport` (type: `boolean`):

Optional. Leave false for first proof (~$0.008 useful row). Example batch audit: urls=\[https://en.wikipedia.org/wiki/Web_scraping], generateReport=true → useful row(s) plus one article-content-audit-report ($2.50) when ≥1 article is usable.

## `emitExport` (type: `boolean`):

Optional. Leave false for first proof (~$0.008 useful row). true charges one article-batch-export.

## `delivery` (type: `string`):

Select dataset-only output or webhook handoff. Non-dry-run always writes canonical dataset rows first; webhook delivery runs only after dataset/PPE output succeeds.

## `webhookUrl` (type: `string`):

URL to POST article payloads when delivery=webhook. The webhook is sent after canonical dataset rows and PPE output succeed, and is skipped on dryRun.

## `dryRun` (type: `boolean`):

Validate input and write only local output. When true, dataset writes and webhook delivery are disabled.

## Actor input object example

```json
{
  "urls": [
    "https://en.wikipedia.org/wiki/Web_scraping"
  ],
  "outputFormat": "markdown",
  "includeImages": false,
  "concurrency": 1,
  "timeoutMs": 15000,
  "maxResponseBytes": 5242880,
  "maxRedirects": 3,
  "generateReport": false,
  "emitExport": false,
  "delivery": "dataset",
  "dryRun": false
}
```

# Actor output Schema

## `dataset` (type: `string`):

Dataset containing extracted article rows plus optional audit/export rows

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "urls": [
        "https://en.wikipedia.org/wiki/Web_scraping"
    ],
    "generateReport": false
};

// Run the Actor and wait for it to finish
const run = await client.actor("taroyamada/article-content-extractor").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "urls": ["https://en.wikipedia.org/wiki/Web_scraping"],
    "generateReport": False,
}

# Run the Actor and wait for it to finish
run = client.actor("taroyamada/article-content-extractor").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "urls": [
    "https://en.wikipedia.org/wiki/Web_scraping"
  ],
  "generateReport": false
}' |
apify call taroyamada/article-content-extractor --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,taroyamada/article-content-extractor"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/yyg7LdbdGh1Tko3Ic/builds/5LLGkCKhwSbOEvN56/openapi.json
