Medium Scraper
Pricing
$8.00 / 1,000 results
Medium Scraper
Scrape public Medium articles from user, publication, tag, and custom RSS feeds. Export titles, authors, dates, categories, summaries, text, images, and article links.
Pricing
$8.00 / 1,000 results
Rating
0.0
(0)
Developer
MLG Data
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Scrape Medium articles from public user feeds, publication feeds, topic feeds, and explicit RSS URLs. Export Medium article data to JSON, CSV, or a spreadsheet format with titles, dates, categories, summaries, text, images, and source links. For teams that need a repeatable Medium API alternative for public articles, this actor turns several feeds into one deduplicated dataset.
What data can you extract from Medium?
Each dataset item represents one article. The actor uses the feed GUID to recognize the same article across multiple topic feeds, removes feed tracking parameters from article links, and records which feed supplied the item. When a feed contains only a teaser, text contains that teaser; textSource makes this explicit. When the feed supplies article HTML, text contains the plain text extracted from that HTML. Optional article fetching can replace the feed text when a public page exposes complete content.
| Field | Description | Example |
|---|---|---|
articleId | Stable ID from the feed GUID, or the GUID for an external feed | ed1f050a942f |
title | Article headline | Why We’re Exhausted Even When Technology Makes Everything Easier |
url | Article link with feed tracking parameters removed | A public article URL |
author | Public display name supplied by the feed | A display name |
published | Publication time in UTC | 2026-09-26T13:44:46Z |
updatedAt | Update time when the feed supplies one | 2026-09-26T13:44:46.686Z |
categories | Feed topic labels | technology, lifestyle |
summary | Plain-text description or a short extract | The tools got smarter... |
text | Feed content, feed teaser, or fetched public article text | The tools got smarter... |
wordCount | Number of words in text | 14 |
feed | RSS URL that yielded the record | https://medium.com/feed/tag/technology |
imageUrl | First image found in feed content or description | An image URL |
textSource | feedHtml, feedSummary, or article | feedSummary |
fullFetch | Whether a public article page supplied full text | false |
html | Original feed HTML, included only if requested | HTML fragment |
All fields use the same names across user, publication, tag, and custom feeds. A field may be null when the source does not supply it. The dataset schema documents these fields so exports preserve their meaning.
How to scrape Medium
- Enter one or more usernames, publication slugs, topic tags, or explicit feed URLs. You may combine all four input types in one run.
- Set
maxItemsfor the total result count. SetmaxItemsPerFeedif one source should contribute fewer articles than another. - Enable
includeHtmlif you need the feed’s original markup. EnablefetchFullArticleonly when the feed teaser is insufficient and you can accept extra page requests. - Run the actor. It collects each feed, removes duplicates across feeds, and stops at the total limit or the run’s spending limit.
- Open the dataset to inspect records, then download JSON, CSV, or a spreadsheet file. The
feedandtextSourcefields help you trace each item back to its source and text coverage.
The same input can be scheduled to collect a rolling sample of recent articles. If an article appears in multiple feeds during one run, it appears once in that run’s dataset. Separate runs create separate datasets, so store the articleId when combining results over time.
Input
| Parameter | Type | Default | Description |
|---|---|---|---|
users | String list | Empty | Public usernames, with or without @. Full profile URLs are also accepted. |
publications | String list | Empty | Publication slugs or custom domains. A slug reads medium.com/feed/<slug>. |
tags | String list | Empty | Topic tags such as technology or data-science. Spaces become hyphens. |
feedUrls | String list | Empty | Explicit RSS URLs, including custom-domain feeds. A feed path is added when absent. |
includeHtml | Boolean | false | Store the original feed HTML alongside plain text. |
fetchFullArticle | Boolean | false | Try each public article page for complete text. |
maxItemsPerFeed | Integer | 30 | Maximum new records taken from one feed. |
maxItems | Integer | 100 | Maximum records across all feeds. |
proxyConfiguration | Proxy setting | Automatic | Connection used for feed and optional article requests. |
At least one source list must contain a value. Duplicate feed URLs within a run are fetched once. If a tag and publication contain the same article, the earlier source in the input order wins: users, publications, tags, then explicit feed URLs. feed therefore identifies the first feed that supplied the article, rather than every feed where it appeared.
A practical input for recent articles across several topics is:
{"tags": ["technology", "programming", "data-science", "business"],"maxItemsPerFeed": 30,"maxItems": 40,"includeHtml": false,"fetchFullArticle": false}
To focus on a single writer, use users and leave the other source lists empty. To monitor a publication, supply its slug in publications. If a publication has its own domain and exposes a feed, provide that domain or its feed URL. Explicit feed URLs are useful when the normal Medium slug is unavailable.
Output example
The following selected fields come from one item in a successful 40-record run. The author, article link, image link, and long fields are omitted here; they remain available in the dataset.
{"articleId": "5b0379967faa","title": "Why Do We Pay More for the Same Thing?","published": "2026-09-26T13:32:43Z","categories": ["startup", "business-strategy", "entrepreneurship", "business", "marketing"],"text": "The business strategy behind convenience\nContinue reading on Medium »","wordCount": 9,"feed": "https://medium.com/feed/tag/business","textSource": "feedSummary","fullFetch": false}
This example illustrates an important limit: a short text value is a feed teaser, not necessarily the full article. The complete dataset item also includes summary, the article link, and the image link. wordCount describes the extracted text rather than an estimated length of the original article.
Use cases
- Topic monitoring: Track a small set of tags and review recent headlines, publication dates, category labels, and summaries in one export.
- Publication tracking: Watch a publication feed for new posts and use
articleIdto compare successive scheduled runs. - Editorial research: Search or sort exported titles and summaries to find public articles relevant to a planned story or briefing.
- Content inventory: Collect public posts from a profile feed and keep article links, dates, topic labels, and text in a consistent table.
- Trend review: Combine related topic feeds, remove duplicate articles, and inspect which subjects appeared in the current feed window.
- Archive preparation: Save feed HTML when available, then pair the exported text with a source link and retrieval date in your own archive.
These workflows operate on public feeds and public article pages. The actor does not sign in, retrieve private posts, or attempt to bypass access restrictions. It is intended for bounded collections with clear source attribution.
How much does it cost to scrape Medium?
The configured price is $8 per 1,000 delivered articles, or $0.008 per dataset item. The result charge is tied to an item pushed to the dataset. Input feeds that return no new items do not increase the result count. Run limits and platform usage are included in this per-result price; the run page shows the actual charged amount and any spending cap.
| Delivered results | Result price |
|---|---|
| 40 | $0.32 |
| 250 | $2.00 |
| 1,000 | $8.00 |
The 40-result example corresponds to the size of the successful golden run. The 250- and 1,000-result examples require enough distinct feeds or repeated runs with separate datasets; a single Medium RSS feed does not expose that many recent articles. Charges follow delivered results, not the maxItems setting. For instance, setting maxItems to 1,000 while five feeds yield 42 unique articles results in 42 dataset items, not 1,000.
Article-page fetching can add time and resource usage because it makes an additional request for each candidate article. Start with feed-only collection, inspect textSource, and enable page fetching only when fuller text is necessary. A run-level spending cap can stop delivery before maxItems is reached.
Tips for best results
Combine distinct sources. Medium tag feeds normally expose about ten recent items each. For 30 or more articles in one run, supply several tags, publications, or profile feeds. Related tags often overlap, so add more source feeds than the minimum number suggested by ten items per feed.
Use the right source for the question. A user feed follows one public profile. A publication feed follows a publication slug. A tag feed follows a topic, regardless of writer or publication. A custom feed URL is useful for a publication hosted on another domain. Mixing these sources is fine, but deduplication means the total can be smaller than the sum of feed item counts.
Treat feed text according to its source. feedHtml means the feed supplied article HTML. feedSummary means the feed supplied a description instead. article means the optional page fetch supplied complete public text. Check this field before using wordCount to compare article lengths; a teaser’s word count measures only the teaser.
Keep markup only when useful. Setting includeHtml increases dataset size. Leave it off for headline monitoring or simple text analysis. Turn it on when preserving links, formatting, or embedded media in the feed is part of the task. The field contains the markup provided by the RSS feed, which can itself be a short description.
Use identifiers for follow-up runs. RSS feeds are rolling windows. Scheduling frequent runs and saving articleId lets you identify new posts and avoid duplicates across your own archive. If a source publishes more than ten articles between runs, older posts may leave the feed before the next collection.
Set a practical cap. A modest maxItems value keeps a broad source list from producing more records than needed. maxItemsPerFeed is most useful when one custom feed yields many items and you want to preserve room for other feeds.
Limits
Medium RSS feeds observed during development returned ten recent items for user, publication, and tag paths. Adding page=2 or limit=50 to a tag feed returned the same first ten items. The actor therefore does not claim historical pagination for those feeds. More source feeds expand coverage across topics and publications; they do not extend one feed’s history.
Some feeds include full HTML in content:encoded; others include only a short description. The difference can vary by article. The actor does not label a teaser as full text. When fetchFullArticle is enabled, it uses public page data only if complete text is available. Locked articles, pages that reject requests, and pages without usable structured content retain the RSS text. fullFetch remains false in those cases.
Article and profile page routes may return access blocks even when RSS feeds work. Public feeds are the primary source for this reason. The actor can continue with other feeds if one fails, so the dataset may contain fewer results than requested. An invalid or empty feed also reduces the result count. Review run logs for the affected source URL.
A custom-domain feed can expose a different number of items and a different set of XML fields. The actor reads common RSS item fields; missing dates, images, update timestamps, or categories remain empty. It does not convert arbitrary page HTML into an RSS feed. Only public RSS endpoints are supported as direct feedUrls inputs.
Article URLs can lead to a custom domain, and feed descriptions can contain links or promotional text. The actor keeps the source-provided words in text; consumers should decide whether to strip such endings for their own analysis. The dataset is a snapshot at run time, and later article edits may change what a future run returns.
Use in automated workflows
The input schema makes the four source types and output limits explicit. An automated workflow can submit an input object, wait for the run, then read the default dataset. It can use articleId as a stable key, published for time ordering, and textSource as a quality signal before processing article text.
For a daily topic digest, schedule a run with several tags, keep records newer than the previous run, and group them by category. For a publication watchlist, schedule separate inputs for each publication or combine them and retain the feed field. In either case, store article links with the exported records so readers can reach the source page.
FAQ
Is it legal to scrape Medium articles? The actor reads public RSS feeds and public article pages. You are responsible for using the data lawfully, respecting site terms and applicable privacy rules, and avoiding misuse of personal data. Public availability does not grant a license to republish article text.
Do I need a proxy? The default input uses an automatic proxy connection. Feed endpoints worked from the run network during validation, while some page routes returned blocks. If you enable full-article fetching, page access may still fail; a proxy does not guarantee access to locked content.
How fast is a run? Feed-only collection requests one URL per source and processes the returned XML. A successful 40-record validation run completed in seconds after the remote build was ready. The total time in the interface also includes startup and build time. Full-article fetching adds one page request per candidate and can take longer, particularly when pages reject requests.
Can I schedule and monitor it? Yes. Set a recurring schedule and inspect each run’s item count and logs. Store articleId across runs to distinguish new articles from items still present in the rolling RSS window.
Can I export to a spreadsheet? Yes. The default dataset can be downloaded as JSON, CSV, or a spreadsheet file. Long text and html values may be easier to inspect in JSON; CSV is convenient for headline, date, category, and URL analysis.
Why is text short for some articles? The RSS feed may provide only a description. textSource=feedSummary marks that case. Enable fetchFullArticle for a best-effort public-page fetch, then check fullFetch and textSource in the resulting records.
Why did I get fewer items than maxItems? maxItems is a ceiling, not a target. Medium feeds usually expose about ten recent posts, and the same post may appear in several chosen feeds. Failed or empty feeds also contribute no items. Add distinct sources or schedule runs more often for broader coverage over time.
Integrations
Use the default dataset endpoint to pull records into an internal service, or connect a run-completion webhook to start downstream processing. Scheduled runs can maintain a watchlist, while JSON and CSV exports make it straightforward to load results into databases, reporting systems, or spreadsheets. Preserve feed, articleId, and textSource when moving records so source attribution, deduplication, and text coverage remain visible.
Support
Open an issue on the Issues tab; we reply within 24h and add fields on request.