# ZeroHedge News Scraper (`maximedupre/zerohedge`) Actor

Collect public ZeroHedge articles from the sitewide feed, selected sections, or direct URLs. Filter by text or publication date and export available article text, original HTML, author details, media URLs, and source-published counts in structured records.

- **URL**: https://apify.com/maximedupre/zerohedge.md
- **Developed by:** [Maxime Dupré](https://apify.com/maximedupre) (community)
- **Categories:** News, Business, Developer tools
- **Stats:** 1 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$0.90 / 1,000 zerohedge articles

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

### 📰 ZeroHedge articles, ready to read and filter

ZeroHedge readers, market researchers, and news pipeline builders can collect public articles as structured records. Each record includes the available article text and original HTML, source details, and useful media and engagement fields, so you can search, archive, or analyze the source data.

- Filter by a market term and collect matching stories with [**ZeroHedge silver**](https://apify.com/maximedupre/zerohedge/examples/zerohedge-silver).
- Start a broad sitewide run with [**Zero Hedge**](https://apify.com/maximedupre/zerohedge/examples/zero-hedge).
- Search article text for a metal term with [**ZeroHedge gold**](https://apify.com/maximedupre/zerohedge/examples/zerohedge-gold).
- Use a recent date with [**Zero Hedge news today**](https://apify.com/maximedupre/zerohedge/examples/zero-hedge-news-today) to review fresh coverage.
- Match a media topic in article titles or bodies with [**Zero Hedge podcast**](https://apify.com/maximedupre/zerohedge/examples/zero-hedge-podcast).
- Build a focused reading list with [**ZeroHedge alternatives**](https://apify.com/maximedupre/zerohedge/examples/zerohedge-alternatives).
- Match a digital-asset topic and inspect full records with [**ZeroHedge crypto**](https://apify.com/maximedupre/zerohedge/examples/zerohedge-crypto).

#### 📚 ZeroHedge records that keep the source context

The default dataset stores one row for each saved article. Required fields include the source article ID, title, canonical URL, author, publication time, section, full article text, and original HTML. Optional fields add the author photo, source-published counts, images, premium status, summary, and embedded video IDs when available.

**Main value**

Collect source content and structured metadata together, then use the dataset link in the run output for review, export, or your own analysis.

#### ▶️ Run the ZeroHedge article scraper

**Choose a source**

Use the sitewide feed, selected public sections, or one or more direct article URLs.

**Add filters**

Match text in the title or body, set a UTC publication date, and turn on the new-or-changed option for a recurring monitor.

**Set the work limit**

For feed and section runs, set Maximum articles to stop after a chosen count. Leave it empty to return all available matching articles until the source is exhausted. Direct URL runs use the submitted URLs.

**Review the output**

Open the default dataset from the run output to inspect the structured article rows.

#### ⚙️ Input

The required field is `findArticlesBy`. All other fields are optional unless their description says otherwise.

| Field | Type | What it does |
| --- | --- | --- |
| `findArticlesBy` | string | Required. Choose `sitewideFeed`, `sections`, or `directUrls`, shown as Sitewide feed, Selected sections, or Direct URLs. |
| `articleUrls` | array of objects | Add one or more public ZeroHedge article URLs for Direct URLs runs. The field is ignored for other choices. |
| `keyword` | string | Keep articles with this text in the title or body. Leave it blank to include all matching articles. |
| `sections` | array of strings | Limit Sitewide feed runs to public sections, or provide section names or paths for Selected sections. The field is ignored for Direct URLs. |
| `publishedAfter` | date string | Keep articles published after this UTC date in `YYYY-MM-DD` format. |
| `maxItems` | integer | Stop feed and section runs after this many articles. Leave it empty to return all available matching articles until the source is exhausted. Direct URL runs use the submitted URLs. |
| `onlyNewOrChanged` | boolean | Use this for a recurring monitor. The run returns only articles that are new or changed since that monitor's previous run and labels the change. |

**Default input example**

This is the public input from a successful current beta default-input run.

```json
{
  "findArticlesBy": "sitewideFeed",
  "maxItems": 20,
  "onlyNewOrChanged": false
}
```

#### 🧾 Output

The `dataset` output field links to the default dataset. The Actor returns one article shape, with required source fields and optional fields when the public page or feed provides them.

| Field | Type | What it does |
| --- | --- | --- |
| `articleId` | string | Required. Stable identifier published for the article. |
| `title` | string | Required. Title published for the article. |
| `canonicalUrl` | URL string | Required. Canonical ZeroHedge URL for the article. |
| `author` | object | Required. Author details published for the article. |
| `author.name` | string | Required. Author's published name. |
| `author.photoUrl` | URL string, optional | Author photo URL when the page provides one. |
| `publishedAt` | date-time string | Required. Publication date and time from the article page. |
| `section` | string | Required. ZeroHedge section that contains the article. |
| `articleText` | string | Required. Full article text available on the public page. |
| `articleHtml` | string | Required. Original HTML for the article content. |
| `viewCount` | integer, optional | View count published by the source when available. |
| `commentCount` | integer, optional | Comment count published by the source when available. |
| `teaserImageUrl` | URL string, optional | Teaser image URL published for the article when available. |
| `inlineImageUrls` | array of URL strings, optional | Image URLs included in the article body. |
| `isPremium` | boolean, optional | Whether the source marks the article as premium. |
| `summary` | string, optional | Short summary published on the article page when available. |
| `embeddedVideoIds` | array of strings, optional | Identifiers of videos embedded in the article when the source publishes them. |

**Example article row**

This genuine row comes from a successful current beta run using a direct article URL. The example is shortened: `articleText` and `articleHtml` use the JSON string value `"..."` in place of their longer saved values.

```json
{
  "articleId": "1126440",
  "title": "Boat Migrants Who Have Entered Britain Now Outnumber Its Soldiers",
  "canonicalUrl": "https://www.zerohedge.com/geopolitical/boat-migrants-who-have-entered-britain-now-outnumber-its-soldiers",
  "author": {
    "name": "Tyler Durden",
    "photoUrl": "https://assets.zerohedge.com/s3fs-public/styles/thumbnail/public/pictures/picture-5.jpg?itok=LY4e264-"
  },
  "publishedAt": "2026-09-28T10:30:00.000Z",
  "section": "Geopolitical",
  "articleText": "...",
  "articleHtml": "...",
  "teaserImageUrl": "https://cms.zerohedge.com/s3/files/styles/16_9_max_700/public/2026-09/army.jpg?itok=y5-uvsvL",
  "isPremium": false,
  "summary": "It's an army...",
  "inlineImageUrls": [
    "https://assets.zerohedge.com/s3fs-public/inline-images/army_3.jpg"
  ],
  "embeddedVideoIds": [
    "hh_kE3lk3yk"
  ],
  "viewCount": 8691,
  "commentCount": 122
}
```

#### 💳 Pricing

This Actor uses pay per event pricing. The primary event is one publicly available ZeroHedge article with its full text and structured metadata. See the current Apify pricing panel for the rate.

#### 🔌 Integrations

Use the default dataset link in the run output with Apify's API, exports, or your own workflow.

https://www.youtube.com/watch?v=bNACk1\_S\_6w\&list=PLObrtcm1Kw6MUrlLNDbK9QRg8VDJg0gOW\&index=4

#### ❓ FAQ

##### Can I collect one known article?

Yes. Choose Direct URLs and submit one or more public ZeroHedge article URLs.

##### Can I collect only one section or match a topic?

Yes. Choose Selected sections, or use the text match field to keep articles whose title or body contains your text.

##### Can I limit results by date?

Yes. Set Published after with the UTC calendar date in `YYYY-MM-DD` format.

##### What happens when the work limit is empty?

Feed and section runs return all available matching articles until the source is exhausted. Direct URL runs use the submitted URLs.

##### What does Only new or changed articles do?

Turn it on for a recurring monitor. The run keeps only articles that are new or changed since that monitor's previous run.

##### Why might an optional field be missing?

The Actor keeps fields that the public source provides. If the source does not publish an optional value, that field is omitted rather than filled with a placeholder.

##### Do I need a ZeroHedge login or API key?

No. The Actor collects publicly available ZeroHedge articles without customer authentication.

##### Does this Actor give investment advice?

No. It returns source content and metadata. It does not provide investment recommendations, sentiment analysis, or trading decisions.

### 📝 Changelog

**v0.0** (28-09-2026)

- Initial release.

### 🆘 Support

For issues, questions, or feature requests, [file a ticket](https://console.apify.com/actors/maximedupre~zerohedge/issues) and I'll fix or implement it in less than 24h 🫡

### 🔗 Related Actors

- [**RSS Feed Reader**](https://apify.com/maximedupre/rss-feed-reader): Read public RSS and JSON feeds into structured article rows for scheduled collection.
- [**Webpage Text Extractor**](https://apify.com/maximedupre/webpage-text-extractor): Extract article text and Markdown from public pages for search and downstream workflows.
- [**Barchart Scraper**](https://apify.com/maximedupre/barchart): Collect financial news and market data alongside ZeroHedge coverage.
- [**Stocktwits Scraper**](https://apify.com/maximedupre/stocktwits-scraper): Track public market messages and engagement around symbols.
- [**Medium Articles Scraper**](https://apify.com/maximedupre/medium-articles): Collect public articles by keyword or URL with optional full text.

**Made with ❤️ by Maxime Dupré**

# Actor input Schema

## `findArticlesBy` (type: `string`):

Choose where to find ZeroHedge articles.

## `articleUrls` (type: `array`):

Add one or more public ZeroHedge article URLs. Direct URL runs retrieve each one. This field is ignored for other choices.

## `keyword` (type: `string`):

Keep articles with this text in the title or body. Leave it blank to include all matching articles.

## `sections` (type: `array`):

For Sitewide feed, limit results to these public sections. For Selected sections, use these section names or paths. This field is ignored for Direct URLs.

## `publishedAfter` (type: `string`):

Keep articles published after this UTC date. Use the YYYY-MM-DD calendar date shown by the date picker.

## `maxItems` (type: `integer`):

For Sitewide feed and Selected sections, stop after this many articles. Leave it empty to return all available matching articles until the source is exhausted. Direct URL runs use the submitted URLs.

## `onlyNewOrChanged` (type: `boolean`):

Turn this on for a recurring monitor. The run returns only articles that are new or changed since that monitor's previous run and labels the change.

## Actor input object example

```json
{
  "findArticlesBy": "sitewideFeed",
  "maxItems": 20,
  "onlyNewOrChanged": false
}
```

# Actor output Schema

## `dataset` (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 = {
    "findArticlesBy": "sitewideFeed",
    "maxItems": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("maximedupre/zerohedge").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 = {
    "findArticlesBy": "sitewideFeed",
    "maxItems": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("maximedupre/zerohedge").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 '{
  "findArticlesBy": "sitewideFeed",
  "maxItems": 20
}' |
apify call maximedupre/zerohedge --silent --output-dataset

```

## MCP server setup

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

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/VRHSKMXUyYP0q1dml/builds/5eauTphH8bgeVbfXf/openapi.json
