# Medium Articles Feed: Tags, Authors and Publications (`pistachio_implementation/medium-articles-feed`) Actor

Get the latest Medium stories for any tag, author or publication, including custom domain publications. Returns title, URL, author, publish date, tags, reading time, lead image and full text where Medium provides it, from Medium's public RSS feeds. Built for monitoring.

- **URL**: https://apify.com/pistachio\_implementation/medium-articles-feed.md
- **Developed by:** [Hay Equipos](https://apify.com/pistachio_implementation) (community)
- **Categories:** News, Social media, AI
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$1.00 / 1,000 article saveds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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 Articles Feed: Tags, Authors and Publications

Keep up with Medium without opening it. Give the actor any mix of tags, authors and publications (including publications on their own domain, such as netflixtechblog.com) and it returns their latest stories as clean rows: title, link, author, publish date, tags, reading time, lead image and the article text where Medium provides it.

The actor reads Medium's own public RSS feeds, the same feeds that news readers use. No login, no member only content, no browser, no proxies. It respects robots.txt, including rules that name Apify.

### What you can use it for

- **Content monitoring:** watch the topics and writers in your field every hour or every day, and push new stories to Slack, a sheet or a newsletter.
- **Competitor and brand tracking:** follow the engineering or company blogs your competitors publish on Medium.
- **AI and RAG pipelines:** feed the full text of author and publication stories into a summary or search tool.
- **Trend research:** see which tags new stories carry and how long they are.
- **AI agents:** one clear job with simple inputs, so an agent can answer "what did the Netflix tech blog publish this week?"

### Input

| Field | What it does | Default |
|---|---|---|
| Tags | `artificial-intelligence`, `programming`, or a tag link | none |
| Authors | `@handle`, a profile link, or `https://name.medium.com` | none |
| Publications | A slug (`towards-data-science`), a link, or a custom domain (`netflixtechblog.com`) | none |
| Only stories published after | Skip older stories (they are not charged) | none |
| Include article text | Plain text of each story | on |
| Include article HTML | Medium's HTML with images and links | off |
| Maximum articles | Stop after this many rows | 500 |

Example input:

```json
{
  "tags": ["artificial-intelligence", "startup"],
  "authors": ["@netflixtechblog"],
  "publications": ["towards-data-science", "netflixtechblog.com"],
  "publishedAfter": "2026-09-01",
  "includeContent": true
}
```

### Output

One row per story. The same story found in two feeds is saved once.

```json
{
  "feedType": "author",
  "feed": "@netflixtechblog",
  "feedTitle": "Stories by Netflix Technology Blog on Medium",
  "title": "Running Apache Spark experiments in my sleep (and on a plane)",
  "url": "https://netflixtechblog.medium.com/running-apache-spark-experiments-in-my-sleep-and-on-a-plane-588816b6b5f8",
  "articleId": "588816b6b5f8",
  "author": "Netflix Technology Blog",
  "publishedAt": "2026-08-31T09:01:03.000Z",
  "updatedAt": "2026-08-31T09:01:03.574Z",
  "tags": ["apache-spark", "performance-optimization", "generative-ai-tools", "data-pipeline"],
  "isFullText": true,
  "wordCount": 2007,
  "readingTimeMinutes": 8,
  "imageUrl": "https://cdn-images-1.medium.com/max/1020/1*XXIKbAHpGvPtFzHcDL8Kcg.png",
  "text": "As one of Netflix's largest and critical data pipelines...",
  "scrapedAt": "2026-09-27T06:59:12.637Z"
}
```

`isFullText` tells you whether Medium put the whole story in the feed (usual for author and publication feeds) or only a preview (usual for tag feeds). Feeds that fail (a misspelled name, a site that is not a Medium publication) are listed in `RUN_SUMMARY` in the run's key value store and cost nothing.

### Pricing

Pay per event, no subscription, no charge for platform usage on top.

| Event | Price |
|---|---|
| Article saved | $0.001 (one dollar per 1,000 articles) |

Example: following 20 tags and writers every day saves at most 200 stories a day, about $0.20 a day; with "Only stories published after" set to the last run, you pay only for new stories. Set a maximum charge per run in Apify and the actor stops cleanly when it is reached.

### Limits

- **Medium's feeds carry the latest 10 stories per tag, author or publication.** This actor is built for monitoring what is new, not for downloading an author's whole archive. Run it on a schedule to build a history.
- Tag feeds carry a short preview, not the full text. Author and publication feeds usually carry the full story.
- Member only stories appear with whatever Medium puts in the public feed; the actor never logs in.
- Medium search pages are not read, because Medium's robots.txt disallows them.
- Clap counts and responses are not in the feeds, so they are not in the output.

### FAQ

**Do I need a Medium account?** No. The feeds are public.

**Why only 10 stories per feed?** That is how many Medium publishes in each RSS feed. Add more tags, authors and publications, or schedule the actor, to collect more.

**Can I use it with custom domain publications?** Yes. Enter the domain, for example `netflixtechblog.com`, and the actor reads its `/feed`.

**Is the author a person's name?** It is the story's public byline as shown on Medium. The actor does not collect profiles, followers or contact details.

**Is this affiliated with Medium?** No. It is an independent tool that reads Medium's public RSS feeds.

# Actor input Schema

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

Medium tags, one per line, for example artificial-intelligence, programming, startup, or a tag link such as https://medium.com/tag/data-science.

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

Medium authors, one per line: @handle, a profile link such as https://medium.com/@netflixtechblog, or a subdomain profile such as https://name.medium.com.

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

Medium publications, one per line: the slug (towards-data-science), a link (https://medium.com/better-programming) or a custom domain publication (netflixtechblog.com).

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

Optional date such as 2026-09-01. Older stories are skipped and not charged.

## `includeContent` (type: `boolean`):

Add the story text as plain text. Author and publication feeds usually carry the full story; tag feeds carry a short preview.

## `includeHtml` (type: `boolean`):

Also add the story as Medium's HTML, with images and links.

## `maxItems` (type: `integer`):

Stop after saving this many articles in total.

## Actor input object example

```json
{
  "tags": [
    "artificial-intelligence"
  ],
  "includeContent": true,
  "includeHtml": false,
  "maxItems": 500
}
```

# Actor output Schema

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

All rows the run saved to the default dataset.

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

The RUN\_SUMMARY record: counts and problems for the whole run.

# 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": [
        "artificial-intelligence"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("pistachio_implementation/medium-articles-feed").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": ["artificial-intelligence"] }

# Run the Actor and wait for it to finish
run = client.actor("pistachio_implementation/medium-articles-feed").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": [
    "artificial-intelligence"
  ]
}' |
apify call pistachio_implementation/medium-articles-feed --silent --output-dataset

```

## MCP server setup

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

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/Mn8altnwis2ArYX4h/builds/yyeF1pZjna0e5Taz1/openapi.json
