RSS, Atom & JSON Feed Date-Window Export avatar

RSS, Atom & JSON Feed Date-Window Export

Pricing

$1.00 / 1,000 exported feed items

Go to Apify Store
RSS, Atom & JSON Feed Date-Window Export

RSS, Atom & JSON Feed Date-Window Export

Export supplied public RSS, Atom and JSON Feed URLs 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

4

Total users

1

Monthly active users

a month ago

Last modified

Categories

Share

RSS & Atom Date-Window Export

Turn a list of public RSS 2.0, Atom 1.0 or JSON Feed 1.0/1.1 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 default example uses RSS. JSON Feed uses the same input fields, date-window rules and item pricing; no format selector is needed.

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.

examples/json-feed.json supplies the specification-linked Shape of Everything feed with the same five-item limit. A hosted check on September 27, 2026 returned five useful JSON Feed 1.0 items and an explicit partial outcome at the configured item limit. The publisher's feed can change; this example is not an availability guarantee.

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. JSON Feed uses date_published and date_modified 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.

JSON Feed requires a native id and useful content_text or sanitized content_html. Missing or blank IDs and unusable items are skipped and counted; useful siblings survive. String IDs retain every character, including surrounding spaces when the ID is not entirely blank. Numeric IDs use exact ordinary decimal text, so 1, 1.0, 1e0 and string "1" share an identity. Distinct large integers remain distinct. IDs over 2,048 characters fail the feed; they are never truncated or replaced with surrogate IDs. The first valid occurrence wins before date filtering.

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. For XML, 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.

JSON rows also contain external_url, ordered authors objects (name, url, avatar) and authors_source. Item-level authors takes precedence, then legacy author; absent item authors inherit the feed value. Provenance is item_authors, item_author, feed_authors, feed_author or none. An explicitly empty or malformed item author list does not silently inherit feed authors. Tags retain their order and duplicates. Attachments map url, mime_type and size_in_bytes to enclosure url, type and length, with optional title and duration_in_seconds. Invalid optional metadata is null or omitted with warnings. Unsafe numeric metadata, including duration underflow, is null rather than a fabricated value. These added fields are absent from XML rows.

JSON summaries prefer a nonblank native summary, then useful plain content, then sanitized HTML content. A title, summary or URL alone does not satisfy JSON Feed's content requirement. OUTPUT.feeds records format and feedTitle. A supplied next_url produces PAGINATION_NOT_FOLLOWED and TRUNCATED; the Actor never requests it or any article, author, image or attachment URL.

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 for every response, including redirects and errors; 4 MiB decompressed; 64 HTTP headers
Run response bodies200 MiB application-consumed bytes across all feeds and redirects
XML60,000 nodes, depth 32, 5,000 items per response; DTD/entities forbidden
JSON60,000 tokens including keys, depth 32, 5,000 items; UTF-8 objects with optional BOM
JSON strings and IDsEvery decoded string/key at most 65,536 characters; native IDs at most 2,048
Display metadata16,384 characters per title/summary, 50 tags, 20 enclosures; truncation flagged
JSON authors and numbers20 authors; optional attachment numbers between 0 and 9,007,199,254,740,991
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

JSON duplicate object keys, malformed Unicode, NaN, infinities and float-overflow values reject the whole response, including when they occur in unknown extension fields. Depth and token limits are checked before JSON decoding. Decimal expansion is bounded, so extreme exponents fail without allocating an enormous ID. Exact version URLs https://jsonfeed.org/version/1 and https://jsonfeed.org/version/1.1 are supported.

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.

OUTPUT.wireBytes counts response-body bytes consumed by the application, including rejected boundary chunks and redirect or error bodies. It is not an exact network-transfer or billing counter: headers and bytes buffered below the application are not included. A declared oversized response can be rejected before its body is read.

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 under Limited permissions cover RSS and Atom compatibility, JSON Feed 1.0/1.1, compressed responses, date windows, exact IDs, empty and malformed feeds, and charge-limit outcomes. Local tests cover additional transport and delivery faults. These are developer QA results, not independent customer validation. 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.