Social media · Live on Apify

Medium Article Scraper

Get the newest Medium stories by tag, author or publication. Each row has the title, date, tags and the text of open stories. No login is needed.

About $9.00 for 1,000 results$0.009 per result + $0.003 per run. Apify bills you, not us.Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed.

Run it on Apify Opens apify.com, the website where our tools run. Sign up free with Google or email, no card needed.

Apify links on this page are affiliate links. We may earn a commission. You pay the same price. Affiliate disclosure

What you get, for example

urlhttps://medium.com/data-science/deep-dive-into-websockets-and-their-ro…
titleDeep Dive into WebSockets and Their Role in Client-Server…
authorNameclara

How to use it: 3 steps

  1. Make a free Apify accountApify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us.
  2. Paste your input and press StartNo code needed: you fill in a form (the input). It already has a working example. For example: artificial-intelligence in Tags. Each start is one run.
  3. Download the resultsWhen the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too.

This tool is an Apify Actor: a small program that runs on Apify. You can also run it on a schedule, for example every Monday. New to it? Read how it works, step by step and the 8 words you need first.

What it does

Medium Article Scraper reads the latest Medium stories by tag, author, publication or story URL. It returns title, author, publication, date, tags, member-only flag, reading time and the full text of open stories. No login, cookies or API key. The example run saves 10 stories about AI in about 5 seconds and costs $0.093 on the Free tier.

  • tag — topic tags, such as artificial-intelligence or Machine Learning;
  • author — usernames or profile links, such as @ev or ev.medium.com;
  • publication — publication names or links, such as towards-data-science;
  • article — story links. The Actor finds each story in its author or publication feed.

Good for

  • Watch new stories on a topic, an author or a publication every day.
  • Collect story metadata and open text for research, newsletters or AI tools.
  • Check if a story is member-only before you share or analyze it.

Not a good fit

  • Full author archives or search by keyword. RSS gives only the latest 10 stories.
  • Claps, responses, followers or view counts. RSS does not have them.
  • Text of member-only stories. The Actor does not log in and does not bypass the paywall; you get a preview flag only.

Who uses it

Newsletter writers

Find new stories on your topic every day.

Content researchers

Send open story text to an AI tool or search index.

Social media managers

Check if a story is member-only before you share it.

Price

Pay per event: you pay for each result the tool saves, plus a small start fee for each run. The price includes Apify platform costs. Apify bills you, not us. Prices below are for the Apify free plan.

What you pay forPriceWhen
Start fee$0.003Charged once per run. This tool uses 1 GB of memory or less by default; more memory costs more.
Saved story$0.009 (from $0.0075 on paid Apify plans)One Medium story saved as a Dataset row. Duplicates, onlyNew skips and not-found items are not charged.

Examples

  • One result: about $0.01.
  • 1,000 results: about $9.00.
  • Every day 100 results, for 30 days: about $27.09 a month.

Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed. That is enough for about 550 results.

Prices checked on 24 October 2026. See the current price on Apify.

Questions

Can I get older stories?

No. Each feed shows only the 10 latest stories. A schedule helps you collect more over time.

Does it show claps or views?

No. Medium RSS does not have claps, responses or views.

Can I read member-only stories?

No. You get a member-only flag, but not the paid text.

How many feeds can I read in one run?

Up to 20 feeds per run.

Do I need a Medium account?

No. The Actor reads public RSS feeds. It does not log in and does not use cookies.

Can I get claps or responses?

No. Medium RSS does not include them, and the Actor reads only RSS.

Why is a story missing in article mode?

The story is not among the 10 latest of its author or publication feed. RUN_SUMMARY.articles shows not_in_feed.

Details

Step by step on Apify
  1. Open Input.
  2. Keep the example: Mode tag, Tags artificial-intelligence, Max items 20.
  3. Click Start.
  4. Open Articles in the output. Check title, authorName, publishedAt and tags.
Use cases
GoalInputKey fieldsNext step
Topic monitoringtags + onlyNew on a scheduletitle, url, publishedAt, tagsSend new rows to Slack, email or a sheet.
Content researchpublications + includeContentcontentText, wordCount, readingTimeMinFeed open text to an LLM or a search index.
Author trackingauthorstitle, publishedAt, isMemberOnlyKeep a list of new posts by people you follow.
Link checkarticleUrlsisMemberOnly, contentAvailabilitySee if a story is open before you share it.
Tips for better results
  • Run it on a schedule with only-new on to build your own history.
  • Use author or publication mode to get full text more often.
  • Do not start two big runs at the same time; Medium may slow them.
Limits and good to know
  • 10 stories per feed. Medium RSS has no paging. A run cannot go deeper than the 10 latest stories
  • 20 feeds per run. Medium allows about 25 feed reads in a short time from one IP address. After that it answers HTTP 429 for 10 minutes or more. The Actor does not try to go around this limit
  • Medium limit during a run. If Medium answers 429, the Actor stops reading. It keeps the rows saved so far and ends SUCCEEDED with status: "partial" and errorCode: "RATE_LIMITED". Feeds not read get skipped. If no row was saved, the run is FAILED with RATE_LIMITED. Runs that start at the same time can share this limit, so a big run right after another big run can stop early
  • Text in tag mode. A tag feed has only a snippet. With includeContent, the Actor reads the author or publication feed of each story to get the text, but only while the per-run request budget allows. Other rows keep contentAvailability: "unknown". For reliable full text, use author or publication mode
  • Member-only stories. Only the preview. isMemberOnly: true, no text
  • Time. A run stops reading after 4 minutes (or 10 seconds before its timeout) and ends partial with DEADLINE
  • Feed failure. If a feed fails after retries, the run is FAILED with SOURCE_ERROR, but saved rows stay in the Dataset

For developers

Sample result

One result from a real test run, in JSON. Real values change from run to run. In Excel or CSV each field is a column.

one result · JSON
{
  "id": "aac387e10cb6",
  "url": "https://medium.com/data-science/deep-dive-into-websockets-and-their-role-in-client-server-communication-aac387e10cb6",
  "title": "Deep Dive into WebSockets and Their Role in Client-Server Communication",
  "subtitle": null,
  "authorName": "clara",
  "authorUsername": null,
  "authorUrl": null,
  "publicationSlug": "towards-data-science",
  "publicationName": "TDS Archive",
  "publicationUrl": "https://medium.com/data-science",
  "publishedAt": "2025-02-03T11:02:00.000Z",
  "updatedAt": "2025-02-03T11:02:00.167Z",
  "tags": ["software-development", "system-design-concepts", "websocket", "client-server-model", "getting-started"],
  "isMemberOnly": false,
  "contentAvailability": "full",
  "wordCount": 1837,
  "readingTimeMin": 7.6,
  "imageUrl": "https://cdn-images-1.medium.com/max/1024/1*HzsgZYLeeRwRNm5gbwQWrg.jpeg",
  "contentText": "…",
  "contentHtml": "…",
  "sourceType": "publication",
  "sourceValue": "towards-data-science",
  "feedUrl": "https://medium.com/feed/towards-data-science",
  "fetchedAt": "2026-10-15T00:20:38.167Z"
}

Use it from code

Actor ID: cliqtomedia/medium-articles-scraper. You need your Apify API token from Apify Console → Settings → API & Integrations.

Python · apify-client
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("cliqtomedia/medium-articles-scraper").call(run_input={
    "mode": "tag",
    "tags": [
        "artificial-intelligence"
    ]
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
cURL
curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~medium-articles-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"mode": "tag", "tags": ["artificial-intelligence"]}'
LangChain · langchain-apify
# pip install langchain-apify
# set APIFY_TOKEN in your environment
from langchain_apify import ApifyActorsTool

tool = ApifyActorsTool("cliqtomedia/medium-articles-scraper")
result = tool.invoke({"run_input": {"mode": "tag", "tags": ["artificial-intelligence"]}})
print(result)

The cURL call waits for the results, up to 300 seconds. For longer runs, start a run (/runs) and get the results with a webhook or by checking the run. Apify API docs. LlamaIndex, MCP for AI agents and the JavaScript client: AI agents & MCP.

Data fields (24)
FieldTypeMeaning
idstringMedium story ID (12 hex characters), from the feed guid medium.com/p/<id>.
urlstringStory URL without tracking parameters.
titlestringStory title.
subtitlestringFeed snippet: the subtitle or first line. Null when the feed has full text instead.
authorNamestringAuthor display name from the feed.
authorUsernamestringMedium username when the URL or feed shows it.
authorUrlstringAuthor profile URL, if the username is known.
publicationSlugstringPublication slug, such as towards-data-science. Null for personal stories.
publicationNamestringPublication name, when read from a publication feed.
publicationUrlstringPublication URL.
publishedAtstringISO time of publication.
updatedAtstringISO time of the last update reported by the feed.
tagsarrayStory tags (feed categories). Can be empty.
isMemberOnlybooleantrue: member-only story, the feed has only a preview. false: open story. null: unknown (tag feeds without includeContent, or story not in the author/publication feed).
contentAvailabilitystringfull, preview_member_only, not_requested or unknown.
wordCountintegerWords in the full feed text. Null when there is no full text.
readingTimeMinnumberEstimated reading time in minutes (Medium method: 265 words per minute plus image time). Estimate, not the value shown on Medium.
imageUrlstringFirst image URL.
contentTextstringPlain text with paragraph breaks. Only with includeContent and open stories.
contentHtmlstringStory HTML as published in the feed. Only with includeContent and open stories.
sourceTypestringFeed type the row came from: tag, author or publication.
sourceValuestringTag, username or publication slug from your input.
feedUrlstringMedium RSS feed URL that was read.
fetchedAtstringISO time when the feed was read.
Input settings (9)

The main fields of the input form. With the API you send them as JSON.

SettingName in the APITypeExample value
Mode requiredmodestring"tag"
Tagstagsarray["artificial-intelligence"]
Authorsauthorsarray
Publicationspublicationsarray
Article URLsarticleUrlsarray
Max articlesmaxItemsinteger20
Include full textincludeContentbooleanfalse
Only new articlesonlyNewbooleanfalse
Memory namestateKeystring"default"

Use cases with this tool

Each guide shows all the steps and the other tools.

Start on Apify

Make a free Apify account: you get $5 of free usage every month. Missing a tool? Suggest it. We read every idea, but we do not promise to build it.

Apify links on this page are affiliate links. We may earn a commission. You pay the same price. Affiliate disclosure