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.
datagrit › Data › Medium Publication Finder: Subscribers & Activity
DataFind Medium publications by keyword and score each one: subscribers, posting cadence, claps per post, paywalled share and top authors.
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.
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.
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).
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.
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.
Every result is one flat record, so it drops straight into a spreadsheet, a database or a CRM.
| Field | Type | Description | Example |
|---|---|---|---|
query | string | The search keyword or publication entry this row belongs to. | startup |
id | string | Medium identifier of the publication. Empty only on the status row. | f5af2b715248 |
slug | string | Publication slug as used in medium.com/<slug>. Empty only on the status row. | swlh |
name | string | Publication name. Empty only on the status row. | The Startup |
url | string | Public address of the publication: its custom domain when it has one, otherwise medium.com/<slug>. | https://medium.com/swlh |
customDomain | string | Custom domain the publication is served from, or null when it lives on medium.com. | uxdesign.cc |
tagline | string | One-line tagline shown on the publication page. | Get smarter at building your thing. |
description | string | Full description written by the publication owners. | Get smarter at building your thing. Follow to join The Startup’s +8 million mont |
subscribers | integer | Number of Medium users following the publication. | 894499 |
creatorUsername | string | Medium username of the account that created the publication. | meseali |
creatorName | string | Display name of the account that created the publication. | Ali Mese |
editorsCount | integer | Number of editors listed for the publication. Editors are the people who accept or reject submissions. | 2 |
editors | array | Editors with their Medium username and display name. | [{"username":"meseali","name":"Ali Mese" |
twitterUsername | string | Twitter/X handle the publication lists, or null. | GrowthSupply |
newsletterSlug | string | Slug of the publication newsletter on Medium, or null when it has none. | top-stories |
postsSampled | integer | Number of recent posts that feed the metrics below; 0 means the publication has no posts, null means Medium did not return the list. | 25 |
sampleSpanDays | number | Days between the oldest analysed post and the time of the run. | 175.3 |
lastPostAt | string | ISO 8601 date of the newest analysed post. | 2026-05-25T19:56:00.532Z |
daysSinceLastPost | number | Days between the newest analysed post and the time of the run. | 134.6 |
postsPerWeek | number | Posts per week over the analysed sample, measured up to the time of the run, so a publication that stopped posting scores low. | 1 |
activityStatus | string | active 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 |
medianClaps | number | Median clap count per analysed post. | 412 |
averageClaps | number | Mean clap count per analysed post. | 380.5 |
medianClapsPer1kSubscribers | number | Median claps divided by subscribers, times 1,000; compares engagement between publications of different sizes. | 0.46 |
medianResponses | number | Median number of responses (comments) per analysed post. | 8 |
medianReadingMinutes | number | Median reading time in minutes of the analysed posts. | 5.6 |
medianWords | integer | Median word count of the analysed posts. | 1024 |
memberOnlySharePct | number | Share of analysed posts that sit behind the Medium paywall, in percent. | 68 |
distinctAuthors | integer | Number of different authors among the analysed posts; 1 means a one-person publication. | 22 |
topAuthors | array | Up to three authors with the most analysed posts: username, name and post count. | [{"username":"aldric-chen","name":"Aldric Che |
topTags | array | Up to five tags used most often across the analysed posts, with post counts. | [{"tag":"productivity","posts":6}] |
bestPost | object | The analysed post with the most claps: title, URL and clap count. | {"title":"These Countries Offer Real Estate Visas","url |
found | boolean | False only for status rows (no match, publication not found, request failed, filtered out). | true |
reason | string | Present on status rows only: noMatches, filteredOut, notFound or fetchFailed. | filteredOut |
message | string | Present on status rows only: what happened and what to change. | Publications were found but none passed the subscriber and activity filters. |
sourceUrl | string | Public page of the publication the row was read from. | https://medium.com/swlh |
scrapedAt | string | ISO 8601 timestamp of extraction. | 2026-10-07T08:00:00.000Z |
{
"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"
}
| Field | Name | Type | What it does |
|---|---|---|---|
queries | Search keywords | array | Keywords 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. |
publications | Publications to look up | array | Specific 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. |
maxPublicationsPerQuery | Publications per keyword | integer | How 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. |
postsSample | Recent posts to analyse | integer | How many of a publication's most recent posts feed the cadence and engagement figures, 5 to 25. Medium serves at most 25 per publication. |
minSubscribers | Minimum subscribers | integer | Skip publications with fewer followers than this. 0 means no minimum. Skipped publications are not charged. |
maxSubscribers | Maximum subscribers | integer | Skip publications with more followers than this, which is useful for finding smaller publications that answer pitches. 0 means no maximum. |
activeWithinDays | Posted within the last (days) | integer | Keep 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. |
maxItems | Maximum publications | integer | Stop after this many publication rows in total across all keywords and direct lookups. |
proxyConfiguration | Proxy configuration | object | Optional proxy. Leave disabled unless Medium refuses requests from your region; residential proxy raises the platform cost of the run. |
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.
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.
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.
No. It scores publications. Use an article scraper when you need story text.
Every run reads Medium live.
Yes, use Apify schedules to track how follower counts and cadence change.
Open an issue with the input you used; layout changes at Medium are fixed quickly.
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.
Bilibili anime, Chinese animation, film, documentary and TV series: filterable catalog, Top 100 rankings, release calendar and season details with ratings and follower counts.
Find Bluesky starter packs, custom feeds and curated lists by topic, with join counts, feed likes and full member lists with follower counts.
Substack publications ranked for sponsorship: subscriber count, paid-tier size, plan prices, posting cadence and engagement per 1,000 subscribers.
Find EU public contracts approaching expiry from TED award notices: incumbent, buyer, value, end date and renewal options.