# Barchart Scraper (`maximedupre/barchart`) Actor

Run one Barchart snapshot for financial news, stock and ETF quotes, unusual options activity, options chains, or ticker option flow. Get structured rows with news details, quote fields, contract terms, trade context, and coverage.

- **URL**: https://apify.com/maximedupre/barchart.md
- **Developed by:** [Maxime Dupré](https://apify.com/maximedupre) (community)
- **Categories:** Developer tools, News
- **Stats:** 2 total users, 1 monthly users, 93.3% 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.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#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 snapshots for market research

Investors, analysts, market researchers, and developers can run one Barchart snapshot at a time. Get structured rows for financial news, stock and ETF quotes, unusual options activity, options chains, or ticker option flow. Use the rows to review news, compare quotes, and study contract and trade data.

**Try these tasks**

- Track **[Financial News](https://apify.com/maximedupre/barchart/examples/financial-news)** for symbol-linked headlines, summaries, and source links.
- Pull **[Options Quotes](https://apify.com/maximedupre/barchart/examples/options-quotes)** for selected symbols with option quote fields.
- Review **[Unusual Options Activity](https://apify.com/maximedupre/barchart/examples/unusual-options-activity)** across stocks, ETFs, and indices with activity measures.
- Compare **[Options Chain](https://apify.com/maximedupre/barchart/examples/options-chain)** contracts across available expirations for selected symbols.
- Inspect **[Options Flow](https://apify.com/maximedupre/barchart/examples/options-flow)** for intraday trades, prices, premiums, and trade codes.
- Choose calls and inspect **[Unusual Call Options Activity](https://apify.com/maximedupre/barchart/examples/unusual-call-options-activity)** in a market-wide scan.

#### 🧾 Barchart snapshot types

Each run writes structured dataset rows for the snapshot type you choose. Financial news rows include story details and links. Stock and ETF quote rows include price, change, volume, and valuation fields when Barchart supplies them. Options rows include contract terms, prices, activity data, and trade context. Coverage fields show available and returned counts, filters, and whether the snapshot stopped early.

**First saved match**

If the same source item matches more than one submitted value, the Actor saves the first eligible match and ignores later matches. For a financial news row, symbol is the first submitted symbol that found the story.

#### ▶️ Run a Barchart snapshot

**Run steps**

1. Choose one target: Financial news, Stock and ETF quotes, 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.
4. Set Actor Work Limit to stop after a chosen number of records, or leave it empty to return all available results until the source is exhausted.
5. Start the run and open the defaultDataset URL from the run output.

#### ⚙️ Input

**Input fields**

| Field | Type | What it does |
|---|---|---|
| target | string | Selects one snapshot type for the run. |
| assetClass | string | For Unusual options activity, selects stocks, ETFs, indices, or all. Other snapshot types ignore it. |
| expiration | date string | For Options chain, selects one calendar date. Leave it empty to include all available expirations. Other snapshot types ignore it. |
| symbols | array of strings | Provides one or more security symbols for Financial news, Stock and ETF quotes, Options chain, or Ticker option flow. Unusual options activity scans the market and ignores this field. |
| optionType | string | For Unusual options activity, Options chain, or Ticker option flow, selects calls, puts, or both. Financial news and Stock and ETF quotes ignore it. |
| minVolume | integer | For Unusual options activity or Options chain, keeps option records with at least this many contracts traded. Leave it empty for no volume threshold. Other snapshot types ignore it. |
| minPremium | number | For Unusual options activity or Options chain, keeps option records with at least this premium. Leave it empty for no premium threshold. Other snapshot types ignore it. |
| minVolumeOpenInterestRatio | number | For Unusual options activity or Options chain, keeps option records with at least this volume-to-open-interest ratio. Leave it empty for no ratio threshold. Other snapshot types ignore it. |
| maxItems | integer | Stops after this many records for any snapshot type. Leave it empty to return all available results until the source is exhausted. |

**Default input**

The hosted default input for a successful QA run is:

```json
{
  "assetClass": "all",
  "optionType": "both"
}
```

Choose target for every run. Add symbols for a symbol-based snapshot. Fields that do not apply to the selected snapshot type are ignored.

#### 🧾 Output

**Run output**

| Field | Type | What it does |
|---|---|---|
| defaultDataset | string | URL for the rows saved in the default dataset. |

Each dataset row has a recordType value for its snapshot shape. The coverage object shows how many matching records were available, how many were returned, which filters were applied, and whether the run stopped before the source was exhausted.

**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 | Headline of the financial news story. |
| publishedAt | date-time string | Time when Barchart published the story. |
| provider | string | Provider that supplied the story. |
| summary | string | Short story summary when Barchart supplies one. |
| sourceUrl | string | Source page for the story. |
| shareUrl | string | Barchart page used to share 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 | Matching stories returned in this run. |
| coverage.truncated | boolean | True when the run stopped before all available stories were returned. |
| coverage.appliedFilters.target | string | Snapshot type used for this run. |
| coverage.appliedFilters.symbols | string\[] | Submitted symbols used for this snapshot. |
| coverage.appliedFilters.assetClass | string | Asset class setting recorded for this snapshot. |
| coverage.appliedFilters.optionType | string | Option type setting recorded for this snapshot. |

**Example financial news row**

```json
{
  "recordType": "financialNews",
  "symbol": "AAPL",
  "storyId": "4340050",
  "headline": "Apple Was Always 1 Step Behind in AI. In Chipmaking, It’s Now 1 Step Ahead.",
  "publishedAt": "2026-08-29T20:30:02.000Z",
  "provider": "Barchart",
  "sourceUrl": "https://barchartjson.websol.barchart.com/?module=jsonBCNews&storyid=4340050",
  "shareUrl": "https://www.barchart.com/share/news/4340050",
  "retrievedAt": "2026-08-30T08:15:36.606Z",
  "summary": "Apple beat rivals to a 2nm chip with the M6, betting AI's future runs on your device rather than the cloud.",
  "coverage": {
    "availableCount": 5,
    "returnedCount": 1,
    "truncated": false,
    "appliedFilters": {
      "target": "financial-news",
      "symbols": [
        "AAPL"
      ],
      "assetClass": "all",
      "optionType": "both"
    }
  }
}
```

**Stock and ETF quote rows**

| Field | Type | What it does |
|---|---|---|
| recordType | string | Always stockEtfQuote for this shape. |
| symbol | string | Security symbol for the quote. |
| assetClass | string | Underlying group, such as stocks or ETFs. |
| name | string | Name of the stock or ETF. |
| exchange | string | Exchange where the stock or ETF is listed. |
| lastPrice | number | Latest quoted price. |
| priceChange | number | Change from the prior quote. |
| priceChangePercent | number | Percent change from the prior quote. |
| volume | integer | Number of shares traded. |
| averageVolume | integer | Average number of shares traded. |
| marketCap | number | Market capitalization. |
| peRatio | number | Price-to-earnings ratio. |
| priceToBook | number | Price-to-book ratio. |
| priceToSales | number | Price-to-sales ratio. |
| dividendRate | number | Yearly dividend amount per share. |
| dividendYield | number | Dividend yield. |
| tradeTime | date-time string | Time of the quote. |
| sourceUrl | string | Direct source quote page. |
| coverage.availableCount | integer | Matching quotes available when the snapshot was read. |
| coverage.returnedCount | integer | Matching quotes returned in this run. |
| coverage.truncated | boolean | True when the run stopped before all available quotes were returned. |
| coverage.appliedFilters.target | string | Snapshot type used for this run. |
| coverage.appliedFilters.symbols | string\[] | Submitted symbols used for this snapshot. |
| coverage.appliedFilters.assetClass | string | Asset class setting recorded for this snapshot. |
| coverage.appliedFilters.optionType | string | Option type setting recorded for this snapshot. |

**Example stock and ETF quote row**

```json
{
  "recordType": "stockEtfQuote",
  "symbol": "AAPL",
  "assetClass": "stocks",
  "name": "Apple Inc",
  "exchange": "NASDAQ",
  "lastPrice": 319.7,
  "priceChange": 5.12,
  "priceChangePercent": 0.0163,
  "volume": 38649398,
  "tradeTime": "2026-08-28T22:55:00.000Z",
  "sourceUrl": "https://www.barchart.com/stocks/quotes/AAPL/overview",
  "averageVolume": 43058270,
  "marketCap": 4665759360000,
  "peRatio": 36.54,
  "priceToBook": 42.700001,
  "priceToSales": 11.03187,
  "dividendRate": 1.08,
  "dividendYield": 0.0034,
  "coverage": {
    "availableCount": 1,
    "returnedCount": 1,
    "truncated": false,
    "appliedFilters": {
      "target": "stock-etf-quote",
      "symbols": [
        "AAPL"
      ],
      "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 | Date when the contract expires. |
| strikePrice | number | Price at which the option 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 | Snapshot type used for this run. |
| 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. |

**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 | Date when the contract expires. |
| strikePrice | number | Price at which the option 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 | Snapshot type used for this run. |
| coverage.appliedFilters.symbols | string\[] | Submitted symbols used for this snapshot. |
| coverage.appliedFilters.assetClass | string | Asset class setting recorded 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. |

**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 | Date when the contract expires. |
| strikePrice | number | Price at which the option 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 security behind the option. |
| underlyingChange | number | Price change of the security behind the option. |
| underlyingChangePercent | number | Percent change of the security behind the option. |
| 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 | Snapshot type used for this run. |
| coverage.appliedFilters.symbols | string\[] | Submitted symbols used for this snapshot. |
| coverage.appliedFilters.assetClass | string | Asset class setting recorded for this snapshot. |
| coverage.appliedFilters.optionType | string | Call, put, or both setting used for this snapshot. |

#### 💳 Pricing

**How charges work**

Pricing is per snapshot event, not per returned row. Check the pricing panel for the current tier and price.

| Snapshot type | Buyer-facing event | Price |
|---|---|---:|
| Financial news | Financial news | $0.045 |
| Stock and ETF quotes | Stock/ETF quote | $0.0045 to $0.0027 by tier |
| Unusual options activity | Unusual activity | $1.35 |
| Options chain | Options chain | $1.35 |
| Ticker option flow | Option flow | $1.35 |

#### 🔌 Integrations

**Dataset access**

Open the defaultDataset URL after a run, export the structured rows as JSON, CSV, or another supported dataset format, or read them through the Apify API. Use the dataset rows in your review or code workflow.

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

#### ❓ FAQ

##### Can I get stock and ETF quotes from this Actor?

Yes. Choose Stock and ETF quotes, then add one or more symbols. Quote rows include price, change, volume, trade time, source URL, and available valuation or dividend fields.

##### How do I scan unusual options activity?

Choose Unusual options activity and select an asset class. You can also choose calls, puts, or both and set volume, premium, or volume-to-open-interest-ratio filters. Symbols are ignored for this market-wide scan.

##### What happens when I leave Actor Work Limit empty?

The Actor returns all available results until the source is exhausted. A set limit can stop the run earlier, and coverage.truncated shows when it stopped before all available results were returned.

##### What if I need more than one snapshot type?

Choose one target per run. Start another run for a different snapshot type.

##### How can I tell if a snapshot was complete?

Check coverage.availableCount, coverage.returnedCount, coverage.truncated, and coverage.appliedFilters in the dataset rows.

##### What happens if the same story matches more than one symbol?

The Actor saves the first eligible match and ignores later matches. For a financial news row, symbol shows the first submitted symbol that found the story.

##### Why can a field be missing?

Barchart may not supply every optional field for every result. The Actor leaves unavailable source values out instead of making them up.

##### Is the quote data exchange real time?

Quote timing follows Barchart's available public feed, which can be delayed. This Actor does not promise exchange-real-time data.

##### Do I need Barchart credentials or an API key?

No. The Actor does not ask for buyer-supplied Barchart login credentials or API keys. It reads publicly reachable Barchart data.

##### Does this provide historical backfills or trading advice?

No. Each run is a point-in-time snapshot. The Actor returns source data for analysis and does not give investment advice or place trades.

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

No. This Actor focuses on Barchart financial news, stock and ETF quotes, and options snapshots, not a general stock screener.

### 📝 Changelog

**0.1: Stock and ETF quote snapshots**

- Add stock and ETF quote snapshots with price, change, volume, valuation, and dividend details, alongside improved option snapshot filtering.

**v0.0**

- 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 and ETF data with fund research, ratings, fees, assets, and holdings.
- [MarketWatch Scraper](https://apify.com/maximedupre/marketwatch): Collect financial articles and stock quote data for news research.
- [Barchart News Scraper](https://apify.com/mscraper/barchart-news-scraper): Collect Barchart financial news when you need a news-only workflow.
- [Barchart Stock Quotes Scraper](https://apify.com/crawlerbros/barchart-quotes-scraper): Pull stock and ETF quote fields for symbol lists.
- [Options Flow & Unusual Activity](https://apify.com/datara/unusual-options-activity): Scan Barchart unusual activity, options chains, and intraday flow.

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

# Actor input Schema

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

Choose the one kind of Barchart snapshot to return. Start another run for a different result type.

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

For Unusual options activity, choose stocks, ETFs, indices, or all supported asset classes.

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

For Options chain, choose one calendar date. Leave it empty to include all available expirations. Other result types ignore this value.

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

Enter one or more security symbols for Financial news, Stock and ETF quotes, Options chain, or Ticker option flow. Unusual options activity scans the market and ignores this field.

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

For Unusual options activity, Options chain, or Ticker option flow, choose calls, puts, or both. Financial news and Stock and ETF quotes ignore this value.

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

For Unusual options activity or Options chain, return only option records with at least this many contracts traded. Leave it empty for no volume threshold. Other result types ignore this value.

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

For Unusual options activity or Options chain, return only option records with at least this premium. Leave it empty for no premium threshold. Other result types ignore this value.

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

For Unusual options activity or Options chain, return only option records with a volume-to-open-interest ratio at least this value. Leave it empty for no ratio threshold. Other result types ignore this value.

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

Stop after this many records for any result type. 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.

# 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(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 '{
  "target": "financial-news",
  "symbols": [
    "AAPL"
  ],
  "maxItems": 20
}' |
apify call maximedupre/barchart --silent --output-dataset

```

## MCP server setup

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

```

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/aIzhVPPurg7ofyNya/builds/DEyChJU9LKFb1piHM/openapi.json
