Scrape data from Discord
People search for a Discord scraper, but Discord is a special case. It bans scraping and self-bots outright, and most of what is there is private. The honest route is the official API for your own server, and careful reading of public content. There are three ways to start, with no code, with code, or with a Claude skill.
What I mean by scraping Discord
Scraping Discord, done honestly, is narrow. It means reading data you are entitled to, from your own server or a public one you are part of, and ideally through Discord's official tools rather than by driving the app. Channel activity you have a right to see, public announcement content, your own server's data. It is not harvesting members, messages, or DMs from communities you do not run.
Discord has an API, and it bans scraping
This is the page where the honest answer is mostly do not. Discord's terms ban scraping and self-bots flat out, and they enforce it with account bans. On top of that, most of Discord is private, messages and members inside servers that people did not make public, and harvesting those is both against the rules and a real privacy harm.
So the right route is the official one. Discord has a proper API and a bot framework for reading and acting on your own server's data, with permission, the way Discord intends. If you run a community, build a bot through that. A browser driving the app to scrape members or messages is the thing that gets banned, and it is not something to build. Use the API, on your own server, with consent.
Who this is for
This is for the person who runs or helps run a Discord community and wants their own server's data, through the proper channels. A mod pulling public announcements, an admin building a bot on the official API. It is not for harvesting other people's servers. No-coders and coders both, since you can build it without code and drop into code when you want.
How I'd approach it
Reach for Discord's official API and bot framework first, because it is the supported way to read your own server's data with permission. Use the browser only for genuinely public, in-the-open content, and never to gather members, messages, or DMs from communities you do not run. If a task needs private data you are not entitled to, that is the signal to stop.
API and your own server first, public content only otherwise. I would lay out the first draft with Build with description.
Scrape Discord from a description
Describe the task in plain words in the Chrome extension and it builds the steps for you. Give it a few short lines, check what it made, and run it. Explore no-code.
To the right is an example. For your own server, the official API is the better route, build the bot there.
Chrome extensionInstructions
- Open a public page you are entitled to read43 / 500
- Read the public content shown29 / 500
- Pull out the fields you need28 / 500
- Write them to a Google Sheet28 / 500
- Leave members and private messages alone40 / 500
Scrape Discord in code
Build with code. For your own server, the official Discord API and bot framework are the right path. Explore code
Connect Playwright (or Puppeteer) to our cloud Chromium and write the same scripts you'd run locally, without managing the browser.
Code tool// For your own server, use Discord's official API and bot framework.
// It is the supported, permitted way to read your server's data.
//
// A browser self-bot scraping members or messages is against
// Discord's terms and risks a ban, so that is not built here.
//
// If you have a public page you are entitled to read, you can
// scrape it like any other site, taking only what is public.
import { chromium } from "playwright";
const browser = await chromium.connectOverCDP(
`wss://cdp-lb.axiom.ai/?token=${process.env.AXIOM_API_KEY}`
);
try {
const context = browser.contexts()[0];
const page = context.pages()[0] ?? await context.newPage();
// Example: a public, in-the-open page, not the Discord app
await page.goto("https://example.com/community-announcements");
await page.waitForSelector(".post");
const posts = await page.$$eval(".post", els =>
els.map(el => el.textContent.trim())
);
console.log(posts); // write these to your sheet
} finally {
await browser.close();
}
Build with a Claude skill
Build no-code or code bots with a skill.
Add the Claude skill and describe the task. For your own server it points you at the official API, the supported way to read your data.

What can you do?
The honest, supported routes. A couple of lines that decide everything.
Works well
- The official API for your own server
- A bot you build with permission
- Genuinely public, in-the-open content
- Your own server's data, with consent
- Writing what you are entitled to into a sheet
Harder
- Anything Discord serves only in the app
- Self-bots, which Discord bans
- Data you do not have a right to
Don't try
- Harvesting members or contacts
- Scraping messages or DMs from servers you do not run
- Self-bots or anything against Discord's terms
What I'd watch out for
Discord is the one where the rules and the privacy stakes both say go carefully. Here is what I would watch for.
Use the official API
For your own server, Discord's API and bot framework are the supported route, and the only one that does not risk a ban. Build there, not by driving the app.
Members and messages are private
Most of Discord is private, and harvesting members, messages, or DMs from servers you do not run is both against the terms and a real privacy harm. Do not.
No self-bots
Driving the Discord app as a logged-in user to scrape is a self-bot, which Discord bans on sight. It is not worth the account.
Only what you are entitled to
If a task needs data you do not have a right to see, stop. The honest version stays on your own server and genuinely public content.