# Barchart (`maximedupre/barchart`) Actor

Run a Barchart snapshot for financial news or options data. Receive structured rows with story details, contract prices and terms, trade context, and run coverage.

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

## Pricing

from $0.045 / financial news

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Barchart

### 📈 Barchart market data for analysis

Investors, market researchers, and developers can use Barchart to pull financial news and options snapshots for symbols or the wider market. The Actor returns structured dataset rows with story details, contract prices, trade data, source links, and run coverage, so you can review the data or use it in code.

#### 🎯 Try these tasks

- Track **[Financial News](https://apify.com/maximedupre/barchart/examples/financial-news)** for symbols with headlines, summaries, and source links.
- Review **[Unusual Options Activity](https://apify.com/maximedupre/barchart/examples/unusual-options-activity)** across stocks, ETFs, and indices with contract prices and activity measures.
- Compare **[Options Chain](https://apify.com/maximedupre/barchart/examples/options-chain)** contracts for selected symbols with quotes, expirations, volume, and open interest.
- Inspect **[Stock Options Flow](https://apify.com/maximedupre/barchart/examples/stock-options-flow)** for symbol-level trades with prices, premiums, times, and source condition codes.
- Choose calls and inspect **[Unusual Call Options Activity](https://apify.com/maximedupre/barchart/examples/unusual-call-options-activity)** in a market-wide scan.

### 📤 Output and returned data

Each run writes one kind of row to the dataset, based on the target you choose. The status tells you whether the run completed, found no matching rows, or stopped before all available rows were returned.

#### 🧭 Run output

| Field | Type | What it does |
|---|---|---|
| defaultDataset | string | URL for the result rows from this run. |
| status | string | Run state: complete, empty, or truncated. |

#### 📰 Financial news rows

| Field | Type | What it does |
|---|---|---|
| recordType | string | Always financialNews for this shape. |
| symbol | string | First submitted symbol that found this story. |
| storyId | string | Stable Barchart ID for the story. |
| headline | string | Financial news headline. |
| publishedAt | date-time string | Time when Barchart published the story. |
| provider | string | Provider that supplied the story. |
| summary | string | Short story summary. |
| sourceUrl | string | Main URL for the story. |
| shareUrl | string | Barchart share page for the story. |
| retrievedAt | date-time string | Time when this row was retrieved. |
| coverage.availableCount | integer | Matching stories available when the snapshot was read. |
| coverage.returnedCount | integer | Stories returned in this run. |
| coverage.truncated | boolean | True when the run stopped before all available stories were returned. |
| coverage.appliedFilters.target | string | Target used for this snapshot. |
| coverage.appliedFilters.symbols | string\[] | Submitted symbols used for this snapshot. |
| coverage.appliedFilters.assetClass | string | Asset class setting recorded for the run. |
| coverage.appliedFilters.optionType | string | Option type setting recorded for the run. |

Example row:

```json
{
  "recordType": "financialNews",
  "symbol": "MSFT",
  "storyId": "3596750",
  "headline": "Microsoft Investigation Initiated: Kahn Swick & Foti, LLC Investigates the Officers and Directors of Microsoft Corporation - MSFT",
  "publishedAt": "2026-08-01T17:55:00.000Z",
  "provider": "Business Wire",
  "sourceUrl": "https://barchartjson.websol.barchart.com/?module=jsonBCNews&storyid=3596750",
  "shareUrl": "https://www.barchart.com/share/news/3596750",
  "retrievedAt": "2026-08-01T23:07:31.273Z",
  "summary": "Former Attorney General of Louisiana, Charles C. Foti, Jr., Esq., a partner at the law firm of  Kahn Swick & Foti , LLC (“KSF”), announces that KSF has commenced an investigation into  Microsoft Corporation  (“Microsoft” or the “Company”)...",
  "coverage": {
    "availableCount": 5,
    "returnedCount": 1,
    "truncated": false,
    "appliedFilters": {
      "target": "financial-news",
      "symbols": [
        "AAPL",
        "MSFT"
      ],
      "assetClass": "all",
      "optionType": "both"
    }
  }
}
```

#### 🚨 Unusual options activity rows

| Field | Type | What it does |
|---|---|---|
| recordType | string | Always unusualOptionsActivity for this shape. |
| symbol | string | Security symbol for the activity. |
| assetClass | string | Underlying group: stocks, ETFs, or indices. |
| contractSymbol | string | Stable symbol for the option contract. |
| expirationDate | date string | Calendar date when the contract expires. |
| strikePrice | number | Price at which the contract can be exercised. |
| optionType | string | Call or put. |
| bid | number | Current bid price. |
| ask | number | Current ask price. |
| lastPrice | number | Latest quoted or traded price. |
| volume | integer | Number of option contracts traded. |
| openInterest | integer | Number of open option contracts. |
| premium | number | Total premium value tied to the activity. |
| volumeOpenInterestRatio | number | Volume divided by open interest. |
| impliedVolatility | number | Implied volatility value. |
| weightedVolatility | number | Weighted volatility value. |
| delta | number | Option delta reported by Barchart. |
| moneyness | string | In-the-money, at-the-money, or out-of-the-money state. |
| underlyingPrice | number | Latest price of the underlying security. |
| sentiment | string | Option sentiment when Barchart provides it. |
| retrievedAt | date-time string | Time when this row was retrieved. |
| coverage.availableCount | integer | Matching contracts available when the snapshot was read. |
| coverage.returnedCount | integer | Contracts returned in this run. |
| coverage.truncated | boolean | True when the run stopped before all available contracts were returned. |
| coverage.appliedFilters.target | string | Target used for this snapshot. |
| coverage.appliedFilters.assetClass | string | Asset class filter used for this snapshot. |
| coverage.appliedFilters.optionType | string | Call, put, or both setting used for this snapshot. |
| coverage.appliedFilters.minVolume | integer | Minimum volume filter used for this snapshot. |
| coverage.appliedFilters.minPremium | number | Minimum premium filter used for this snapshot. |
| coverage.appliedFilters.minVolumeOpenInterestRatio | number | Minimum volume-to-open-interest ratio filter used for this snapshot. |

Example row:

```json
{
  "recordType": "unusualOptionsActivity",
  "symbol": "RDDT",
  "assetClass": "stocks",
  "contractSymbol": "RDDT|20260904|100.00P",
  "expirationDate": "2026-09-04",
  "strikePrice": 100,
  "optionType": "put",
  "volume": 7439,
  "openInterest": 1,
  "underlyingPrice": 140.67,
  "retrievedAt": "2026-08-01T23:11:03.598Z",
  "premium": 557925,
  "volumeOpenInterestRatio": 7439,
  "bid": 0.3,
  "ask": 0.99,
  "lastPrice": 0.75,
  "impliedVolatility": 0.7188,
  "weightedVolatility": 0.69709805944672,
  "delta": -0.046504,
  "moneyness": "-28.91%",
  "coverage": {
    "availableCount": 455,
    "returnedCount": 1,
    "truncated": false,
    "appliedFilters": {
      "target": "unusual-options-activity",
      "assetClass": "stocks",
      "optionType": "puts",
      "minVolume": 1000,
      "minPremium": 100000,
      "minVolumeOpenInterestRatio": 2
    }
  }
}
```

#### ⛓️ Options chain rows

| Field | Type | What it does |
|---|---|---|
| recordType | string | Always optionsChain for this shape. |
| symbol | string | Security symbol for the contract. |
| assetClass | string | Underlying group: stocks, ETFs, or indices. |
| contractSymbol | string | Stable symbol for the option contract. |
| expirationDate | date string | Calendar date when the contract expires. |
| strikePrice | number | Price at which the contract can be exercised. |
| optionType | string | Call or put. |
| bid | number | Current bid price. |
| ask | number | Current ask price. |
| lastPrice | number | Latest quoted or traded price. |
| volume | integer | Number of option contracts traded. |
| openInterest | integer | Number of open option contracts. |
| premium | number | Total premium value tied to the contract. |
| volumeOpenInterestRatio | number | Volume divided by open interest. |
| impliedVolatility | number | Implied volatility value. |
| weightedVolatility | number | Weighted volatility value. |
| delta | number | Option delta reported by Barchart. |
| moneyness | string | In-the-money, at-the-money, or out-of-the-money state. |
| underlyingPrice | number | Latest price of the underlying security. |
| sentiment | string | Option sentiment when Barchart provides it. |
| retrievedAt | date-time string | Time when this row was retrieved. |
| coverage.availableCount | integer | Matching contracts available when the snapshot was read. |
| coverage.returnedCount | integer | Contracts returned in this run. |
| coverage.truncated | boolean | True when the run stopped before all available contracts were returned. |
| coverage.appliedFilters.target | string | Target used for this snapshot. |
| coverage.appliedFilters.symbols | string\[] | Submitted symbols used for this snapshot. |
| coverage.appliedFilters.assetClass | string | Asset class filter used for this snapshot. |
| coverage.appliedFilters.optionType | string | Call, put, or both setting used for this snapshot. |
| coverage.appliedFilters.expirationDate | date string | Optional expiration filter used for this snapshot. |
| coverage.appliedFilters.minVolume | integer | Minimum volume filter used for this snapshot. |
| coverage.appliedFilters.minPremium | number | Minimum premium filter used for this snapshot. |
| coverage.appliedFilters.minVolumeOpenInterestRatio | number | Minimum volume-to-open-interest ratio filter used for this snapshot. |

Example row:

```json
{
  "recordType": "optionsChain",
  "symbol": "AAPL",
  "assetClass": "stocks",
  "contractSymbol": "AAPL|20270617|5.00C",
  "expirationDate": "2027-06-17",
  "strikePrice": 5,
  "optionType": "call",
  "volume": 2,
  "openInterest": 1,
  "underlyingPrice": 308.91,
  "retrievedAt": "2026-08-01T23:15:26.863Z",
  "premium": 60028,
  "volumeOpenInterestRatio": 2,
  "bid": 301.5,
  "ask": 306.5,
  "lastPrice": 300.14,
  "impliedVolatility": 2.0177,
  "weightedVolatility": 0.27304524312285,
  "delta": 0.998921,
  "moneyness": "+98.38%",
  "coverage": {
    "availableCount": 1173,
    "returnedCount": 1,
    "truncated": false,
    "appliedFilters": {
      "target": "options-chain",
      "symbols": [
        "AAPL"
      ],
      "assetClass": "all",
      "optionType": "both",
      "minVolume": 1,
      "minPremium": 50000,
      "minVolumeOpenInterestRatio": 0.1
    }
  }
}
```

#### 🔄 Ticker option-flow rows

| Field | Type | What it does |
|---|---|---|
| recordType | string | Always tickerOptionFlow for this shape. |
| symbol | string | Security symbol for the trade. |
| assetClass | string | Underlying group: stocks, ETFs, or indices. |
| contractSymbol | string | Stable symbol for the option contract. |
| expirationDate | date string | Calendar date when the contract expires. |
| strikePrice | number | Price at which the contract can be exercised. |
| optionType | string | Call or put. |
| tradePrice | number | Price of the option-flow trade. |
| bid | number | Bid price at the trade time. |
| ask | number | Ask price at the trade time. |
| volume | integer | Number of option contracts traded. |
| openInterest | integer | Number of open option contracts. |
| premium | number | Total premium value tied to the trade. |
| tradeTime | date-time string | Time of the option-flow trade. |
| tradeConditionCodes | string\[] | Source codes that describe the trade. |
| underlyingPrice | number | Latest price of the underlying security. |
| underlyingChange | number | Price change of the underlying security. |
| underlyingChangePercent | number | Percent change of the underlying security. |
| delta | number | Option delta when Barchart provides it. |
| sentiment | string | Option sentiment when Barchart provides it. |
| retrievedAt | date-time string | Time when this row was retrieved. |
| coverage.availableCount | integer | Matching trades available when the snapshot was read. |
| coverage.returnedCount | integer | Trades returned in this run. |
| coverage.truncated | boolean | True when the run stopped before all available trades were returned. |
| coverage.appliedFilters.target | string | Target used for this snapshot. |
| coverage.appliedFilters.symbols | string\[] | Submitted symbols used for this snapshot. |
| coverage.appliedFilters.assetClass | string | Asset class filter used for this snapshot. |
| coverage.appliedFilters.optionType | string | Call, put, or both setting used for this snapshot. |

Example row:

```json
{
  "recordType": "tickerOptionFlow",
  "symbol": "AAPL",
  "assetClass": "stocks",
  "contractSymbol": "AAPL|20260803|330.00P",
  "expirationDate": "2026-08-03",
  "strikePrice": 330,
  "optionType": "put",
  "tradePrice": 26.1,
  "bid": 19.6,
  "ask": 22.2,
  "volume": 2683,
  "openInterest": 1306,
  "premium": 3387700,
  "tradeTime": "2026-07-31T20:28:41.000Z",
  "tradeConditionCodes": [
    "CANC"
  ],
  "underlyingPrice": 308.91,
  "retrievedAt": "2026-08-01T23:12:58.620Z",
  "delta": -0.86678928972609,
  "sentiment": "Bearish",
  "underlyingChange": -24.52,
  "underlyingChangePercent": -0.0735,
  "coverage": {
    "availableCount": 102,
    "returnedCount": 1,
    "truncated": false,
    "appliedFilters": {
      "target": "ticker-option-flow",
      "symbols": [
        "AAPL"
      ],
      "assetClass": "all",
      "optionType": "puts"
    }
  }
}
```

### ▶️ Run the Actor

#### 🛠️ Basic steps

1. Choose one target: Financial news, Unusual options activity, Options chain, or Ticker option flow.
2. Add Symbols for the symbol-based targets. Unusual options activity scans the market and ignores Symbols.
3. Add an expiration or activity filter when you need one. Set Actor Work Limit to stop after a chosen number of records.
4. Start the run and open the default dataset URL from the run output.

### 🧾 Input

#### 🧩 Input fields

| Field | Type | What it does |
|---|---|---|
| target | string | Chooses the one snapshot type for this run. |
| assetClass | string | Chooses stocks, ETFs, indices, or all for Unusual options activity. Other targets ignore it. |
| expiration | date string | Chooses one calendar date for Options chain. Empty includes all available expirations. Other targets ignore it. |
| symbols | string\[] | Sends one or more security symbols to Financial news, Options chain, or Ticker option flow. Unusual options activity ignores it. |
| optionType | string | Chooses calls, puts, or both for the three options targets. Financial news ignores it. |
| minVolume | integer | Sets the smallest option volume for Unusual options activity or Options chain. Empty uses no volume threshold. |
| minPremium | number | Sets the smallest premium for Unusual options activity or Options chain. Empty uses no premium threshold. |
| minVolumeOpenInterestRatio | number | Sets the smallest volume-to-open-interest ratio for Unusual options activity or Options chain. Empty uses no ratio threshold. |
| maxItems | integer | Actor Work Limit. Stops after this many records for any target. Empty returns all available results until the source is exhausted. |

#### 🧪 Example input

Example input:

```json
{
  "target": "financial-news",
  "assetClass": "all",
  "symbols": [
    "AAPL"
  ],
  "optionType": "both",
  "maxItems": 20
}
```

### 💳 Pricing

#### 💰 Primary charges

Each target has one primary pay-per-event charge for a successfully delivered snapshot. The charge is not per returned row.

| Target | Buyer-facing event | Price |
|---|---|---:|
| Financial news | Financial news | $0.045 |
| Unusual options activity | Unusual activity | $1.35 |
| Options chain | Options chain | $1.35 |
| Ticker option flow | Option flow | $1.35 |

### 🔌 Integrations

#### 🔗 Use the dataset

Open the default dataset URL from the run output, or use Apify's dataset tools and API to read the structured rows. Export the data as JSON or another supported dataset format for your workflow.

For a short walkthrough, watch this video:

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

### ❓ FAQ

#### 🔗 Can one run use more than one target?

No. Choose one target per run. Start another run for a different target.

#### 🎚️ What happens when Actor Work Limit is empty?

The Actor returns all available results until the source is exhausted. A set limit can stop the run earlier, and status is truncated when it stops before all available results are returned.

#### 📉 What does truncated mean?

It means the run stopped before all matching results were returned. Check coverage.availableCount, coverage.returnedCount, and the applied filters to see what the snapshot covered.

#### 🧪 Does this replace a stock screener?

No. Barchart focuses here on financial news and options snapshots, not a general stock screener.

#### 🧠 Does it tell me the best call options to buy today?

No. It returns Barchart data for analysis and does not give investment advice or place trades.

#### 🔐 Do I need Barchart login credentials?

No Barchart credentials are requested. The Actor uses publicly reachable Barchart data.

#### 🗓️ Is this a historical backfill or live stream?

No. Each run is a snapshot of data available when Barchart is read.

### 📝 Changelog

**0.0: Initial release**

Pull financial news and market-wide or symbol-specific options snapshots from Barchart, including unusual options activity, options chains, stock options flow, and unusual call activity, with structured dataset output for analysis.

### 🆘 Support

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

### 🔗 Related Actors

- [Morningstar Scraper](https://apify.com/maximedupre/morningstar-scraper) — compare public stock, mutual fund, and ETF data with prices, ratings, fees, assets, and holdings.
- [MarketWatch Scraper](https://apify.com/maximedupre/marketwatch) — collect MarketWatch articles with headlines, summaries, dates, and stock tickers.
- [Stocktwits Scraper](https://apify.com/maximedupre/stocktwits-scraper) — review public Stocktwits ticker messages, sentiment, and trending symbols.
- [Barchart News Scraper](https://apify.com/mscraper/barchart-news-scraper) — compare a news-focused Barchart collection workflow with this multi-target Actor.
- [Options Flow & Unusual Activity](https://apify.com/datara/unusual-options-activity) — explore another Barchart options workflow for unusual activity, chains, and intraday flow.

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

# Actor input Schema

## `target` (type: `string`):

Choose one snapshot type for this run. To run a different target, start another run.

## `assetClass` (type: `string`):

For Unusual options activity, choose stocks, ETFs, indices, or all. Other targets ignore this field.

## `expiration` (type: `string`):

For Options chain, optionally choose one calendar date. Leave it empty to include all available expirations. Other targets ignore this field.

## `symbols` (type: `array`):

Enter one or more security symbols for Financial news, Options chain, or Ticker option flow, such as AAPL or MSFT. Unusual options activity ignores this field.

## `optionType` (type: `string`):

For Unusual options activity, Options chain, or Ticker option flow, choose calls, puts, or both. Financial news ignores this field.

## `minVolume` (type: `integer`):

For Unusual options activity or Options chain, return only option records with at least this volume. Leave it empty to use no volume threshold.

## `minPremium` (type: `number`):

For Unusual options activity or Options chain, return only option records with at least this premium. Leave it empty to use no premium threshold.

## `minVolumeOpenInterestRatio` (type: `number`):

For Unusual options activity or Options chain, return option records when volume divided by open interest is at least this value. Leave it empty to use no ratio threshold.

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

Stop after this many records for any target. Leave it empty to return all available results until the source is exhausted.

## Actor input object example

```json
{
  "target": "financial-news",
  "assetClass": "all",
  "expiration": "2026-12-18",
  "symbols": [
    "AAPL",
    "MSFT"
  ],
  "optionType": "both",
  "minVolume": 100,
  "minPremium": 10000,
  "minVolumeOpenInterestRatio": 2,
  "maxItems": 100
}
```

# Actor output Schema

## `defaultDataset` (type: `string`):

URL for the result rows from this run.

## `status` (type: `string`):

The result state for this run: complete, empty, or truncated.

# 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 = {
    "target": "financial-news",
    "symbols": [
        "AAPL"
    ],
    "maxItems": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("maximedupre/barchart").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 = {
    "target": "financial-news",
    "symbols": ["AAPL"],
    "maxItems": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("maximedupre/barchart").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "target": "financial-news",
  "symbols": [
    "AAPL"
  ],
  "maxItems": 20
}' |
apify call maximedupre/barchart --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=maximedupre/barchart",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/aIzhVPPurg7ofyNya/builds/gdk2tzftWPjDvktpx/openapi.json
