datagrit

datagrit › Data › Medium Publication Finder: Subscribers & Activity

Data

Medium Publication Finder: Subscribers & Activity

Find Medium publications by keyword and score each one: subscribers, posting cadence, claps per post, paywalled share and top authors.

Run it on Apify StoreUse the APIfrom $3.50 per 1,000 results + $10 per run · no code needed
from $3.50 per 1,000 results + $10 per runpay only for publication scoreds you get
JSON · CSV · Excelexport or call via API
Scheduled runsdaily or weekly feeds with Apify schedules
v0.2updated 2026-10-07

Medium Publication Finder turns a keyword (or a list of publication names) into one scorecard row per Medium publication: how many people follow it, how often it posts, when it last posted, how many claps a typical story gets, how much of it sits behind the paywall, and who writes for it.

It reads the public data Medium serves to any visitor, so there is no login, no API key and no Medium account involved. Export the rows as JSON, CSV or Excel, call the Actor through the Apify API, or connect it to n8n, Make and AI agents through MCP.

Why use Medium Publication Finder?

Medium search lists publications by relevance and shows nothing about whether they are alive. This Actor adds the part you need to decide where to spend time: cadence and engagement computed from the latest 25 posts of each publication.

Output fields

Each row has the publication identity (id, slug, name, url, customDomain, tagline, description), people (creatorUsername, creatorName, editorsCount, editors, twitterUsername, newsletterSlug), size (subscribers), cadence (postsSampled, sampleSpanDays, lastPostAt, daysSinceLastPost, postsPerWeek, activityStatus), engagement (medianClaps, averageClaps, medianClapsPer1kSubscribers, medianResponses), content (medianReadingMinutes, medianWords, memberOnlySharePct, distinctAuthors, topAuthors, topTags, bestPost) and the run context (query, found, sourceUrl, scrapedAt).

When nothing can be returned for an input you get one row with found: false, a reason and a message: noMatches (the keyword found no publications), filteredOut (publications were found but none passed your filters), notFound (no such slug or domain) or fetchFailed (Medium did not answer after retries).

How the metrics are computed

Medium serves at most 25 recent posts per publication, so all cadence and engagement figures describe that sample. postsPerWeek is the number of sampled posts divided by the time between the oldest sampled post and now, and sampleSpanDays tells you how long that window is. activityStatus is active when the newest post is at most 14 days old, slowing up to 60 days and dormant beyond that. medianClapsPer1kSubscribers divides the median claps of the sample by followers, which makes small and large publications comparable.

Limits

Is it legal to scrape Medium publications?

The Actor reads only public publication data that Medium serves to anyone without logging in. It does not read member-only story text, private data or anything behind a login, and it does not bypass access controls. You are responsible for using the data in line with applicable laws, including data protection rules, and Medium's terms. If you find an issue, open it in the Issues tab; problems are answered within one business day.

Output fields

Every result is one flat record, so it drops straight into a spreadsheet, a database or a CRM.

FieldTypeDescriptionExample
querystringThe search keyword or publication entry this row belongs to.startup
idstringMedium identifier of the publication. Empty only on the status row.f5af2b715248
slugstringPublication slug as used in medium.com/<slug>. Empty only on the status row.swlh
namestringPublication name. Empty only on the status row.The Startup
urlstringPublic address of the publication: its custom domain when it has one, otherwise medium.com/<slug>.https://medium.com/swlh
customDomainstringCustom domain the publication is served from, or null when it lives on medium.com.uxdesign.cc
taglinestringOne-line tagline shown on the publication page.Get smarter at building your thing.
descriptionstringFull description written by the publication owners.Get smarter at building your thing. Follow to join The Startup’s +8 million mont
subscribersintegerNumber of Medium users following the publication.894499
creatorUsernamestringMedium username of the account that created the publication.meseali
creatorNamestringDisplay name of the account that created the publication.Ali Mese
editorsCountintegerNumber of editors listed for the publication. Editors are the people who accept or reject submissions.2
editorsarrayEditors with their Medium username and display name.[{"username":"meseali","name":"Ali Mese"
twitterUsernamestringTwitter/X handle the publication lists, or null.GrowthSupply
newsletterSlugstringSlug of the publication newsletter on Medium, or null when it has none.top-stories
postsSampledintegerNumber of recent posts that feed the metrics below; 0 means the publication has no posts, null means Medium did not return the list.25
sampleSpanDaysnumberDays between the oldest analysed post and the time of the run.175.3
lastPostAtstringISO 8601 date of the newest analysed post.2026-05-25T19:56:00.532Z
daysSinceLastPostnumberDays between the newest analysed post and the time of the run.134.6
postsPerWeeknumberPosts per week over the analysed sample, measured up to the time of the run, so a publication that stopped posting scores low.1
activityStatusstringactive when the newest post is at most 14 days old, slowing up to 60 days, dormant beyond that, empty when the publication has no posts.dormant
medianClapsnumberMedian clap count per analysed post.412
averageClapsnumberMean clap count per analysed post.380.5
medianClapsPer1kSubscribersnumberMedian claps divided by subscribers, times 1,000; compares engagement between publications of different sizes.0.46
medianResponsesnumberMedian number of responses (comments) per analysed post.8
medianReadingMinutesnumberMedian reading time in minutes of the analysed posts.5.6
medianWordsintegerMedian word count of the analysed posts.1024
memberOnlySharePctnumberShare of analysed posts that sit behind the Medium paywall, in percent.68
distinctAuthorsintegerNumber of different authors among the analysed posts; 1 means a one-person publication.22
topAuthorsarrayUp to three authors with the most analysed posts: username, name and post count.[{"username":"aldric-chen","name":"Aldric Che
topTagsarrayUp to five tags used most often across the analysed posts, with post counts.[{"tag":"productivity","posts":6}]
bestPostobjectThe analysed post with the most claps: title, URL and clap count.{"title":"These Countries Offer Real Estate Visas","url
foundbooleanFalse only for status rows (no match, publication not found, request failed, filtered out).true
reasonstringPresent on status rows only: noMatches, filteredOut, notFound or fetchFailed.filteredOut
messagestringPresent on status rows only: what happened and what to change.Publications were found but none passed the subscriber and activity filters.
sourceUrlstringPublic page of the publication the row was read from.https://medium.com/swlh
scrapedAtstringISO 8601 timestamp of extraction.2026-10-07T08:00:00.000Z

Sample record

{
  "query": "startup",
  "id": "f5af2b715248",
  "slug": "swlh",
  "name": "The Startup",
  "url": "https://medium.com/swlh",
  "customDomain": "uxdesign.cc",
  "tagline": "Get smarter at building your thing.",
  "description": "Get smarter at building your thing. Follow to join The Startup’s +8 million monthly readers.",
  "subscribers": 894499,
  "creatorUsername": "meseali",
  "creatorName": "Ali Mese",
  "editorsCount": 2,
  "editors": [
    {
      "username": "meseali",
      "name": "Ali Mese"
    }
  ],
  "twitterUsername": "GrowthSupply",
  "newsletterSlug": "top-stories",
  "postsSampled": 25,
  "sampleSpanDays": 175.3,
  "lastPostAt": "2026-05-25T19:56:00.532Z",
  "daysSinceLastPost": 134.6,
  "postsPerWeek": 1,
  "activityStatus": "dormant",
  "medianClaps": 412,
  "averageClaps": 380.5,
  "medianClapsPer1kSubscribers": 0.46,
  "medianResponses": 8,
  "medianReadingMinutes": 5.6,
  "medianWords": 1024,
  "memberOnlySharePct": 68,
  "distinctAuthors": 22,
  "topAuthors": [
    {
      "username": "aldric-chen",
      "name": "Aldric Chen",
      "posts": 3
    }
  ],
  "topTags": [
    {
      "tag": "productivity",
      "posts": 6
    }
  ],
  "bestPost": {
    "title": "These Countries Offer Real Estate Visas",
    "url": "https://medium.com/swlh/example-396cb0c83ba2",
    "claps": 474
  },
  "found": true,
  "reason": "filteredOut",
  "message": "Publications were found but none passed the subscriber and activity filters.",
  "sourceUrl": "https://medium.com/swlh",
  "scrapedAt": "2026-10-07T08:00:00.000Z"
}

Input

FieldNameTypeWhat it does
queriesSearch keywordsarrayKeywords to search Medium publications for, one per line (for example "startup" or "machine learning"). Each keyword is searched separately and the publications it returns are scored.
publicationsPublications to look uparraySpecific publications to score: a slug (better-programming), a link (https://medium.com/swlh) or a custom domain (uxdesign.cc). Profiles of people (@name) are not publications and are ignored.
maxPublicationsPerQueryPublications per keywordintegerHow many publications to score for each search keyword, in the order Medium ranks them. Publications outside the subscriber range do not count toward this number.
postsSampleRecent posts to analyseintegerHow many of a publication's most recent posts feed the cadence and engagement figures, 5 to 25. Medium serves at most 25 per publication.
minSubscribersMinimum subscribersintegerSkip publications with fewer followers than this. 0 means no minimum. Skipped publications are not charged.
maxSubscribersMaximum subscribersintegerSkip publications with more followers than this, which is useful for finding smaller publications that answer pitches. 0 means no maximum.
activeWithinDaysPosted within the last (days)integerKeep only publications whose newest post is at most this many days old, which drops dormant publications with large follower counts. 0 means no limit. Publications without posts are skipped when this is set.
maxItemsMaximum publicationsintegerStop after this many publication rows in total across all keywords and direct lookups.
proxyConfigurationProxy configurationobjectOptional proxy. Leave disabled unless Medium refuses requests from your region; residential proxy raises the platform cost of the run.

Call it from your code

Run the Actor and get the results in one request. Replace YOUR_APIFY_TOKEN with the token from your Apify account settings.

curl -X POST "https://api.apify.com/v2/acts/datagrit~medium-publication-finder/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"queries":["startup","machine learning"],"maxPublicationsPerQuery":8,"maxItems":16}'
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('datagrit/medium-publication-finder').call({
  "queries": [
    "startup",
    "machine learning"
  ],
  "maxPublicationsPerQuery": 8,
  "maxItems": 16
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.length, items[0]);

Install with npm i apify-client.

from apify_client import ApifyClient
import os

client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("datagrit/medium-publication-finder").call(run_input={
  "queries": [
    "startup",
    "machine learning"
  ],
  "maxPublicationsPerQuery": 8,
  "maxItems": 16
})
items = client.dataset(run["defaultDatasetId"]).list_items().items
print(len(items), items[0] if items else None)

Install with pip install apify-client.

Frequently asked questions

Why is a publication missing from my results?

Either Medium search did not return it for your keyword, or it was removed by your subscriber or activity filters. If every publication is removed you get one `filteredOut` row explaining it.

Why are median claps zero?

Many publications get few claps. Look at `averageClaps` and `bestPost` to see whether a few stories carry the engagement. A missing value is never reported as zero: if Medium returns no clap count for any post, the field is `null` and the status message shows the clap-count coverage.

Does it return articles?

No. It scores publications. Use an article scraper when you need story text.

How fresh is the data?

Every run reads Medium live.

Can I schedule runs?

Yes, use Apify schedules to track how follower counts and cadence change.

Something looks wrong.

Open an issue with the input you used; layout changes at Medium are fixed quickly.

Try Medium Publication Finder: Subscribers & Activity on Apify

Guide

How to find active Medium publications and rank them by engagement — Find Medium publications by keyword and score each by followers, posting cadence, claps per 1,000 followers and paywalled share, in Python or cURL.

Related Actors

Data

Bilibili Anime Catalog, Rankings & Calendar

Bilibili anime, Chinese animation, film, documentary and TV series: filterable catalog, Top 100 rankings, release calendar and season details with ratings and follower counts.

from $3.50 / 1,000 results