# Press Releases API — GlobeNewswire, PR Newswire & Newsrooms (`insight.solutions/press-releases-api`) Actor

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.

- **URL**: https://apify.com/insight.solutions/press-releases-api.md
- **Developed by:** [Insight Solutions](https://apify.com/insight.solutions) (community)
- **Categories:** News, Business, Marketing
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.30 / 1,000 press releases

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## Press Releases API — GlobeNewswire, PR Newswire & Newsrooms

**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:

```json
{ "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):

```jsonc
{
  "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:

```jsonc
{
  "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`:

```json
{ "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:

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

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

```json
{ "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:

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

### Input

| Field | Type | Default | What it does |
|---|---|---|---|
| `keywords` | array 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 |
| `companies` | array 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 |
| `sources` | multi-select | `globenewswire`, `prnewswire` | `globenewswire`, `prnewswire`, `feeds`. `feeds` is added automatically when `feedUrls` is set |
| `useFeeds` | boolean | `true` (prefill: `false`) | Also read the wires' latest-release feeds; with no keywords, PR Newswire's latest list follows its feed |
| `feedUrls` | array of strings | `[]` | Any RSS or Atom address. An HTML page instead of a feed gets a free `not-a-feed` row |
| `tickers` | array of strings | `[]` | Keep only releases naming one of these symbols. `MSFT`, `$MSFT` and `NASDAQ:MSFT` are the same filter |
| `subjects` | array of strings | `[]` | Keep only releases with a subject tag containing one of these |
| `sinceHours` | integer | none | Keep only releases from the last N hours; search walks stop at the first page older than that |
| `languages` | array of strings | `[]` | Two-letter codes. A release with no stated language is dropped when this is set |
| `maxResults` | integer | `100` (prefill: `20`) | Release rows per walk — each keyword × wire search, each feed. `0` = no cap, bounded by `maxRunSecs` |
| `dedupe` | boolean | `true` | One row, one charge, for a release found by several walks |
| `maxConcurrency` | integer | `3` | Walks in flight; each keeps its own proxy session; 400 ms between pages of one walk |
| `maxRunSecs` | integer | `240` | Whole-run wall-clock budget, 30–3600 |
| `proxyConfiguration` | object | Apify datacenter | Both 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

| Column | On which rows | What it is |
|---|---|---|
| `ok`, `rowType` | all | `true` + `release`, or `false` + `diagnostic` |
| `input` | all | The keyword or company searched for, or the feed address read |
| `source` | all | `globenewswire`, `prnewswire` or `feed` |
| `sourceUrl` | all | The exact page or feed the row came from |
| `releaseId` | release | The wire's id (GlobeNewswire `dc:identifier`, PR Newswire's nine digits), or a feed's `<guid>`/`<id>` |
| `title`, `summary` | release | Headline, and the listing's teaser as text — dateline removed, never the release body |
| `organisation`, `organisationUrl` | release | The issuer, and the wire's page for it where the listing links one |
| `wire` | release | `GlobeNewswire`, `PR Newswire`, or your feed's title |
| `publishedAt`, `publishedDate` | release | UTC instant; UTC date |
| `url` | release | The release itself |
| `language` | release | Two-letter code, where stated |
| `tickers`, `isins`, `subjects` | release | `{exchange, symbol}` list; ISIN list; subject tags |
| `dateline` | release | `{city, region}` from the dateline |
| `imageUrl` | release | The release image or logo |
| `matchedKeywords` | release | Which of your keywords it matched |
| `feedTitle` | release | The feed's `<title>`, on feed rows |
| `rank` | release | 1-based position in its walk, in the wire's own order |
| `foundBy` | release | `search`, `feed` or `list` |
| `error`, `errorType` | diagnostic | What went wrong, and a type to branch on |
| `scrapedAt` | all | When 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 pages | Latest feeds | Notes |
|---|---|---|---|
| **GlobeNewswire** | Headline, teaser, issuer ("Source:") with its link, time | Issuer, **tickers** (`Amsterdam:BNJ`), **ISINs**, **subject tags**, language, image on some | Ten hits a page. English and French versions of one release share an id |
| **PR Newswire** | Headline, snippet, issuer ("More news about") with its page, language, image | Issuer, **dateline**, **subject tags**, language, **image** | Search 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, image | RSS 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

| Event | FREE | BRONZE | SILVER | GOLD |
|---|---|---|---|---|
| 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.

```bash
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}'
```

```python
## 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**

- [YouTube Transcript API](https://apify.com/insight.solutions/youtube-transcript-api) — captions as timed segments, text, SRT or VTT, with language fallback and translation.
- [YouTube Comments API](https://apify.com/insight.solutions/youtube-comments-api) — comments and replies with likes, pinned and hearted flags, newest or top sort.
- [YouTube Channel API](https://apify.com/insight.solutions/youtube-channel-api) — a channel's videos, Shorts and live streams, plus YouTube search.
- [Podcast Search, Episodes & Charts API](https://apify.com/insight.solutions/podcast-api) — Apple Podcasts search, charts and full episode feeds.
- [Bluesky Scraper](https://apify.com/insight.solutions/bluesky-scraper) — profiles, posts, followers and follows from the public AT Protocol API.
- [Telegram Channel Scraper](https://apify.com/insight.solutions/telegram-channel-scraper) — posts, views and channel stats from public Telegram channels.
- [Substack Scraper](https://apify.com/insight.solutions/substack-scraper) — posts with full free text, comments and publication profiles.
- [Hacker News API](https://apify.com/insight.solutions/hacker-news-api) — stories, comments, users, front page and a structured "Who is hiring?" parser from the official HN APIs.
- [Discourse Forum API](https://apify.com/insight.solutions/discourse-forum-api) — topics, posts and categories from any Discourse community via its own JSON endpoints, usernames only.

**News, documents & the web**

- [Google News Search, Topics & Real Article URLs](https://apify.com/insight.solutions/google-news-api) — news search and topic feeds with the publisher's real URL decoded.
- [Website to Markdown — Content Extractor for LLMs & RAG](https://apify.com/insight.solutions/website-content-extractor) — any site as clean Markdown, text and heading-aware chunks.
- [Internet Archive API](https://apify.com/insight.solutions/internet-archive-api) — archive.org search, item metadata, files and reviews.
- [Wayback Machine Toolkit](https://apify.com/insight.solutions/wayback-toolkit) — archived URL inventories, snapshots and text diffs between dates.
- [Website Technology Detector](https://apify.com/insight.solutions/website-tech-detector) — the tech stack behind any site, with the evidence for each detection.
- [Domain Intelligence API](https://apify.com/insight.solutions/domain-intelligence-api) — DNS, RDAP registration, TLS certificate and HTTP facts in one row per domain.
- [SEO Page Audit](https://apify.com/insight.solutions/seo-page-audit) — sitemap crawl with on-page checks, structured data and broken-link reports.
- [Keyword Suggestions API](https://apify.com/insight.solutions/keyword-suggestions-api) — Google, YouTube, Bing, Amazon and eBay autocomplete with alphabet and question expansions.
- [Website Contact Extractor](https://apify.com/insight.solutions/website-contact-extractor) — emails, phone numbers and social profiles from any list of websites.
- [Web Search Results API](https://apify.com/insight.solutions/web-search-api) — Bing and DuckDuckGo organic results with snippets, no key, no browser.
- [Company Enrichment API](https://apify.com/insight.solutions/company-enrichment-api) — a domain in, a company profile out: firmographics, contacts, tech stack, DNS and hiring signal.
- [Company Dossier API](https://apify.com/insight.solutions/company-dossier-api) — one company in, twelve sections out: profile, tech, contacts, DNS, open roles, news, SEC filings, federal awards, recalls, YC batch and apps.
- [Federal Register API](https://apify.com/insight.solutions/federal-register-api) — rules, proposed rules, notices and the Public Inspection desk with dockets, comment deadlines and CFR references.
- [Academic Papers Search API](https://apify.com/insight.solutions/academic-papers-api) — OpenAlex, Crossref, arXiv and PubMed in one row per paper: abstract, citations, open-access PDF, authors and venue.
- [RSS & Atom Feed Monitor](https://apify.com/insight.solutions/rss-feed-monitor) — any RSS, Atom or JSON feed (or an OPML file) in, only the new items out, with keyword filters and a webhook.
- [Website Change Monitor](https://apify.com/insight.solutions/website-change-monitor) — watch any pages, diff the text between runs, get change rows with added/removed lines, keyword alerts and a webhook.
- [Wikipedia & Wikidata API](https://apify.com/insight.solutions/wikipedia-api) — article text, search, daily pageviews and Wikidata entity facts, any language edition.

**Business, finance & jobs**

- [Congress & Insider Trades API](https://apify.com/insight.solutions/congress-insider-trades-api) — STOCK Act periodic transaction reports and SEC Form 4 insider trades in one schema.
- [Federal Contracts, Grants & Lobbying API](https://apify.com/insight.solutions/federal-contracts-grants-api) — SAM.gov opportunities, USAspending awards, Grants.gov notices and Senate lobbying filings in one schema.
- [SEC EDGAR API](https://apify.com/insight.solutions/sec-edgar-api) — filings, XBRL financials and full-text search by ticker or CIK.
- [Clinical Trials & FDA API](https://apify.com/insight.solutions/clinical-trials-fda-api) — ClinicalTrials.gov studies plus openFDA recalls, labels, approvals, 510(k)s and adverse-event reports.
- [Product & Vehicle Recalls API](https://apify.com/insight.solutions/product-recalls-api) — CPSC, NHTSA, FDA and USDA recalls, vehicle complaints and ratings, plus a VIN decoder.
- [Y Combinator Companies, Batches & Founders](https://apify.com/insight.solutions/yc-companies-directory) — the YC directory with founders and social links, filterable by batch, industry and hiring status.
- [Career Site Jobs API](https://apify.com/insight.solutions/ats-jobs-api) — jobs straight from Greenhouse, Lever, Ashby, Workable and 10+ other ATS career sites.
- [New Job Postings Monitor](https://apify.com/insight.solutions/job-postings-monitor) — new, closed and changed postings on the career sites you watch.
- [Hiring Signals API — Open Roles & Hiring Surge by Company](https://apify.com/insight.solutions/hiring-signals-api) — one row per company per run: open roles, what opened and closed, department and seniority breakdowns, and a hiring-surge flag.
- [Remote Jobs API](https://apify.com/insight.solutions/remote-jobs-api) — RemoteOK, Remotive, We Work Remotely, Himalayas, Jobicy and more in one schema, deduplicated.
- [Shopify Products API](https://apify.com/insight.solutions/shopify-products-api) — any Shopify store's catalogue, variants, prices and stock signals.
- [Shopify Store Monitor](https://apify.com/insight.solutions/shopify-store-monitor) — price drops, sales, restocks, sell-outs and new products on any Shopify store, one row per change.
- [Public Tenders API](https://apify.com/insight.solutions/public-tenders-api) — EU TED, UK Find a Tender and Contracts Finder notices by keyword, CPV code, country, stage and deadline.
- [Nonprofit & IRS 990 Lookup API](https://apify.com/insight.solutions/nonprofit-990-api) — search US nonprofits and get EIN, NTEE code and multi-year Form 990 financials.
- [OpenStreetMap Places API](https://apify.com/insight.solutions/osm-places-api) — businesses and points of interest by category and area from OpenStreetMap: name, address, coordinates, website, phone, opening hours.

**Apps & games**

- [App Store & Google Play Reviews API](https://apify.com/insight.solutions/app-reviews-api) — reviews from both stores with ratings, versions and developer replies.
- [App Store Top Charts & App Search API](https://apify.com/insight.solutions/app-charts-api) — Apple top charts by country and genre, plus app search and details.
- [App Store Keyword Rank Tracker](https://apify.com/insight.solutions/app-store-keyword-rank-tracker) — where any app ranks for any keyword on the App Store and Google Play, with rank changes and ASO suggestions.
- [Steam Reviews API](https://apify.com/insight.solutions/steam-reviews-api) — Steam reviews with playtime, helpfulness and game details.
- [Steam Game Data API](https://apify.com/insight.solutions/steam-store-stats-api) — prices, tags, review scores, live player counts and top charts.

# Actor input Schema

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

Search terms. With GlobeNewswire or PR Newswire selected, each keyword is one search on each wire's own keyword search, which matches the whole release text. The same keywords also filter the wire feeds and your own feeds: a feed item is kept when any keyword appears in its headline or summary (case-insensitive). Leave empty to read the latest releases instead.

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

Keep only releases issued by these organisations: a case-insensitive part of the name, matched on the issuer the wire names (GlobeNewswire's "Source:" and feed contributor, PR Newswire's "More news about" and feed contributor, a newsroom feed's author). When a listing names no issuer, the headline and summary are matched instead. With no keywords, each company is also searched for on the wires.

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

Where to read. `globenewswire` and `prnewswire` are the two wires: their keyword search pages and, with "Read the wires' latest feeds" on, their latest-release feeds. `feeds` reads the RSS or Atom addresses in "Your own feeds", and is switched on automatically when you paste one.

## `useFeeds` (type: `boolean`):

Also read each selected wire's latest-release feeds — GlobeNewswire's public-company and earnings feeds, PR Newswire's all-releases and technology feeds (twenty items each), and with no keywords PR Newswire's latest list behind them. The filters below apply to them. With no keywords and no companies this is what the run reads: the newest releases on both wires.

## `feedUrls` (type: `array`):

Any RSS 2.0 or Atom feed address — a company newsroom's own feed, usually. One request each, one release row per item. An address that answers with an HTML page instead of a feed gets a free `not-a-feed` row. A GlobeNewswire or PR Newswire RSS address pasted here is read with that wire's own fields (tickers, ISINs, subjects).

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

Keep only releases that name one of these ticker symbols, on any exchange: GlobeNewswire's typed stock tags (`Amsterdam:BNJ`), or a `(NYSE: CTVA)`, `NASDAQ: INV` or `$KOD` in the headline or summary. `MSFT`, `$MSFT` and `NASDAQ:MSFT` all mean MSFT.

## `subjects` (type: `array`):

Keep only releases tagged with a subject containing one of these, case-insensitive: GlobeNewswire's subjects ("Earnings Releases and Operating Results", "Mergers and Acquisitions"), PR Newswire's ("New Products & Services", "Awards"), a newsroom feed's categories. Search-page hits carry no subject tags, so this filter keeps feed rows only.

## `sinceHours` (type: `integer`):

Monitor mode: keep only releases published within the last N hours. Search walks stop at the first page whose newest release is older than the window, so a daily run with `24` reads one or two pages per keyword. Leave empty for no window.

## `languages` (type: `array`):

Keep only releases in these languages, as two-letter codes (`en`, `fr`, `de`, `es`). Taken from the wire (GlobeNewswire's release language, PR Newswire's page language) or the feed's `<language>`. A release whose language is not stated is dropped when this is set. Empty keeps every language.

## `maxResults` (type: `integer`):

How many release rows each walk may return: each (keyword × wire) search, each wire feed, each of your feeds. Duplicates and filtered-out releases do not count against it. `0` means no cap, bounded by the time budget.

## `dedupe` (type: `boolean`):

A release found by a search and again by a feed is one row and one charge. Matched on the release address (query and fragment ignored), then on headline plus issuer.

## `maxConcurrency` (type: `integer`):

How many searches and feeds are read at once. Each parallel walk keeps its own proxy session, and successive pages of one walk are 400 ms apart.

## `maxRunSecs` (type: `integer`):

Wall-clock budget for the whole run. When it is reached the Actor stops fetching, keeps and bills for every row already written, and files a free `deadline` row for each walk it cut short or never reached.

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

Both wires and the captured newsroom feeds answered Apify's datacenter proxy, so that is the default — the proxy cost is already inside the per-release price. Switch to residential only if you start seeing `blocked` rows. Sessions rotate automatically when an exit IP is refused.

## Actor input object example

```json
{
  "keywords": [
    "artificial intelligence",
    "acquisition",
    "clinical trial"
  ],
  "companies": [
    "Corteva",
    "MongoDB"
  ],
  "sources": [
    "globenewswire",
    "prnewswire"
  ],
  "useFeeds": true,
  "feedUrls": [
    "https://news.microsoft.com/feed/",
    "https://www.apple.com/newsroom/rss-feed.rss"
  ],
  "tickers": [
    "CTVA",
    "BNJ"
  ],
  "subjects": [
    "Earnings",
    "Acquisitions"
  ],
  "sinceHours": 24,
  "languages": [
    "en"
  ],
  "maxResults": 20,
  "dedupe": true,
  "maxConcurrency": 3,
  "maxRunSecs": 240,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

One row per press release — headline, summary, issuing organisation, wire, publish time, URL, tickers, ISINs, subject tags and dateline. Searches and feeds that could not be read get a free diagnostic row saying why. Delivered as JSON items in the default dataset.

# 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 = {
    "keywords": [
        "artificial intelligence"
    ],
    "sources": [
        "globenewswire",
        "prnewswire"
    ],
    "useFeeds": false,
    "maxResults": 20,
    "dedupe": true,
    "maxConcurrency": 3,
    "maxRunSecs": 240,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("insight.solutions/press-releases-api").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 = {
    "keywords": ["artificial intelligence"],
    "sources": [
        "globenewswire",
        "prnewswire",
    ],
    "useFeeds": False,
    "maxResults": 20,
    "dedupe": True,
    "maxConcurrency": 3,
    "maxRunSecs": 240,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("insight.solutions/press-releases-api").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 '{
  "keywords": [
    "artificial intelligence"
  ],
  "sources": [
    "globenewswire",
    "prnewswire"
  ],
  "useFeeds": false,
  "maxResults": 20,
  "dedupe": true,
  "maxConcurrency": 3,
  "maxRunSecs": 240,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call insight.solutions/press-releases-api --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,insight.solutions/press-releases-api"
        }
    }
}
```

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/4NzewagUViAsT4Sjg/builds/b57NREJo1kcRRi63F/openapi.json
