# Investing.com Quotes Scraper (`crawlerbros/investing-quotes-scraper`) Actor

Scrape real-time quote data from Investing.com - stocks, indices, currency pairs, commodities, crypto, and ETFs. Get price, change, day range, 52-week range, volume, market cap, P/E, EPS, dividend yield, and technical summary. Fetch by exact URL path or search by name.

- **URL**: https://apify.com/crawlerbros/investing-quotes-scraper.md
- **Developed by:** [Crawler Bros](https://apify.com/crawlerbros) (community)
- **Categories:** Developer tools, Lead generation, Other
- **Stats:** 3 total users, 2 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

## Investing.com Quotes Scraper

Scrape live quote data from [Investing.com](https://www.investing.com) — stocks, indices, currency pairs, commodities, cryptocurrencies, ETFs, and government bond yields. Get price, day change, day range, 52-week range, volume, market cap, P/E ratio, EPS, dividend yield, and a daily technical summary rating, straight from the public quote pages. No login, no API key, no cookies required.

### What this actor does

- **Two modes:**
  - `byPath` — fetch a single instrument by its exact Investing.com URL/path (e.g. `/equities/apple-computer-inc`, `/crypto/bitcoin`, `/currencies/eur-usd`, `/rates-bonds/u.s.-10-year-bond-yield`)
  - `search` — search by name/keyword within an asset type (stocks, indices, forex, commodities, crypto, ETFs, bonds) using Investing.com's public sitemap index, then pull full quote data for every match
- **7 asset types:** equities, indices, currencies (forex), commodities, crypto, ETFs, bonds (government bond yields)
- **Bot-detection resilient** — uses browser TLS fingerprint impersonation to reliably load pages Cloudflare would otherwise block; falls back to Apify's free AUTO datacenter proxy automatically if needed

### Output fields

- `name`, `symbol`, `assetType`
- `exchange`, `country`, `currency`
- `last`, `change`, `changePercent`
- `open`, `high`, `low`, `previousClose`
- `fiftyTwoWeekHigh`, `fiftyTwoWeekLow`, `oneYearChangePercent`
- `volume`, `averageVolume`
- `marketCap`, `peRatio`, `eps`, `dividend`, `dividendYieldPercent`, `sharesOutstanding` (equities/ETFs only — omitted for crypto, currencies, and bonds, where Investing.com either doesn't publish these fields or, for a small number of crypto instruments, publishes an internally-inconsistent value not meaningful for that asset type)
- `technicalSummaryDaily` — Investing.com's own daily technical rating (e.g. `strong_buy`, `neutral`, `strong_sell`)
- `isMarketOpen`
- `url`, `scrapedAt`

Fields are only included when Investing.com actually publishes a value for that instrument type — e.g. forex pairs won't have `marketCap`.

### Input

| Field | Type | Description |
|---|---|---|
| `mode` | select | `byPath` or `search` |
| `path` | string | Exact URL or path — required for `byPath` |
| `query` | string | Search keyword — required for `search` |
| `assetType` | select | `equities`, `indices`, `currencies`, `commodities`, `crypto`, `etfs`, `bonds` |
| `maxItems` | integer | Max records for `search` mode (1-200, default 20) |
| `useProxy` | boolean | Force-enable Apify's free AUTO datacenter proxy |

### Use cases

- Track live price/change for a watchlist of stocks or crypto assets
- Pull daily technical-summary sentiment for a basket of forex pairs
- Build a lightweight market dashboard without a paid financial data API
- Screen commodities or ETFs by name for quick fundamentals lookup

### Data source

All data is scraped from the public HTML of investing.com quote pages (Next.js server-rendered payload) plus the site's public XML sitemaps for search. No authenticated API, no paid data feed.

### Limitations

Investing.com fronts every page with Cloudflare bot management. The actor uses Chrome TLS/JA3 impersonation first (usually enough on its own) and falls back to Apify's free AUTO datacenter proxy group, rotating sessions up to 5 times, if it detects a block **or** a Cloudflare "soft block" (an HTTP 200 challenge/interstitial page instead of real quote data — the actor validates that the fetched page actually contains the expected data before accepting it, not just the HTTP status). During periods of unusually heavy request volume from Apify's shared datacenter IP ranges, Cloudflare can still block every available proxy session for a given run; the actor fails soft in that case (0 records + a clear `set_status_message` explaining why) rather than ever returning fabricated or blocked-page data. Retrying the run after a few minutes typically succeeds.

# Actor input Schema

## `mode` (type: `string`):

How to look up quotes.

## `path` (type: `string`):

Full investing.com URL or path, e.g. https://www.investing.com/equities/apple-computer-inc or /crypto/bitcoin. Required for mode=byPath.

## `query` (type: `string`):

Name or keyword to search for within the selected assetType, e.g. 'apple', 'bitcoin', 'eur usd'. Required for mode=search.

## `assetType` (type: `string`):

Instrument category. Used to resolve the correct data store when parsing, and as the search scope for mode=search.

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

Maximum number of quote records to return (search mode only; byPath always returns at most 1).

## `useProxy` (type: `boolean`):

Route requests through Apify's free AUTO datacenter proxy group. Leave off unless you see repeated 403 errors; the actor auto-enables this on the fly if it detects blocking.

## Actor input object example

```json
{
  "mode": "byPath",
  "path": "/equities/apple-computer-inc",
  "query": "apple",
  "assetType": "equities",
  "maxItems": 20,
  "useProxy": false
}
```

# Actor output Schema

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

Dataset containing all scraped quote records.

# 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 = {
    "mode": "byPath",
    "path": "/equities/apple-computer-inc",
    "query": "apple",
    "assetType": "equities",
    "maxItems": 20,
    "useProxy": false
};

// Run the Actor and wait for it to finish
const run = await client.actor("crawlerbros/investing-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 = {
    "mode": "byPath",
    "path": "/equities/apple-computer-inc",
    "query": "apple",
    "assetType": "equities",
    "maxItems": 20,
    "useProxy": False,
}

# Run the Actor and wait for it to finish
run = client.actor("crawlerbros/investing-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 '{
  "mode": "byPath",
  "path": "/equities/apple-computer-inc",
  "query": "apple",
  "assetType": "equities",
  "maxItems": 20,
  "useProxy": false
}' |
apify call crawlerbros/investing-quotes-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,crawlerbros/investing-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/MNC9N9ijlU20vGiX9/builds/caAWWtZoZ7S0PmdLV/openapi.json
