Discord Server Directory Scraper avatar

Discord Server Directory Scraper

Pricing

from $1.68 / 1,000 item extracteds

Go to Apify Store
Discord Server Directory Scraper

Discord Server Directory Scraper

Browse Discord’s official public server directory by category and export ranked server identity, descriptions, tags, audience estimates, locale, and links.

Pricing

from $1.68 / 1,000 item extracteds

Rating

0.0

(0)

Developer

Stas Persiianenko

Stas Persiianenko

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Share

Browse the Discord server directory and export public community records for partnership research, landscape analysis, and repeatable prospect refreshes. This Actor reads Discord's official public category pages—without a Discord account or bot token—and turns ranked listings into clean dataset rows.

Choose one supported category, choose where pagination starts, and optionally apply a keyword to each discovered server's name, description, and public tags. Results include stable server identity, description, category, tags, approximate member and online counts, locale, vanity invite, official detail URL, source page, rank, and observation time.

What does this Discord server scraper do?

The Actor follows Discord's server-rendered public directory pages rather than scraping messages, members, or private guild data.

It can:

  • browse All, Gaming, Music, Entertainment, Science & Tech, or Education;
  • advance through the official directory in 12-listing offset pages;
  • locally filter discoverable records by keyword;
  • enrich listings from their public Discord detail pages;
  • preserve the directory rank and exact page where each record was observed;
  • save results to Apify's default dataset for JSON, CSV, Excel, XML, and API export.

It does not search all Discord servers, read channels, enumerate members, or access private content.

Who is it for

  • Partnership teams finding public communities in a relevant category.
  • Community managers refreshing a shortlist of visible neighboring communities.
  • Market researchers comparing audience-size signals across a ranked directory window.
  • Analysts building repeatable category snapshots for downstream change comparison.
  • Developers feeding public Discord community metadata into a data warehouse or CRM review queue.

Why use the official directory route?

The source scope is explicit. Every discovered record comes from discord.com/servers, and every row carries its source page and official detail URL.

That gives you:

  • clearer provenance than an undisclosed third-party index;
  • official public descriptions and category placement;
  • approximate audience signals as Discord displays them;
  • pagination controls that can reproduce a defined ranked window;
  • no requirement to provide a Discord user token, bot token, or server membership.

Discord's directory is curated and dynamic, so it is not a complete inventory of Discord communities.

What data can I extract?

FieldTypeMeaning
serverIdstringStable Discord guild snowflake from the public detail URL.
namestringPublic server name.
descriptionstring or nullPublic directory description.
categorystringPublic category or the selected category fallback.
tagsstring[]Public discovery keywords when present.
approximateMemberCountinteger or nullApproximate total-member count shown at observation time.
approximateOnlineCountinteger or nullApproximate online count shown at observation time.
localestring or nullPreferred public locale when exposed.
vanityCodestring or nullVanity invite code when exposed.
inviteUrlURL or nullPublic vanity invite link when exposed.
detailUrlURLOfficial Discord server detail page.
iconUrlURL or nullPublic server icon asset.
bannerUrlURL or nullPublic discovery banner asset.
rankintegerPosition in the selected category window, including startOffset.
sourceUrlURLExact category/offset page where the record appeared.
observedAtdate-timeUTC timestamp when the Actor produced the row.

Counts are snapshots and may change between runs. The Actor labels them approximate rather than presenting them as exact membership records.

How to scrape Discord's public server directory

  1. Open the Actor input page.
  2. Select a directory category.
  3. Optionally enter a keyword, such as roblox.
  4. Set maxItems to the maximum number of matched rows you need.
  5. Set maxPages high enough to inspect a useful directory window.
  6. Keep startOffset at 0, or use a multiple of 12 to continue later.
  7. Run the Actor and open the Discord servers dataset view.
  8. Export the results or connect the dataset to your workflow.

The prefilled Gaming + Roblox input is deliberately small and produces real public records.

Input parameters

ParameterRequiredDefaultDescription
categoryNoallOne of all, gaming, music, entertainment, science-and-tech, or education.
keywordNoemptyCase-insensitive local substring filter over name, description, and public tags; maximum 100 characters.
maxItemsNo50Maximum matching records to save, from 1 to 500.
maxPagesNo10Maximum 12-listing pages to inspect, from 1 to 100.
startOffsetNo0Non-negative multiple of 12 used as the first directory offset.
proxyConfigurationNodirectOptional Apify/custom proxy. Direct access is the default.

Search-intent input

{
"category": "gaming",
"keyword": "roblox",
"maxItems": 10,
"maxPages": 4,
"startOffset": 0
}

Category export input

{
"category": "music",
"maxItems": 12,
"maxPages": 1,
"startOffset": 0
}

Continuing from a later directory page

{
"category": "education",
"maxItems": 24,
"maxPages": 2,
"startOffset": 24
}

How keyword filtering works

Discord's public SEO directory pages expose category browsing, not an anonymous global keyword API. The Actor therefore:

  1. fetches each selected category page;
  2. reads its 12 discoverable listing cards;
  3. requests public detail enrichment;
  4. combines the server name, description, and public tags;
  5. applies your case-insensitive keyword locally;
  6. saves only matching rows until maxItems or maxPages is reached.

A selective keyword may require more pages. An empty result means no inspected record matched; it does not prove that no Discord community exists for the term.

Example output

A real local run against the Gaming category produced this shape:

{
"serverId": "1376018788041887795",
"name": "Steal a Brainrot",
"description": "Welcome to the official Steal a Brainrot server! 🧠",
"category": "Gaming",
"tags": ["brainrot", "roblox"],
"approximateMemberCount": 7799840,
"approximateOnlineCount": 286961,
"locale": "en-US",
"vanityCode": "brainrots",
"inviteUrl": "https://discord.gg/brainrots",
"detailUrl": "https://discord.com/servers/steal-a-brainrot-1376018788041887795",
"iconUrl": "https://cdn.discordapp.com/icons/1376018788041887795/f9f69ceda1bb918075ee1b2fd4cb5fcc.png?size=256",
"bannerUrl": "https://cdn.discordapp.com/discovery-splashes/1376018788041887795/7a06ebb2b3d4cb427a4c4358ec29cfa2.jpg?size=2048&format=auto",
"rank": 1,
"sourceUrl": "https://discord.com/servers/gaming",
"observedAt": "2026-09-08T15:30:25.056Z"
}

Values above are an observation, not a promise that counts or ranking remain unchanged.

How much does it cost to scrape Discord server directory records?

The Actor uses pay-per-event pricing:

  • one start event per run;
  • one item event for each dataset row actually produced.

You are not charged an item event for a filtered-out listing, duplicate, unavailable detail enrichment, or an empty result. Tier prices and worked examples shown in the Apify Console are the authoritative current prices. Larger account tiers receive the tier curve configured on the Actor.

Use fewer pages for a targeted snapshot. Increase maxPages only when a selective keyword or larger ranked window requires it.

Recurring community discovery workflow

For a repeatable partnership-research pipeline:

  1. keep category, maxPages, and startOffset fixed;
  2. schedule the Actor daily, weekly, or monthly;
  3. export serverId, rank, counts, and observedAt to your warehouse;
  4. compare by serverId rather than by mutable server name;
  5. review new records, moved ranks, and count changes;
  6. have a person assess relevance before outreach.

The Actor outputs observations only. It does not maintain history or calculate deltas inside a single run.

Pagination and scale tips

  • Each source page currently contains up to 12 listings.
  • startOffset must be divisible by 12.
  • Rank is startOffset + card position, so later windows remain interpretable.
  • maxItems limits saved matches; maxPages limits inspected source pages.
  • With a keyword, the Actor may inspect many nonmatching cards before reaching maxItems.
  • Without a keyword, one page can normally produce 12 records.
  • For separate windows, avoid overlapping offsets if you plan to merge datasets.

Directory composition can change while a long run is in progress. Deduplicate merged exports by serverId and keep observedAt.

Reliability and failure behavior

The Actor retries transient network errors, HTTP 429, and temporary 5xx responses twice. It does not blindly retry malformed input, stable 4xx responses, or unexpected page shapes.

A stale directory card can occasionally point to a removed detail page. In that case, the Actor keeps the useful listing-card data and leaves optional detail fields such as tags, locale, and invite URL empty. It logs the affected detail URL.

The run fails rather than reporting false success when Discord returns a non-HTML response or a directory page without recognizable listing cards.

Proxy guidance

Direct requests are the tested default and avoid proxy transfer costs. Supply proxyConfiguration only when your environment requires it or Discord applies a regional/network restriction.

The Actor keeps one coherent proxy session for the run. It does not silently escalate to residential proxies. If you explicitly choose a paid proxy group, your platform proxy usage depends on that configuration.

Export and integrations

Use the default dataset with:

  • JSON for applications and AI workflows;
  • CSV or Excel for analyst review;
  • the Dataset API for data warehouses;
  • Make, Zapier, Google Sheets, Slack, or webhooks for automation;
  • scheduled Actor runs for repeatable snapshots.

A useful CRM pattern is to retain serverId as the external key, detailUrl as provenance, and counts plus observedAt as time-varying observations.

REST API with cURL

curl -X POST \
"https://api.apify.com/v2/acts/automation-lab~discord-server-directory-search/runs?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"category": "gaming",
"keyword": "roblox",
"maxItems": 10,
"maxPages": 4,
"startOffset": 0
}'

For production code, prefer the Authorization: Bearer header rather than putting a token in a stored URL.

JavaScript API example

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/discord-server-directory-search').call({
category: 'music',
maxItems: 12,
maxPages: 1,
startOffset: 0,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

Python API example

import os
from apify_client import ApifyClient
client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("automation-lab/discord-server-directory-search").call(run_input={
"category": "entertainment",
"maxItems": 24,
"maxPages": 2,
"startOffset": 0,
})
items = client.dataset(run["defaultDatasetId"]).list_items().items
print(items)

Use with MCP and AI agents

Claude Code setup

Add the Apify MCP server to Claude Code:

claude mcp add --transport http apify \
"https://mcp.apify.com?tools=automation-lab/discord-server-directory-search"

Claude Desktop, Cursor, and VS Code setup

Use this equivalent remote MCP configuration in Claude Desktop, Cursor, or VS Code:

{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com?tools=automation-lab/discord-server-directory-search"
}
}
}

Example prompts:

  • “Run the Discord Server Directory Scraper for the Gaming category, filter for Roblox, and return 10 records.”
  • “Export the first 12 Music directory records and summarize the audience-size distribution.”
  • “Run the same Entertainment directory window as last month and compare rows by serverId.”

Always review extracted records before using them for outreach or automated decisions.

Responsible use and legality

This Actor accesses public Discord directory and public server-detail pages. It does not bypass authentication or collect channel messages, member lists, email addresses, or private server data.

You are responsible for your use of the output. Follow Discord's applicable terms, robots guidance, privacy and marketing laws, and your organization's data-retention rules. Public availability does not automatically authorize spam, profiling, or unsolicited bulk contact. Use partnership lists for relevant, respectful, human-reviewed research.

Limitations

  • Only servers listed in Discord's official public directory can be discovered.
  • Supported categories follow Discord's current public category sitemap.
  • Keyword filtering is local to the pages inspected, not global full-text search.
  • Counts and rank are approximate point-in-time signals.
  • Public tags, locale, and vanity invites may be absent.
  • A removed detail page can leave enrichment fields null while listing fields remain valid.
  • The Actor does not join servers, scrape members/messages, send invitations, or contact administrators.
  • Discord can change its HTML, category set, or pagination behavior.

Troubleshooting

Why did my keyword return fewer rows than maxItems?

maxItems is a ceiling, not a guarantee. Increase maxPages, broaden the keyword, or remove it to inspect all records in the selected category window.

Why are tags, locale, or invite URL null?

Discord does not expose every field for every listing, and a detail page may have been removed after its card was rendered. The row still includes its stable server ID, list metadata, and source page.

Why does startOffset fail validation?

Use 0, 12, 24, 36, or another non-negative multiple of 12.

Should I enable a proxy?

Not by default. Direct mode is tested. Add a proxy only for an observed network/geography issue or your own infrastructure policy.

Does an empty result mean the community does not exist?

No. It means none of the directory records inspected within maxPages matched the local keyword.

FAQ

Do I need a Discord token?

No. The Actor reads public official directory pages and does not accept Discord credentials.

Can it scrape messages or members?

No. That is intentionally outside this Actor's public-directory scope.

Can it search by any keyword?

It can locally filter discovered records by any string up to 100 characters. Coverage depends on the category pages and page limit you choose.

Can I monitor changes?

Schedule repeat runs with identical inputs, then compare rows by serverId and observation time in your own storage. The Actor supplies consistent observations but does not persist a historical diff.

Are member counts exact?

No. They are approximate public values displayed by Discord.

This Actor is intentionally standalone for official public Discord community discovery. No currently verified Automation Lab Actor adds a necessary adjacent step without changing the data scope, so this README does not recommend an unrelated product merely to create a cross-link.