Medium Articles Scraper
Pricing
from $0.50 / 1,000 article rows
Medium Articles Scraper
Scrape public Medium article metadata from RSS feeds by tag, author, publication, or feed URL.
Pricing
from $0.50 / 1,000 article rows
Rating
0.0
(0)
Developer
Hanna Nosova
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Collect public Medium article metadata by tag, author, publication, or supported Medium feed URL. The Actor focuses on reliable public metadata and does not require a Medium account.
Use it for content research, AI/RAG dataset preparation, editorial monitoring, trend analysis, and competitive intelligence workflows that need recent public Medium article metadata with predictable CSV, JSON, Excel, API, and webhook exports.
At a glance
- Primary job: Scrape recent public Medium RSS article metadata and snippets.
- Input: Medium tags, author handles, publication slugs, or Medium
/feed/...URLs. - Output: One charged dataset row per article plus free diagnostic rows for unsupported or failed sources.
- Best for: Content marketers, editorial researchers, AI dataset builders, trend analysts, and monitoring workflows.
Common workflows
- Topic research: Track recent Medium posts for tags such as
artificial-intelligenceordata-science. - Author monitoring: Collect recent public posts from a Medium creator handle such as
@ev. - Publication monitoring: Watch a Medium publication feed such as
the-generator. - AI/RAG datasets: Export public titles, URLs, tags, snippets, dates, and image URLs for downstream enrichment.
- Automation: Schedule repeat runs, compare datasets over time, or trigger webhooks when new article URLs appear.
Input recipes
- Small tag smoke test:
tags: ["artificial-intelligence"],maxItems: 10. - Author monitoring:
authors: ["@ev"],maxItems: 10. - Publication feed:
publications: ["the-generator"],maxItems: 10. - Multi-topic comparison:
tags: ["artificial-intelligence", "data-science"],maxItemsPerSource: 10,maxItems: 20. - Direct feed URL:
startUrls: [{ "url": "https://medium.com/feed/tag/data-science" }].
What data can you extract?
| Field | Description |
|---|---|
itemType | article for result rows or error for source diagnostics. |
input, inputType, feedUrl, feedTitle | Source input, normalized type, resolved feed URL, and source title. |
articleId, guid, url, canonicalUrl | Article identifiers and links derived from the RSS feed. |
title, subtitle, authorName, publicationName | Public article metadata when exposed by RSS. |
publishedAt, updatedAt, rawPublishedAt, rawUpdatedAt | Parsed and raw RSS date values. |
tags, tagsNormalized | RSS categories and normalized tag slugs. |
snippetHtml, snippetText, imageUrl | Feed description/content fragment, plain text, and first image URL when available. |
readingTime, readingTimeMethod | Estimated reading time from feed text. |
isMemberOnly | Best-effort public indicator when detectable; otherwise null. |
sourceInputs, scrapedAt, status, errorCode, errorMessage | Traceability and diagnostics for partial failures. |
Input configuration
| Setting | JSON key | Use it for | Example |
|---|---|---|---|
| Medium feed or page URLs | startUrls | Direct /feed/... URLs, tag URLs, author URLs, publication URLs. | https://medium.com/feed/tag/artificial-intelligence |
| Tags | tags | Topic feeds. Spaces become Medium tag slugs. | data science |
| Authors | authors | Author handles or profile URLs. | @ev |
| Publications | publications | Publication slugs or URLs. | the-generator |
| Maximum article rows | maxItems | Cap charged article rows across all sources. | 25 |
| Maximum articles per source | maxItemsPerSource | Cap rows from each feed. | 10 |
| Include snippet HTML | includeSnippetHtml | Save raw feed HTML in addition to snippetText. | true |
| Include article details | includeArticleDetails | Reserved for future safe enrichment; V1 keeps this disabled. | false |
| Proxy configuration | proxyConfiguration | Optional proxy settings; usually not needed for public Medium sources. | { "useApifyProxy": false } |
Example input
{"tags": ["artificial-intelligence"],"authors": ["@ev"],"publications": ["the-generator"],"maxItems": 25,"maxItemsPerSource": 10,"includeSnippetHtml": true}
Example output
{"itemType": "article","input": "artificial-intelligence","inputType": "tag","feedUrl": "https://medium.com/feed/tag/artificial-intelligence","feedTitle": "Medium - Artificial Intelligence","articleId": "abc123def456","guid": "https://medium.com/p/abc123def456","url": "https://medium.com/example/story-abc123def456","canonicalUrl": "https://medium.com/example/story-abc123def456","title": "Example Medium story","authorName": "Example Author","publicationName": "Medium - Artificial Intelligence","publishedAt": "2026-07-16T08:00:00.000Z","tags": ["Artificial Intelligence"],"tagsNormalized": ["artificial-intelligence"],"snippetText": "Short public feed snippet...","imageUrl": "https://miro.medium.com/example.png","readingTime": 1,"readingTimeMethod": "estimated_from_feed_words","isMemberOnly": null,"source": "medium-rss","sourceInputs": ["artificial-intelligence"],"scrapedAt": "2026-07-16T10:00:00.000Z","status": "ok","errorCode": null}
Pricing
| Event | Free | Bronze | Silver | Gold | Platinum | Diamond | Charged when |
|---|---|---|---|---|---|---|---|
| Run start | $0.005 | $0.005 | $0.005 | $0.005 | $0.005 | $0.005 | Once when the Actor starts. |
| Article row | $0.00095 | $0.00080 | $0.00065 | $0.00050 | $0.00035 | $0.00025 | Each article row saved to the dataset. Diagnostic rows are not charged as article rows. |
Tips for best results
- Use feed-shaped inputs: Direct
https://medium.com/feed/...URLs are most reliable. - Prefer specific sources: Split broad monitoring into focused tag, author, or publication feeds.
- Start small: Use
maxItems: 10while checking output quality and spend. - Expect feed limits: Medium RSS feeds usually expose recent items, not unlimited history.
API usage
Node.js:
import { ApifyClient } from "apify-client";const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor("fetch_cat/medium-articles-scraper").call({tags: ["artificial-intelligence"],maxItems: 10});console.log(run.defaultDatasetId);
Python:
from apify_client import ApifyClientclient = ApifyClient("YOUR_APIFY_TOKEN")run = client.actor("fetch_cat/medium-articles-scraper").call(run_input={"authors": ["@ev"],"maxItems": 10,})print(run["defaultDatasetId"])
cURL:
curl -X POST "https://api.apify.com/v2/acts/fetch_cat~medium-articles-scraper/runs?token=YOUR_APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"publications":["the-generator"],"maxItems":10}'
MCP and AI agents
Use this Actor from MCP-compatible tools through the official Apify MCP Server.
$claude mcp add --transport http apify "https://mcp.apify.com?tools=fetch_cat/medium-articles-scraper"
{"mcpServers": {"apify": {"url": "https://mcp.apify.com?tools=fetch_cat/medium-articles-scraper"}}}
Example prompt: "Run Medium Articles Scraper for the artificial-intelligence tag and summarize the latest titles and tags."
Limits and caveats
- Metadata-first V1: Full article bodies, claps, responses, and native search ranking are not scraped in this version.
- No account data: The Actor does not use Medium cookies, logins, private drafts, recommendations, stats, or member-only bypasses.
- Diagnostics: Unsupported direct HTML URLs produce clear diagnostic rows instead of silent empty success.
- Freshness: RSS feeds expose recent public items and can change between runs.
Legality and responsible use
Process only public data that you are allowed to access. Follow Medium's terms, Apify's terms, and applicable laws.
Related actors
FAQ
Can I export results?
Yes. Apify datasets support JSON, CSV, Excel, XML, RSS, and API access.
Why are some fields empty?
Medium RSS feeds do not expose every field for every item. The Actor leaves unavailable fields empty instead of guessing.
Why did I get an error row for a Medium URL?
V1 supports public Medium feeds plus tag, author, and publication inputs. Unsupported direct article/page URLs are reported as diagnostics so runs do not end in silent empty output.
Support
Open an issue from the Actor page if a run fails or output looks wrong. Include the run ID or run URL, input JSON, expected output, actual output, and one reproducible public URL such as https://medium.com/feed/tag/artificial-intelligence.