# Changelog of Medium Scraper — Articles, Full Text, Authors, Claps & Comments (`logiover/medium-scraper`) Actor

- **URL**: https://apify.com/logiover/medium-scraper/changelog.md
- **Full Actor documentation**: https://apify.com/logiover/medium-scraper.md

## Changelog

### 2026-10-15

- A run that reaches its maximum cost per run now stops cleanly with its results saved and a status message, instead of ending as aborted.
- A proxy group your account cannot use no longer stops the run at start-up; it falls back to the default Apify Proxy.

### 2026-10-13 — first release

- **Sources:** tag archive (complete chronological history of any tag), Medium's ranked tag lists (trending, top of
  week / month / year / all time, or all combined), search for posts, people, publications or tags, authors
  (every story since the account started), publications (custom domains included) and any Medium URL or story ID.
- **Data:** 71 typed fields — claps, clappers, responses, reading time, word count, tags, paywall flag, language,
  author and publication stats; optional full article text as Markdown and plain text (images, links, code blocks
  with language); responses and reply threads with full text; profile rows for authors, publications and tags.
- **Depth and speed (measured on the platform):** 10,000 posts in 40 s; the full 4,840-post history of
  `rust-programming-language` in 34 s; 1,000 posts in 6–10 s; the prefilled example in ~4 s.
  Chronological feeds are read in parallel time slices and admitted strictly newest-first, so `maxItems` keeps
  exactly the newest N; lanes split busy slices and never run far ahead, which keeps memory flat with article text
  (10,000 posts with full text: 216 MB, 103 s).
- **Filters:** published after / before (absolute or relative dates — chronological sources start and stop reading
  at the dates), minimum claps, language, skip member-only stories, per-source cap.
- **Reliability:** direct connection with automatic switch to Apify Proxy if Medium refuses, hedged requests,
  retries, a time budget taken from the run's real timeout, exact `maxItems` (synchronous reservation, no
  over-delivery), duplicates removed across sources, unknown tags / authors / publications end as *Succeeded* with an
  explanation, SUMMARY with per-type counts, latency percentiles and notes.
- **Pay-per-event budget:** the run reads its "Maximum cost per run" at start (the platform sets one even when the
  user does not) and plans for exactly the results it covers; it then ends as *Succeeded* with
  "Saved N results — this run's maximum cost ($X) covers N results…" and `stoppedBy: "MAX_COST"` in SUMMARY instead
  of being aborted by the platform. Pushes also check the SDK's charge result and never push past the budget.
  Tested locally with a $120 test budget → exactly 120 rows, succeeded.
- Default memory 1 GB: measured 4,000 full-text posts in 29 s at 1 GB vs 96 s at 512 MB (the extra CPU share is what
  matters); metadata-only runs are fine at 512 MB.
