VOOZH about

URL: https://dev.to/zenndraapi/find-medium-influencers-and-top-writers-by-tag-crm-ready-lists-5fka

⇱ Find Medium Influencers and Top Writers by Tag (CRM-Ready Lists) - DEV Community


Find Medium Influencers and Top Writers by Tag (CRM-Ready Lists)

Guessing handles from Google is slow. search/users, top_writers/{tag}, and recommended_users/{tag} return ranked names with API-stable ids for HubSpot, Airtable, or Notion.

Tool outcome: export-influencers.js → CSV with user_id, bio, followers, last post date.


Workflow

  1. Pick a tag aligned with your campaign (devops, product-management, …).
  2. Pull top_writers + recommended_users.
  3. Enrich with /user/{user_id} (bio, followers).
  4. Filter inactive accounts via /user/{user_id}/articles.
  5. Export with user_id in a custom CRM field.

Discovery + enrich

const API = 'https://api.zenndra.com';
const headers = { Authorization: `Bearer ${process.env.ZENNDRA_API_KEY}` };
const tag = 'artificial-intelligence';

async function listInfluencers(tag) {
 const [top, rec] = await Promise.all([
 fetch(`${API}/top_writers/${encodeURIComponent(tag)}`, { headers }).then((r) => r.json()),
 fetch(`${API}/recommended_users/${encodeURIComponent(tag)}`, { headers }).then((r) => r.json()),
 ]);

 const ids = [...new Set([...(top.users ?? []), ...(rec.users ?? [])].map((u) => u.user_id ?? u.id))];

 const profiles = [];
 for (const userId of ids) {
 const profile = await fetch(`${API}/user/${userId}`, { headers }).then((r) => r.json());
 const { articles } = await fetch(`${API}/user/${userId}/articles`, { headers }).then((r) => r.json());
 const lastPublished = articles?.[0]?.published_at ?? null;
 profiles.push({
 user_id: userId,
 name: profile.name,
 username: profile.username,
 followers: profile.followers_count,
 lastPublished,
 });
 }
 return profiles;
}

Filters that save outreach

Signal Rule of thumb
Followers Campaign-dependent floor
lastPublished Skip if > 90 days idle
Bio keywords Match ICP manually or with simple regex

Search fallback

When you know a name but not a tag:

const q = 'kelsey higgins';
const res = await fetch(`${API}/search/users?query=${encodeURIComponent(q)}`, { headers });
const { users } = await res.json();

Always persist user_id after the first resolve (id guide).


Keywords

medium influencer search, medium top writers api, medium outreach list, find medium authors, medium expert directory.


Further reading