Medium Scraper – Articles, Authors, Tags & Publications
Pricing
from $1.00 / 1,000 results
Medium Scraper – Articles, Authors, Tags & Publications
Medium scraper: extract public articles by author, publication, tag or URL with title, full text, markdown, tags, claps, responses, dates and reading time. Export JSON, CSV or Excel. From $1 per 1,000 results.
Pricing
from $1.00 / 1,000 results
Rating
0.0
(0)
Developer
Alexandre Manguis
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
11 days ago
Last modified
Categories
Share
What does it do?
This Medium scraper collects public Medium articles by author, publication, tag or direct article URL. For every article it returns the title, subtitle, author, publication, tags, publication and update dates, reading time, claps, responses and — optionally — the full text as plain text and Markdown. Results are stored in an Apify dataset that you can export as JSON, CSV, Excel, XML or HTML, or read through the API.
It uses Medium's own public web endpoints, needs no Medium account and no API key, and works with Apify datacenter proxies. It only returns what is publicly visible: no emails, no private data, and no bypass of the Medium paywall.
Who is it for / use cases
- Content & SEO teams – monitor what competitors and publications publish, track topics and tags.
- Researchers and data teams – build text corpora of articles on a topic (e.g.
machine-learning) with dates, tags and engagement. - Newsletter and media curators – pull the newest articles of selected authors or publications.
- AI / RAG builders – feed clean Markdown articles into pipelines.
- Creators – export your own articles with claps and responses for analysis or backup.
Features
- Four source types in one run: authors, publications, tags, article URLs (mix freely, up to 500 sources).
- Full text as plain text and Markdown, plus word count (can be switched off for faster metadata-only runs).
- Engagement fields: claps and responses.
- Filters: total limit, per-source limit,
publishedAfterdate. - Deduplication of articles across sources.
- Member-only stories: only the public preview is returned and flagged with
isMemberOnlyandtextIsPreviewOnly. - Every row carries
sourceType,sourceInputandscrapedAt, so you know where it came from.
Input
| Field | Type | Description |
|---|---|---|
authors | array | @username, username or profile URL (https://medium.com/@username). |
publications | array | Publication slug or URL (e.g. better-programming). |
tags | array | Tag slug or URL (e.g. machine-learning). Newest first. |
articleUrls | array | Direct article URLs. |
maxResults | integer | Total limit, default 50 (max 100,000). Also caps your spending. |
maxResultsPerSource | integer | Limit per author/publication/tag. Empty = only the total limit applies. |
includeFullText | boolean | Fetch text, Markdown and word count. Default true. |
publishedAfter | string | Only articles first published on or after YYYY-MM-DD. |
proxyConfiguration | object | Apify datacenter proxy is enough. |
At least one author, publication, tag or article URL is required; otherwise the run fails with a clear "Invalid input" message.
Example input:
{"authors": ["@zackbloom"],"publications": ["better-programming"],"tags": ["machine-learning"],"articleUrls": ["https://medium.com/@zackbloom/why-a-pneumatic-ventilator-e324da4a9b0f"],"maxResults": 45,"maxResultsPerSource": 8,"includeFullText": true,"proxyConfiguration": { "useApifyProxy": true }}
Output
One dataset row per article (text shortened below). Real sample from a production run:
{"articleId": "62edea66ffa4","url": "https://medium.com/blog/updating-our-rules-june-2023-62edea66ffa4","canonicalUrl": "https://medium.com/blog/updating-our-rules-june-2023-62edea66ffa4","title": "Updating Our Rules — June 2023","subtitle": "This month, we are updating our Rules. As the world evolves, so do the ways in which people use Medium…","authorName": "Medium","authorUsername": "Medium","authorUrl": "https://medium.com/@Medium","publicationName": "The Medium Blog","publicationSlug": "blog","publicationDomain": null,"publishedAt": "2023-06-28T18:01:22.039Z","updatedAt": "2023-06-28T18:01:22.039Z","readingTimeMinutes": 1,"claps": 5130,"responses": 69,"tags": ["medium", "rules"],"isMemberOnly": false,"imageUrl": null,"text": "Updating Our Rules — June 2023\n\nThis month, we are updating our Rules…","markdown": "## Updating Our Rules — June 2023\n\nThis month, we are updating our Rules…","wordCount": 264,"textIsPreviewOnly": false,"sourceType": "author","sourceInput": "@medium","scrapedAt": "2026-10-03T22:32:31.485Z"}
Output fields & fill rates
Measured on a production run of 41 articles (mixed authors, publications and tags, full text on):
| Field | Fill rate | Note |
|---|---|---|
articleId, url, canonicalUrl, title, publishedAt, updatedAt | 100% | |
authorName, authorUsername, authorUrl | 100% | |
claps, responses, readingTimeMinutes | 100% | |
text, markdown, wordCount | 100% | Preview only for member-only stories |
isMemberOnly, textIsPreviewOnly | 100% | |
sourceType, sourceInput, scrapedAt | 100% | |
subtitle, tags | 92.7% | Some articles have none |
imageUrl | 70.7% | Not every article has a cover image |
publicationName, publicationSlug | 29.3% | Only for articles published in a publication |
publicationDomain | 22% | Only for publications on a custom domain |
Empty fields mean the article does not have that data, not that extraction failed.
How to use via API
Replace YOUR_APIFY_TOKEN with your token and use the Actor ID shown on this page (<username>~medium-article-scraper).
curl
curl -X POST "https://api.apify.com/v2/acts/<username>~medium-article-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"tags": ["machine-learning"], "maxResults": 20}'
JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });const run = await client.actor('<username>/medium-article-scraper').call({authors: ['@medium'],maxResults: 20,includeFullText: true,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items.length, items[0].title);
Python
from apify_client import ApifyClientclient = ApifyClient("YOUR_APIFY_TOKEN")run = client.actor("<username>/medium-article-scraper").call(run_input={"publications": ["better-programming"],"maxResults": 20,"includeFullText": True,})items = client.dataset(run["defaultDatasetId"]).list_items().itemsprint(len(items), items[0]["title"])
Pricing
Pay per result: you are charged for each article delivered in the dataset. The price per 1,000 results depends on your Apify plan:
| Plan | Price per 1,000 results |
|---|---|
| Free | $1.50 |
| Bronze | $1.30 |
| Silver | $1.15 |
| Gold and above | $1.00 |
Platform usage (compute and proxy) is billed by Apify on top; in the production test, a 41-article run used about $0.0007 of platform usage. Use maxResults to cap spending.
Troubleshooting
- "Invalid input: Provide at least one author, publication, tag or article URL." – fill at least one of the four source fields.
- No articles for a source – check the spelling of the username, slug or tag; the log shows a warning per source with no results.
- Short text and
textIsPreviewOnly: true– the story is member-only; only the public preview is available. - Fewer rows than
maxResults– the source has fewer articles, duplicates across sources are removed, orpublishedAfterfiltered them out. - Slow run – turn off
includeFullTextfor metadata-only extraction.
FAQ
Do I need a Medium account or API key? No. Only public pages are read.
Does it return emails or private data? No. Only publicly displayed article data and public author names/usernames.
Can it read paywalled stories? No. Member-only stories return the public preview only, flagged in the output.
Can I export to CSV or Excel? Yes, from the dataset view or via the API (JSON, CSV, Excel, XML, HTML).
Is scraping Medium allowed? The Actor collects publicly visible data only. You are responsible for using it in line with Medium's Terms of Service, copyright law and applicable data-protection rules such as GDPR.
Keywords
medium scraper, medium article scraper, medium publication scraper, scrape medium articles, medium author articles, medium tag scraper, medium blog scraper, medium posts export, medium to csv, medium content extractor, medium api alternative
Hashtags
#medium #mediumscraper #webscraping #articles #blogscraper #contentresearch #dataextraction #apify #json #csv