Medium Articles Scraper avatar

Medium Articles Scraper

Pricing

from $0.50 / 1,000 article rows

Go to Apify Store
Medium Articles Scraper

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

Hanna Nosova

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

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-intelligence or data-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?

FieldDescription
itemTypearticle for result rows or error for source diagnostics.
input, inputType, feedUrl, feedTitleSource input, normalized type, resolved feed URL, and source title.
articleId, guid, url, canonicalUrlArticle identifiers and links derived from the RSS feed.
title, subtitle, authorName, publicationNamePublic article metadata when exposed by RSS.
publishedAt, updatedAt, rawPublishedAt, rawUpdatedAtParsed and raw RSS date values.
tags, tagsNormalizedRSS categories and normalized tag slugs.
snippetHtml, snippetText, imageUrlFeed description/content fragment, plain text, and first image URL when available.
readingTime, readingTimeMethodEstimated reading time from feed text.
isMemberOnlyBest-effort public indicator when detectable; otherwise null.
sourceInputs, scrapedAt, status, errorCode, errorMessageTraceability and diagnostics for partial failures.

Input configuration

SettingJSON keyUse it forExample
Medium feed or page URLsstartUrlsDirect /feed/... URLs, tag URLs, author URLs, publication URLs.https://medium.com/feed/tag/artificial-intelligence
TagstagsTopic feeds. Spaces become Medium tag slugs.data science
AuthorsauthorsAuthor handles or profile URLs.@ev
PublicationspublicationsPublication slugs or URLs.the-generator
Maximum article rowsmaxItemsCap charged article rows across all sources.25
Maximum articles per sourcemaxItemsPerSourceCap rows from each feed.10
Include snippet HTMLincludeSnippetHtmlSave raw feed HTML in addition to snippetText.true
Include article detailsincludeArticleDetailsReserved for future safe enrichment; V1 keeps this disabled.false
Proxy configurationproxyConfigurationOptional 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

EventFreeBronzeSilverGoldPlatinumDiamondCharged when
Run start$0.005$0.005$0.005$0.005$0.005$0.005Once when the Actor starts.
Article row$0.00095$0.00080$0.00065$0.00050$0.00035$0.00025Each 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: 10 while 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.

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.