# Changelog of RSS Feed Finder and Reader – Blog and News Article API (`rowcraft/rss-feed-finder-reader`) Actor

- **URL**: https://apify.com/rowcraft/rss-feed-finder-reader/changelog.md
- **Full Actor documentation**: https://apify.com/rowcraft/rss-feed-finder-reader.md

## Changelog

### 1.0.3 (2026-10-17)

- Fix: a robots.txt served as an HTML page (catch-all page or a redirect to the home page, for example thumb.wikimedia.org) counted as an anti-bot block, so every page on that host was refused; it is now treated as a missing robots.txt, as the standard says. Real anti-bot pages are still recognised.

### 1.0.2 (2026-10-17)

- Shared library: URL-like fields named link or guid (feed items) are no longer flagged as phone numbers; retry log line now reads "retry n/m".
- Shared library: an HTML page where JSON was expected (maintenance or block page, seen on 17.10.2026 at the Polish KRS API and at Workday) is retried and then reported with the page text instead of crashing the run on a parse error.

### 1.0.1 (2026-10-16)

- README: real screenshots of the input form and of the results (Console).
- Icon uploaded in Console; two example tasks run on the platform.

### 1.0.0 (2026-10-15)

- First release: the feeds of a website found from its domain name, and their newest articles delivered one row per article. Give websites (`blog.example.com`, or the address of a page), feed addresses, or both.
- Feeds are found through the `<link rel="alternate">` tags of the page you give; when it advertises none, `/feed`, `/rss`, `/rss.xml`, `/atom.xml`, `/feed.xml` and `/index.xml` are tried (in the folder of the page first). Comment feeds are left out, two addresses of the same feed are read once, and up to 3 feeds per website are read by default.
- Formats: RSS 2.0 and 0.9x, RSS 1.0 (RDF), Atom 1.0 and 0.3, JSON Feed 1 and 1.1. The XML reader handles CDATA, entities that XML does not know (`&nbsp;`, `&eacute;`), namespace prefixes under any name, wrong or missing encodings (Latin-1 and others), stray tags, and a feed cut at the size limit; a DOCTYPE is never expanded. Feeds are read up to 5 MB and up to 2,000 articles each.
- One row per article, 17 fields: `id`, `title`, `link`, `publishedAt`, `updatedAt`, `summary` (plain text, at most 500 characters), `categories`, `imageUrl`, `siteUrl`, `feedUrl`, `feedTitle`, `feedLanguage`, `feedFormat`, `guid`, `enclosureUrl`, `enclosureType`, `extractedAt`. Dates are converted to ISO 8601 in UTC and never guessed. No author field: `author`, `dc:creator`, `itunes:author`, `managingEditor` and `webMaster` are never read, and e-mail addresses, phone numbers and contact-person names in texts are masked.
- Options: `maxArticlesPerFeed` (the newest N of each feed, default 50), `maxFeedsPerSite`, `publishedAfter` (a day or `7 days`), `keywords` (title or summary, accent and case insensitive), `maxItems`.
- `onlyNew` and `stateName`: the second run delivers, and charges, only the articles that are new since the first (identified by guid or by link without tracking parameters, so a feed that changes its guids does not repeat articles). `notifyUrl` sends the headlines of the new articles when the run ends, in a form that Slack and Discord show as a list.
- `COVERAGE` per entry (ok, no_feed, blocked, robots_disallowed, not_found, error, not_checked) with the feeds found, how each was found, how many articles each held and how many were delivered; `RUN_SUMMARY` with the counts. A website without a feed is reported as "no feed found" and never charged.
- robots.txt is read on every host before any request to it, including a host that a feed address redirects to; a Crawl-delay of up to 10 seconds is honoured; anti-bot pages, 403, 429 and robots refusals are reported and never charged; after 10 blocked entries in a row the run stops and says so. The run stops 90 seconds before its timeout with the summary and the "Only new articles" memory saved. 256 MB of memory is enough.
