# Changelog of Reddit Post Comments Scraper — Thread, Depth, Karma (`foxlabs/reddit-post-comments-scraper`) Actor

- **URL**: https://apify.com/foxlabs/reddit-post-comments-scraper/changelog.md
- **Full Actor documentation**: https://apify.com/foxlabs/reddit-post-comments-scraper.md

## Changelog

### 0.3.0 — 2026-10-17 · the full comment tree is back (score, depth and parent on every row)

**Why:** build 0.2 reported Reddit's own "more comments" loaders as closed. They are not. Measured 2026-10-17 on
r/AskReddit (3,489 comments at the time of measurement):

- Each loader is a `<faceplate-partial method="post">` holding a hidden `cursor` field. Asked the way Reddit's
  own client asks it — **a POST with that cursor** — it answers with 4–100 further comments, each carrying score,
  depth, body, author, time and permalink, plus the loaders of the level below it.
- A **GET** of the same address answers "page not found", and a **POST without the cursor** falls back to the
  thread's first comments. Build 0.2 tried both, saw nothing, and fell back to the thread's feed.
- The cursor also names the comment a reply hangs under (`commenttree:…:d1:t1_<id>`), so the tree is rebuilt
  faithfully instead of guessed.

**What this changes for you:**

- `score`, `depth` and `parentId` are now filled on **every** comment, not only on the post page's first 25.
  Measured run: **1,500 comments, those fields 100 % filled, every id unique**, depths 0–3 (736 / 446 / 218 / 100),
  267 requests, 262 s, ~2 MB on the wire.
- `commentSort` is applied for real: the post page honours `?sort=`, and the loaders it hands back carry that
  order on. Until now the option only appeared in the run's headline.
- `maxDepth` stops the walk instead of filtering afterwards, so your budget buys comments that are delivered.
  `minCommentScore` now applies to the whole thread, since every row has a score.
- A thread that still has comments left says so ("raise maxCommentsPerPost for the rest"). Build 0.2 could call
  the undelivered rest "deleted, removed or collapsed" when the budget had simply run out.
- The thread's feed (RSS) is no longer read for breadth; it remains the probe that tells a private subreddit from
  a banned one.
- **Honest difference from build 0.1.x (the JSON path):** that build read whole subtrees at a time, so a budget of
  1,500 reached depth 9 on a busy thread (d0 106 · d1 363 · … · d9 24). This build walks the thread the way a
  reader scrolls it — breadth before depth — so the same budget gives d0 736 · d1 446 · d2 218 · d3 100 on a
  3,503-comment thread. Same count, same completeness, a flatter slice. Raise `maxCommentsPerPost` for the deep
  end of a very large thread.

**Unchanged:** every field name, the dataset shape, the `comment` and `post` events and their prices, the filters,
the only-new lists, the author codes, the free status rows and the Standby API. `editedAt`, `controversiality`,
`collapsed`, `locked`, `stickied`, `authorFlair` and `authorPremium` are still `null` — Reddit's HTML does not
carry them.

### 0.2.1 — 2026-10-17 · the address a post page answers for

- Measured: `/r/<subreddit>/comments/<id>/` — the short address, without the title's slug — answers with a page
  that holds **no post and no comments**, while `/comments/<id>/` (Reddit redirects it to the full permalink) and
  the full permalink answer in full. The Actor now uses the line you gave when it carries the slug and
  `/comments/<id>/` otherwise, and the thread's RSS is asked for `/comments/<id>/.rss` as well.
- Without this every line came back as "not shown to this run" — free and retryable, but empty. Caught on the
  platform before release (`_QA-2026-10-17.md`).

### 0.2.0 — 2026-10-17 · Reddit closed the JSON API: the thread comes from its page and its feed

**Why:** on 16 October 2026 Reddit stopped answering its JSON API for a visitor who is not signed in (HTTP 403 for
a guest token, from any address), and it answers such a visitor's "more comments" fragments with an empty stub.
The Actor was in maintenance from 16 to 17 October.

**What stayed the same:** every field name, the dataset shape, the `comment` and `post` events and their prices,
the filters, the only-new lists, the author codes (`hideAuthors`), the free status rows and the Standby API.

**What changed — read this if you depend on the score or the thread structure. Measured 2026-10-17 on a
3,603-comment thread in r/AskReddit:**

- The post's page carries the post and its **first 25 comments**, each complete: score, depth, the parent it
  answers, the OP and moderator marks.
- Past those 25 the comments come from the thread's own feed, which answers with up to **500 comments a request**
  and gives a different set for each order (the default and newest sets did not overlap at all; five orders
  together gave 764 of that thread's comments). Those rows carry the text, the author, the exact time and the
  permalink — and **`score`, `depth` and `parentId` are `null` on them**, because the feed does not say.
- `maxDepth` therefore only reaches the comments whose depth is known (the page's 25); `minCommentScore` likewise.
- `editedAt`, `controversiality`, `collapsed`, `locked`, `stickied`, `authorFlair` and `authorPremium` are `null`.
- `includeAuthorInfo` is off by default: the karma is now one profile-page read per author, cached for the run.
- A page that comes back without the post on it is reported as "not shown to this run", retryable, charged
  nothing — never as a deleted post.

### 0.1.1 — 2026-10-12

- README rewritten to the foXLabs store standard: AI-agent & Standby usage, quick-start, integration (JS/Python), use cases, FAQ, troubleshooting and support sections. No change to the Actor's code, fields, events or pricing.

### 0.1.0 — 2026-10-10

- First release. A post's comment tree as Reddit hands it to a visitor who is not signed in (guest token through Apify Proxy residential addresses): the thread in one answer (500 comments, 10 levels), then the "more comments" stubs — the ids of several stubs packed into one request of up to 100 (measured: 1,500 comments of a 9,000-comment thread in 31 requests and 57 s; one request per stub had needed 272 requests and 9.4 minutes).
- Every comment: text, score, depth, parent, exact and edit times, OP / moderator / admin marks, controversiality, stickied, locked, collapsed, removed or deleted state, each author's karma and age (`includeAuthorInfo`, 100 authors a request); the post's own row first (`includePost`); `hideAuthors` replaces names with stable per-account codes.
- Filters by score and depth; `onlyNewComments` lists; free status rows for lines that bring no thread (not a post, no such post, private, quarantined, Premium-only, no comments, duplicate); the last word names threads cut at `maxCommentsPerPost` and the comments Reddit counts but does not show.
- Standby API (`GET /comments`) prepared; the Actor is published in batch mode.
- Apify Proxy grupsuz seçildiğinde (arayüzün Proxy bölümü bunu yazıyor) koşu datacenter adreslerine düşüyordu ve Reddit onları HTTP 403 ile reddettiği için koşu tek satır okumadan ölüyordu — platformda 2026-10-19'da 4/4 koşuda ölçüldü, mağazadaki %45-53 başarı oranının en olası sebebi. Aktör artık bu durumda residential grubu kendisi ekliyor ve bunu günlükte söylüyor; şemadaki proxy ön-dolgusu da residential geliyor. Residential açılamazsa hata mesajı sebebi söylüyor (plan bu grubu içermiyor).
