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. |
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
}
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 ApifyClient
client = 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.
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.