# Web Article Content Extractor (`vulnv/web-article-content-extractor`) Actor

Extract clean, readable content from news articles, blog posts, and web pages. Batch process multiple URLs, download images, bypass bot protection with proxy support. Perfect for content curation, research, and data analysis.

- **URL**: https://apify.com/vulnv/web-article-content-extractor.md
- **Developed by:** [VulnV](https://apify.com/vulnv) (community)
- **Categories:** News, AI
- **Features:** Limited permissions
- **Stats:** 96 total users, 4 monthly users, 10.6% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.01 / 1,000 results

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 Extractor

Extract clean, readable content from news articles, blog posts, and web pages. This Actor intelligently removes navigation, advertisements, and boilerplate content, leaving only the main article text and metadata.

### Features

- **Batch Processing**: Process multiple articles simultaneously with configurable concurrency
- **Clean Content Extraction**: Automatically extracts main article text while filtering out ads, navigation, and clutter
- **Rich Metadata**: Captures title, author, publication date, description, categories, and tags
- **Image Download**: Optionally download and store article images
- **Proxy Support**: Enhanced reliability for challenging websites with anti-bot protection
- **Smart Filtering**: Only downloads images referenced in the article content
- **Multiple Formats**: Provides both clean text and structured XML output
- **Progress Tracking**: Real-time logging of batch processing progress

### Input

- **Article URLs** (required): List of web pages containing articles to extract (Yahoo News URLs are automatically filtered out)
- **Maximum Articles** (optional): Limit the number of articles to process (default: 10)
- **Use Proxy** (optional): Enable proxy for enhanced reliability and bypassing restrictions
- **Download Images** (optional): Download and store article images in addition to extracting text
- **Max Concurrency** (optional): Control how many articles are processed simultaneously (default: 5)

### Output

The Actor provides comprehensive article data including:

- Clean extracted article text
- Article metadata (title, author, date, description)
- Categories and tags
- Language detection
- XML-formatted content with structure
- Downloaded images with metadata (if enabled)

```
{
  "url": "https://github.blog/2022-04-15-security-alert-stolen-oauth-user-tokens/",
  "title": "Security alert: Attack campaign involving stolen OAuth user tokens issued to two third-party integrators",
  "author": "Mike Hanley",
  "date": "2022-04-15",
  "sitename": "The GitHub Blog",
  "description": "On April 12, GitHub Security began an investigation that uncovered evidence that an attacker abused stolen OAuth user tokens issued to two third-party OAuth integrators, Heroku and Travis-CI, to download data from dozens of organizations, including npm. Read on to learn more about the impact to GitHub, npm, and our users.",
  "categories": [],
  "tags": [],
  "text": "*April 27, 2022 update: Pattern of attacker activity on GitHub. *\n\n*As of 5:00 PM UTC on April 27, 2022, we are in the process of sending the final expected notifications to GitHub.com customers who had either the Heroku or Travis CI OAuth app integrations authorized in their GitHub accounts.*\n\n*GitHub’s analysis of the attacker’s behavior reveals the following activities carried out on GitHub.com using stolen OAuth app tokens:*\n\n*1. The attacker authenticated to the GitHub API using the stolen OAuth tokens issued to Heroku and Travis CI.*\n\n2. For most people who had the affected Heroku or Travis CI OAuth apps authorized in their GitHub accounts, the attacker listed all the user’s organizations.\n\n3. The attacker then selectively chose targets based on the listed organizations.\n\n4. The attacker listed the private repositories for user accounts of interest.\n\n5. The attacker then proceeded to clone some of those private repositories.\n\n*This pattern of behavior suggests the attacker was only listing organizations in order to identify accounts to selectively target for listing and downloading private repositories. GitHub believes these attacks were highly targeted based on the available information and our analysis of the attacker behavior using the compromised OAuth tokens issued to Travis CI and Heroku.*\n\n*Following this series of notifications, GitHub will have completed directly notifying each affected user for whom we were able to detect abuse using the stolen OAuth tokens.*\n\n*Customers should also continue to monitor Heroku and Travis CI for updates on their own investigations into the affected OAuth applications at:*\n\n\n*April 22, 2022 update: GitHub has sent notifications for known victims of repository listing activity using stolen OAuth app tokens.*\n\n*As of 7:33 PM UTC on April 22, 2022, we’ve notified victims of this campaign whom we have identified as having repository details listed using stolen OAuth app tokens, but did NOT have repository contents downloaded.*\n\n*The repository listing activity was conducted by the attacker through abuse of third-party OAuth user tokens maintained by Heroku and Travis CI. We do not believe the attacker obtained these tokens via a compromise of GitHub or its systems, because the tokens in question are not stored by GitHub in their original, usable formats which could be abused by an attacker.*\n\n*The activity was conducted using the *`/user/repos`\n\nand `/orgs/{org}/repos`\n\nGitHub API endpoints. Our documentation gives examples of the data returned from requests to these endpoints:\n\n*Should we identify additional customers who have been affected, we will notify those customers promptly. If you do not receive a notification email from us, that means GitHub has not identified your account as impacted by the current incident.*\n\n*Customers should also continue to monitor Heroku and Travis CI for updates on their own investigations into the affected OAuth applications. *\n\n\n*April 18, 2022 update: GitHub has sent notifications for known victims of third-party OAuth token theft.*\n\n*As of 9:30 PM UTC on April 18, 2022, we’ve notified victims of this campaign whom we have identified as having repository contents downloaded by an unauthorized party through abuse of third-party OAuth user tokens maintained by Heroku and Travis CI. We do not believe the attacker obtained these tokens via a compromise of GitHub or its systems, because the tokens in question are not stored by GitHub in their original, usable formats which could be abused by an attacker.*\n\n*Should we identify additional customers who have been affected, we will notify those customers promptly. If you do not receive a notification email from us, that means GitHub has not identified your account as impacted by the current incident.*\n\n*Customers should also continue to monitor Heroku and Travis CI for updates on their own investigations into the affected OAuth applications.*\n\n\nOn April 12, GitHub Security began an investigation that uncovered evidence that an attacker abused stolen OAuth user tokens issued to two third-party OAuth integrators, Heroku and Travis-CI, to download data from dozens of organizations, including npm. The applications maintained by these integrators were used by GitHub users, including GitHub itself. We do not believe the attacker obtained these tokens via a compromise of GitHub or its systems, because the tokens in question are not stored by GitHub in their original, usable formats. Following immediate investigation, we disclosed our findings to Heroku and Travis-CI on April 13 and 14; more detail is available below and we will update this blog as we learn more.\n\nLooking across the entire GitHub platform, we have high confidence that compromised OAuth user tokens from Heroku and Travis-CI-maintained OAuth applications were stolen and abused to download private repositories belonging to dozens of victim organizations that were using these apps. Our analysis of other behavior by the threat actor suggests that the actors may be mining the downloaded private repository contents, to which the stolen OAuth token had access, for secrets that could be used to pivot into other infrastructure.\n\nKnown-affected OAuth applications as of April 15, 2022:\n\n- Heroku Dashboard (ID: 145909)\n- Heroku Dashboard (ID: 628778)\n- Heroku Dashboard – Preview (ID: 313468)\n- Heroku Dashboard – Classic (ID: 363831)\n- Travis CI (ID: 9216)\n\nWe are sharing this today as we believe the attacks may be ongoing and action is required for customers to protect themselves.\n\nThe initial detection related to this campaign occurred on April 12 when GitHub Security identified unauthorized access to our npm production infrastructure using a compromised AWS API key. Based on subsequent analysis, we believe this API key was obtained by the attacker when they downloaded a set of private npm repositories using a stolen OAuth token from one of the two affected third-party OAuth applications described above. Upon discovering the broader theft of third-party OAuth tokens not stored by GitHub or npm on the evening of April 13, we immediately took action to protect GitHub and npm by revoking tokens associated with GitHub and npm’s internal use of these compromised applications.\n\nWe believe that the two impacts to npm are unauthorized access to, and downloading of, the private repositories in the npm organization on GitHub.com and potential access to the npm packages as they exist in AWS S3 storage. At this point, we assess that the attacker did not modify any packages or gain access to any user account data or credentials. We are still working to understand whether the attacker viewed or downloaded private packages. npm uses completely separate infrastructure from GitHub.com; GitHub was not affected in this original attack. Though investigation continues, we have found no evidence that other GitHub-owned private repos were cloned by the attacker using stolen third-party OAuth tokens.\n\nOnce GitHub identified stolen third-party OAuth tokens affecting GitHub users, GitHub took immediate steps to respond and protect users. GitHub contacted Heroku and Travis-CI to request that they initiate their own security investigations, revoke all OAuth user tokens associated with the affected applications, and begin work to notify their own users.\n\nGitHub remains closely engaged with both organizations in an effort to assist their investigation and recovery efforts, and better protect shared customers.\n\nGitHub is currently working to identify and notify all of the known-affected victim users and organizations that we discovered through our analysis across GitHub.com. These customers will receive a notification email from GitHub with additional details and next steps to assist in their own response within the next 72 hours.\n\nIf you do not receive a notification, you and/or your organization have not been identified as affected. GitHub will continue to notify any additional affected users or organizations as they are identified. You should, however, periodically review what OAuth applications you’ve authorized or are authorized to access your organization and prune anything that’s no longer needed. You can also review your organization audit logs and user account security logs for unexpected or anomalous activity.\n\nIf you have questions or need assistance regarding affected OAuth applications maintained by Heroku, please reach out to Salesforce / Heroku security and support at help.heroku.com, and monitor the Salesforce Trust site for additional updates.\n\nIf you have questions or need assistance regarding affected OAuth applications maintained by Travis CI, please reach out to compliance@travis-ci.com.\n\nCustomers who are directly contacted by GitHub regarding this issue are welcome to contact us according to directions in the notification you received.\n\nFor other questions regarding GitHub and npm you can contact GitHub Support.\n\nThe security and trustworthiness of GitHub, npm, and the broader developer ecosystem is our highest priority. Our investigation is ongoing, and we will update this blog, and our communications with affected customers, as we learn more.\n\n##\nWritten by\n\nMike Hanley is the Chief Security Officer and SVP of Engineering at GitHub. Prior to GitHub, Mike was the Vice President of Security at Duo Security, where he built and led the security research, development, and operations functions. After Duo’s acquisition by Cisco for $2.35 billion in 2018, Mike led the transformation of Cisco’s cloud security framework and later served as CISO for the company. Mike also spent several years at CERT/CC as a Senior Member of the Technical Staff and security researcher focused on applied R&D programs for the US Department of Defense and the Intelligence Community.\n\nWhen he’s not talking about security at GitHub, Mike can be found enjoying Ann Arbor, MI with his wife and eight kids.",
  "xml_content": "<doc fingerprint=\"8c071d030f720949\">\n  <main>\n    <div>\n      <head>\n        <hi rend=\"#b\">\n          <hi rend=\"#i\">April 27, 2022 update: Pattern of attacker activity on GitHub. </hi>\n        </hi>\n      </head>\n      <p>\n        <hi rend=\"#i\">As of 5:00 PM UTC on April 27, 2022, we are in the process of sending the final expected notifications to GitHub.com customers who had either the Heroku or Travis CI OAuth app integrations authorized in their GitHub accounts.</hi>\n      </p>\n      <p>\n        <hi rend=\"#i\">GitHub’s analysis of the attacker’s behavior reveals the following activities carried out on GitHub.com using stolen OAuth app tokens:</hi>\n      </p>\n      <p>\n        <hi rend=\"#i\">1. The attacker authenticated to the GitHub API using the stolen OAuth tokens issued to Heroku and Travis CI.<lb/> 2. For most people who had the affected Heroku or Travis CI OAuth apps authorized in their GitHub accounts, the attacker listed all the user’s organizations.<lb/> 3. The attacker then selectively chose targets based on the listed organizations.<lb/> 4. The attacker listed the private repositories for user accounts of interest.<lb/> 5. The attacker then proceeded to clone some of those private repositories.</hi>\n      </p>\n      <p>\n        <hi rend=\"#i\">This pattern of behavior suggests the attacker was only listing organizations in order to identify accounts to selectively target for listing and downloading private repositories. GitHub believes these attacks were highly targeted based on the available information and our analysis of the attacker behavior using the compromised OAuth tokens issued to Travis CI and Heroku.</hi>\n      </p>\n      <p>\n        <hi rend=\"#i\">Following this series of notifications, GitHub will have completed directly notifying each affected user for whom we were able to detect abuse using the stolen OAuth tokens.</hi>\n      </p>\n      <p>\n        <hi rend=\"#i\">Customers should also continue to monitor Heroku and Travis CI for updates on their own investigations into the affected OAuth applications at:</hi>\n      </p>\n    </div>\n    <div>\n      <head>\n        <hi rend=\"#b\">\n          <hi rend=\"#i\">April 22, 2022 update: GitHub has sent notifications for known victims of repository listing activity using stolen OAuth app tokens.</hi>\n        </hi>\n      </head>\n      <p>\n        <hi rend=\"#i\">As of 7:33 PM UTC on April 22, 2022, we’ve notified victims of this campaign whom we have identified as having repository details listed using stolen OAuth app tokens, but did NOT have repository contents downloaded.</hi>\n      </p>\n      <p>\n        <hi rend=\"#i\">The repository listing activity was conducted by the attacker through abuse of third-party OAuth user tokens maintained by Heroku and Travis CI. We do not believe the attacker obtained these tokens via a compromise of GitHub or its systems, because the tokens in question are not stored by GitHub in their original, usable formats which could be abused by an attacker.</hi>\n      </p>\n      <p>\n        <hi rend=\"#i\">The activity was conducted using the <code>/user/repos</code> and <code>/orgs/{org}/repos</code> GitHub API endpoints. Our documentation gives examples of the data returned from requests to these endpoints:</hi>\n      </p>\n      <p>\n        <hi rend=\"#i\">Should we identify additional customers who have been affected, we will notify those customers promptly. If you do not receive a notification email from us, that means GitHub has not identified your account as impacted by the current incident.</hi>\n      </p>\n      <p>\n        <hi rend=\"#i\">Customers should also continue to monitor Heroku and Travis CI for updates on their own investigations into the affected OAuth applications. </hi>\n      </p>\n    </div>\n    <div>\n      <head>\n        <hi rend=\"#b\">\n          <hi rend=\"#i\">April 18, 2022 update: GitHub has sent notifications for known victims of third-party OAuth token theft.</hi>\n        </hi>\n      </head>\n      <p>\n        <hi rend=\"#i\">As of 9:30 PM UTC on April 18, 2022, we’ve notified victims of this campaign whom we have identified as having repository contents downloaded by an unauthorized party through abuse of third-party OAuth user tokens maintained by Heroku and Travis CI. We do not believe the attacker obtained these tokens via a compromise of GitHub or its systems, because the tokens in question are not stored by GitHub in their original, usable formats which could be abused by an attacker.</hi>\n      </p>\n      <p>\n        <hi rend=\"#i\">Should we identify additional customers who have been affected, we will notify those customers promptly. If you do not receive a notification email from us, that means GitHub has not identified your account as impacted by the current incident.</hi>\n      </p>\n      <p>\n        <hi rend=\"#i\">Customers should also continue to monitor Heroku and Travis CI for updates on their own investigations into the affected OAuth applications.</hi>\n      </p>\n    </div>\n    <p>On April 12, GitHub Security began an investigation that uncovered evidence that an attacker abused stolen OAuth user tokens issued to two third-party OAuth integrators, Heroku and Travis-CI, to download data from dozens of organizations, including npm. The applications maintained by these integrators were used by GitHub users, including GitHub itself. We do not believe the attacker obtained these tokens via a compromise of GitHub or its systems, because the tokens in question are not stored by GitHub in their original, usable formats. Following immediate investigation, we disclosed our findings to Heroku and Travis-CI on April 13 and 14; more detail is available below and we will update this blog as we learn more.</p>\n    <p>Looking across the entire GitHub platform, we have high confidence that compromised OAuth user tokens from Heroku and Travis-CI-maintained OAuth applications were stolen and abused to download private repositories belonging to dozens of victim organizations that were using these apps. Our analysis of other behavior by the threat actor suggests that the actors may be mining the downloaded private repository contents, to which the stolen OAuth token had access, for secrets that could be used to pivot into other infrastructure.</p>\n    <p>Known-affected OAuth applications as of April 15, 2022:</p>\n    <list rend=\"ul\">\n      <item>Heroku Dashboard (ID: 145909)</item>\n      <item>Heroku Dashboard (ID: 628778)</item>\n      <item>Heroku Dashboard – Preview (ID: 313468)</item>\n      <item>Heroku Dashboard – Classic (ID: 363831)</item>\n      <item>Travis CI (ID: 9216)</item>\n    </list>\n    <p>We are sharing this today as we believe the attacks may be ongoing and action is required for customers to protect themselves.</p>\n    <p>The initial detection related to this campaign occurred on April 12 when GitHub Security identified unauthorized access to our npm production infrastructure using a compromised AWS API key. Based on subsequent analysis, we believe this API key was obtained by the attacker when they downloaded a set of private npm repositories using a stolen OAuth token from one of the two affected third-party OAuth applications described above. Upon discovering the broader theft of third-party OAuth tokens not stored by GitHub or npm on the evening of April 13, we immediately took action to protect GitHub and npm by revoking tokens associated with GitHub and npm’s internal use of these compromised applications.</p>\n    <p>We believe that the two impacts to npm are unauthorized access to, and downloading of, the private repositories in the npm organization on GitHub.com and potential access to the npm packages as they exist in AWS S3 storage. At this point, we assess that the attacker did not modify any packages or gain access to any user account data or credentials. We are still working to understand whether the attacker viewed or downloaded private packages. npm uses completely separate infrastructure from GitHub.com; GitHub was not affected in this original attack. Though investigation continues, we have found no evidence that other GitHub-owned private repos were cloned by the attacker using stolen third-party OAuth tokens.</p>\n    <p>Once GitHub identified stolen third-party OAuth tokens affecting GitHub users, GitHub took immediate steps to respond and protect users. GitHub contacted Heroku and Travis-CI to request that they initiate their own security investigations, revoke all OAuth user tokens associated with the affected applications, and begin work to notify their own users.</p>\n    <p>GitHub remains closely engaged with both organizations in an effort to assist their investigation and recovery efforts, and better protect shared customers.</p>\n    <p>GitHub is currently working to identify and notify all of the known-affected victim users and organizations that we discovered through our analysis across GitHub.com. These customers will receive a notification email from GitHub with additional details and next steps to assist in their own response within the next 72 hours.</p>\n    <p>If you do not receive a notification, you and/or your organization have not been identified as affected. GitHub will continue to notify any additional affected users or organizations as they are identified. You should, however, periodically review what OAuth applications you’ve authorized or are authorized to access your organization and prune anything that’s no longer needed. You can also review your organization audit logs and user account security logs for unexpected or anomalous activity.</p>\n    <p>If you have questions or need assistance regarding affected OAuth applications maintained by Heroku, please reach out to Salesforce / Heroku security and support at help.heroku.com, and monitor the Salesforce Trust site for additional updates.</p>\n    <p>If you have questions or need assistance regarding affected OAuth applications maintained by Travis CI, please reach out to compliance@travis-ci.com.</p>\n    <p>Customers who are directly contacted by GitHub regarding this issue are welcome to contact us according to directions in the notification you received.</p>\n    <p>For other questions regarding GitHub and npm you can contact GitHub Support.</p>\n    <p>The security and trustworthiness of GitHub, npm, and the broader developer ecosystem is our highest priority. Our investigation is ongoing, and we will update this blog, and our communications with affected customers, as we learn more.</p>\n    <div>\n      <head rend=\"h2\"> Written by </head>\n      <div>\n        <div>\n          <p>Mike Hanley is the Chief Security Officer and SVP of Engineering at GitHub. Prior to GitHub, Mike was the Vice President of Security at Duo Security, where he built and led the security research, development, and operations functions. After Duo’s acquisition by Cisco for $2.35 billion in 2018, Mike led the transformation of Cisco’s cloud security framework and later served as CISO for the company. Mike also spent several years at CERT/CC as a Senior Member of the Technical Staff and security researcher focused on applied R&amp;D programs for the US Department of Defense and the Intelligence Community.</p>\n          <p>When he’s not talking about security at GitHub, Mike can be found enjoying Ann Arbor, MI with his wife and eight kids.</p>\n        </div>\n      </div>\n    </div>\n  </main>\n  <comments/>\n</doc>",
  "language": null,
  "image": "https://github.blog/wp-content/uploads/2022/04/Engineering-Security@2x.png?fit=2400%2C1260",
  "pagetype": "article",
  "downloadedImages": [
    {
      "originalUrl": "https://github.blog/wp-content/uploads/2024/07/Screenshot-2024-07-23-at-8.42.45 AM.png?resize=800%2C425",
      "filename": "image_1_12bc97e7.png",
      "downloadedUrl": "{{links.kvStoreUrl}}/records/image_1_12bc97e7.png",
      "alt": "",
      "title": "",
      "size": 59407
    },
    {
      "originalUrl": "https://github.blog/wp-content/uploads/2024/07/Screenshot-2024-07-23-at-8.43.47 AM.png?resize=800%2C425",
      "filename": "image_2_59c57499.png",
      "downloadedUrl": "{{links.kvStoreUrl}}/records/image_2_59c57499.png",
      "alt": "",
      "title": "",
      "size": 127647
    },
    {
      "originalUrl": "https://github.blog/wp-content/uploads/2024/07/Screenshot-2024-07-23-at-8.44.23 AM.png?resize=800%2C425",
      "filename": "image_3_5eb1e47a.png",
      "downloadedUrl": "{{links.kvStoreUrl}}/records/image_3_5eb1e47a.png",
      "alt": "",
      "title": "",
      "size": 77197
    },
    {
      "originalUrl": "https://github.blog/wp-content/uploads/2024/07/Screenshot-2024-07-23-at-8.46.23 AM.png?resize=800%2C425",
      "filename": "image_4_203ebb55.png",
      "downloadedUrl": "{{links.kvStoreUrl}}/records/image_4_203ebb55.png",
      "alt": "",
      "title": "",
      "size": 69302
    },
    {
      "originalUrl": "https://github.blog/wp-content/uploads/2024/07/Screenshot-2024-07-23-at-8.47.04 AM.png?resize=800%2C425",
      "filename": "image_5_83387188.png",
      "downloadedUrl": "{{links.kvStoreUrl}}/records/image_5_83387188.png",
      "alt": "",
      "title": "",
      "size": 86000
    },
    {
      "originalUrl": "https://avatars.githubusercontent.com/u/16546317?v=4&s=200",
      "filename": "image_6_5496c9d0.jpg",
      "downloadedUrl": "{{links.kvStoreUrl}}/records/image_6_5496c9d0.jpg",
      "alt": "Mike Hanley",
      "title": "",
      "size": 5176
    },
    {
      "originalUrl": "https://github.blog/wp-content/uploads/2024/07/Icon_95220f.svg",
      "filename": "image_7_5fc30561.svg",
      "downloadedUrl": "{{links.kvStoreUrl}}/records/image_7_5fc30561.svg",
      "alt": "GitHub",
      "title": "",
      "size": 1420
    }
  ]
}
```

### Use Cases

- **Content Curation**: Extract clean content for republishing or analysis
- **Research**: Gather article text and metadata for academic or market research
- **Archive Creation**: Build searchable archives of web articles
- **Content Analysis**: Analyze article sentiment, topics, or writing style
- **RSS Enhancement**: Enrich RSS feeds with full article content
- **Mobile Reading**: Convert web articles to clean, mobile-friendly format

### Pricing

This Actor uses a pay-per-event pricing model:

- **Article extraction**: Charged per successful article processed
- **Content fetching**: Charged per page fetched (different rates for proxy vs direct)
- **Image downloads**: Charged per image downloaded (only content-relevant images)

### Getting Started

1. Provide a list of URLs to articles or blog posts
2. Configure batch size, proxy, and image download options as needed
3. Run the Actor
4. Monitor progress through real-time logs
5. Access extracted content and images from the dataset

Perfect for content platforms, research projects, and applications requiring clean, structured article data at scale.

# Actor input Schema

## `startUrls` (type: `array`):

List of URLs containing articles you want to extract content from. Supports news articles, blog posts, and other web pages with structured content.

## `maxArticles` (type: `integer`):

Maximum number of articles to process. Use this to limit the number of articles extracted when providing many URLs.

## `useProxy` (type: `boolean`):

Enable proxy for enhanced reliability and to bypass anti-bot protections. Useful for websites with geographic restrictions or bot detection.

## `downloadImages` (type: `boolean`):

Download and store images found in the article. Images will be saved to the key-value store and their URLs included in output. Also includes image references in extracted text using trafilatura.

## `maxConcurrency` (type: `integer`):

Maximum number of articles to process concurrently. Higher values process faster but use more resources.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://github.blog/2019-03-29-leader-spotlight-erin-spiceland/"
    }
  ],
  "maxArticles": 10,
  "useProxy": false,
  "downloadImages": false,
  "maxConcurrency": 5
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

# 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 = {
    "maxArticles": 10,
    "maxConcurrency": 5
};

// Run the Actor and wait for it to finish
const run = await client.actor("vulnv/web-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 = {
    "maxArticles": 10,
    "maxConcurrency": 5,
}

# Run the Actor and wait for it to finish
run = client.actor("vulnv/web-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 '{
  "maxArticles": 10,
  "maxConcurrency": 5
}' |
apify call vulnv/web-article-content-extractor --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,vulnv/web-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/CQ5cQIkZvoT1qmZe6/builds/hxnYGEznOKDcMGr0U/openapi.json
