# Medium Article Scraper

> Medium scraper: get the latest stories by tag, author or publication with title, date, tags, reading time and open text. No login. Export to CSV.

URL: https://cliqtomedia.com/actors/medium-articles-scraper/

Category: Social media & communities · Status: live on Apify Store · Apify page: https://apify.com/cliqtomedia/medium-articles-scraper?fpr=cliqto

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.

## How to use it: 3 steps

1. **Make a free Apify account.** Apify 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 Start.** No 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 results.** When 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.

## 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.

## Price

Pay per event. Apify bills you, not us.

| What you pay for | Price | When |
|---|---|---|
| Start fee | $0.003 | Charged 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. |

- 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.

Prices checked on 24 October 2026. Current price: https://apify.com/cliqtomedia/medium-articles-scraper?fpr=cliqto

## 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`.

## Data fields

- `id` (string): Medium story ID (12 hex characters), from the feed guid medium.com/p/<id>.
- `url` (string): Story URL without tracking parameters.
- `title` (string): Story title.
- `subtitle` (string): Feed snippet: the subtitle or first line. Null when the feed has full text instead.
- `authorName` (string): Author display name from the feed.
- `authorUsername` (string): Medium username when the URL or feed shows it.
- `authorUrl` (string): Author profile URL, if the username is known.
- `publicationSlug` (string): Publication slug, such as towards-data-science. Null for personal stories.
- `publicationName` (string): Publication name, when read from a publication feed.
- `publicationUrl` (string): Publication URL.
- `publishedAt` (string): ISO time of publication.
- `updatedAt` (string): ISO time of the last update reported by the feed.
- `tags` (array): Story tags (feed categories). Can be empty.
- `isMemberOnly` (boolean): true: 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).
- `contentAvailability` (string): full, preview_member_only, not_requested or unknown.
- `wordCount` (integer): Words in the full feed text. Null when there is no full text.
- `readingTimeMin` (number): Estimated reading time in minutes (Medium method: 265 words per minute plus image time). Estimate, not the value shown on Medium.
- `imageUrl` (string): First image URL.
- `contentText` (string): Plain text with paragraph breaks. Only with includeContent and open stories.
- `contentHtml` (string): Story HTML as published in the feed. Only with includeContent and open stories.
- `sourceType` (string): Feed type the row came from: tag, author or publication.
- `sourceValue` (string): Tag, username or publication slug from your input.
- `feedUrl` (string): Medium RSS feed URL that was read.
- `fetchedAt` (string): ISO time when the feed was read.

## Input settings

- `mode` (string, required): Which list to read. Only the list for this mode is used.
- `tags` (array): Tag slugs or names, such as artificial-intelligence or "Machine Learning", or medium.com/tag/... URLs. Each tag gives up to 10 latest stories. Up to 20 tags per run: Medium allows about 25 feed reads per IP.
- `authors` (array): Usernames (ev or @ev) or profile URLs (medium.com/@ev, ev.medium.com). Each author gives up to 10 latest stories. Up to 20 per run.
- `publications` (array): Publication slugs (towards-data-science, gitconnected) or medium.com URLs. For a custom domain, use the slug. Each gives up to 10 latest stories. Up to 20 per run.
- `articleUrls` (array): Story URLs on medium.com or *.medium.com. Found only if the story is among the 10 latest in its author or publication feed. Up to 20 different authors or publications per run.
- `maxItems` (integer): Maximum rows for the whole run. Every row is a charged result.
- `includeContent` (boolean): Add text and HTML of open stories. Member-only stories stay previews. In tag mode it also reads author or publication feeds while the per-run request budget allows; other rows keep contentAvailability unknown.
- `onlyNew` (boolean): Skip stories that earlier runs with the same memory name already returned. For scheduled runs.
- `stateKey` (string): Name of the memory used by "Only new articles". Use different names for different watch lists.

## 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

| Goal | Input | Key fields | Next step |
|---|---|---|---|
| Topic monitoring | `tags` + `onlyNew` on a schedule | `title`, `url`, `publishedAt`, `tags` | Send new rows to Slack, email or a sheet. |
| Content research | `publications` + `includeContent` | `contentText`, `wordCount`, `readingTimeMin` | Feed open text to an LLM or a search index. |
| Author tracking | `authors` | `title`, `publishedAt`, `isMemberOnly` | Keep a list of new posts by people you follow. |
| Link check | `articleUrls` | `isMemberOnly`, `contentAvailability` | See if a story is open before you share it. |

## Tips

- 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



- 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.

## Sample 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`

```python
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)
```

```bash
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"]}'
```

```python
# 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)
```

run-sync waits up to 300 seconds; for longer runs start a run and use a webhook. LlamaIndex and MCP: https://cliqtomedia.com/actors/ai-agents/

## Use cases with this tool

- [Hear what people say about you](https://cliqtomedia.com/actors/use-cases/social-listening/): Find what people say about your brand and your topic on Bluesky, Hacker News, YouTube and more.
- [Find the right creators, fast](https://cliqtomedia.com/actors/use-cases/creator-outreach/): Find podcasts, YouTube channels and newsletters in your niche, with public contact details.

## Similar tools

- [Substack Newsletter Scraper](https://cliqtomedia.com/actors/substack-newsletter-scraper/)
- [Hacker News Stories & Comments Scraper](https://cliqtomedia.com/actors/hacker-news-stories-comments-scraper/)
- [Bilibili Scraper: Videos, Comments & Creators, No Login](https://cliqtomedia.com/actors/bilibili-scraper/)
- [Bluesky Scraper — Posts, Profiles, Feeds & Threads, No Login](https://cliqtomedia.com/actors/bluesky-scraper/)
- [Pinterest Search Scraper: Pins & Boards, No Login](https://cliqtomedia.com/actors/pinterest-search-scraper/)
- [Product Hunt Launches Scraper – Daily Top, No Login](https://cliqtomedia.com/actors/product-hunt-launches/)
