Dev.to AI 🤖 Ai 👁 0 📖 4 min read

How to get the latest Medium articles for a tag, author or publication as JSON

If you follow a topic, a set of writers or a few company engineering blogs on Medium, checking them by hand every morning gets old fast. What you want is a feed you can push into Slack, a spreadsheet, a newsletter draft

If you follow a topic, a set of writers or a few company engineering blogs on Medium, checking them by hand every morning gets old fast. What you want is a feed you can push into Slack, a spreadsheet, a newsletter draft or an AI summary: new stories, their links, their authors and, where possible, their text.

This guide shows how to set that up with a small Apify Actor published by Hay Equipos called Medium Articles Feed: Tags, Authors and Publications. It reads Medium's own public RSS feeds, the same feeds news readers use. No login and no browser.

What the tool returns

You give it any mix of tags, authors and publications, including publications on their own domain. For each story you get one row with:

  • the feed it came from (type, name and title)
  • story title, link and article ID
  • the public byline, publish date and last update date
  • the story's tags
  • word count and an estimated reading time
  • the lead image link
  • the story as plain text, and optionally as Medium's HTML
  • isFullText, which tells you whether the feed carried the whole story or only a preview

A row looks like this (values are illustrative):

{
  "feedType": "publication",
  "feed": "example-engineering",
  "feedTitle": "Example Engineering on Medium",
  "title": "How we cut our build times in half",
  "url": "https://medium.com/example-engineering/how-we-cut-our-build-times-in-half-1a2b3c4d5e6f",
  "articleId": "1a2b3c4d5e6f",
  "author": "Example Engineering Team",
  "publishedAt": "2026-09-30T14:05:00.000Z",
  "tags": ["devops", "ci", "engineering"],
  "isFullText": true,
  "wordCount": 1640,
  "readingTimeMinutes": 7,
  "imageUrl": "https://cdn-images-1.medium.com/max/1024/example.png",
  "text": "Our builds used to take forty minutes..."
}

The same story found in two feeds is saved once. Feeds that fail, such as a misspelled name or a site that is not a Medium publication, are listed in a RUN_SUMMARY record in the run's key value store.

What people use it for

  • Content monitoring: watch the topics and writers in your field every hour or every day, and send 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.

Step by step in the Apify Console

  1. Open the Actor from its Apify Store page and sign in to Apify Console.
  2. In the Input tab, add Tags such as artificial-intelligence or a tag link.
  3. Add Authors as @handle, a profile link, or a name.medium.com address.
  4. Add Publications as a slug (towards-data-science), a link, or a custom domain such as netflixtechblog.com.
  5. Optionally set Only stories published after to a date like 2026-09-01. Older stories are skipped and not charged.
  6. Keep Include article text on, and switch on Include article HTML if you need images and links inside the story.
  7. Click Start, then export from the Output tab as CSV, JSON or Excel.

To monitor, schedule the Actor hourly or daily, and set Only stories published after to the time of your previous run so you pay only for new stories.

How to call it from code

With curl:

curl -X POST "https://api.apify.com/v2/acts/pistachio_implementation~medium-articles-feed/run-sync-get-dataset-items" \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"tags": ["artificial-intelligence"], "publications": ["netflixtechblog.com"], "publishedAfter": "2026-09-01"}'

In Python, with the apify-client package:

import os
from apify_client import ApifyClient

client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("pistachio_implementation/medium-articles-feed").call(
    run_input={
        "authors": ["@netflixtechblog"],
        "tags": ["startup"],
        "includeContent": True,
    }
)
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(row["publishedAt"], row["title"], row["url"], row["isFullText"])

Pricing

Pay per event: $0.001 per article saved, which is $1 per 1,000 articles. There is no start fee and no platform usage charge on top. Failed feeds, duplicates and stories older than your "published after" date are free. For example, following 20 tags and writers every day saves at most 200 stories a day, about $0.20. You can cap the spend of any run with the maximum charge setting in Apify, and the Actor stops cleanly when it is reached.

Limits and what it does not do

  • Medium's feeds carry the latest 10 stories per tag, author or publication. This tool is built for monitoring what is new, not for downloading a whole archive. Run it on a schedule to build up a history.
  • Tag feeds carry a short preview, not the full text. Author and publication feeds usually carry the full story. Check isFullText.
  • No member only content. Those stories appear with whatever Medium puts in the public feed. The Actor never logs in.
  • No search. Medium search pages are not read, because Medium's robots.txt disallows them. The Actor checks robots.txt for every host it reads.
  • No claps, responses, followers or profiles. They are not in the feeds, so they are not in the output. The author field is the story's public byline.
  • Requests are spaced one second apart per host.

The Actor is an independent tool and is not affiliated with Medium. Please use the stories in line with Medium's terms and respect the authors' rights in their work.

Try it on the Apify Store: https://apify.com/pistachio_implementation/medium-articles-feed

📰 Read the original article on Dev.to AI

Originally published by Dev.to AI. Aggregated on AIWithGhost for educational purposes — full credit and traffic to the original publisher.