Medium Articles Scraper avatar

Medium Articles Scraper

Pricing

from $2.00 / 1,000 articles

Go to Apify Store
Medium Articles Scraper

Medium Articles Scraper

Scrape Medium articles by tag, author, publication, search query or post URL. Get title, author, publication, claps, responses, reading time, tags and publish dates, plus optional full text of free posts. No login or cookies.

Pricing

from $2.00 / 1,000 articles

Rating

5.0

(1)

Developer

Heba Abdalaziz

Heba Abdalaziz

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

7 days ago

Last modified

Share

What does it do?

Medium Articles Scraper collects articles from Medium by tag, author, publication, search query or single article URL. For every article you get the title, subtitle, author, publication, claps, responses, reading time, tags, publish and update dates, and whether it is member-only. Optionally it also downloads the full text of free articles.

It does not bypass Medium's paywall. Member-only articles are returned with their metadata and public preview (subtitle) only, never with full text.

Why use it?

  • Content research: find the most-clapped posts on a topic this week, this year or of all time.
  • Author and publication monitoring: track what a writer or a publication publishes, and how it performs.
  • Datasets for NLP and AI: collect clean full text of free articles with word counts.
  • Market and trend analysis: see which tags and topics get the most engagement.
  • No login, no browser, no Medium account needed. Fast: about 600 articles in 25 seconds.

How to use it

  1. Open the Actor and go to the Input tab.
  2. Add what you want to scrape: paste Medium links into Medium URLs, or type tags, author usernames, publication slugs or search keywords into the matching lists.
  3. Choose the Tag feed sort (newest, top this week/year/all time, or all of them merged).
  4. Set Max articles per source and switch on Include full text if you need article bodies.
  5. Click Start, then download the results as JSON, CSV, Excel or HTML from the Output tab, or read them through the Apify API.

Input

FieldTypeDefaultDescription
startUrlsarray of URLs[]Any Medium links: medium.com/tag/python (also /archive, /top/week, /top/year, /top/all-time), medium.com/@name, name.medium.com, medium.com/<publication>, custom publication domains such as levelup.gitconnected.com, medium.com/search?q=..., and single article URLs. Use full links starting with https://.
tagsarray of strings[] (prefill ["python"])Tag slugs or names, e.g. python, machine-learning, Data Science (spaces, _ and . become -). Tag links also work, with or without https://.
authorsarray of strings[]Usernames, with or without @ (e.g. karpathy, @sumit.ai). Profile links also work here, with or without https://.
publicationsarray of strings[]Publication slugs (data-science), <name>.medium.com subdomains or custom domains (levelup.gitconnected.com), with or without https://.
searchQueriesarray of strings[]Keywords, like Medium's search box.
tagFeedModestringNEWNEW, TOP_WEEK, TOP_YEAR, TOP_ALL_TIME, or ALL (top week, top year, top all time, then newest; duplicates removed). A mode in a pasted tag URL wins.
maxArticlesPerSourceinteger100 (prefill 10)Maximum articles saved per tag, author, publication, search or URL.
includeFullTextbooleanfalseAdd fullText and wordCount for free (non-member-only) articles.

At least one source (URL, tag, author, publication or search query) is required.

{
"startUrls": [
{ "url": "https://medium.com/tag/machine-learning/top/year" },
{ "url": "https://karpathy.medium.com/" }
],
"tags": ["python"],
"publications": ["levelup.gitconnected.com"],
"searchQueries": ["rust async"],
"tagFeedMode": "NEW",
"maxArticlesPerSource": 100,
"includeFullText": true
}

Output

One row per article. Real rows from a run (full text shortened here):

[
{
"id": "5b515c9e4cca",
"url": "https://www.towardsdeeplearning.com/a-single-claude-md-file-went-viral-the-reason-is-embarrassingly-simple-5b515c9e4cca",
"title": "A Single CLAUDE.md File Went Viral. The Reason Is Embarrassingly Simple.",
"subtitle": "91,000 stars on GitHub. No code. Four rules from Andrej Karpathy that every coding agent should have been following from day one.",
"authorName": "Sumit Pandey",
"authorUsername": "sumit.ai",
"authorId": "73d7984df4b2",
"publicationName": "Towards Deep Learning",
"publicationSlug": "towards-deep-learning",
"claps": 7285,
"responses": 120,
"readingTimeMinutes": 4.35,
"tags": ["artificial-intelligence", "deep-learning", "ai", "machine-learning", "claude-code"],
"publishedAt": "2026-05-08T08:32:29Z",
"updatedAt": "2026-05-08T08:32:29Z",
"isMemberOnly": true,
"source": "https://medium.com/tag/machine-learning/top/year",
"sourceType": "tag",
"scrapedAt": "2026-10-10T11:46:06Z"
},
{
"id": "a64152b37c35",
"url": "https://karpathy.medium.com/software-2-0-a64152b37c35",
"title": "Software 2.0",
"subtitle": "I sometimes see people refer to neural networks as just “another tool in your machine learning toolbox”. They have some pros and cons, they…",
"authorName": "Andrej Karpathy",
"authorUsername": "karpathy",
"authorId": "ac9d9a35533e",
"publicationName": null,
"publicationSlug": null,
"claps": 61029,
"responses": 194,
"readingTimeMinutes": 8.8,
"tags": ["machine-learning", "artificial-intelligence", "programming", "software-development", "future"],
"publishedAt": "2017-11-11T22:18:53Z",
"updatedAt": "2021-03-13T18:18:43Z",
"isMemberOnly": false,
"source": "https://karpathy.medium.com/",
"sourceType": "author",
"scrapedAt": "2026-10-10T11:46:05Z",
"fullText": "I sometimes see people refer to neural networks as just “another tool in your machine learning toolbox”. They have some pros and cons, they work here or there, …",
"wordCount": 2127
}
]

Inputs that returned nothing (unknown tag, author or publication, empty search, unsupported URL) or failed are listed with a reason in the FAILED_INPUTS record of the run's key-value store.

Data fields

FieldTypeDescription
idstringMedium post id
urlstringArticle URL
titlestringTitle
subtitlestringSubtitle or public preview text
authorNamestringAuthor display name
authorUsernamestringAuthor username
authorIdstringAuthor user id
publicationNamestring or nullPublication name (null for self-published posts)
publicationSlugstring or nullPublication slug
clapsintegerTotal claps
responsesintegerNumber of responses (comments)
readingTimeMinutesnumberMedium's reading time estimate
tagsarray of stringsTag slugs
publishedAtstringFirst publish time, ISO 8601 UTC
updatedAtstringLatest publish/update time, ISO 8601 UTC
isMemberOnlybooleantrue for member-only (paywalled) articles
sourcestringThe input this row came from
sourceTypestringtag, author, publication, search or post
fullTextstringArticle body, paragraphs separated by blank lines. Only with includeFullText, only for free articles
wordCountintegerNumber of words in fullText (present with fullText)
scrapedAtstringScrape time, ISO 8601 UTC

How much does it cost?

This Actor is pay-per-result:

EventPlanned price
Article saved to the dataset$0.002 per article ($2 per 1,000)
Full text downloaded (only with includeFullText, only free articles)$0.002 per article ($2 per 1,000)

Examples: 1,000 articles without full text cost about $2. 1,000 articles with full text, of which 400 are free, cost about $2 + $0.80 = $2.80. Member-only articles never incur the full-text charge. Nothing is charged for inputs that return no articles, and duplicate articles (for example the same post found by two tags) are saved and charged only once.

You can cap your spend with the Maximum cost per run run option; the Actor stops cleanly when the limit is reached.

Tips

  • Top lists are short. Medium shows about 100 articles per top list (week, year, all time). ALL reads the three top lists first and then the newest feed, removing duplicates, until maxArticlesPerSource articles are saved for the tag.
  • The newest feed goes deep. NEW keeps paging back in time, so set maxArticlesPerSource to the number you need.
  • Custom domains work. Paste the publication's own domain (e.g. levelup.gitconnected.com) or any article URL on it.
  • Subdomains like name.medium.com are tried as an author first, then as a publication.
  • Keep full text off when you only need titles and engagement numbers: runs are faster and cheaper.

FAQ

Can it get the full text of member-only articles? No. The Actor never bypasses Medium's paywall. Member-only articles return metadata plus the public preview (subtitle) and isMemberOnly: true.

Why did my author or tag return nothing? Check the spelling. Unknown authors, tags and publications are listed in FAILED_INPUTS with the reason, and the run still succeeds. The run only fails when Medium could not be reached for any input.

Does it need a Medium account or cookies? No. It reads public data only.

Is it legal to scrape Medium? The Actor collects only publicly available article data. Scraping public data is generally lawful, but you are responsible for how you use it: respect Medium's Terms of Service, copyright on article texts (do not republish full texts without permission) and applicable laws.

Does the output contain personal data? Rows include authors' public names and usernames as published on Medium. If you process this data, make sure you have a legitimate purpose and comply with privacy laws such as the GDPR.

Support

Found a bug or need another field or input type? Open an issue in the Issues tab of this Actor and we will look into it.