Press Releases API — GlobeNewswire, PR Newswire & Newsrooms avatar

Press Releases API — GlobeNewswire, PR Newswire & Newsrooms

Pricing

from $0.30 / 1,000 press releases

Go to Apify Store
Press Releases API — GlobeNewswire, PR Newswire & Newsrooms

Press Releases API — GlobeNewswire, PR Newswire & Newsrooms

Press releases as data from GlobeNewswire, PR Newswire and any company newsroom RSS or Atom feed: headline, summary, issuer, tickers, ISINs, subjects, dateline, time and URL. Keyword search, company watch, monitor mode. No API key, no browser.

Pricing

from $0.30 / 1,000 press releases

Rating

0.0

(0)

Developer

Insight Solutions

Insight Solutions

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

8 hours ago

Last modified

Share

Press releases as a flat table, from the two big open newswires and from any company newsroom feed. One release row per press release: the headline, the teaser, the issuing organisation, the wire, the publish time in UTC, the URL — and, where the wire publishes them, tickers, ISINs, subject tags and the dateline.

Three ways in: a keyword search on GlobeNewswire's and PR Newswire's own search pages; the wires' latest-release feeds, filtered by keyword, company, ticker, subject, language or time window; and any RSS or Atom feed you supply — a company's own newsroom. Set sinceHours and it becomes a monitor.

No API key. No login. No browser. $0.50 per 1,000 releases, and a run that returns nothing costs nothing.

At a glance

Input — this is the Store prefill; paste it and run:

{ "keywords": ["artificial intelligence"], "sources": ["globenewswire", "prnewswire"], "useFeeds": false,
"maxResults": 20, "dedupe": true, "maxConcurrency": 3, "maxRunSecs": 240,
"proxyConfiguration": { "useApifyProxy": true } }

That is GlobeNewswire's search pages 1–2 and PR Newswire's search page 1 — about three requests and up to forty rows.

Output — one release row per press release. The fields you will use most are title, summary, organisation, wire, publishedAt, url, tickers and subjects (full list under Output reference). A search or feed that could not be read comes back as a free diagnostic row (ok: false, errorType, error) instead of a charge.

Price — $0.50 per 1,000 releases (+ $0.001 per run); diagnostics and empty runs free; no API key, no browser, limited permissions, works over the Apify MCP server and with x402.

From code — client.actor("insight.solutions/press-releases-api").call(run_input={…}) with apify-client, or POST https://api.apify.com/v2/acts/insight.solutions~press-releases-api/run-sync-get-dataset-items.


What you get

A PR Newswire feed row, as the Actor writes it (abridged only where marked):

{
"ok": true,
"rowType": "release", // "release" | "diagnostic"
"releaseId": "302891705",
"title": "Corteva and Inari Reach Settlement Agreement",
"summary": "Corteva, Inc. (NYSE: CTVA) and Inari, the SEEDesign™ company, announced they have reached a confidential settlement agreement …",
"organisation": "Corteva Agriscience", // the issuer, as the wire names it
"organisationUrl": null,
"wire": "PR Newswire",
"publishedAt": "2026-09-28T16:45:00.000Z",
"publishedDate": "2026-09-28",
"url": "https://www.prnewswire.com/news-releases/corteva-and-inari-reach-settlement-agreement-302891705.html",
"language": "en",
"tickers": [{ "exchange": "NYSE", "symbol": "CTVA" }],
"isins": [],
"subjects": ["Contracts", "Legal Issues"],
"dateline": { "city": "INDIANAPOLIS", "region": null }, // split out of the summary
"imageUrl": "https://mmx.prnewswire.com/media/MS1169031/Corteva-Logo.jpg?id=OA2972733&p=original",
"matchedKeywords": [],
"feedTitle": "All News Releases",
"rank": 4, // 4th in the wire's own order
"foundBy": "feed", // "search" | "feed" | "list"
"input": "https://www.prnewswire.com/rss/news-releases-list.rss",
"source": "prnewswire",
"sourceUrl": "https://www.prnewswire.com/rss/news-releases-list.rss",
"error": null,
"errorType": null,
"scrapedAt": "2026-09-28T16:56:00.000Z"
}

A GlobeNewswire feed row carries typed market data as well:

{
"releaseId": "3370172",
"title": "Banijay Group: weekly share transactions",
"summary": null, // the listing said only "Press Release"
"organisation": "Banijay Group N.V.",
"tickers": [{ "exchange": "Amsterdam", "symbol": "BNJ" }],
"isins": ["NL0015000X07"],
"subjects": ["Other News", "European Regulatory News"],
"language": "en",
"publishedAt": "2026-09-28T16:49:00.000Z"
}

Every row carries the same columns, so releases and diagnostics export as one rectangular table.

Quick start

Keyword search on both wires. One search per keyword per wire, walked page by page up to maxResults:

{ "keywords": ["artificial intelligence", "acquisition"], "useFeeds": false, "maxResults": 50 }

A company watch, run daily. With no keywords, each company is searched for on both wires, the wires' latest feeds are read too, and everything is kept only if the issuer matches. sinceHours: 24 keeps the last day and stops each search at the first page that is older:

{ "companies": ["Corteva", "MongoDB"], "sinceHours": 24 }

Your own newsroom feeds. Any RSS 2.0 or Atom address, one request each:

{ "feedUrls": ["https://news.microsoft.com/feed/", "https://www.apple.com/newsroom/rss-feed.rss"], "useFeeds": false }

The latest from both wires, filtered. Leave keywords and companies empty and the run reads GlobeNewswire's public-company and earnings feeds, PR Newswire's all-releases and technology feeds, and PR Newswire's latest list behind them:

{ "subjects": ["Earnings"], "languages": ["en"], "sinceHours": 6 }

Input

FieldTypeDefaultWhat it does
keywordsarray of strings[] (prefill: one)One search per keyword on each selected wire. Also filters feed items: kept when any keyword is in the headline or summary
companiesarray of strings[]Keep only releases whose issuer contains one of these (case-insensitive). With no keywords, each company is also searched for on the wires
sourcesmulti-selectglobenewswire, prnewswireglobenewswire, prnewswire, feeds. feeds is added automatically when feedUrls is set
useFeedsbooleantrue (prefill: false)Also read the wires' latest-release feeds; with no keywords, PR Newswire's latest list follows its feed
feedUrlsarray of strings[]Any RSS or Atom address. An HTML page instead of a feed gets a free not-a-feed row
tickersarray of strings[]Keep only releases naming one of these symbols. MSFT, $MSFT and NASDAQ:MSFT are the same filter
subjectsarray of strings[]Keep only releases with a subject tag containing one of these
sinceHoursintegernoneKeep only releases from the last N hours; search walks stop at the first page older than that
languagesarray of strings[]Two-letter codes. A release with no stated language is dropped when this is set
maxResultsinteger100 (prefill: 20)Release rows per walk — each keyword × wire search, each feed. 0 = no cap, bounded by maxRunSecs
dedupebooleantrueOne row, one charge, for a release found by several walks
maxConcurrencyinteger3Walks in flight; each keeps its own proxy session; 400 ms between pages of one walk
maxRunSecsinteger240Whole-run wall-clock budget, 30–3600
proxyConfigurationobjectApify datacenterBoth wires answered the datacenter proxy in testing

A run needs at least one thing to read: a keyword, a company, a feed address, or useFeeds with a wire selected. The defaults alone qualify — they read the latest releases from both wires.

Output reference

ColumnOn which rowsWhat it is
ok, rowTypealltrue + release, or false + diagnostic
inputallThe keyword or company searched for, or the feed address read
sourceallglobenewswire, prnewswire or feed
sourceUrlallThe exact page or feed the row came from
releaseIdreleaseThe wire's id (GlobeNewswire dc:identifier, PR Newswire's nine digits), or a feed's <guid>/<id>
title, summaryreleaseHeadline, and the listing's teaser as text — dateline removed, never the release body
organisation, organisationUrlreleaseThe issuer, and the wire's page for it where the listing links one
wirereleaseGlobeNewswire, PR Newswire, or your feed's title
publishedAt, publishedDatereleaseUTC instant; UTC date
urlreleaseThe release itself
languagereleaseTwo-letter code, where stated
tickers, isins, subjectsrelease{exchange, symbol} list; ISIN list; subject tags
datelinerelease{city, region} from the dateline
imageUrlreleaseThe release image or logo
matchedKeywordsreleaseWhich of your keywords it matched
feedTitlereleaseThe feed's <title>, on feed rows
rankrelease1-based position in its walk, in the wire's own order
foundByreleasesearch, feed or list
error, errorTypediagnosticWhat went wrong, and a type to branch on
scrapedAtallWhen the row was written

errorType is one of no-results, not-a-feed, blocked, rate-limited, http, timeout, deadline, budget, pagination, upstream-format, invalid-input.

The dataset has three views: Releases, By company and Diagnostics.

What each wire gives you

Search pagesLatest feedsNotes
GlobeNewswireHeadline, teaser, issuer ("Source:") with its link, timeIssuer, tickers (Amsterdam:BNJ), ISINs, subject tags, language, image on someTen hits a page. English and French versions of one release share an id
PR NewswireHeadline, snippet, issuer ("More news about") with its page, language, imageIssuer, dateline, subject tags, language, imageSearch pages are requested 100 at a time. The latest list (behind the feed) has no issuer line — see the FAQ
Your feeds—Headline, excerpt, author as issuer, categories, language, imageRSS 2.0 and Atom. A wire's own RSS address is read with that wire's fields

Tickers are also read from the headline and summary wherever a listing names them — (NYSE: CTVA), NASDAQ: INV, Nasdaq “MSFT”, $KOD.

How it works

  • Search. GlobeNewswire's /search/keyword/<kw> and PR Newswire's /search/news/?keyword=… are ordinary server-rendered pages, read with targeted patterns rather than a browser. Each (keyword × wire) is one walk, page by page, until maxResults rows are kept or the wire runs out of pages.
  • Feeds. Each wire feed and each of your feeds is one request. The wires' feeds hold the latest twenty releases; PR Newswire's latest list continues behind its feed when you have no keywords.
  • Filters and dedupe run before anything is written. A release found by a search and again by a feed is one row and one charge, matched on its address and then on headline plus issuer.
  • Blocks. A 403, a 429, a timeout, an empty body or a challenge page earns exactly one more attempt from a fresh proxy session. A second refusal ends that walk with one free diagnostic row; the rows it already returned are kept.

What you are never charged for

  • Every diagnostic row — a search with no hits, a feed that is not a feed, a block, a timeout, the time or charge budget running out, a pagination dead end, an unreadable address.
  • Releases your filters excluded, and duplicates of a release the run already delivered.
  • A run that returns nothing. A run whose input was usable but produced no release — no matches, filters that excluded everything, a wire that refused us — finishes SUCCEEDED with zero results, a status message that says so, and free diagnostic rows saying why; nothing is charged, start fee included. A run finishes FAILED only when there was nothing to read at all, or the Actor itself hit an error.

Pricing

EventFREEBRONZESILVERGOLD
Run started$0.001$0.001$0.001$0.001
Press release$0.0005$0.0005$0.0004$0.0003

Worked example. A daily company watch that returns 200 releases: 200 × $0.0005 + $0.001 = $0.101.

The start fee is billed only once a release has been delivered. Set ACTOR_MAX_TOTAL_CHARGE_USD and the run stops fetching when the ceiling is in sight, leaves a free budget row, keeps everything already delivered and finishes SUCCEEDED.

Use it from an AI agent, or from code

One JSON object in, one flat array out. The Actor runs with limited permissions, uses pay-per-event pricing and never enters Standby, so it works over the Apify MCP server (mcp.apify.com) and with x402 agentic payments.

curl -X POST "https://api.apify.com/v2/acts/insight.solutions~press-releases-api/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"keywords":["artificial intelligence"],"useFeeds":false,"maxResults":20}'
# pip install apify-client
from apify_client import ApifyClient
client = ApifyClient("<APIFY_TOKEN>")
run = client.actor("insight.solutions/press-releases-api").call(run_input={
"companies": ["Corteva"],
"sinceHours": 24,
})
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
if row["rowType"] == "release":
print(row["publishedAt"], row["organisation"], row["title"], row["url"])

FAQ

Why is there no release body, and no media contact? By design. This Actor reads listings — search pages and feeds — not release bodies. The headline, teaser, issuer, tickers, subjects, date and URL are what a listing carries; the body, with its "Media contact" block of names, e-mail addresses and phone numbers, is never fetched. As a second guard, every text column is scrubbed of e-mail addresses, @handles and phone numbers before it is written. url is the address to hand to whatever does fetch the body.

Why do some PR Newswire rows have no organisation? PR Newswire's search results ("More news about") and its RSS feeds (dc:contributor) both name the issuer. Its latest list, which this Actor reads behind the feed when you have no keywords, does not; there the issuer is taken only when the teaser opens with Name (EXCHANGE: SYMBOL), and is otherwise left null rather than guessed. A newsroom feed that credits a person as author also gets a null organisation — a person's name is never emitted as the issuer.

What time zone are the times in? UTC, always. Both wires print US Eastern time ("12:45 ET"); it is converted with EDT (UTC−4) or EST (UTC−5) depending on the date. PR Newswire's latest list prints today's releases as a time with no date; those are dated today in US Eastern.

Why does the same releaseId appear twice? GlobeNewswire gives the English and French versions of one release the same id. They are two rows, with different url and language.

Does the company filter need the exact name? No — any case-insensitive part of it. Corteva matches "Corteva Agriscience" and "Corteva, Inc.". When a listing names no issuer, the headline and summary are matched instead.

Can I watch a newswire this Actor does not search? If it publishes an RSS or Atom feed, paste the address into feedUrls. The two wires above are the ones searched.

What happens if one search fails? The other walks keep going, the failed one leaves a free diagnostic row, and the run finishes SUCCEEDED. If every walk fails the run still finishes SUCCEEDED, with zero results and a status message pointing at the diagnostics.

Limitations

  • Two wires plus the feeds you supply. GlobeNewswire and PR Newswire are searched; anything else is read only through its own feed.
  • Listings, not releases. A search snippet is cut from wherever the keyword falls in the release, so it can start mid-sentence; feed teasers are truncated by the wire.
  • The listing markup may change. Search and list pages are read with targeted patterns. When a page stops matching, the run files a free upstream-format row naming the pattern that failed, rather than returning wrong data.
  • GlobeNewswire's page 2 onwards is read at the load/more address its page 1 links to, with a ?page=N fallback; if neither answers with hits the walk ends with a free pagination row — which is also what a short result list looks like.
  • Subject tags come from feeds. Search-page and list rows have none, so a subjects filter keeps feed rows only.
  • No historical archive beyond what the wires' own search pages reach.

Sources, terms and attribution

  • Everything is read from the wires' public feeds and search pages, as published — the same pages any visitor sees. No login, no cookie, no API key belonging to anyone.
  • Press releases are published to be distributed; headlines and teasers belong to their issuers. Indexing, monitoring, analysis and linking are what this is built for; republishing is your call and your responsibility.
  • Not affiliated with GlobeNewswire, PR Newswire or any issuer. Names are used only to describe which public pages this Actor reads.

Our other Actors

Every Insight Solutions Actor is pay-per-result with no browser, no login and no API key, and every one of them returns free diagnostic rows instead of billing for failures. Prices are per 1,000 results.

Video, audio & social

News, documents & the web

Business, finance & jobs

Apps & games