# Changelog of Medium User Posts Scraper (`codingfrontend/medium-user-posts-scraper`) Actor

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

## Changelog

### \[3.1.0] - 2026-08-31

#### Changed

- Added strict input deduplication, bounded feed failures, explicit diagnostics, common success fields, and a fixed OUTPUT summary.
- Made URL/date parsing defensive, resolved relative feed-content links, and stopped fabricating a one-minute read time for empty content.
- Added current dataset/output/key-value schemas, recursive validation, unit tests, bounded QA inputs, and lockfile-based Docker installation.

### \[3.0.0] - 2026-05-22

#### Changed

- Increased RSS crawl concurrency from 5 → 10 (faster parallel RSS fetching for multiple users)
- Increased browser profile scraping concurrency from 3 → 5
- Increased scroll attempts from 5 → 20 with 3s wait per scroll for more posts per user profile
- Extended browser `requestHandlerTimeoutSecs` from 120 → 180 to accommodate deep scrolling

All notable changes to the Medium User Posts Scraper are documented here.

### \[1.1.0] - 2026-05-21

#### Added

- **Multiple usernames support**: New `usernames` array input — fetch posts from multiple users in one run.
- **Parallel RSS fetching**: Added `maxConcurrency: 5` for CheerioCrawler and `maxConcurrency: 3` for PlaywrightCrawler.
- Input schema updated with `usernames` (stringList) field.

#### Changed

- `validateInput` now accepts and passes through `usernames` array.
- Single `username` field now optional when `usernames` array is provided.

### \[1.0.0] - 2026-05-21

#### Added

- Initial production release of the Medium User Posts Scraper.
- Medium internal API-based architecture for user-specific post retrieval.
- Supports single `username` input with cursor-based pagination for all user posts.
- Modular project structure:
  - `src/main.js` — entry point with input validation and crawler init.
  - `src/routes.js` — Crawlee router factory.
  - `src/routes/handlers.js` — page handler with pagination logic.
  - `src/extractors/` — user post metadata extraction logic.
  - `src/filters/` — URL-based deduplication.
  - `src/schema/input.js` — input validation (username, maxItems).
  - `src/utils/` — URL builder, helpers, and API call utilities.
  - `src/errors/` — `ScraperError`, `ErrorTypes`, `ErrorHandler`.
- Output fields: `title`, `url`, `author`, `publication`, `claps`, `responses`, `readTime`, `publishedAt`, `tags`, `memberOnly`, `scrapedAt`.
- `.actor/actor.json`, `input_schema.json`, `dataset_schema.json` for Apify platform compatibility.
- Dataset views in `dataset_schema.json` for Apify Storage table display.
- `validate-datasets.js` for local dataset output validation.
- `Dockerfile` for Apify cloud deployment.
- `README.md` with full Apify usage guide.
