PR Newswire Scraper — Press Releases by Company, Topic & Date
NexGenData · @nexgendata
PR Newswire Scraper is a NexGenData tool that returns press releases with headline, date, category and stock tickers from PR Newswire.
About
PR Newswire Press Releases Scraper
PR Newswire Scraper is a NexGenData tool that returns press releases with headline, date, category and stock tickers from PR Newswire.
Monitor PR Newswire press releases for media and PR intelligence. Built for PR, comms, media-monitoring teams and AI agents.
Factual public data — not financial or investment advice.
📊 Sample Output
url | title | time_label | summary | image_url | source |
|---|---|---|---|---|---|
| https://www.prnewswire.com/news-releases/bybit-devoile--make-your-mov… | Bybit dévoile « Make Your Move », la nouvelle campagne mondiale de la… | 19:51 ET | Bybit, la nouvelle plateforme financière à laquelle font confiance pl… | https://mmx.prnewswire.com/media/MS1995732/20260924035812EDT_image_1.… | prnewswire.com |
| https://www.prnewswire.com/news-releases/hexclad-raises-the-bar-with-… | /C O R R E C T I O N -- HexClad/ | 19:50 ET | HexClad, the revolutionary kitchen brand that pioneered the hybrid co… | https://mmx.prnewswire.com/media/MS1989204/Unknown-9.jpg?id=OA2951040 | prnewswire.com |
| https://www.prnewswire.com/news-releases/metaoptics-ltd-establishes-a… | MetaOptics Ltd establishes American Depositary Receipt ("ADR") Progra… | 19:46 ET | MetaOptics Ltd (Catalist: 9MT) ("MetaOptics" or the "Company", and to… | prnewswire.com | |
| https://www.prnewswire.com/news-releases/huawei-devoile-six-projets-e… | Huawei dévoile six projets énergétiques mondiaux, ouvrant la voie à u… | 19:41 ET | Dans le cadre du salon HUAWEI CONNECT 2026, Huawei a organisé le Somm… | https://mmx.prnewswire.com/media/MS1995593/20260923232456EDT_image_1.… | prnewswire.com |
| https://www.prnewswire.com/news-releases/sabre-corporation-announces-… | Sabre Corporation Announces Results of Previously Announced Cash Tend… | 19:34 ET | Sabre Corporation ("Sabre") (Nasdaq: SABR) today announced the result… | https://mmx.prnewswire.com/media/MS77207/SABRE-LOGO-V1.jpg?id=OA29708… | prnewswire.com |
Real rows from a real run (2026-09-24), unedited apart from masked emails/phones and shortened long text; fields the source does not publish are empty.
🔧 Input reference
| Field | Type | Default | What it does |
|---|---|---|---|
keyword | string | "" | Search keyword. Empty = no keyword filter (returns latest releases). Example: 'earnings', 'IPO', 'Microsoft', 'partnership'. |
dateFrom | string | "" | Earliest publication date (UTC, inclusive). Requires includeFullBody=true to be effective (date filter uses detail-page JSON-LD). |
dateTo | string | "" | Latest publication date (UTC, inclusive). Requires includeFullBody=true to be effective. |
includeFullBody | boolean | false | If true, follow each release URL to fetch the full body text + JSON-LD metadata (datePublished, dateModified, description, tickers extracted via regex). Adds ~0.4s per release. If… |
maxReleases | integer | 5 | Max releases to return (1–2000). Each release is one dataset row. ~25 releases per list page; pagination is automatic. |
proxyConfiguration | object | {"useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"]} | Proxy used for retries. The actor fetches each page directly first and, if PR Newswire blocks or times out, retries it on a fresh session from this proxy. Keep RESIDENTIAL: PR Newswire sometimes walls datacenter IPs on paginated requests. Leaving it off means no fallback route. |
🧾 JSON sample record
One real record from a real run (emails/phones masked, long text shortened):
{
"url": "https://www.prnewswire.com/news-releases/bybit-devoile--make-your-move--la-nouvelle-campagne-mondiale-de-la-marque-pour-sa-nouvelle-plateforme-financiere-302889877.html",
"title": "Bybit dévoile « Make Your Move », la nouvelle campagne mondiale de la marque pour sa nouvelle plateforme financière",
"time_label": "19:51 ET",
"summary": "Bybit, la nouvelle plateforme financière à laquelle font confiance plus de 80 millions d'utilisateurs à travers le monde, a annoncé aujourd'hui le...",
"image_url": "https://mmx.prnewswire.com/media/MS1995732/20260924035812EDT_image_1.jpg?id=OA2969347",
"date_published": null,
"date_modified": null,
"description": null,
"body_text": null,
"tickers": [],
"category": null,
"country": null,
"source": "prnewswire.com",
"truncated": false,
"truncation_reason": null,
"pages_fetched": 1
}
⏰ Run this as a daily press-release feed (recommended)
Point it at your keywords, schedule it, and new releases land in your dataset every day. The inputs are keyword and maxReleases (plus optional dateFrom / dateTo and includeFullBody):
{
"keyword": "Microsoft",
"maxReleases": 50,
"includeFullBody": true
}
Daily cron (0 8 * * *) turns this into an always-on newsroom feed — ready for an agent to summarize.
How the keyword works. PR Newswire's own search is used first (it matches the release body too), so a keyword like Microsoft returns releases that mention Microsoft, not only releases issued by Microsoft. Filter on the title / body_text fields downstream when you need issuer-only results. Leave keyword empty for the latest releases across the wire.
Older releases. PR Newswire's own search only reaches back about six months. When it runs out before your maxReleases, the actor tops up with older PR Newswire releases that contain your keyword, newest first. Each one is read from its PR Newswire page and kept only if the keyword is in the release. These rows carry found_via: "older_release_archive"; rows from the search carry "prnewswire_search".
Dates. dateFrom / dateTo filter on the published date from each release page, so they need includeFullBody: true (that is where the date comes from). Without it, a run returns the newest releases regardless of date.
What a blocked source looks like. If PR Newswire refuses the list page, the run retries on fresh IPs and falls back to the wire's RSS feed (latest 20); anything partial is labelled truncated: true with the reason, and a run that delivered nothing fails with "SOURCE BLOCKED".
📊 What you get
Clean JSON, one record per release (full output has 13 fields):
body_text— Body textcategory— reserved; always null (PR Newswire exposes no filterable per-release category)country— reserved; always null (PR Newswire exposes no country filter/field)date_modified— Date modifieddate_published— Date publisheddescription— Descriptionimage_url— Image urlsource— Sourcesummary— Summarytickers— Tickers
🤖 Use with AI agents
Point Claude, the OpenAI Agents SDK, an n8n flow or any MCP-aware client at it and run PR Newswire press-release monitoring on demand.
Sample agent prompt:
Summarize today's PR Newswire releases mentioning a company or sector.
Run it on a schedule
A daily run is the natural cadence for PR Newswire: companies put out releases all day, and a morning run picks up everything since the last one. If you track fast-moving names, such as companies with earnings or deal news due, you can run it several times a day. Each run brings new releases rather than updated old ones. The actor has no built-in new-only mode, so set maxReleases to cover one day's volume for your keyword and compare runs by url to drop releases you already have. Send each run's results onward with a webhook, Google Sheets, Zapier, Make or the Bytewells API.
FAQ
Why use this instead of the official PR Newswire website?
The website is free to read, but it is built for browsing. This actor runs a keyword search, handles pagination, and returns one clean JSON row per release. With includeFullBody on, it also opens each release and adds the full body text, published and modified dates, and stock tickers pulled from the text. It needs no API key, you pay per release, and it runs on a schedule as a daily feed.
What does a typical run cost?
One flat monthly price, with a free trial; there is no per-row charge. Bytewells bills compute separately from your prepaid credit, by memory and run time.
Is PR Newswire data available as JSON?
Yes. Each release comes back as a JSON row with URL, title, time label, summary, image URL and source. Set includeFullBody to true to add body_text, date_published, date_modified, description and tickers. The category and country fields are always empty, because PR Newswire does not expose them per release.
Can I get only press releases issued by a specific company?
Not directly. The keyword uses PR Newswire's own search, which also matches the release body, so Microsoft returns releases that mention Microsoft, not only ones Microsoft issued. Filter on title or body_text afterwards when you need issuer-only results.
Can I filter press releases by date?
Yes, with dateFrom and dateTo, but only when includeFullBody is true, because the published date comes from each release page. Without it, a run returns the newest releases regardless of date.
What happens if PR Newswire blocks the run?
The actor retries on fresh IPs and then falls back to the wire's RSS feed, which holds the latest 20 releases. Partial results are marked truncated: true with the reason. A run that delivers nothing fails with "SOURCE BLOCKED". Keep the default residential proxy, because PR Newswire blocks paginated requests from datacenter IPs.
How it is billed on Bytewells
One flat monthly price for this actor, with a free trial to start. There is no charge per row, per result or per run from us.
Compute is billed separately by Bytewells from your prepaid credit, by memory and run time (per second). If a run uses the platform's proxy, Bytewells adds that traffic to the same run's compute bill.
Run it from the API
Bytewells speaks the same API as Apify, so curl or apify-client work with the Bytewells address and your Bytewells API key.
curl -X POST "https://bytewells.com/api/v2/acts/nexgendata~pr-newswire-press-releases-scraper/runs" \
-H "Authorization: Bearer YOUR_BYTEWELLS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"keyword": "", "issuerOnly": false, "dateFrom": "", "dateTo": "", "includeFullBody": false, "maxReleases": 5, "proxyConfiguration": {"useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"]}}'
# when the run has finished, read its rows:
curl -H "Authorization: Bearer YOUR_BYTEWELLS_API_KEY" \
"https://bytewells.com/api/v2/actor-runs/RUN_ID/dataset/items"
from apify_client import ApifyClient
client = ApifyClient("YOUR_BYTEWELLS_API_KEY", api_url="https://bytewells.com/api")
run = client.actor("nexgendata/pr-newswire-press-releases-scraper").call(run_input={'keyword': '', 'issuerOnly': False, 'dateFrom': '', 'dateTo': '', 'includeFullBody': False, 'maxReleases': 5, 'proxyConfiguration': {'useApifyProxy': True, 'apifyProxyGroups': ['RESIDENTIAL']}})
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
print(row)
Contact
Questions, a source that changed, or a field you need: [email protected]
Input
Preview of the input form. Rent the Actor to fill it in and start runs from the console.
Fields
keywordSearch keyword. Empty = no keyword filter (returns latest releases). Example: 'earnings', 'IPO', 'Microsoft', 'partnership'.
issuerOnlyPR Newswire's search matches the keyword anywhere in a release, so 'Microsoft' also returns releases by other companies that mention Microsoft. Turn this on to keep only releases whose issuer (the 'SOURCE' organisation on the release) contains the keyword. Needs the release page, so it is fetched even when includeFullBody is off.
dateFromEarliest publication date (UTC, inclusive). Requires includeFullBody=true to be effective (date filter uses detail-page JSON-LD).
dateToLatest publication date (UTC, inclusive). Requires includeFullBody=true to be effective.
includeFullBodyIf true, follow each release URL to fetch the full body text + JSON-LD metadata (datePublished, dateModified, description, tickers extracted via regex). Adds ~0.4s per release. If false, you only get title + summary + image from the list page.
maxReleasesMax releases to return (1–2000). Each release is one dataset row. ~25 releases per list page; pagination is automatic.
proxyConfigurationProxy used for retries. The actor fetches each page directly first and, if PR Newswire blocks or times out, retries it on a fresh session from this proxy. Keep RESIDENTIAL: PR Newswire sometimes walls datacenter IPs on paginated requests. Leaving it off means no fallback route.
API
Bytewells speaks the Apify API. Existing integrations keep working: point apify-client at https://bytewells.com/api and use your Bytewells API token (Console → Settings → API access). The Actor ID is nexgendata/pr-newswire-press-releases-scraper (or nexgendata~pr-newswire-press-releases-scraper in URLs).
JavaScript · apify-client
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({
token: process.env.BYTEWELLS_TOKEN,
baseUrl: 'https://bytewells.com/api',
});
const input = {
"keyword": "",
"issuerOnly": false,
"dateFrom": "",
"dateTo": "",
"includeFullBody": false,
"maxReleases": 5,
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": [
"RESIDENTIAL"
]
}
};
const run = await client.actor('nexgendata/pr-newswire-press-releases-scraper').call(input);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);Python · apify-client
import os
from apify_client import ApifyClient
client = ApifyClient(os.environ["BYTEWELLS_TOKEN"], api_url="https://bytewells.com/api")
run_input = {
"keyword": "",
"issuerOnly": False,
"dateFrom": "",
"dateTo": "",
"includeFullBody": False,
"maxReleases": 5,
"proxyConfiguration": {
"useApifyProxy": True,
"apifyProxyGroups": [
"RESIDENTIAL"
]
}
}
run = client.actor("nexgendata/pr-newswire-press-releases-scraper").call(run_input=run_input)
items = client.dataset(run["defaultDatasetId"]).list_items().items
print(items)HTTP · curl
curl -X POST "https://bytewells.com/api/v2/acts/nexgendata~pr-newswire-press-releases-scraper/runs" \
-H "Authorization: Bearer $BYTEWELLS_TOKEN" \
-H "Content-Type: application/json" \
-d '{"keyword":"","issuerOnly":false,"dateFrom":"","dateTo":"","includeFullBody":false,"maxReleases":5,"proxyConfiguration":{"useApifyProxy":true,"apifyProxyGroups":["RESIDENTIAL"]}}'Runs are billed as compute from your credit balance. Paid Actors need an active rental or trial; otherwise the API answers 402 rental-required.
Related
More Actors from the same publisher.
Lead Enrichment — Enrich Leads with Emails, Phones & Tech
NexGenData · @nexgendata
Lead Enrichment is a NexGenData tool that returns emails, phone numbers, social profiles and tech stack per company from each company's own website.
BusinessMarketingLead generation$19/mo1-day free trialDelaware Corporations Search — DE Entity Data API
NexGenData · @nexgendata
Delaware Corporations Search is a NexGenData tool that returns one row per Delaware entity from the Delaware Division of Corporations registry with entity name, file number, formation date, entity kind and type, residency, and registered agent name, address and phone.
BusinessLead generation$79/mo1-day free trialWappalyzer Alternative — Tech Stack Detector & BuiltWith API
NexGenData · @nexgendata
Tech stack lookup by URL: Wappalyzer & BuiltWith Alternative, a NexGenData tool, returns the technologies a website uses, grouped by category from the website's own pages.
Developer toolsBusinessMarketing$19/mo1-day free trialASX Announcements Scraper — Australian Company Disclosures
NexGenData · @nexgendata
ASX Announcements Scraper is a NexGenData tool that returns company announcements with ticker, headline, type and source PDF link from the Australian Securities Exchange.
$29/mo3-day free trialBilibili Video Search by Keyword · B站视频搜索 (No Login)
NexGenData · @nexgendata
Bilibili Video Search is a NexGenData tool that returns videos with BV-id, title, uploader, plays, likes and danmaku from Bilibili keyword search.
$19/mo1-day free trialLinkedIn Jobs Scraper — No Login, by Keyword & Location
NexGenData · @nexgendata
LinkedIn Jobs Scraper is a NexGenData tool that returns job listings with title, company, salary and posting date from public LinkedIn job pages.
$29/mo3-day free trial