API docs

Official press releases from company newsrooms and newswires, as JSON and RSS. The lists are free and need no key.

Base URL
https://pressreleasefeed.org
Index
GET /api/v1 lists every endpoint
JSON
{ "data": …, "meta": … }
Errors
{ "error": "message" }
CORS
Any origin
API key
Only for full text
On this page

Access

Everything is open except full text. Every endpoint answers without a key; a key adds the body of each release.

What a key changes
EndpointsWithout a keyWith a key
/api/v1/releases, /api/v1/releases/{id}, /api/v1/largest-companiesEvery field but the bodybody_html and body_text too, and meta.full_text is true
/feed.xmlEvery item, without its bodyEach item’s body in <content:encoded>
/api/v1/publishers, /api/v1/topics, /api/v1/companies, /api/v1/niches, /api/v1/regionsEverythingThe same answer

Sending a key

Where to send the key
SendWhere
Authorization: Bearer <key>A request header
X-API-Key: <key>A request header
?key=<key>The query string, on /feed.xml only: feed readers cannot send headers
Request
curl -H "Authorization: Bearer YOUR_API_KEY" "https://pressreleasefeed.org/api/v1/releases?per_page=10"
  • A key that fails is an error. A wrong key returns 401 and a revoked key 403, never a silent fallback to the public answer.
  • Keys stay out of URLs. On the JSON endpoints a ?key= parameter returns 400: send the header instead, so the key stays out of URLs and logs.
  • A feed URL with a key is a secret. Treat any feed URL that contains ?key= as one.

Releases

GET/api/v1/releases

Releases from every newsroom and newswire we follow, newest first.

Every parameter is optional. Values in one parameter are alternatives, and different parameters must all match.

Parameters of GET /api/v1/releases
ParameterValuesMeaning
publisherapple or apple,ibmUp to 10 publisher slugs from /api/v1/publishers. May repeat.
topicaiOne topic slug; Topics lists all 12.
languageen, ja, zh-hansThe original language of the release.
kindbrand or wireCompany newsrooms (brand) or newswires (wire).
companieslargestOnly releases from the largest companies: the list Largest companies describes.
companytoyota or toyota,samsung-electronicsReleases linked to any of up to 10 company slugs from /api/v1/companies. May repeat.
regionasiaReleases linked to a company in a region from /api/v1/regions.
countryJPAn ISO 3166-1 alpha-2 code, in any case: the country a linked company is run from.
nicheautomotiveOne of the 30 niches from /api/v1/niches.
company_languagejaAn ISO 639-1 code: a linked company’s home language. language stays the release’s own language.
qearningsA keyword of 2 to 160 characters, matched in titles and summaries.
since, until2026-10-01, 2026-10-12T08:00:00ZUTC unless an offset is given. A date-only until includes that whole day.
page1 to 500The page to return, 1 by default.
per_page1 to 100Releases per page, 25 by default.

Parameters the API does not know are ignored: brand= from older endpoints has no effect, so use publisher=.

Request
curl "https://pressreleasefeed.org/api/v1/releases?publisher=apple&topic=ai&per_page=10"
Example response
{
  "data": [
    {
      "id": "9f91ab84-4ade-49d1-b9ae-be5c1a216e38",
      "title": "…",
      "summary": "…",
      "url": "https://www.apple.com/newsroom/…",
      "image_url": "https://…",
      "language": "en",
      "published_at": "2026-10-12T13:59:49.000Z",
      "word_count": 812,
      "company": "Apple",
      "publisher": { "slug": "apple", "name": "Apple", "kind": "brand" },
      "topics": ["ai"],
      "companies": [{ "slug": "apple", "name": "Apple Inc." }]
    }
  ],
  "meta": {
    "total": 46,
    "page": 1,
    "per_page": 10,
    "full_text": false,
    "filters": { "publisher": ["apple"], "topic": "ai", "…": "…" },
    "generated_at": "…"
  }
}

With a valid key every release also carries body_html and body_text, and meta.full_text is true.

The fields

  • company is the issuing company: a newsroom’s own name, or the company a wire release names as its issuer. That is its SOURCE line on PR Newswire, Canada Newswire, ACN and JCN, its “Source:” line on Newsfile, its header on GlobeNewswire, or the name right after the Business Wire tag. It is null when no issuer was detected, never the wire’s name.
  • companies lists the directory companies the release is linked to, as { "slug", "name" }, and is empty when there are none. The release’s first link comes first, the rest by name. It is not the companies=largest parameter, and it is not company, the issuer named in the release.
    • A release is linked to a company when the company’s name is in its headline, a contact-block email address or website at the bottom of the release uses the company’s domain, the wire’s own source field names the company, or it comes from the company’s own newsroom.
    • Notices from law firms about a company (a class action, an investigation, a lawsuit) are never linked to it. A release is one when its lead or its headline uses a class-action notice’s phrases, or when its headline is about investors, securities, a lawsuit or an investigation and it comes from a law firm (the wire’s source line) or names a plaintiff firm.
  • url and image_url are null when the source gave anything other than an http(s) link.

Clean text

Titles, summaries and bodies come without newswire tags and wire boilerplate; url still links to the original release. This is what comes out:

  • Tags. /PRNewswire/ (also with a suffix, such as /PRNewswire-FirstCall/) and /CNW/, (GLOBE NEWSWIRE), ( BUSINESS WIRE ), (ACN Newswire) (also (JCN Newswire) and (亞太商訊)), (ACCESSWIRE), and ACCESS Newswire’s tag between a dateline’s city and date: WEST PALM BEACH, FL / ACCESS Newswire / September 29, 2026 becomes WEST PALM BEACH, FL / September 29, 2026.
    • From a Newsfile dateline only Newsfile Corp. - inside the parentheses goes, and the date stays: (Newsfile Corp. - October 12, 2026) becomes (October 12, 2026).
  • Boilerplate lines. PR Newswire’s “View original content…” link and its “Photo - …” and “Logo - …” links to mma.prnewswire.com; the “This is a paid press release. Contact the press release distributor directly with any inquiries.” notice; Newsfile’s “To view the source version of this press release, please visit …” link and its “Ready to Announce with Confidence? … Contact Us” promotion; and the ACN copyright line, Copyright <year> ACN Newswire. All rights reserved. www.acnnewswire.com (also in its JCN Newswire and 亞太商訊 forms).
  • What stays. Other wire text stays as published: Business Wire’s “View source version on businesswire.com: …” link, GlobeNewswire’s photo lines, and a wire’s name in running text or in a URL.

Keyword search

  • A search with q reports meta.total as null: counting the matches would mean scanning the whole archive. Paging still works.
  • A keyword search that takes more than a few seconds (typically a rare word across the whole archive) returns 400. Narrow it with since, publisher, topic or language.

Filtering by company

company, region, country, niche and company_language describe the company a release is linked to.

  • Alternatives and combinations. Values within one parameter are alternatives: company=toyota,samsung-electronics means Toyota or Samsung Electronics. Different parameters must all match, and they must match the same company: region=asia&niche=automotive returns releases linked to an Asian automotive company, not releases that mention some Asian company and some automotive company (say an Asian bank and a European carmaker).
  • language is the release’s language, company_language the company’s. A Japanese carmaker’s English release matches language=en&company_language=ja.
  • No matches is not an error. A valid combination that nobody satisfies, such as company=toyota&niche=banking, or a country with no companies, returns 200 with "data": [] and meta.total 0.
  • Unknown values are a 400. An unknown company slug (Unknown company: …, which includes a company that was removed from the directory), region, niche, country code or language code returns 400 with { "error": "…" }.
  • Where the values come from. /api/v1/companies, /api/v1/niches and /api/v1/regions list the slugs and codes.
Request
curl "https://pressreleasefeed.org/api/v1/releases?region=asia&niche=automotive&per_page=10"

One release

GET/api/v1/releases/{id}

One release by its id, with the same fields as in the lists, companies included. An unknown id returns 404.

Parameters of GET /api/v1/releases/{id}
ParameterValuesMeaning
idA UUIDIn the path: the id of a release from any list.
Request
curl "https://pressreleasefeed.org/api/v1/releases/9f91ab84-4ade-49d1-b9ae-be5c1a216e38"
Example response
{
  "data": {
    "id": "9f91ab84-4ade-49d1-b9ae-be5c1a216e38",
    "title": "…",
    "summary": "…",
    "url": "https://www.apple.com/newsroom/…",
    "image_url": "https://…",
    "language": "en",
    "published_at": "2026-10-12T13:59:49.000Z",
    "word_count": 812,
    "company": "Apple",
    "publisher": { "slug": "apple", "name": "Apple", "kind": "brand" },
    "topics": ["ai"],
    "companies": [{ "slug": "apple", "name": "Apple Inc." }]
  },
  "meta": { "full_text": false, "generated_at": "…" }
}

With a valid key it also carries body_html and body_text, and meta.full_text is true.

Largest companies

GET/api/v1/largest-companies

The same list as /api/v1/releases?companies=largest, with every other filter and the same paging.

It holds releases that link to a company in the company directory (about 1,200 of the world’s largest companies, refreshed yearly) and every release from a company newsroom we follow.

It takes every parameter Releases takes except companies, which it sets to largest:

  • publisher
  • topic
  • language
  • kind
  • company
  • region
  • country
  • niche
  • company_language
  • q
  • since
  • until
  • page
  • per_page
Request
curl "https://pressreleasefeed.org/api/v1/largest-companies?language=en&per_page=10"
Example response
{
  "data": [
    {
      "id": "9f91ab84-4ade-49d1-b9ae-be5c1a216e38",
      "title": "…",
      "company": "Apple",
      "companies": [{ "slug": "apple", "name": "Apple Inc." }],
      "…": "…"
    }
  ],
  "meta": {
    "total": 46,
    "page": 1,
    "per_page": 10,
    "full_text": false,
    "filters": { "language": "en", "companies": "largest", "…": "…" },
    "generated_at": "…"
  }
}

Which releases link to a company

  • A release links to a company when its headline names the company, its contact block carries one of the company’s email or web domains, or the wire’s source line names it as the issuer.
  • A name that is an everyday word (Target, Shell) counts in a headline only beside the full name or another signal.
  • A law firm’s notice about a company (a class action, an investigation, a lawsuit) does not link it, though its headline names the company.

Where the directory comes from

The directory is compiled from SEC filings, Wikidata (CC0), stock-index membership and the S&P 500 constituents; it uses no Fortune or CompaniesMarketCap data. The service stores company names only: no list’s rank, order or revenue figure.

Publishers

GET/api/v1/publishers

Every newsroom and newswire we collect from, with how many releases it has, when its latest one came out and the languages it publishes in.

It takes no parameters.

Request
curl "https://pressreleasefeed.org/api/v1/publishers"
Example response
{
  "data": [
    {
      "slug": "apple",
      "name": "Apple",
      "kind": "brand",
      "homepage_url": "https://www.apple.com/newsroom/",
      "releases": 1290,
      "latest_published_at": "2026-10-12T13:59:49.000Z",
      "languages": ["en"]
    }
  ],
  "meta": { "total": 41, "generated_at": "…" }
}

Topics

GET/api/v1/topics

The 12 topics, each with its number of releases.

Topics come from keyword rules shared with pressreleasedatabase.com; most non-English releases carry none.

finance
Finance
crypto
Crypto
ai
AI
saas
SaaS
healthcare
Healthcare
real-estate
Real estate
energy
Energy
retail
Retail
automotive
Automotive
gaming
Gaming
media
Media
education
Education

It takes no parameters.

Request
curl "https://pressreleasefeed.org/api/v1/topics"
Example response
{
  "data": [{ "slug": "ai", "name": "AI", "releases": 512 }],
  "meta": { "total": 12, "generated_at": "…" }
}

Companies

GET/api/v1/companies

Every company in the directory, ordered by name, with its country, region, niches and home language. A company that no release is linked to yet is listed too. The list is not paged.

Parameters of GET /api/v1/companies
ParameterValuesMeaning
regionasiaA region slug from /api/v1/regions.
countryJPAn ISO 3166-1 alpha-2 code, in any case.
nicheautomotiveA niche slug from /api/v1/niches.
languagejaAn ISO 639-1 code: the company’s home language.

Every parameter given must match the same company, and an unknown value is a 400. A valid combination that no company satisfies returns 200 with "data": [].

Request
curl "https://pressreleasefeed.org/api/v1/companies?region=asia&niche=automotive"
Example response
{
  "data": [
    {
      "slug": "toyota",
      "name": "Toyota",
      "country": "JP",
      "region": "asia",
      "niches": ["automotive"],
      "language": "ja"
    }
  ],
  "meta": {
    "total": 1,
    "filters": {
      "region": "asia",
      "country": null,
      "niche": "automotive",
      "language": null
    },
    "generated_at": "…"
  }
}

Countries and niches

  • A company’s country is where it is run from: Medtronic, Eaton and Chubb are US companies, and Hong Kong is its own country.
  • A company has one to three niches.

Niches

GET/api/v1/niches

All 30 niches, each with the number of companies in it (company_count, 0 for an empty niche).

aerospace-defense
Aerospace & Defense
apparel-luxury
Apparel & Luxury
automotive
Automotive
banking
Banking
business-services
Business Services
chemicals-materials
Chemicals & Materials
conglomerates
Conglomerates
construction-engineering
Construction & Engineering
consumer-electronics
Consumer Electronics
consumer-goods
Consumer Goods
ecommerce-internet
E-commerce & Internet
oil-gas
Energy: Oil & Gas
financial-services
Financial Services
food-beverages
Food & Beverages
healthcare-services
Healthcare Services
industrial-machinery
Industrial Machinery
insurance
Insurance
logistics-transportation
Logistics & Transportation
media-entertainment
Media & Entertainment
medical-devices
Medical Devices
metals-mining
Metals & Mining
pharma-biotech
Pharmaceuticals & Biotech
real-estate
Real Estate
retail
Retail
semiconductors
Semiconductors
software-it
Software & IT Services
telecommunications
Telecommunications
travel-hospitality
Travel & Hospitality
utilities-renewables
Utilities & Renewables
wholesale-distribution
Wholesale & Distribution

It takes no parameters.

Request
curl "https://pressreleasefeed.org/api/v1/niches"
Example response
{
  "data": [
    {
      "slug": "automotive",
      "name": "Automotive",
      "company_count": 41
    }
  ],
  "meta": { "total": 30, "generated_at": "…" }
}

Regions

GET/api/v1/regions

The seven regions, each with the countries that have at least one company, sorted by name.

north-america
North America
latin-america
Latin America
europe
Europe
middle-east
Middle East
africa
Africa
asia
Asia
oceania
Oceania

It takes no parameters.

Request
curl "https://pressreleasefeed.org/api/v1/regions"
Example response
{
  "data": [
    {
      "slug": "asia",
      "name": "Asia",
      "countries": [{ "code": "JP", "name": "Japan", "company_count": 118 }]
    }
  ],
  "meta": { "total": 7, "generated_at": "…" }
}

Which countries are where

  • North America is the US, Canada and Bermuda (with Greenland and Saint Pierre and Miquelon).
  • Latin America is Mexico, Central and South America and the Caribbean.
  • The Middle East is the Gulf states, Iran, Iraq, Israel, Jordan and Lebanon (with Palestine, Syria and Yemen).
  • Turkey, Russia and the Caucasus count as Europe, and Egypt counts as Africa.

RSS

GET/feed.xml

RSS 2.0 with the same filters as /api/v1/releases, plus limit in place of paging. A feed link works in any feed reader.

Parameters of GET /feed.xml
ParameterValuesMeaning
limit1 to 100How many items, newest first; 50 by default.
keyYour API keyAdds each item’s full text in <content:encoded>. Only the feed takes a key in its URL, for feed readers that cannot send headers. Treat such a URL as a secret.

It takes every Releases filter too, with the same values and rules:

  • publisher
  • topic
  • language
  • kind
  • companies
  • company
  • region
  • country
  • niche
  • company_language
  • q
  • since
  • until
Feed links
https://pressreleasefeed.org/feed.xml?topic=finance
https://pressreleasefeed.org/feed.xml?publisher=apple,microsoft&language=en
https://pressreleasefeed.org/feed.xml?companies=largest&language=en
https://pressreleasefeed.org/feed.xml?company=toyota
https://pressreleasefeed.org/feed.xml?region=asia&niche=automotive
Request
curl "https://pressreleasefeed.org/feed.xml?topic=finance"
Example response
<channel>
  <title>Press Release Feed — Finance</title>
  <link>https://pressreleasefeed.org</link>
  <item>
    <title>…</title>
    <link>https://www.apple.com/newsroom/…</link>
    <guid isPermaLink="false">9f91ab84-4ade-49d1-b9ae-be5c1a216e38</guid>
    <pubDate>Mon, 12 Oct 2026 13:59:49 GMT</pubDate>
    <dc:creator>Apple</dc:creator>
    <category>finance</category>
    <category>Apple Inc.</category>
    <description>…</description>
  </item>
</channel>

What each item carries

  • <dc:creator> is the issuing company (a newsroom’s own name for company newsrooms). A wire release without a detected issuer has no <dc:creator>.
  • Each linked company gets one <category>, holding the company’s name, after the topic categories.
  • companies=largest and the company filters work here too, with the same-company rule.
  • Errors on /feed.xml, such as an invalid parameter, come back as JSON, like the rest of the API.

Caching and limits

How long answers may be cached
AnswerCached for
Release lists and single releases60 seconds
Publishers, topics, companies, niches, regions and RSS5 minutes
Anything with full textNever
  • Please poll a feed no more often than every few minutes.
  • A page holds at most 100 releases (per_page) and paging stops at page 500. A feed holds at most 100 items (limit), and a query string may be up to 2,048 characters long.

Errors

An error comes back with its status code and a JSON body that says what went wrong: { "error": "message" }.

Error status codes
StatusMeaning
400A parameter is invalid (for example a companies value other than largest, or an unknown company, region, country, niche or company_language), a keyword search is too broad to finish in time, or a JSON endpoint received ?key=. The message says which.
401Unknown API key.
403Revoked API key.
404Unknown path or release.
414Query string longer than 2,048 characters.
503Temporarily unavailable: retry shortly.
Request
curl "https://pressreleasefeed.org/api/v1/releases?company=acme"
Example response
{ "error": "Unknown company: acme" }