# Medium Scraper: Articles by Tag, Author, Publication (`themineworks/medium-scraper`) Actor

Scrape Medium articles by tag, author, publication or article link: title, subtitle, author and followers, publication, date, reading time, claps, responses, tags, member-only flag, image and optional full text of free stories. No login. Pay per article.

- **URL**: https://apify.com/themineworks/medium-scraper.md
- **Developed by:** [The Mine Works](https://apify.com/themineworks) (community)
- **Categories:** Social media, News, MCP servers
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.99 / 1,000 articles

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Medium Scraper: Articles by Tag, Author, Publication

[![1,470 Medium articles in 34 seconds](https://api.apify.com/v2/key-value-stores/cUXz95yxflDho41nn/records/medium-scraper-hero.png)](https://console.apify.com/actors/nameAXbUWLJTK0SBw/input?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

From **The Mine Works**, makers of [Threads Scraper](https://apify.com/themineworks/threads-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral) and [B2B Leads Finder](https://apify.com/themineworks/b2b-leads-finder?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral), with over 140,000 runs across 170+ public actors.

### Why choose this actor?

- **Four ways in, one row shape.** Read Medium by tag, by publication, by author, or by article link, all in the same run. Our proof run collected **1,470 articles in 34 seconds** from 3 tags, 2 publications, 3 authors and 4 article links, with 75 requests and not one refused. No Medium account, no cookies, no API key.
- **The numbers people actually compare.** Every row carries claps, the number of readers who clapped, responses, reading time, word count, the author's follower count, the publication, up to 5 tags, the member-only flag and the preview image. In the proof run 100% of rows had claps, responses, reading time, word count and author followers filled.
- **Full text when the story is free, honest when it is not.** Switch on `includeFullText` and every free story arrives with its body as clean Markdown (767 of the 1,470 proof rows, the median one about 9,200 characters). Member-only stories keep all their other fields and say `member_only`; the actor never pulls text from behind the paywall. You pay the same per row either way, and stories you filter out, duplicates and stories that do not exist are never charged.

[![Run it on Apify](https://api.apify.com/v2/key-value-stores/cUXz95yxflDho41nn/records/button-run.png)](https://console.apify.com/actors/nameAXbUWLJTK0SBw/input?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Part of The Mine Works Social media and video family:** [Threads Scraper](https://apify.com/themineworks/threads-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral), [Reddit Scraper](https://apify.com/themineworks/reddit-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral), [Threads Search Scraper](https://apify.com/themineworks/threads-search-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral), [Instagram Profile Scraper](https://apify.com/themineworks/instagram-profile-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral), [Instagram Followers & Following](https://apify.com/themineworks/instagram-followers-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral), [Reddit Search Scraper](https://apify.com/themineworks/reddit-search-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral).

### Try it in one minute

Paste this input and press Start. It returns the 20 newest stories tagged programming, in about 3 seconds:

```json
{
  "tags": ["programming"],
  "maxArticles": 20
}
```

Fill any of the four lists. They can be combined in one run:

- **tags**: a tag as Medium writes it in links (`programming`, `machine-learning`), a phrase (`Machine Learning`), a `#hashtag`, or a tag link (`https://medium.com/tag/productivity`).
- **publications**: the name in the link (`towardsdev`), a medium.com link (`https://medium.com/data-science-in-your-pocket`) or the publication's own domain (`uxdesign.cc`, `https://levelup.gitconnected.com`).
- **authors**: `@username`, `username`, a profile link (`https://medium.com/@sadiqueali`) or `https://username.medium.com`.
- **articleUrls**: any story link on medium.com, on a publication's own domain or on username.medium.com, a `medium.com/p/<id>` link, or the 12 character story id.

Leave all four empty and the run reads the example tag programming, so a first run always returns real rows.

Apify's free plan includes $5 of credit every month, which covers about 990 results at this actor's price.

#### Copy to your AI assistant

```text
themineworks/medium-scraper on Apify. Collects Medium articles without a login by tag (latest, most read or recommended order, optionally for one year or month), by publication, by author or from article links; one row per article with title, subtitle, link, author name, username, profile link and followers, publication, published and updated time, reading time, word count, claps, clappers, responses, tags, member-only flag, language, image and, on request, the full text of free stories as Markdown. Call ApifyClient("TOKEN").actor("themineworks/medium-scraper").call(run_input={"tags": ["programming"], "maxArticles": 50}), then client.dataset(run["defaultDatasetId"]).list_items().items. Required: at least one of tags, publications, authors, articleUrls (arrays of strings). Optional: maxArticles (default 20, 10 to 5000 per tag, publication or author), tagSort (latest, most_read or recommended; default latest), tagPeriod (a year such as 2025 or a month such as 2026-09), includeFullText (default false), skipMemberOnly (default false), publishedAfter (a date or a window such as "7 days"), onlyNewResults (default false). Skip rows that have "_type": "status". Full spec: GET https://api.apify.com/v2/acts/themineworks~medium-scraper/builds/default (Bearer TOKEN), which returns inputSchema and readme. Token: https://console.apify.com/account/integrations?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral
```

### Key features

- **Tags in three orders.** `latest` reads a tag newest first and keeps going back in time (the proof run read 200 stories for each of 3 tags; the 200 newest programming stories spanned about 10 hours). `most_read` returns Medium's most read stories of the tag, all time or for a year or month you name. `recommended` is the ranked feed on the tag page, about 75 stories.
- **Publications and authors newest first.** Each runs strictly by date from the newest story back, 25 stories per request, up to 5,000 per publication or author. Pinned and featured stories that Medium puts at the top of a homepage do not jumble the order.
- **33 fields per article**, from title and subtitle to claps, clappers, responses, reading time, word count, author followers, publication, tags with display names, language, preview image and canonical link.
- **Full text as Markdown** for free stories: headings, lists, quotes and code blocks kept, the repeated title and images left out, and `full_text_chars` so you can sort by length.
- **Filters that save money**: `publishedAfter` (a date or a window such as `24 hours`) stops a dated feed at the boundary, and `skipMemberOnly` drops paywalled stories. Filtered stories are never charged.
- **Only new stories on repeat runs**: switch on `onlyNewResults` for a schedule and each run returns, and charges, only stories no earlier run of yours delivered. In our test the second run of the same input skipped all 40 known stories.

### How to use it

#### Basic: the newest stories of a tag

```json
{
  "tags": ["artificial-intelligence"],
  "maxArticles": 200
}
```

Newest first, 20 stories per request, back in time until 200 stories are collected. A story that carries two of your tags is delivered once, under the first tag, and charged once.

#### Several tags, publications and authors at once, with full text

```json
{
  "tags": ["programming", "productivity"],
  "publications": ["uxdesign.cc", "https://levelup.gitconnected.com"],
  "authors": ["@sadiqueali"],
  "maxArticles": 100,
  "includeFullText": true
}
```

Up to 200 entries per run, read four at a time. Every row says where it came from in `source_type` and `source_input`.

#### Specific stories by link

```json
{
  "articleUrls": [
    "https://medium.com/data-science-in-your-pocket/strata-vs-llama-cpp-the-best-way-to-run-a-125b-llm-on-your-gaming-pc-7e4afe3c1760",
    "https://towardsdev.com/laravel-collections-in-2026-the-methods-you-are-not-using-that-will-cut-your-code-in-half-aeb5618b649b",
    "https://medium.com/p/f85e2d4dbec0"
  ],
  "includeFullText": true
}
```

Story links are read 10 per request, before any feed in the same run, so a story you asked for by link is always delivered under that link. A link to a story that no longer exists gets a free status row.

#### Daily content monitoring for a niche

```json
{
  "tags": ["product-management", "startup", "saas"],
  "maxArticles": 300,
  "publishedAfter": "24 hours",
  "onlyNewResults": true
}
```

Schedule it once a day in Apify. `publishedAfter` stops each tag when it reaches stories older than a day, and `onlyNewResults` skips anything an earlier run already gave you, so each morning you pay only for the new stories.

#### What topped a tag last month

```json
{
  "tags": ["javascript", "python", "design"],
  "tagSort": "most_read",
  "tagPeriod": "2026-09",
  "maxArticles": 50
}
```

`most_read` returns Medium's list of the tag's most read stories for the period, about 20 per tag. In our test September 2026 gave 19 stories for javascript, 19 for python and 20 for design. Use a year (`2025`) for a yearly list, or leave `tagPeriod` empty for all time.

#### Competitor and creator research

```json
{
  "authors": ["@mehulgupta_7991", "@sadiqueali"],
  "publications": ["towardsdev"],
  "maxArticles": 500,
  "skipMemberOnly": false
}
```

Pull an author's or a publication's full back catalogue, newest first, then sort by `claps` or `responses_count` to see which topics land. `member_only` shows how much of their output sits behind the paywall.

### Input parameters

| Parameter | Type | Default | What it does |
|---|---|---|---|
| `tags` | array of strings | none (the example tag programming when all four lists are empty) | Tags as written in Medium links, phrases, #hashtags or tag links. |
| `publications` | array of strings | none | Publication names, medium.com publication links or the publication's own domain. |
| `authors` | array of strings | none | @usernames, usernames, profile links or username.medium.com links. |
| `articleUrls` | array of strings | none | Story links on any Medium host, medium.com/p/ links or 12 character story ids. One row each. |
| `maxArticles` | integer | `20` | Stories per tag, publication or author, 10 to 5,000. |
| `tagSort` | string | `latest` | `latest` (newest first, deep), `most_read` (Medium's most read list, about 20 per tag and period) or `recommended` (the ranked tag page feed, about 75). |
| `tagPeriod` | string | none | For `latest` and `most_read`: a year (`2025`) or a month (`2026-09`). Empty means all time. |
| `includeFullText` | boolean | `false` | Add the body of free stories as Markdown. Member-only stories never include text. |
| `skipMemberOnly` | boolean | `false` | Leave out member-only stories. Skipped stories are not charged. |
| `publishedAfter` | string | none | Only stories published on or after this date, ISO time or window (`2026-10-01`, `7 days`). |
| `onlyNewResults` | boolean | `false` | Skip stories an earlier run of yours already delivered. Remembers up to 50,000 story ids. |

Up to 200 tags, publications, authors and story links per run in total.

### What data do you get?

One row per article. Fields, grouped:

- **Where the row came from**: `record_type` (always `article`), `source_type` (tag, publication, author or article), `source_input` (what you typed), `position` (order within that tag, publication or author).
- **The story**: `article_id`, `title`, `subtitle`, `url`, `canonical_url` (only when the author points the canonical link somewhere else, such as their own blog), `published_at`, `last_updated_at`, `reading_time_minutes`, `word_count`, `language`, `image_url`.
- **Engagement**: `claps` (total claps), `clappers` (readers who clapped; one reader can clap up to 50 times), `responses_count`.
- **Author**: `author_name`, `author_username`, `author_profile_url`, `author_id`, `author_followers`.
- **Publication**: `publication_name`, `publication_slug`, `publication_url` (empty for stories published on the author's own profile).
- **Topics**: `tags` (slugs, up to 5) and `tag_names` (as Medium displays them).
- **Paywall and text**: `member_only`, `full_text_status` (`included`, `member_only`, `empty` or `not_requested`), `full_text` and `full_text_chars`.
- **Run**: `scraped_at`.

A tag, publication, author or story link that returns nothing gets one free status row with `_type: "status"`, a `status` (`not_found`, `no_results`, `nothing_new`, `blocked`, `invalid_input`) and a plain `note`. The run's `OUTPUT` record in the key-value store lists every entry with its outcome, pages read and what was skipped.

#### Stable fields for automations

These fields were filled on every one of the 1,470 rows of our proof run, and their names will not change:

| Field | What it holds |
|---|---|
| `record_type` | Always `article` |
| `source_type` | tag, publication, author or article |
| `source_input` | Your tag, publication, author or link as written |
| `article_id` | Medium's story id |
| `title` | Story title |
| `url` | Link to the story |
| `author_name` | Author display name |
| `author_username` | Author username |
| `author_followers` | Author's followers on Medium |
| `published_at` | First published, UTC, ISO 8601 |
| `reading_time_minutes` | Medium's reading time estimate |
| `word_count` | Words in the story |
| `claps` | Total claps |
| `responses_count` | Responses |
| `member_only` | Behind the paywall or not |

#### Output examples

##### A story read from its link, with full text (trimmed)

```json
{
  "record_type": "article",
  "source_type": "article",
  "position": 1,
  "article_id": "7e4afe3c1760",
  "title": "Strata vs llama.cpp : The Best Way to Run a 125B LLM on Your Gaming PC?",
  "subtitle": "A 125 Billion Parameter Model, on Your PC",
  "url": "https://medium.com/data-science-in-your-pocket/strata-vs-llama-cpp-the-best-way-to-run-a-125b-llm-on-your-gaming-pc-7e4afe3c1760",
  "author_name": "Mehul Gupta",
  "author_username": "mehulgupta_7991",
  "author_profile_url": "https://medium.com/@mehulgupta_7991",
  "author_followers": 23280,
  "publication_name": "Data Science in Your Pocket",
  "publication_url": "https://medium.com/data-science-in-your-pocket",
  "published_at": "2026-10-05T10:52:31.187Z",
  "reading_time_minutes": 8.9,
  "word_count": 2297,
  "claps": 22,
  "clappers": 1,
  "responses_count": 0,
  "tags": ["technology", "artificial-intelligence", "machine-learning", "data-science", "programming"],
  "member_only": false,
  "language": "en",
  "image_url": "https://miro.medium.com/v2/resize:fit:1200/0*ih3mIwMWjWPUZimi",
  "full_text_status": "included",
  "full_text": "A year ago, telling someone you run a 125-billion-parameter model at home would get you laughed out of the room. Models that size lived on servers with hundreds of gigabytes of GPU memory...",
  "full_text_chars": 13410
}
```

##### A member-only story from the artificial-intelligence tag (trimmed)

```json
{
  "record_type": "article",
  "source_type": "tag",
  "source_input": "artificial-intelligence",
  "position": 3,
  "article_id": "46c3d34b1ee6",
  "title": "Software Is Getting Worse Because Every Company Is Afraid to Stop Adding Features",
  "url": "https://medium.com/engineering-playbook/software-is-getting-worse-because-every-company-is-afraid-to-stop-adding-features-46c3d34b1ee6",
  "author_name": "The System Design Journal",
  "author_followers": 1086,
  "publication_name": "Engineering Under Pressure",
  "published_at": "2026-10-05T22:14:26.595Z",
  "reading_time_minutes": 13.9,
  "word_count": 3628,
  "claps": 0,
  "responses_count": 0,
  "tags": ["technology", "software-development", "software-engineering", "artificial-intelligence", "data-science"],
  "member_only": true,
  "full_text_status": "member_only"
}
```

##### A story from a publication on its own domain (UX Collective, trimmed)

```json
{
  "record_type": "article",
  "source_type": "publication",
  "source_input": "uxdesign.cc",
  "position": 3,
  "article_id": "11e4192f394c",
  "title": "The feed I produce myself",
  "subtitle": "On working with agents, producing more than ever, and losing the ability to see anything whole.",
  "url": "https://uxdesign.cc/the-feed-i-produce-myself-11e4192f394c",
  "author_name": "Pedro A. Brêtas",
  "author_followers": 149,
  "publication_name": "UX Collective",
  "publication_slug": "user-experience-design-1",
  "publication_url": "https://uxdesign.cc",
  "published_at": "2026-10-03T11:12:40.743Z",
  "reading_time_minutes": 13.1,
  "word_count": 3291,
  "claps": 87,
  "clappers": 8,
  "tags": ["artificial-intelligence", "ai-agent", "the-future-of-work", "productivity", "ux"],
  "member_only": false,
  "full_text_status": "included",
  "full_text_chars": 18352
}
```

##### A link to a story that does not exist (free status row)

```json
{
  "_type": "status",
  "source_type": "article",
  "source_input": "https://medium.com/p/000000000000",
  "status": "not_found",
  "note": "Medium has no such tag, author, publication or story (deleted, renamed, or a typo). Not charged."
}
```

### Pricing

Pay per event: you pay for each article row delivered to your dataset, plus a flat $0.005 per run, whatever memory you choose. The full text option costs nothing extra. Nothing else is billed: no proxy add-on, no charge per tag, per page or per request.

| Event | Free plan | Bronze (Starter) | Silver (Scale) | Gold (Business) and above |
|---|---|---|---|---|
| Article delivered, per 1,000 articles | $4.99 | $4.29 | $3.59 | $2.99 |
| Run start, once per run | $0.005 | $0.005 | $0.005 | $0.005 |

**Never charged:** tags, publications, authors and stories that do not exist, lines that are not a tag, name or link, requests Medium refuses, a story already delivered earlier in the same run (two of your tags can share a story), stories older than `publishedAfter`, member-only stories when `skipMemberOnly` is on, stories an earlier run already delivered when `onlyNewResults` is on, and the status rows that explain an entry with no results. A run that delivers nothing costs only the start fee.

To cap a run's cost, set Maximum cost per run in the run options; the actor stops delivering, and charging, when that budget is used.

### FAQ

#### What does this actor read?

Medium's own GraphQL service at medium.com, the one Medium's website calls in your browser: the tag story lists, the tag page feed, a publication's and an author's story lists, and single stories. It reads what Medium shows any visitor who is not logged in.

#### How many articles can I get?

Up to 5,000 per tag, publication or author, and up to 200 entries per run. Tags in `latest` order go back as far as Medium's tag history does; in our tests 200 stories of the programming tag covered the last 10 hours. `most_read` returns about 20 stories per tag and period, and `recommended` about 75 per tag, because that is all Medium serves for those lists. Story links return one row each.

#### Can I get the full text of member-only stories?

No. For member-only stories Medium serves only a preview to visitors who are not paying members, and this actor does not log in or get around the paywall. Those rows keep the title, subtitle, author, publication, claps, responses, reading time, word count, tags and image, with `full_text_status: "member_only"`. In our proof run 52% of stories were free and came with full text.

#### How fresh is the data?

Live. Every run reads Medium at that moment, so claps, responses and follower counts are as of the run. In the proof run the newest programming story was less than 2 minutes old when it was read.

#### Do I need a Medium account, an API key or cookies?

No. Nothing to sign up for and nothing to paste. The actor reads Medium as a logged out visitor.

#### Do I need my own proxy?

No. The actor sends its requests through Apify's datacenter proxy, which is included. Medium sits behind Cloudflare; the actor's requests carry a real browser's connection fingerprint, and any request that gets Cloudflare's check page is retried from a different address. In the proof run all 75 requests were answered on the first try.

#### Why is the order of a tag different from what I see on medium.com?

Medium's tag page opens on a ranked "recommended" feed that is personalised and stops at about 75 stories. The default `latest` order lists the tag's stories by date, which is what monitoring and research need. Pick `tagSort: "recommended"` to get the ranked feed instead.

#### What happens with a tag, author or story that does not exist?

It gets one free status row that says `not_found` and is not charged. A misspelled line that is not a tag, name or link gets an `invalid_input` status row. The run's `OUTPUT` record lists every entry with its outcome.

#### Can I monitor tags, authors or publications on a schedule?

Yes. Create a schedule in Apify, switch on `onlyNewResults` and, if you like, set `publishedAfter` to the schedule's interval (`24 hours` for a daily run). Each run then returns only stories no earlier run delivered, and charges only for those.

#### In what formats can I export the data?

JSON, CSV, Excel, XML, RSS and HTML from the run's Storage tab or the Apify API. Arrays such as `tags` become joined columns in CSV and Excel.

#### Can I use it from Claude, ChatGPT or another AI assistant?

Yes, through Apify's MCP server.

- Connector URL: https://mcp.apify.com/?tools=themineworks/medium-scraper
- Claude: Settings > Connectors > Add custom connector, paste the URL, sign in with Apify.
- ChatGPT: turn on developer mode, add an MCP connector with the URL, sign in with Apify.
- Cursor or VS Code: add it as an HTTP MCP server with that URL.
- Claude Code: `claude mcp add -t http medium-scraper "https://mcp.apify.com/?tools=themineworks/medium-scraper"`

#### Is it legal to scrape Medium?

The actor collects only stories and profile details that Medium shows to anyone without logging in, and it does not log in or bypass the paywall. You are responsible for how you use the data: respect authors' copyright when you store or republish full text, check Medium's terms for your use case, and follow the data protection laws that apply to you, such as GDPR and CCPA.

### Integrations

- **Google Sheets**: send each run's dataset to a sheet with Apify's Google Sheets integration, one row per article.
- **Make, Zapier and n8n**: start a run and read its dataset with the Apify apps and nodes, for example to post new stories from a tag to Slack or Notion.
- **Webhooks**: have Apify call your URL when a run finishes, then fetch the dataset.
- **API**: start runs and read results from any language with the Apify API or the Python and JavaScript clients (see "Copy to your AI assistant" above).
- **MCP clients**: Claude, ChatGPT, Cursor, VS Code and Claude Code, through the connector URL in the FAQ.

For newsletters, see our [Substack Scraper](https://apify.com/themineworks/substack-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral) and [LinkedIn Newsletter Scraper](https://apify.com/themineworks/linkedin-newsletter-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral).

### More from The Mine Works

**Social media and video**

- [Threads Scraper](https://apify.com/themineworks/threads-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Reddit Scraper](https://apify.com/themineworks/reddit-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Threads Search Scraper](https://apify.com/themineworks/threads-search-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Instagram Profile Scraper](https://apify.com/themineworks/instagram-profile-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Instagram Followers & Following](https://apify.com/themineworks/instagram-followers-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Reddit Search Scraper](https://apify.com/themineworks/reddit-search-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Twitter / X Scraper](https://apify.com/themineworks/twitter-x-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [YouTube Transcript](https://apify.com/themineworks/youtube-transcript-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Xiaohongshu (RED) Scraper](https://apify.com/themineworks/xiaohongshu-explore-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Telegram Channel Scraper](https://apify.com/themineworks/telegram-channel-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Telegram Channel Finder](https://apify.com/themineworks/telegram-channel-finder?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Pinterest Profile Scraper](https://apify.com/themineworks/pinterest-profile-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Leads and business directories**

- [B2B Leads Finder](https://apify.com/themineworks/b2b-leads-finder?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Skip Trace Lookup](https://apify.com/themineworks/skip-trace-lookup?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Google Maps Email Scraper](https://apify.com/themineworks/maps-leads?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [2GIS Places Scraper](https://apify.com/themineworks/2gis-places-search?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Marketing, SEO and reviews**

- [Facebook Ad Library Scraper](https://apify.com/themineworks/meta-ad-library-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Google Ads Transparency Scraper](https://apify.com/themineworks/google-ads-transparency?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Similarweb Scraper](https://apify.com/themineworks/similarweb-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Google News Scraper](https://apify.com/themineworks/google-news?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**LinkedIn**

- [LinkedIn Company Scraper](https://apify.com/themineworks/linkedin-company-details?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [LinkedIn Post Scraper](https://apify.com/themineworks/linkedin-post-search?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [LinkedIn Employees Scraper](https://apify.com/themineworks/linkedin-employees?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [LinkedIn Profile Scraper](https://apify.com/themineworks/linkedin-profile-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Real estate**

- [Zillow Rentals Scraper](https://apify.com/themineworks/zillow-rental-listings?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Zillow Sold Comps Scraper](https://apify.com/themineworks/zillow-recently-sold?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [India Real Estate MCP](https://apify.com/themineworks/india-real-estate-mcp?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Housing.com Scraper](https://apify.com/themineworks/housing-com-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Science, health and government data**

- [Academic Research MCP](https://apify.com/themineworks/academic-research-mcp?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [CourtListener Scraper](https://apify.com/themineworks/courtlistener-court-records?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Socrata Open Data Scraper](https://apify.com/themineworks/socrata-open-data?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [OpenAlex Scraper](https://apify.com/themineworks/openalex-scholarly-works?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Jobs and hiring**

- [Foundit Monster India Jobs](https://apify.com/themineworks/foundit-jobs-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Hirist Jobs Scraper](https://apify.com/themineworks/hirist-jobs-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [India Jobs MCP](https://apify.com/themineworks/india-jobs-mcp?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Naukri Jobs Scraper](https://apify.com/themineworks/naukri-jobs?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Company and business data**

- [Company Domain Finder](https://apify.com/themineworks/company-domain-finder?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [GST Taxpayer Lookup](https://apify.com/themineworks/gst-taxpayer-lookup?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Company KYB Resolver](https://apify.com/themineworks/company-identity-resolver?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [SEC EDGAR Filings Scraper](https://apify.com/themineworks/sec-edgar-filings?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**E-commerce and marketplaces**

- [Ozon.ru Scraper](https://apify.com/themineworks/ozon-product-search?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [⭐ Amazon Reviews Scraper](https://apify.com/themineworks/amazon-reviews?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Amazon Product Scraper](https://apify.com/themineworks/amazon-products?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Etsy Listings Scraper](https://apify.com/themineworks/etsy-search-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Food and local services**

- [NoBroker Scraper](https://apify.com/themineworks/nobroker-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Swiggy Restaurant Scraper](https://apify.com/themineworks/swiggy-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Zomato Scraper](https://apify.com/themineworks/zomato-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Developer and AI tools**

- [Website to Markdown Crawler](https://apify.com/themineworks/rag-crawler?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [GitHub Skill Finder](https://apify.com/themineworks/github-skill-discovery?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [GitHub Repo Scraper](https://apify.com/themineworks/github-repo-intelligence?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [GitHub Trending Scraper](https://apify.com/themineworks/github-trending-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**More tools**

- [G2 Reviews Scraper](https://apify.com/themineworks/g2-reviews-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Naver Blog Scraper](https://apify.com/themineworks/naver-blog-posts-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [WeChat Article Scraper 微信公众号文章](https://apify.com/themineworks/wechat-article-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Taobao Products Scraper 淘宝 天猫](https://apify.com/themineworks/taobao-products-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

### Support

Found a tag, publication or story that does not come back right, or a field you need? Open an issue in the Issues tab and include the run link. For new sources or a custom build, email dmineworks@gmail.com.

*Medium articles by tag, publication, author or link, with claps, responses, reading time, author followers, tags and the full text of free stories, no login, charged only for rows you receive.*

# Actor input Schema

## `tags` (type: `array`):

One Medium tag per line, the way Medium writes it in links (programming, machine-learning) or a tag link (https://medium.com/tag/programming). "Machine Learning" and #machinelearning work too. Each tag returns the stories of that tag's feed on Medium.

## `publications` (type: `array`):

One publication per line: its name in the link (towardsdev, the-pragmatic-programmer), a medium.com link (https://medium.com/towards-data-science) or its own domain (towardsdev.com, https://levelup.gitconnected.com). Returns the publication's stories, newest first.

## `authors` (type: `array`):

One author per line: @username, username, a profile link (https://medium.com/@username) or https://username.medium.com. Returns the author's stories, newest first.

## `articleUrls` (type: `array`):

One Medium story per line: any story link (medium.com, a publication's own domain, username.medium.com), a medium.com/p/<id> link or the 12 character story id. One row per story.

## `maxArticles` (type: `integer`):

How many stories to collect from each tag, publication or author, 10 to 5,000. Medium serves 25 stories per request. Story links always return one row each.

## `tagSort` (type: `string`):

How each tag's stories are ordered. latest reads the tag newest first and keeps going back in time up to your max. most_read reads the tag's most read stories, all time or in the year or month you set below. recommended is the ranked feed on the tag page, which stops at about 75 stories.

## `tagPeriod` (type: `string`):

Optional, for the latest and most_read orders: a year (2025) or a month (2026-09). For example most_read with 2026-09 returns September 2026's most read stories of each tag.

## `includeFullText` (type: `boolean`):

Adds the story body as plain Markdown (headings, lists, quotes and code kept, images left out) to every story that is free to read. Member-only stories keep their other fields and show full_text_status member_only; their text is never included. Same price per row.

## `skipMemberOnly` (type: `boolean`):

Leave out stories behind Medium's paywall. Skipped stories are not charged.

## `publishedAfter` (type: `string`):

Optional. A date (2026-10-01), an ISO time, or a window such as "7 days" or "24 hours". Older stories are skipped and not charged.

## `onlyNewResults` (type: `boolean`):

For scheduled runs: skip stories an earlier run of yours already delivered, so you pay only for new ones. Remembers up to 50,000 story ids.

## Actor input object example

```json
{
  "tags": [
    "programming"
  ],
  "maxArticles": 20,
  "tagSort": "latest",
  "includeFullText": false,
  "skipMemberOnly": false,
  "onlyNewResults": false
}
```

# Actor output Schema

## `results` (type: `string`):

No description

## `summary` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "tags": [
        "programming"
    ],
    "maxArticles": 20,
    "tagSort": "latest"
};

// Run the Actor and wait for it to finish
const run = await client.actor("themineworks/medium-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "tags": ["programming"],
    "maxArticles": 20,
    "tagSort": "latest",
}

# Run the Actor and wait for it to finish
run = client.actor("themineworks/medium-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "tags": [
    "programming"
  ],
  "maxArticles": 20,
  "tagSort": "latest"
}' |
apify call themineworks/medium-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,themineworks/medium-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/nameAXbUWLJTK0SBw/builds/vqxSlEDB29ih8hWsR/openapi.json
