DEV Community

Sebastian Casvean
Sebastian Casvean

Posted on • Originally published at zenndra.com

Pull Medium Comments into Your Moderation Dashboard

Pull Medium Comments into Your Moderation Dashboard

If you syndicate full articles on-site, community managers still need responses in one ops stack. Scraping comment threads breaks when Medium tweaks markup; a responses endpoint does not.

Tool outcome: moderation_queue table fed by /article/{id}/responses on a schedule.


Workflows

  • Flag threads for human review in Retool or a custom admin.
  • Count responses per syndicated post for SLA reporting.
  • Export plain text for NLP toxicity scoring (run your own models; do not ship PII to random APIs without policy).

Ingest responses

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

async function importResponses(articleId) {
  const res = await fetch(`${API}/article/${articleId}/responses`, { headers });
  const { responses } = await res.json();

  for (const r of responses ?? []) {
    await db.query(
      `INSERT INTO moderation_queue (response_id, article_id, author_id, body, status)
       VALUES ($1, $2, $3, $4, 'pending')
       ON CONFLICT (response_id) DO NOTHING`,
      [r.id, articleId, r.author_id, r.content ?? r.text]
    );
  }
}
Enter fullscreen mode Exit fullscreen mode

List-level threads: /list/{list_id}/responses for list-native discussions.


Enrich for reviewers

Pair with:

  • /article/{id} — post title, tags, URL context
  • /user/{user_id} — author bio, follower count (signals for spam)

Store response_id to keep imports idempotent.


Product tips

  • Show original Medium permalink in the admin so moderators can escalate on-platform.
  • Auto-hide on your embed only after decision—Medium’s thread may still exist.
  • Rate-limit polling; comments are not stock tickers.

Keywords

medium comments api, medium responses endpoint, medium moderation, syndicated blog comments.


Further reading

Top comments (0)