Medium Articles Scraper: Tags, Authors, Search, Full Text avatar

Medium Articles Scraper: Tags, Authors, Search, Full Text

Pricing

from $2.80 / 1,000 articles

Go to Apify Store
Medium Articles Scraper: Tags, Authors, Search, Full Text

Medium Articles Scraper: Tags, Authors, Search, Full Text

Medium articles scraper for tags, authors, publications, keyword searches or article links: title, full text in Markdown, claps, responses, reading time, author with followers, publication, tags, paywall flag. Hundreds of articles per source, not just the latest 10.

Pricing

from $2.80 / 1,000 articles

Rating

0.0

(0)

Developer

Quarra Labs

Quarra Labs

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

7 hours ago

Last modified

Share

Get Medium articles in bulk, without an account or API key. Give it tags, authors, publications, search keywords or article links. Each article comes back with its full text as Markdown, claps, number of responses, reading time, word count, tags, the author (bio and followers) and the publication. Hundreds or thousands of articles per tag, author or publication, not just the latest 10 of an RSS feed. Member-only stories are marked and delivered as the preview any visitor sees. Export as JSON, CSV or Excel, or read it through the Apify API.

$4 per 1,000 articles, plus a small start fee per run. Articles that no longer exist, articles your filters leave out, repeats and inputs that fail are not charged.

Quick start

  1. Add a tag (machine-learning), an author (@ev), a publication (towards-data-science) or search keywords, or paste any Medium link into Medium links or article IDs.
  2. Set Max articles and, if you want more than 100 from one source, Max articles per source.
  3. Click Start and read the articles in the run's Output tab.

Like any Apify Actor, it can also be run and read through the Apify API, scheduled, and connected to webhooks, Make, Zapier, n8n or Apify's MCP server for AI agents.

What it is used for

  • Content research: what is written about a topic, what got claps, which angles and titles work.
  • Competitor and creator tracking: everything an author or a publication posts, with claps and responses.
  • Datasets for AI: full articles as clean Markdown, with language, tags and dates, ready for retrieval or training pipelines (check the licence terms that apply to your use).
  • Trend monitoring: the newest articles of a tag, on a schedule, or the most-read articles of each month.

What you get

Article ID, URL, title, subtitleyes
Full text as Markdown (headings, links, code, lists, quotes, images)yes, optional
Claps, people who clapped, responsesyes
Reading time, word count, languageyes
Tagsyes
Publication date and last updateyes
Author: name, username, bio, followers, pictureyes
Publication: name, address, followerswhen the article is in one
Preview imageyes
Member-only flag, and whether the text is a previewyes
Position in the source's resultsyes

Measured on 1,000 articles from 9 sources (17/10/2026): title, date, claps, reading time, language and text on 100 %, subtitle on 97 %, author bio on 91 %, preview image on 88 %, tags on 90 %. A publication is set when the article was published in one (52 % of the sample).

Inputs

  • Medium links or article IDs: any Medium link is read for what it is: an article (medium.com/@ev/title-4916e42af749, medium.com/p/4916e42af749, a publication's own domain), a tag page, an author profile, a publication or a search page. A link to a page of a source (/@ev/latest, /@ev/about, a publication's /archive or /latest, a medium.com/feed/… link) is read as that author, publication or tag. A bare 12-character article ID works too. Up to 50,000 per run.
  • Tags: machine-learning, Machine Learning or https://medium.com/tag/machine-learning. Names are read as Medium spells its tags: C++ is cpp, C# is csharp, Node.js is nodejs (the run summary says so). Accents are kept (développement web, café); if Medium has no such tag, the spelling without accents is tried and the run summary says so.
  • Authors: @ev, ev, https://medium.com/@ev or https://ev.medium.com.
  • Publications: towards-data-science, https://medium.com/better-programming, or a publication's own domain such as blog.stackademic.com.
  • Search keywords: as typed in Medium's search box, or a medium.com/search?q=… link.
  • Up to 2,000 tags, authors, publications and searches per run.
  • Max articles: total articles the run delivers, counted exactly. Max articles per source: each tag, author, publication or search stops there.
  • Tag order: newest first, or most read (the most-read articles of each month, newest month first, about 20 a month, back to the tag's oldest article).
  • Filters: published after / before (a date such as 2026-01-31), minimum claps, access (all, free only, member-only stories only). They apply to every article, article links included: an article they leave out is never charged, and a link they leave out gets a free excluded record that says which filter. An article whose date, claps or access Medium does not give is left out by a filter on that value.
  • Full text (Markdown): on by default. Turn it off for metadata only, which is lighter and faster.

Example, through the API:

{
"tags": ["machine-learning"],
"authors": ["@ev"],
"searchQueries": ["rag llm"],
"maxItems": 1000,
"maxResultsPerSource": 500,
"publishedAfter": "2026-01-01",
"minClaps": 50
}

Output

One record per article in the dataset. A shortened article:

{
"type": "article",
"status": "ok",
"articleId": "99c9ffac0b02",
"url": "https://medium.com/@isiomaasielue4/i-cried-over-an-env-file-my-week-6-at-dataraflow-99c9ffac0b02",
"title": "I Cried Over an.env File: My Week 6 at Dataraflow",
"subtitle": "I almost didn’t write this one properly. It is easier to say “this week I learnt SQL and pandas”…",
"publishedAt": "2026-10-17T07:44:45.338Z",
"authorName": "issy ~",
"authorUsername": "isiomaasielue4",
"authorUrl": "https://medium.com/@isiomaasielue4",
"authorFollowers": 4,
"publicationName": null,
"publicationStatus": null,
"tags": ["Data Science", "Python", "Sql", "Pandas", "Dataraflow Intern"],
"claps": 0,
"voters": 0,
"responses": 0,
"readingTimeMinutes": 4.4,
"wordCount": 1071,
"language": "en",
"imageUrl": "https://miro.medium.com/v2/resize:fit:1400/1*G1NJm7RqLXFSEF1R7N3Gvw.png",
"isMemberOnly": false,
"isPreviewOnly": false,
"content": "I almost didn’t write this one properly. …\n\n### **The setup that broke me**\n\n…",
"input": "python",
"inputType": "tag",
"position": 1,
"scrapedAt": "2026-10-17T07:55:16.025Z"
}

Fields that need a word of explanation:

  • status: ok (delivered, charged), unavailable (free: an article ID that Medium no longer shows), excluded (free: an article link your filters leave out; error says which filter), error (free; error says why, retryable says if a later run may work).
  • isMemberOnly: the story is behind Medium's paywall. Medium shows visitors without an account only the start of it: that is what you get, with isPreviewOnly: true. Nothing is unlocked, and no account is used. Articles that are free come whole (isPreviewOnly: false).
  • claps: Medium's count (null if Medium does not give it, never a made-up 0). voters is how many people clapped; responses the comments under the article.
  • content: the text as Markdown, faithful to what Medium shows (characters that Markdown would read as formatting are escaped). Images are links to Medium's image servers; videos and other embeds are links.
  • publicationStatus: published (the article is in the publication given), pending (submitted to a publication that has not accepted it yet: pendingPublicationName names it, and the publication fields fill in once it does), or null.
  • position: place in the source's results, from 1.

The run summary (counts per input, why the run stopped, notes) is the OUTPUT record of the run's key-value store.

Pricing

Pay per event:

EventPrice
Article$4 per 1,000
Run start$0.005 per run

Higher Apify plans pay less per article. Never charged: articles that no longer exist, articles your filters leave out, error records, repeats (an article found by two sources is delivered once). Set Maximum cost per run in the run options and the run stops before going over it.

Speed, measured on Apify (17/10/2026): 1,000 articles with full text in 63 s from 9 sources; 5,000 articles from 5 tags in 9 minutes, using 66 MB of memory. Without the full text it is lighter still.

Limits

  • Search shows about 990 results per keyword search. Medium returns no more for one search; the run summary says when a search reached this. Use more specific keywords, or tags and publications, which go much deeper.
  • Most read is Medium's own ranking: about 20 articles per month for a tag, no more. Use Newest first with a date range to get everything.
  • A high minimum of claps on a tag sorted by date is slow: the filter is applied after an article is read, so a run can read 13,000 articles to keep 17. Use Most read (the top articles of each month) or a published after date to narrow the reading.
  • Member-only stories come as the preview Medium shows visitors without an account. Nothing behind the paywall is delivered.
  • Comments are counted (responses) but their text is not scraped by this Actor.
  • Authors and publications are listed newest first, except the stories pinned at the top of the profile or home page, which Medium lists first (as on the site).
  • Medium decides what a tag, author or publication lists. A tag shows the articles that were tagged with it, not every article that mentions the word.

FAQ

Do I need a Medium account? No.

What if the run is restarted by the platform (migration or reboot)? It resumes where it was: articles already in the dataset are not delivered or charged again.

Can I get articles behind the paywall? No. You get what a visitor without an account sees, marked as a preview.

Is it legal? It collects public data shown to any visitor of Medium. Check the rules that apply to your use of the data; the articles belong to their authors.

Does the Actor send anything to Quarra? Only when a run fails or runs out of time: the Actor, its build, the error type, the line of our code where it happened, and the memory and time the run was given, so we can fix it fast. Never your input, your results, your account or the run ID.