# Stock Market Data Scraper - Quotes, P/E, Beta & Signals (`logiover/stock-market-data-scraper`) Actor

Export live stock quotes with market cap, P/E ratio, beta, revenue, six performance windows and technical signals on four timeframes - for 50+ exchanges plus indices, futures and FX. 37 typed fields per row, no API key, straight to CSV, Excel or Google Sheets.

- **URL**: https://apify.com/logiover/stock-market-data-scraper.md
- **Developed by:** [Logiover](https://apify.com/logiover) (community)
- **Categories:** Developer tools
- **Stats:** 1 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.50 / 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.
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?

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

## Stock Market Data Scraper — Quotes, Fundamentals & Technical Signals to CSV

Export **live stock quotes** with **market cap, P/E ratio, beta, revenue**, performance across six timeframes and **technical signals on four timeframes** — for US, UK, German, Japanese, Indian, Brazilian and 50+ other exchanges, plus **indices, commodity futures and FX crosses**. Straight to CSV, Excel, JSON or Google Sheets.

No API key. No subscription. No rate-limit tier to negotiate.

### What you get per instrument

| Field | Example |
|---|---|
| `symbol`, `name` | MU — Micron |
| `last`, `changeOneDay`, `changeOneDayPercent` | 234.51, +5.22, +2.28% |
| `high`, `low` | intraday range |
| `volumeOneDay`, `avgVolume`, `volumeThreeMonths` | 33,293,743 |
| `marketCap` | 1200000000000 |
| `peRatio`, `beta` | 14.05, 2.23 |
| `revenue` | 133.19B |
| `fairValue`, `fairValueUpsidePercent` | model valuation where published |
| `performanceDay` … `performance3Year` | day, week, month, YTD, 1Y, 3Y |
| `changeOneMonthPercent`, `changeOneYearPercent` | +7.3, +446.07 |
| `technicalHour`, `technicalDay`, `technicalWeek`, `technicalMonth` | Strong Buy / Buy / Neutral / Sell |
| `country`, `countryCode`, `exchangeId` | United States, US |
| `isMarketOpen`, `isCFD`, `lastUpdated` | session state |
| `instrumentUrl`, `instrumentId` | stable links and ids |
| `sourceCollection`, `scrapedAt` | provenance on every row |

**37 fields per row, and none of them are padding.** Measured over a 481-instrument sweep: 36 fields came back populated on 90% or more of rows.

Twelve columns the site keeps behind its own subscription return null on every single row — analyst recommendations, profit margin, quick and current ratios, next earnings date. **This Actor does not export them.** A dozen guaranteed-empty columns in your CSV is not a feature.

### How deep does it go

Each market page is a complete quote table, and they are not paginated — so depth comes from sweeping tables, not pages:

| Table | Instruments |
|---|---|
| `/equities/japan` | 225 |
| `/currencies/single-currency-crosses` | 199 |
| `/equities/united-kingdom` | 100 |
| `/equities/brazil` | 77 |
| `/equities/52-week-high` | 76 |
| `/equities/most-active-stocks` | 50 |
| `/indices/major-indices` | 46 |

Measured: **13 tables returned 1,007 instruments in one sweep.** There are 50+ country exchange pages plus screeners, indices, futures and FX — so a run reaching several thousand rows is a matter of listing more tables.

### Use cases

- **Quant screening and backtest universes** — pull a whole exchange with market cap, P/E, beta and six performance windows in one file.
- **Portfolio monitoring** — schedule a daily run over your watchlist tables and diff the output.
- **Cross-market comparison** — the same 37 columns for Tokyo, London, Frankfurt, Mumbai and São Paulo, so country comparisons need no normalisation.
- **Technical screens** — four technical-signal timeframes per instrument lets you filter for agreement across hourly, daily, weekly and monthly.
- **Market dashboards and newsletters** — indices, futures and FX in the same schema as equities.
- **Sheets and Excel models** — numbers arrive typed, not as formatted strings with thousands separators.

### Input

```json
{
  "collections": [
    "/equities/most-active-stocks",
    "/equities/top-stock-gainers",
    "/equities/japan",
    "/indices/major-indices",
    "/commodities/real-time-futures"
  ],
  "maxResults": 5000,
  "minMarketCap": 0
}
```

- **`collections`** — market listing paths. Browse the site, copy the URL of any quote table and paste it; the path is taken from it automatically.
- **`maxResults`** — hard stop across all tables.
- **`minMarketCap`** — keep only instruments at or above a capitalisation. Leave at 0 to include indices and futures, which carry none.

### Output

```json
{
  "symbol": "MU",
  "name": "Micron",
  "last": 234.51,
  "changeOneDayPercent": 2.28,
  "marketCap": 1200000000000,
  "peRatio": 14.05,
  "beta": 2.23,
  "revenue": "133.19B",
  "performanceYear": 446.07,
  "performance3Year": 312.4,
  "technicalDay": "Strong Buy",
  "technicalWeek": "Buy",
  "country": "United States",
  "countryCode": "US",
  "instrumentUrl": "https://www.investing.com/equities/micron-tech",
  "sourceCollection": "/equities/most-active-stocks",
  "scrapedAt": "2026-10-07T12:00:00.000Z"
}
```

### No API key needed

Quote tables are rendered into the page payload, so this Actor reads them as typed JSON rather than parsing formatted table cells. That is why `marketCap` arrives as `1200000000000` instead of `"1.2T"`, and why `peRatio` and `beta` are numbers you can sort on immediately.

### Exporting

Results land in a dataset you can download as **CSV, Excel (XLSX), JSON, JSONL, XML or RSS**, read through the Apify API, or push into **Google Sheets**, Airtable, BigQuery, Make or Zapier. Schedule it daily and append to a time series.

### Proxy and reliability

This site refuses datacenter addresses, and a plain residential exit answered only one request in three. The **UNBLOCKER** group answered every request in testing and is the default — do not switch it to datacenter expecting it to work.

When an exit address is refused it is replaced within 250 ms rather than waited out; a rate-limit response is the opposite case and backs off instead. An unreachable table is skipped, not treated as the end of the run. Every run prints a summary naming the outcome — `COMPLETED`, `NO_MATCHES` or `FETCH_FAILED` — and how many rows each table produced, so a short result is never a mystery.

### Keywords

stock market data scraper, investing.com scraper, stock quotes csv export, market cap scraper, pe ratio data, beta stock data, stock screener export, equities data scraper, technical analysis signals data, stock performance data, index data scraper, commodity futures data, forex rates scraper, currency crosses data, japan stocks data, uk equities export, german stocks dax data, india nse bse data, brazil bovespa data, financial data api alternative, free stock market api, quant screening dataset, backtest universe data, portfolio monitoring data, stock fundamentals csv, exchange listing export, market dashboard data feed

### Legal

This Actor reads only publicly visible market pages — no login, no paywalled content, no personal data. Quotes and fundamentals are facts about publicly traded instruments. Market data may be delayed; it is not investment advice and is not suitable as an execution feed. Check the source site's terms and your own regulatory obligations before redistributing market data commercially.

Not affiliated with, endorsed by, or connected to Investing.com or Fusion Media. All trademarks belong to their owners and are referenced only to describe which public pages this tool reads.

### Related Actors

- CoinGecko Scraper — crypto market data in a comparable schema
- Gate.io Market Scraper — exchange pairs and tickers
- SEC EDGAR Form D Scraper — private placement filings
- GMGN Trending Memecoin Scanner — on-chain token discovery

# Changelog

This Actor's version history is a separate document: https://apify.com/logiover/stock-market-data-scraper/changelog.md

# Actor input Schema

## `collections` (type: `array`):

Market listing paths. Each one is a complete quote table of 30-225 instruments. Country pages: /equities/germany, /equities/japan, /equities/india. Screeners: /equities/top-stock-gainers, /equities/52-week-high. Also /indices/major-indices, /commodities/real-time-futures, /currencies/single-currency-crosses. Paste a full URL and the path is taken from it.

## `maxResults` (type: `integer`):

Stop after this many rows across all tables.

## `minMarketCap` (type: `integer`):

Keep only instruments at or above this market capitalisation. Leave at 0 for everything, including indices and futures which carry none.

## `proxyConfiguration` (type: `object`):

This site refuses datacenter addresses and answered only one request in three from a plain residential exit. The UNBLOCKER group answered every request and is the default.

## Actor input object example

```json
{
  "collections": [
    "/equities/most-active-stocks"
  ],
  "maxResults": 50,
  "minMarketCap": 0,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "UNBLOCKER"
    ]
  }
}
```

# 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 = {
    "collections": [
        "/equities/most-active-stocks"
    ],
    "maxResults": 50,
    "minMarketCap": 0,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "UNBLOCKER"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("logiover/stock-market-data-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 = {
    "collections": ["/equities/most-active-stocks"],
    "maxResults": 50,
    "minMarketCap": 0,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["UNBLOCKER"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("logiover/stock-market-data-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 '{
  "collections": [
    "/equities/most-active-stocks"
  ],
  "maxResults": 50,
  "minMarketCap": 0,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "UNBLOCKER"
    ]
  }
}' |
apify call logiover/stock-market-data-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,logiover/stock-market-data-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/WWgTAzTqV35lcY66G/builds/TsAf1mF3wZwG6ucgm/openapi.json
