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.
| title, link, guid, pubDate, description | 20 of 20 for each | Core feed identity, time and summary fields |
| Dublin Core contributor / language / publisher | 20 of 20 for each | Separate namespaced provenance fields |
| Dublin Core subject | 19 of 20 | Optional category-related data |
| PRN industry | 20 of 20 | Wire-specific namespace |
| PRN subject | 15 of 20 | Optional source-specific field |
| Media RSS content | 18 of 20 | Asset reference, not an asset-reuse license |
No matching records. Try a broader search.
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.
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
- PR Newswire all-news RSS ↗
One live structural probe on 2026-11-14; rolling snapshot, not archive or licensing evidence.
- PR Newswire RSS News Feeds ↗
Official RSS directory and separate XML/HTML full-text publisher options.
- 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