RSS & Atom Date-Window Export avatar

RSS & Atom Date-Window Export

Pricing

$1.00 / 1,000 exported feed items

Go to Apify Store
RSS & Atom Date-Window Export

RSS & Atom Date-Window Export

Export supplied public RSS and Atom feeds with exact UTC date windows, stable feed-scoped IDs, item-only datasets and separate feed outcomes.

Pricing

$1.00 / 1,000 exported feed items

Rating

0.0

(0)

Developer

Roman V

Roman V

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

1

Monthly active users

6 days ago

Last modified

Categories

Share

Turn a list of public RSS 2.0 or Atom 1.0 feed URLs into a dataset of useful items for a reporting interval. Publication and update dates stay separate. Each run also saves per-feed outcomes, exclusion counts and a delivery receipt in OUTPUT.

The Actor reads the items currently present in each supplied feed response. It cannot recover an older article that the publisher has removed from the feed. It does not search Google News, discover feeds, crawl article links, follow feed pagination, fetch enclosures or maintain a cross-run news baseline.

Start with a small example

An empty object uses the RSS Advisory Board's public five-item sample. These are sample NASA stories from 2023, not current news. Default selection is at most five items and a $0.005 item-charge ceiling.

{}

To select the sample's July 20 and 21 publication dates:

{
"feedUrls": ["https://www.rssboard.org/files/sample-rss-2.xml"],
"publishedFrom": "2023-07-20T00:00:00Z",
"publishedBefore": "2023-07-22T00:00:00Z",
"dateField": "published",
"maxItems": 5,
"maxChargeUsd": 0.005
}

Use the same JSON in Console or the Actor API request body. The package contains examples/defaults.json, examples/exact-window.json and examples/multi-feed.json. The latter supplies both the sample feed and NASA's public feed, with two items per feed and four overall.

Date and identity rules

publishedFrom includes the specified instant. publishedBefore excludes it. Both accept RFC 3339 timestamps with Z or a numeric offset, normalized to UTC. The field names remain the same when dateField is updated. Feed order is preserved, and an old item does not stop scanning the rest of a feed.

RSS uses native pubDate for publication and has no native update timestamp. Atom uses published and updated independently. Missing, invalid, timezone-free and unsupported dates stay null. Channel dates, update dates and fetch time never substitute for an absent publication date. RSS extension dates such as Dublin Core are outside this version's contract.

With a window, an absent selected date is excluded and counted by default. includeUndated: true returns it with window_membership: UNKNOWN_DATE. With no window, undated items are included and labeled NOT_FILTERED. Present matching dates are labeled IN_WINDOW.

A record_id hashes the normalized original input feed URL and the item's native RSS GUID or Atom ID. Redirects do not change that feed identity. Different feeds retain identical GUID strings as separate records; different IDs sharing a URL also remain separate. IDs are opaque, case-sensitive strings. An item without a native ID uses a hash of its XML element excluding surrounding feed whitespace. That fallback can change when item content changes and carries a warning. It is not a cross-run monitoring guarantee.

Repeated identities within one feed keep the first occurrence in source order. A conflicting later occurrence adds CONFLICTING_DUPLICATE_FIRST_WINS to the retained item and increments a feed counter. Filtering applies to the retained first occurrence. Input URL query parameters are preserved; normalized duplicate feed inputs are fetched once.

Output

Each dataset row is an item, with these fields:

FieldsMeaning
record_id, identity_basis, source_item_idFeed-scoped identity and its source
feed_url, final_feed_urlInput feed and final feed after allowed redirects
item_url, title, summarySupplied metadata, with safe text extraction for summaries
published_raw, published, updated_raw, updatedSource dates and parsed UTC values, independently nullable
date_basis, selected_date, window_membershipSelection evidence
tags, enclosures, warningsSupplied categories, enclosure metadata and explicit caveats

Atom alternate and enclosure links resolve xml:base. HTML/XHTML summaries remove executable markup; Atom text summaries remain literal text. Consumers must still render strings as text, not execute them as HTML. Missing titles remain null when a useful description or link exists. Empty items with no useful title, summary or link are skipped and counted. Full content:encoded articles and Atom content bodies are ignored.

OUTPUT.feeds has one outcome per normalized input feed. COMPLETE means that feed response was parsed and all matching items were selected. EMPTY_FEED means it contained no items. EMPTY_IN_WINDOW includes its excluded-date counters. TRUNCATED identifies selection or metadata limits. FETCH_FAILED, PARSE_FAILED and UNSUPPORTED_FORMAT distinguish failed sources. Feeds skipped after a total limit or deadline receive NOT_FETCHED_LIMIT or NOT_FETCHED_DEADLINE.

A run is PARTIAL when useful processing survives a failed or limited feed. If every source fails, it exits nonzero with SOURCE_FAILED. Invalid input and runtime storage failures also exit nonzero. A platform cap that stores fewer selected rows produces DELIVERY_INCOMPLETE and a nonzero exit. It is not reported as a complete export. Inspect billing.deliveredItems, per-feed delivery counts and the dataset together.

Limits and fees

BoundValue
Input25 HTTPS URLs, port 443, 2,048 characters each, 64 KiB JSON
Per-feed and total item selection1 to 1,000; defaults 100 per feed and 5 total
Source response2 MiB encoded, 4 MiB decompressed, 64 HTTP headers
XML60,000 nodes, depth 32, 5,000 items per response; DTD/entities forbidden
Display metadata16,384 characters per title/summary, 50 tags, 20 enclosures; truncation flagged
Selected XML fields65,536 characters maximum; oversized fields fail that feed
Dataset selection bytes8 MiB across the run
NetworkOne feed at a time, 3 redirects, 15 seconds per feed, 120-second collection deadline

No proxies, source cookies, source credentials, custom request headers or source retries are used. Public DNS answers are checked before aiohttp connects, and every redirect is validated. Private, loopback, local, multicast, transition and credential-bearing targets are rejected. Only the supplied feed is fetched. A source access failure is reported without bypassing it.

The configured price is $0.001 per item delivered to the default dataset, charged through Apify's automatic dataset-item event. The Actor adds no start fee or separate usage surcharge. Summary records and failed-source outcomes are not billable items. maxChargeUsd preselects at most floor(maxChargeUsd / 0.001) rows. A lower platform run cap can further reduce delivery. This field limits item charges; it does not guarantee a maximum total platform cost, including compute, transfer or storage.

A run writes the item batch once. The pinned dataset adapter disables internal SDK append retries while retaining SDK event limits and synthetic-event accounting. An uncertain append reports unknown delivery/charge counts. Restarting a completed run replays its receipt without a source fetch or append. Incomplete state fails closed. A fresh run is a new export and may charge for the same source items again.

Scope and evidence

Private hosted tests have exercised the bounded feed and delivery workflows under Limited permissions. The item and receipt contracts are in item_schema.json and output_record_schema.json. This evidence does not establish cheaper total cost, greater accuracy or exclusive features compared with other RSS Actors. Usage-priced alternatives can be cheaper for some workloads.

Only submit public feeds you are permitted to retrieve. Feed availability does not itself grant rights to republish the publisher's content.