Financial Press Release Scraper (All In One)
Pricing
from $2.10 / 1,000 results
Financial Press Release Scraper (All In One)
Scrapes corporate press releases from PR Newswire, GlobeNewswire and Business Wire into one unified schema. Query by stock ticker, keyword or URL. Detected tickers, ISO 8601 UTC timestamps, and release bodies as clean Markdown — AI-ready for sentiment analysis.
Pricing
from $2.10 / 1,000 results
Rating
0.0
(0)
Developer
Ibnu Adzim
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Financial Press Release Scraper
Scrapes corporate press releases from the three major financial newswires — PR Newswire, GlobeNewswire and Business Wire — and returns them in one unified schema.
Query by stock ticker, keyword, or a specific wire URL. The Actor works out which wire each input belongs to and routes it automatically, so a single run covers all three.
Public data only. No login, no cookies, no browser.
What makes this one honest
The three wires are not equally open, and this Actor does not pretend
otherwise. Every query writes a QUERY_SUMMARY row naming the mode it actually
used and how many releases it inspected versus matched.
| PR Newswire | GlobeNewswire | Business Wire | |
|---|---|---|---|
| Search | ✅ server-side, deep archive | ✅ server-side, 20 results max | ⚠️ filters a recent-news feed |
| Full body | ✅ | ✅ | ❌ headline + first paragraph only |
| Deep pagination | ✅ up to 100/page | via category pages | ❌ fixed window |
Business Wire denies its own article pages to every automated client. Its
/news/home/… URLs return a cached 403 at the CDN edge — verified across both
schemes, a warmed session, a Referer, and four TLS fingerprints. That is a
configuration rule, not a bot score, so no amount of stealth changes it. What
is reachable is the MRSS feed Business Wire itself declares in its
robots.txt, which carries the headline, link, timestamp and opening
paragraph. Those rows are flagged contentComplete: false.
What you get
Three record types share one dataset, told apart by recordType.
PRESS_RELEASE — one row per release
Identical fields regardless of which wire it came from:
{"articleId": "3134590","source": "GlobeNewswire","title": "CBAK Energy Expands Model 32140 Capacity…","url": "https://www.globenewswire.com/news-release/2026/08/20/…","publishedDate": "2026-08-20T13:20:08Z", // ISO 8601, always UTC"updatedDate": "2026-08-20T13:20:08Z","companyTickers": ["CBAT"],"tickerDetails": [{ "exchange": "NASDAQ", "symbol": "CBAT", "raw": "NASDAQ: CBAT" }],"issuer": "CBAK Energy Technology Limited","categories": ["Product / Services Announcement", "…"],"language": "en","summary": "…","contentMarkdown": "NEWTON, Mass., Aug. 20, 2026 (GLOBE NEWSWIRE) -- …","contentText": "…","contentHtml": "…","contentComplete": true,"wordCount": 1842,"raw": { /* upstream's JSON-LD / feed item, verbatim */ }}
QUERY_SUMMARY — one row per query
Which wire, which search mode, candidatesScanned vs returnedCount, request
count, and the content ceiling for that wire.
ERROR — one row per failed input
Every input produces at least one row, so an unroutable URL or a denied path is visible in the dataset rather than silently missing.
Ticker matching — read this before querying a mega-cap
Both PR Newswire and GlobeNewswire search text, not a symbol index. So a
query for AAPL finds releases containing that string.
This Actor then re-verifies every result against an exchange-qualified
ticker in the release body (NASDAQ: AAPL, NasdaqGS: AAPL, $AAPL) and
drops the rest — so companyTickers is never empty on a row the ticker filter
admitted.
The consequence is worth knowing up front: for a mega-cap like AAPL, most matches are securities-litigation notices, because law firms print the ticker while Apple's own investor relations does not distribute through these wires. Ticker search works best for small- and mid-cap issuers, who do announce through the wires and print their symbol in the dateline.
candidatesScanned vs returnedCount on the summary row shows exactly how
much was filtered.
Markdown cleansing
contentMarkdown is the release body with publisher chrome removed before
conversion — share bars, multimedia widgets, related-links rails, tracking
pixels and scripts are stripped from the DOM, then trailing boilerplate
(SOURCE …, View original content…,
View source version on businesswire.com…##) so
they survive chunking for embedding.
Input
| Field | Type | Default | Notes |
|---|---|---|---|
tickers | array | — | AAPL, NASDAQ:NVDA. Verified against the body. |
keywords | array | — | Free text. |
startUrls | array | — | A release, or a news list / category page. |
sources | array | all three | Which wires to query. |
includeContent | boolean | true | Fetch bodies and build Markdown. |
maxItems | integer | 0 | Caps output rows per query. |
maxPages | integer | 2 | Listing depth per query. |
scanCap | integer | 60 | Caps candidates inspected for ticker queries. |
globenewswireCategories | array | all six | Narrow the GlobeNewswire archive walk. |
pageSize | integer | 100 | PR Newswire only (its real ceiling). |
maxConcurrency | integer | 5 | Total requests in flight. |
minRequestInterval | integer | 0 | Seconds between request starts. |
proxyConfiguration | object | Residential | Not a bot-wall bypass — see below. |
maxItems and scanCap are deliberately separate. A ticker query has to fetch
releases before it can tell whether they name the ticker, so capping the
fetch at maxItems would starve the filter and report a confident zero.
Known limits
- Business Wire: no full bodies. Headline + lede only, . Its article pages are closed to automated clients.contentComplete: false
- GlobeNewswire keyword search caps at 20 results and does not paginate
(
?page=2silently re-serves page 1). For depth, pass a category URL instartUrls— those pages do paginate genuinely. - GlobeNewswire
/searchis not used at all — itsrobots.txtdisallows it. Ticker and keyword queries go through the allowed/RssFeed/instead; a/searchURL is refused up front with an explanation. - PR Newswire is the only wire whose search reaches the deep archive.
- Multi-language releases are deduplicated on the release id, preferring the English rendition.
Notes on politeness and proxies
PR Newswire and GlobeNewswire answered every TLS fingerprint tested from a plain residential connection — there is no bot wall to defeat on either. The residential proxy default exists because a cloud run shares datacenter egress with every other Actor, and large publisher CDNs rate-limit by IP long before they fingerprint.
minRequestInterval, not maxConcurrency, is the honest speed control.
Related
For GlobeNewswire alone at greater depth, this portfolio also ships ../globenewswire-press-releases-scraper. This Actor's distinct value is the cross-wire unified schema and ticker-centric querying; the single-wire Actor goes deeper on one source.
See CRAWLING_METHOD.md for the full recon trail, every endpoint, and each trap found while building this.