# Finance News Scraper — Tickers, Sources & Market News (`junipr/finance-news-scraper`) Actor

Scrape financial news by ticker, company, keyword, sector, and source with article metadata, ticker detection, and source rollups.

- **URL**: https://apify.com/junipr/finance-news-scraper.md
- **Developed by:** [junipr](https://apify.com/junipr) (community)
- **Categories:** News, Developer tools
- **Features:** Limited permissions
- **Stats:** 24 total users, 4 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$5.20 / 1,000 article scrapeds

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/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

## Finance News Scraper — Tickers, Sources & Market News

Scrape financial news discovered through Google News, MarketWatch, Seeking Alpha, CNBC, and Business Insider RSS feeds. Filter by stock ticker, company name, sector, or keyword, with optional article-body extraction.

The actor combines RSS discovery with page extraction, ticker detection, source metadata, and a run-level KVS summary. No separate news API key is required.

### How to Use

**Latest financial news (default):**

```json
{
  "keywords": ["stock market"]
}
```

**Ticker-specific news:**

```json
{
  "tickers": ["AAPL", "TSLA"],
  "dateRange": "7d"
}
```

**Sector research:**

```json
{
  "sectors": ["healthcare"],
  "dateRange": "30d",
  "maxArticlesTotal": 200
}
```

**Daily portfolio monitor (schedule daily):**

```json
{
  "tickers": ["AAPL", "MSFT", "GOOGL", "AMZN"],
  "dateRange": "1d",
  "sources": ["google_news", "cnbc"]
}
```

### Input Configuration

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `tickers` | string\[] | `[]` | Stock ticker symbols (e.g. `["AAPL", "TSLA"]`) |
| `companies` | string\[] | `[]` | Company names to search for |
| `keywords` | string\[] | `["stock market"]` | General keywords |
| `sectors` | string\[] | `[]` | Market sectors: technology, healthcare, finance, energy... |
| `sources` | string\[] | `["google_news"]` | `google_news`, `marketwatch`, `seekingalpha`, `cnbc`, `businessinsider` |
| `maxArticlesPerSource` | integer | `1` | Articles per source (max 200) |
| `maxArticlesTotal` | integer | `1` | Total cap (max 1000) |
| `dateRange` | string | `"7d"` | `1d`, `3d`, `7d`, `14d`, `30d` |
| `includeFullText` | boolean | `false` | Fetch and include article body text |
| `extractTickers` | boolean | `true` | Auto-detect stock tickers in articles |
| `deduplicateArticles` | boolean | `true` | Remove cross-source duplicates |

### Output Format

```json
{
  "title": "Apple Reports Record Q4 Revenue",
  "url": "https://www.cnbc.com/2026/03/11/markets-news.html",
  "source": "cnbc",
  "sourceDomain": "cnbc.com",
  "author": "John Smith",
  "publishedAt": "2026-03-11T09:30:00.000Z",
  "category": "Earnings",
  "sector": "technology",
  "articleText": "Apple Inc. reported record fourth quarter revenue...",
  "articleSnippet": "Apple Inc. reported record fourth quarter revenue of $124.3 billion...",
  "wordCount": 854,
  "tickers": ["AAPL", "MSFT"],
  "isOpinion": false,
  "isPremium": false,
  "scrapedAt": "2026-03-11T12:00:00.000Z"
}
```

### Tips and Advanced Usage

**Combine with Sentiment Analyzer** for market signal detection:

1. Run Finance News Scraper with `tickers: ["AAPL"]`
2. Pipe `articleText` fields into Sentiment Analyzer
3. Get sentiment scores for every article mentioning AAPL

**Daily scheduled monitoring:** Set up an Apify scheduled run with `dateRange: "1d"` to get fresh articles every morning.

**Bloomberg articles:** Set `proxyConfiguration` to residential proxy for better Bloomberg coverage.

**Not financial advice:** Article data is for research purposes only. Verify information against primary sources before making financial decisions.

### Pricing

**Pay-Per-Event:** $0.0052 per `article-scraped` event ($5.20 per 1,000 articles)

Pricing includes all platform compute costs — no hidden fees.

| Scenario | Articles | Cost |
|----------|----------|------|
| Daily portfolio check (20 articles) | 20 | $0.10 |
| Weekly market roundup (100) | 100 | $0.52 |
| Daily monitoring × 30 days | 3,000 | $15.60 |
| AI training dataset (10,000) | 10,000 | $52.00 |

### Integration Examples

**Export to Google Sheets for daily reporting:**
Use the Apify Google Sheets integration to automatically append new articles to a spreadsheet each day. Combine with scheduled runs for a hands-free morning briefing.

**Feed into LLM-based analysis:**
Pipe `articleText` into OpenAI, Claude, or any LLM to generate summaries, extract key financial metrics, or classify articles by impact level. The structured output format makes it easy to batch-process articles programmatically.

**Multi-ticker alerting:**
Run with a list of portfolio tickers and use Apify webhooks to trigger Slack/email notifications when new articles match your holdings. Combined with sentiment analysis, you can filter for high-impact negative coverage only.

### Related Actors

- [News Sentiment Analyzer](https://apify.com/junipr/news-sentiment-analyzer) — NLP-powered sentiment scoring for financial articles
- [Google News Scraper](https://apify.com/junipr/google-news-scraper) — Broader news monitoring across all topics
- [Earnings Call Scraper](https://apify.com/junipr/earnings-call-scraper) — SEC EDGAR transcripts and financial filings

### FAQ

#### Which financial news sources are supported?

Google News search feeds, MarketWatch, Seeking Alpha, CNBC, and Business Insider. Availability depends on each publisher's current public RSS and article pages.

#### Can I get historical articles from months ago?

The actor fetches current articles from RSS feeds. Use `dateFrom` / `dateTo` parameters for custom date ranges within the RSS feed's history (typically 30-90 days).

#### How does ticker detection work?

Tickers are detected by `$TICKER` prefix and by context (adjacent to stock-related words like "shares", "stock", "Inc"). Common words are filtered to reduce false positives.

#### Does it handle paywalled articles?

Yes — paywalled articles are flagged with `isPremium: true` and `articleText: null`. Metadata (title, author, date) is still extracted.

#### Can I filter out opinion pieces?

Yes — all articles have `isOpinion: boolean`. Filter your results by `isOpinion: false` for hard news only.

# Actor input Schema

## `tickers` (type: `array`):

Stock ticker symbols to filter by (e.g. \["AAPL", "TSLA"]). Articles mentioning any of these tickers are included.

## `companies` (type: `array`):

Company names to search for. Used alongside or instead of tickers.

## `keywords` (type: `array`):

General keywords to search for. Combined with ticker/company filters via OR logic.

## `sectors` (type: `array`):

Filter by market sector: technology, healthcare, finance, energy, consumer, industrials, real_estate, materials, utilities, communications.

## `sources` (type: `array`):

Financial news sources to scrape: google_news, marketwatch, seekingalpha, cnbc, businessinsider.

## `maxArticlesPerSource` (type: `integer`):

Maximum articles to scrape per source. Min: 1, Max: 200.

## `maxArticlesTotal` (type: `integer`):

Total article cap across all sources. Min: 1, Max: 1000.

## `dateRange` (type: `string`):

Time range for articles: 1d, 3d, 7d, 14d, 30d.

## `dateFrom` (type: `string`):

Override dateRange — only include articles from this date (ISO 8601).

## `dateTo` (type: `string`):

Override dateRange — only include articles up to this date (ISO 8601).

## `includeFullText` (type: `boolean`):

Include full article body text. Set to false for headlines-only mode.

## `extractTickers` (type: `boolean`):

Auto-detect mentioned stock tickers in article text.

## `extractEntities` (type: `boolean`):

Extract named entities (people, companies, products) from articles.

## `deduplicateArticles` (type: `boolean`):

Remove duplicate articles that appear across multiple sources.

## `minArticleLength` (type: `integer`):

Minimum article body length in characters. Filters wire stubs.

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

Proxy settings. Datacenter proxy works for most sources.

## Actor input object example

```json
{
  "keywords": [
    "stock market"
  ],
  "sources": [
    "google_news"
  ],
  "maxArticlesPerSource": 1,
  "maxArticlesTotal": 1,
  "dateRange": "7d",
  "includeFullText": false,
  "extractTickers": true,
  "extractEntities": false,
  "deduplicateArticles": true,
  "minArticleLength": 200,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `results` (type: `string`):

Individual news article records scraped from financial news sources.

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("junipr/finance-news-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 = {}

# Run the Actor and wait for it to finish
run = client.actor("junipr/finance-news-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 '{}' |
apify call junipr/finance-news-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,junipr/finance-news-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/gsKAMRdh6tfTVHkp7/builds/GZrmySeCrJv3oZQaK/openapi.json
