Engagement figures no longer fall back to zero: a post that carries no clap count, response count or member-only flag is left out of medianClaps, averageClaps, medianClapsPer1kSubscribers, medianResponses, memberOnlySharePct and bestPost, and those fields are null when no post carries the value.
The run fails instead of billing hollow rows when, across at least 10 dated posts, none carries a clap count or a member-only flag. The final status message now reports clap-count and member-only-flag coverage next to the post-date coverage.
Numeric inputs sent as null or an empty string (common from API, MCP and n8n clients) now use the default (postsSample 25, maxItems 50, maxPublicationsPerQuery 10) instead of being clamped to the minimum.
Tested inputs: a publication whose posts all lack clap counts and one whose posts all lack member-only flags (run fails with a layout message), a publication with 2 of 25 posts missing clap counts (median over the other 23), null and empty numeric inputs (defaults applied, no early stop).
0.1
First release: one scorecard row per Medium publication found by keyword or looked up by slug, link or custom domain (subscribers, posts per week, days since the last post, activity status, median claps, claps per 1,000 subscribers, member-only share, top authors and tags, best post).
Filters by subscriber range and by days since the last post; skipped publications are not charged.
Tested inputs: two keywords plus two direct publications (typical), a keyword that matches nothing (single status row), a slug that does not exist and a transient failure next to a good publication (status rows), subscriber and activity filters that exclude every publication (single status row).