Financial Press Release Scraper (All In One) avatar

Financial Press Release Scraper (All In One)

Pricing

from $2.10 / 1,000 results

Go to Apify Store
Financial Press Release Scraper (All In One)

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

Ibnu Adzim

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

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 NewswireGlobeNewswireBusiness Wire
Search✅ server-side, deep archive✅ server-side, 20 results max⚠️ filters a recent-news feed
Full bodyheadline + first paragraph only
Deep pagination✅ up to 100/pagevia 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…
) is dropped from the Markdown. Headings are ATX (##) so they survive chunking for embedding.

Input

FieldTypeDefaultNotes
tickersarrayAAPL, NASDAQ:NVDA. Verified against the body.
keywordsarrayFree text.
startUrlsarrayA release, or a news list / category page.
sourcesarrayall threeWhich wires to query.
includeContentbooleantrueFetch bodies and build Markdown.
maxItemsinteger0Caps output rows per query.
maxPagesinteger2Listing depth per query.
scanCapinteger60Caps candidates inspected for ticker queries.
globenewswireCategoriesarrayall sixNarrow the GlobeNewswire archive walk.
pageSizeinteger100PR Newswire only (its real ceiling).
maxConcurrencyinteger5Total requests in flight.
minRequestIntervalinteger0Seconds between request starts.
proxyConfigurationobjectResidentialNot 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,
    contentComplete: false
    . Its article pages are closed to automated clients.
  • GlobeNewswire keyword search caps at 20 results and does not paginate (?page=2 silently re-serves page 1). For depth, pass a category URL in startUrls — those pages do paginate genuinely.
  • GlobeNewswire /search is not used at all — its robots.txt disallows it. Ticker and keyword queries go through the allowed /RssFeed/ instead; a /search URL 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.

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.