Medium User Articles Scraper
Pricing
Pay per event
Medium User Articles Scraper
Scrape a Medium author's published articles via their RSS feed — title, link, author, claps placeholder, body excerpt, published date, tags. Works for any public Medium profile. No login.
Pricing
Pay per event
Rating
0.0
(0)
Developer
DevilScrapes
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
🎯 What this scrapes
Medium publishes an RSS feed for every author at medium.com/feed/@username. This Actor takes a list of usernames or feed URLs, fetches each feed, and writes one row per article with title, link, body excerpt (HTML), tags, and published date. Perfect for backfilling an author's catalogue or watching for new posts.
🔥 What we handle for you
- 🛡️ Browser fingerprint rotation —
curl-cffiimpersonates real Chrome / Firefox / Safari TLS handshakes so the target sees a browser, not Python. - 🌐 Residential proxy rotation via Apify Proxy — fresh session and exit IP on every block.
- 🔁 Retries with exponential backoff on
408 / 429 / 5xx— up to 5 attempts per page,Retry-Afterhonoured. - 🧱 Rate-limit-aware pacing — when the target pushes back, we slow down instead of getting banned.
- 🧊 Clean, typed dataset rows — Pydantic-validated, ISO-8601 timestamps, stable IDs, JSON / CSV / Excel export straight from the Apify Console.
- 💰 Pay-Per-Event pricing — you only pay for results that hit your dataset. No data, no charge.
💡 Use cases
- Author monitoring — watch a thought leader and pipe new posts to Slack.
- Translation pipeline — bulk-extract a series of articles for translation.
- Newsletter assembly — combine RSS feeds from 20 authors into one curated weekly digest.
- Backfill — mirror your own Medium catalogue into another CMS.
⚙️ How to use it
- Click Try for free at the top of the page.
- Fill in the input form — most fields have sensible defaults.
- Click Start. Output streams into the run's dataset.
- Export from Storage → Dataset as JSON, CSV, or Excel — or fetch via the API.
📥 Input
| Field | Type | Required | Default | Notes |
|---|---|---|---|---|
usernames | array | yes | ['@medium'] | List of Medium usernames (with or without the @) or full profile / feed URLs. Each becomes one feed fetch. |
maxArticlesPerUser | integer | no | 10 | Medium's per-user RSS feed typically exposes the latest 10. We honour that cap. |
includeContent | boolean | no | True | Medium's RSS includes a content:encoded body — we surface it when true. |
proxyConfiguration | object | no | {'useApifyProxy': True} | Medium sometimes throttles cloud IPs. Apify Proxy helps. |
Example input
{"usernames": ["@Medium"],"maxArticlesPerUser": 3,"includeContent": false,"proxyConfiguration": {"useApifyProxy": false}}
📤 Output
Every row is one dataset item.
| Field | Type | Notes |
|---|---|---|
username | string | Medium username (with @ prefix). |
article_id | ['string', 'null'] | Medium-side guid for the article. |
title | string | Article title. |
link | string | Canonical article URL. |
author | string | Author display name. |
content_html | ['string', 'null'] | HTML article body (when includeContent=true). |
categories | array | Tags / categories applied to the article. |
published | ['string', 'null'] | Publish timestamp (ISO-8601). |
scraped_at | string | When this row was recorded. |
Example output
{"username": "@Medium","title": "What's new at Medium","link": "https://medium.com/@Medium/whats-new-1abc","author": "Medium","categories": ["medium","writing"],"published": "2026-04-15T20:00:00+00:00"}
💰 Pricing
Pay-Per-Event — you pay only when these events fire:
| Event | USD | What it is |
|---|---|---|
actor-start | $0.005 | One-off warm-up charge per run |
result | $0.002 | Per dataset item |
Example: 1 000 results at the rates above ≈ $2.00. No subscription, no minimum, no card to start — Apify gives every new account $5 of free credit.
🚧 Limitations
Medium's RSS is read-only and caps at 10 articles per author. Claps, follower count, and reading-time stats live in the rendered HTML, not RSS.
❓ FAQ
Why only 10 articles?
Medium's per-user RSS exposes the latest 10. For older articles, use Medium's archive API (separate Actor).
Why is published sometimes empty?
Some Medium accounts (especially publications) emit malformed timestamps. We surface null rather than guess.
What about claps count?
Claps are not in the RSS feed — they'd require a per-article HTML scrape.
Publications vs personal?
Both work — pass @publication or the publication slug if URL-shaped.
💬 Your feedback
Spotted a bug, hit a weird edge case, or need a new field? Open an issue on the Actor's Issues tab on Apify Console — we ship fixes weekly and we read every report.