# Barchart Stock Quotes Scraper (`crawlerbros/barchart-quotes-scraper`) Actor

Fetch real-time-delayed stock/ETF quotes from Barchart.com by ticker symbol - last price, change, percent change, volume, market cap, P/E ratio, EPS, dividend yield, and more. No login required.

- **URL**: https://apify.com/crawlerbros/barchart-quotes-scraper.md
- **Developed by:** [Crawler Bros](https://apify.com/crawlerbros) (community)
- **Categories:** Developer tools, Automation, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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 Stock Quotes Scraper

Fetch real-time-delayed stock and ETF quotes from [Barchart.com](https://www.barchart.com) by ticker symbol. Returns last price, price change, percent change, volume, market cap, P/E ratio, EPS, and dividend data for any number of symbols in a single run. No login, no API key, no proxy required.

### What this actor does

- **Batch quote lookup** — pass any list of ticker symbols and get one record per symbol
- **Invalid-symbol handling** — unresolvable tickers are returned as typed error records instead of being silently dropped
- **Session-based, not login-based** — bootstraps a public CSRF session cookie the same way a browser does; never touches an account or paywall
- **Empty fields are omitted**

### Output per quote

- `symbol`, `symbolName`, `exchange`
- `lastPrice`, `priceChange`, `percentChange`
- `volume`, `averageVolume20d`
- `marketCap`, `peRatio`, `eps`
- `dividendYieldPercent`, `dividendRate`
- `tradeTime` — exchange-local time of the last trade
- `quoteUrl` — direct Barchart quote page URL
- `recordType: "quote"`, `scrapedAt`

Unresolvable symbols instead produce:

- `symbol`, `error: "invalidSymbol"`, `errorMessage`, `quoteUrl`, `recordType: "invalidSymbol"`

### Input

| Field | Type | Default | Description |
|---|---|---|---|
| `symbols` | array | – (required) | Ticker symbols to fetch quotes for; suggested value `["AAPL","MSFT","TSLA"]` |
| `maxItems` | integer | `100` | Hard cap on emitted records (1–500) |

#### Example: tech mega-caps

```json
{
  "symbols": ["AAPL", "MSFT", "GOOGL", "AMZN", "NVDA"],
  "maxItems": 100
}
```

#### Example: ETFs

```json
{
  "symbols": ["SPY", "QQQ", "VOO", "VTI"]
}
```

### Use cases

- **Portfolio monitoring** — pull live price/change for a watchlist of stocks and ETFs on a schedule
- **Trading dashboards** — feed volume, P/E, and dividend data into an internal dashboard
- **Screening & research** — batch-fetch fundamentals for a basket of tickers before deeper analysis
- **Market alerts** — combine with a scheduler to trigger alerts on price/volume thresholds
- **Data enrichment** — attach current quote data to an existing list of company tickers

### Data source

Data comes from Barchart.com's public quote API, the same endpoint the site's own front-end quote widgets use. No Barchart account, subscription, or API key is required — quotes are fetched via a standard, publicly-accessible browser session.

### FAQs

**Do I need a Barchart account?** No. This actor fetches publicly available real-time-delayed quote data with no login.

**What happens if I give an invalid ticker?** It's returned as a separate record with `error: "invalidSymbol"` so you can see exactly which symbols failed, instead of the run silently returning fewer results than requested.

**How current is the price data?** Barchart's public quote feed is real-time-delayed (typically by exchange-mandated delay windows, commonly 15–20 minutes for US equities).

# Actor input Schema

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

Stock/ETF ticker symbols to fetch quotes for, e.g. `AAPL`, `MSFT`, `SPY`.

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

Hard cap on emitted records (also capped by the number of symbols provided).

## Actor input object example

```json
{
  "symbols": [
    "AAPL",
    "MSFT",
    "TSLA"
  ],
  "maxItems": 100
}
```

# Actor output Schema

## `quotes` (type: `string`):

Dataset containing all scraped Barchart quotes.

# 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 = {
    "symbols": [
        "AAPL",
        "MSFT",
        "TSLA"
    ],
    "maxItems": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("crawlerbros/barchart-quotes-scraper").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 = {
    "symbols": [
        "AAPL",
        "MSFT",
        "TSLA",
    ],
    "maxItems": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("crawlerbros/barchart-quotes-scraper").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 '{
  "symbols": [
    "AAPL",
    "MSFT",
    "TSLA"
  ],
  "maxItems": 100
}' |
apify call crawlerbros/barchart-quotes-scraper --silent --output-dataset

```

## MCP server setup

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

```

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/VlT8VMYQoHbiXaL5a/builds/d932vxXVZuK8abudo/openapi.json
