Specialist research. Published by Synoptic.
Sources & methodology

PR Newswire access research

PR Newswire RSS structure: a dated field inspection

We fetched the official all-news RSS address once on 14 November 2026 and inspected XML structure. We retained field counts and a response hash; release titles, summaries, article bodies and media were not retained in the report.

Observed in one response

The requested URL returned RSS 2.0. Its channel link pointed to /rss/news-releases-list.rss. There were 20 items in this snapshot. All 20 had a title, link, guid, publication date and description; the guid matched the link in every observed item.

6 records
title, link, guid, pubDate, description20 of 20 for eachCore feed identity, time and summary fields
Dublin Core contributor / language / publisher20 of 20 for eachSeparate namespaced provenance fields
Dublin Core subject19 of 20Optional category-related data
PRN industry20 of 20Wire-specific namespace
PRN subject15 of 20Optional source-specific field
Media RSS content18 of 20Asset reference, not an asset-reuse license

A rolling snapshot cannot establish completeness

Twenty observed items is a property of this response, not a published daily volume or an archive limit. We did not compare against every release in a defined reference universe. Nor did we measure the time between a release publication and its arrival in the feed. The channel’s publication time and last-build time were different; neither alone establishes per-item delivery delay.

Repeat the structural inspection

Save an authorized feed response locally, then pass its path to this script. It prints field names and counts without printing release content.

python
import json
import sys
from pathlib import Path
import xml.etree.ElementTree as ET

# Supply a local file saved from an authorized RSS fetch.
raw = Path(sys.argv[1]).read_bytes()
if len(raw) > 2_000_000 or b"<!DOCTYPE" in raw.upper():
    raise ValueError("unsupported XML payload")
root = ET.fromstring(raw)
channel = root.find("channel")
if channel is None:
    raise ValueError("RSS channel missing")
items = channel.findall("item")
fields = sorted({field.tag for item in items for field in item})
print(json.dumps({
    "format": root.tag,
    "version": root.attrib.get("version"),
    "observed_items": len(items),
    "field_occurrences": {tag: sum(item.find(tag) is not None for item in items)
                          for tag in fields},
    "guid_equals_link_count": sum(bool(item.findtext("guid")) and item.findtext("guid") == item.findtext("link")
                                  for item in items),
}, indent=2))

The same structural checks were executed on the live snapshot on 14 November 2026. Field names and counts can change. No article page was fetched.

Keep the source terms beside the adapter

PR Newswire’s official directory distinguishes RSS metadata from its full-text publisher feeds. Review the relevant permissions before building storage, display or analysis around either route. Do not follow every item link to create an unlicensed full-text crawler.

Source notes

  1. PR Newswire all-news RSS ↗

    One live structural probe on 2026-11-14; rolling snapshot, not archive or licensing evidence.

  2. PR Newswire RSS News Feeds ↗

    Official RSS directory and separate XML/HTML full-text publisher options.

  3. PR Newswire terms of use ↗

    Public-site restrictions and distinction between site terms and service-specific agreements.

The Synoptic workflow

Check a Synoptic monitoring workflow

See where stream delivery fits and which PR Newswire access questions remain open.

Check a Synoptic monitoring workflow