Discord Server Scraper — Discovery & Invite Check avatar

Discord Server Scraper — Discovery & Invite Check

Under maintenance

Pricing

from $2.00 / 1,000 server results

Go to Apify Store
Discord Server Scraper — Discovery & Invite Check

Discord Server Scraper — Discovery & Invite Check

Under maintenance

Discover public Discord servers by keyword or category, enrich server details, validate invite links, and collect public widget presence, channels, and sticker packs—no Discord token required.

Pricing

from $2.00 / 1,000 server results

Rating

0.0

(0)

Developer

ScrapingMonkey

ScrapingMonkey

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Share

Discord Server Scraper - Server Search, Invites, Widgets and Stickers

Discover public Discord servers and collect directory listings, invite details, audience estimates, public widgets, channels, online member samples, and sticker packs.

  • Search Discord's public server directory by multiple keywords or browse supported public categories
  • Extract server names, descriptions, categories, keywords, features, locale, assets, and directory rank
  • Resolve public invite codes and URLs with destination, validity, expiry, channel, inviter, and event data when available
  • Collect enabled public widgets with channel lists, online member samples, and presence counts
  • Retrieve public sticker-pack names, sticker metadata, and SKU identifiers
  • Monitor directory results and save only new or changed public servers on scheduled runs
  • No Discord account, bot token, cookies, browser, or user-supplied proxy is required; requests use the built-in Apify Residential Proxy
  • Export results to JSON, CSV, Excel, XML, RSS, or access them through the Apify API

What can you do with this Actor?

Mode / actionInputOutputBest for
searchServersOne or more directory search termsRanked public server rowsCommunity discovery, market maps, and lead research
browseCategoryPublic Discord directory categoriesCategory-ranked server rowsCategory research and competitive discovery
serverDetailsPublic directory server URLsEnriched server rowsServer metadata and audience-size analysis
resolveInvitesPublic invite codes or URLsValidated invite rowsInvite health checks and destination enrichment
widgetGuild IDs with public widgets enabledwidget rows with public channels and online member samplesPublic presence and activity monitoring
stickerPacksNo target beyond the selected modePublic stickerPack rowsSticker metadata and asset cataloging
autoMixed public server-directory and invite URLsserver or invite rows selected from each URLBatch processing mixed known targets
monitorPublic directory search terms, optional categories, and a stable monitorKeyOnly new or new-and-changed server rowsScheduled directory monitoring

Choose one mode per run. Search and category modes can enrich discovered servers with public invite and widget data without creating hidden result tables.

Quick start

  1. Open the Actor and click Try for free.
  2. Keep Search Servers selected or choose another workflow.
  3. Enter a keyword, category, server URL, invite, or guild ID and set the result limit.
  4. Click Start.
  5. Preview the single Results table or download it in your preferred format.

The default input searches the public directory for artificial intelligence and is ready to run.

Input examples

Search public servers

{
"mode": "searchServers",
"searchTerms": [
"artificial intelligence",
"data science"
],
"maxItems": 50,
"country": "US"
}

Browse a category

{
"mode": "browseCategory",
"categories": [
"gaming"
],
"maxItems": 100,
"country": "US"
}

Resolve invites

{
"mode": "resolveInvites",
"inviteCodes": [
"discord-developers"
],
"country": "US"
}

Public widget

{
"mode": "widget",
"guildIds": [
"613425648685547541"
],
"country": "US"
}

Server details

{
"mode": "serverDetails",
"startUrls": [
"https://discord.com/servers/python"
],
"includeInviteEnrichment": true,
"includeWidget": true,
"country": "US"
}

Public sticker packs

{
"mode": "stickerPacks",
"maxItems": 50,
"country": "US"
}

Auto-detect public URLs

{
"mode": "auto",
"startUrls": [
"https://discord.com/servers/python",
"https://discord.gg/discord-developers"
],
"country": "US"
}

Monitor public directory results

{
"mode": "monitor",
"searchTerms": [
"artificial intelligence"
],
"maxItems": 50,
"monitorMode": "newAndChanged",
"monitorKey": "discord-ai-daily",
"country": "US"
}

maxItems limits retained directory or sticker-pack rows per input target. Invite, widget, and server-detail inputs normally produce one primary row each.

Complete output examples

Every result row contains exactly 51 top-level fields. The same complete key set makes mixed result types predictable in JSON exports and keeps every field visible in the single Results view.

Complete server row — 51 top-level fields

{
"recordType": "server",
"sourceMode": "searchServers",
"sourceTarget": "example-target",
"sourceUrl": "https://example.com/public-result",
"sourceEndpoints": [],
"guildId": "example-id",
"serverName": "Example public record",
"description": "Example public content",
"serverUrl": "https://example.com/public-result",
"directoryPosition": 0,
"searchTerm": null,
"category": null,
"categories": [],
"keywords": [],
"preferredLocale": null,
"features": [],
"memberCount": 0,
"onlineCount": 0,
"premiumSubscriptionCount": 0,
"boostLevel": 0,
"verificationLevel": 0,
"nsfw": false,
"vanityUrlCode": null,
"inviteCode": null,
"inviteUrl": "https://example.com/public-result",
"inviteValid": false,
"inviteExpiresAt": "2026-08-13T12:00:00Z",
"inviteTemporary": false,
"channelId": "example-id",
"channelName": null,
"channelType": 0,
"inviter": {},
"scheduledEvent": {},
"iconUrl": "https://cdn.example.com/image.jpg",
"bannerUrl": "https://cdn.example.com/image.jpg",
"splashUrl": "https://cdn.example.com/image.jpg",
"widgetEnabled": false,
"widgetInstantInvite": "https://example.com/public-result",
"widgetChannels": [],
"widgetMembers": [],
"widgetPresenceCount": 0,
"stickerPackId": "example-id",
"stickerPackName": "Example public record",
"stickers": [],
"skuId": "example-id",
"isPartial": false,
"monitorStatus": null,
"changedFields": [],
"previousCapturedAt": "2026-08-13T12:00:00Z",
"capturedAt": "2026-08-13T12:00:00Z",
"raw": {}
}

Complete invite row — 51 top-level fields

{
"recordType": "invite",
"sourceMode": "resolveInvites",
"sourceTarget": "example-target",
"sourceUrl": "https://example.com/public-result",
"sourceEndpoints": [],
"guildId": "example-id",
"serverName": "Example public record",
"description": "Example public content",
"serverUrl": "https://example.com/public-result",
"directoryPosition": 0,
"searchTerm": null,
"category": null,
"categories": [],
"keywords": [],
"preferredLocale": null,
"features": [],
"memberCount": 0,
"onlineCount": 0,
"premiumSubscriptionCount": 0,
"boostLevel": 0,
"verificationLevel": 0,
"nsfw": false,
"vanityUrlCode": null,
"inviteCode": null,
"inviteUrl": "https://example.com/public-result",
"inviteValid": false,
"inviteExpiresAt": "2026-08-13T12:00:00Z",
"inviteTemporary": false,
"channelId": "example-id",
"channelName": null,
"channelType": 0,
"inviter": {},
"scheduledEvent": {},
"iconUrl": "https://cdn.example.com/image.jpg",
"bannerUrl": "https://cdn.example.com/image.jpg",
"splashUrl": "https://cdn.example.com/image.jpg",
"widgetEnabled": false,
"widgetInstantInvite": "https://example.com/public-result",
"widgetChannels": [],
"widgetMembers": [],
"widgetPresenceCount": 0,
"stickerPackId": "example-id",
"stickerPackName": "Example public record",
"stickers": [],
"skuId": "example-id",
"isPartial": false,
"monitorStatus": null,
"changedFields": [],
"previousCapturedAt": "2026-08-13T12:00:00Z",
"capturedAt": "2026-08-13T12:00:00Z",
"raw": {}
}

Complete widget row — 51 top-level fields

{
"recordType": "widget",
"sourceMode": "widget",
"sourceTarget": "example-target",
"sourceUrl": "https://example.com/public-result",
"sourceEndpoints": [],
"guildId": "example-id",
"serverName": "Example public record",
"description": "Example public content",
"serverUrl": "https://example.com/public-result",
"directoryPosition": 0,
"searchTerm": null,
"category": null,
"categories": [],
"keywords": [],
"preferredLocale": null,
"features": [],
"memberCount": 0,
"onlineCount": 0,
"premiumSubscriptionCount": 0,
"boostLevel": 0,
"verificationLevel": 0,
"nsfw": false,
"vanityUrlCode": null,
"inviteCode": null,
"inviteUrl": "https://example.com/public-result",
"inviteValid": false,
"inviteExpiresAt": "2026-08-13T12:00:00Z",
"inviteTemporary": false,
"channelId": "example-id",
"channelName": null,
"channelType": 0,
"inviter": {},
"scheduledEvent": {},
"iconUrl": "https://cdn.example.com/image.jpg",
"bannerUrl": "https://cdn.example.com/image.jpg",
"splashUrl": "https://cdn.example.com/image.jpg",
"widgetEnabled": false,
"widgetInstantInvite": "https://example.com/public-result",
"widgetChannels": [],
"widgetMembers": [],
"widgetPresenceCount": 0,
"stickerPackId": "example-id",
"stickerPackName": "Example public record",
"stickers": [],
"skuId": "example-id",
"isPartial": false,
"monitorStatus": null,
"changedFields": [],
"previousCapturedAt": "2026-08-13T12:00:00Z",
"capturedAt": "2026-08-13T12:00:00Z",
"raw": {}
}

Complete stickerPack row — 51 top-level fields

{
"recordType": "stickerPack",
"sourceMode": "stickerPacks",
"sourceTarget": "example-target",
"sourceUrl": "https://example.com/public-result",
"sourceEndpoints": [],
"guildId": "example-id",
"serverName": "Example public record",
"description": "Example public content",
"serverUrl": "https://example.com/public-result",
"directoryPosition": 0,
"searchTerm": null,
"category": null,
"categories": [],
"keywords": [],
"preferredLocale": null,
"features": [],
"memberCount": 0,
"onlineCount": 0,
"premiumSubscriptionCount": 0,
"boostLevel": 0,
"verificationLevel": 0,
"nsfw": false,
"vanityUrlCode": null,
"inviteCode": null,
"inviteUrl": "https://example.com/public-result",
"inviteValid": false,
"inviteExpiresAt": "2026-08-13T12:00:00Z",
"inviteTemporary": false,
"channelId": "example-id",
"channelName": null,
"channelType": 0,
"inviter": {},
"scheduledEvent": {},
"iconUrl": "https://cdn.example.com/image.jpg",
"bannerUrl": "https://cdn.example.com/image.jpg",
"splashUrl": "https://cdn.example.com/image.jpg",
"widgetEnabled": false,
"widgetInstantInvite": "https://example.com/public-result",
"widgetChannels": [],
"widgetMembers": [],
"widgetPresenceCount": 0,
"stickerPackId": "example-id",
"stickerPackName": "Example public record",
"stickers": [],
"skuId": "example-id",
"isPartial": false,
"monitorStatus": null,
"changedFields": [],
"previousCapturedAt": "2026-08-13T12:00:00Z",
"capturedAt": "2026-08-13T12:00:00Z",
"raw": {}
}

What data can you extract?

CategoryFields
Source and capturerecordType, sourceMode, sourceTarget, sourceUrl, sourceEndpoints, capturedAt
Server identityguildId, serverName, description, serverUrl, directoryPosition
Discovery metadatasearchTerm, category, categories, keywords, preferredLocale, features
Audience and statusmemberCount, onlineCount, premiumSubscriptionCount, boostLevel, verificationLevel, nsfw
Invite datavanityUrlCode, inviteCode, inviteUrl, inviteValid, inviteExpiresAt, inviteTemporary
Channel and event datachannelId, channelName, channelType, inviter, scheduledEvent
Visual assetsiconUrl, bannerUrl, splashUrl
Public widgetwidgetEnabled, widgetInstantInvite, widgetChannels, widgetMembers, widgetPresenceCount
Sticker packsstickerPackId, stickerPackName, stickers, skuId
Monitoring and diagnosticsisPartial, monitorStatus, changedFields, previousCapturedAt, raw

Nested fields such as inviter, scheduledEvent, widgetChannels, widgetMembers, stickers, and optional raw retain Discord's public endpoint structure after sensitive cookie, authorization, token, and signature keys are removed. Their nested keys are source-controlled and can change; the 51 top-level keys above are fixed by the Actor.

Input parameters

ParameterTypeRequiredDefaultDescription
modestringNo"searchServers"auto, searchServers, browseCategory, serverDetails, resolveInvites, widget, stickerPacks, or monitor.
searchTermsstring[]In searchServers["artificial intelligence"]Keywords for Discord's public server directory.
categoriesstring[]In browseCategory[]Public directory category slugs.
startUrlsstring[]In auto / serverDetails[]Public directory server pages or invite URLs.
inviteCodesstring[]In resolveInvites[]Public invite codes or full invite URLs.
guildIdsstring[]In widget[]Guild IDs whose public widget is enabled.
maxItemsintegerNo50Maximum retained directory or sticker rows per input target, from 1 to 15,000.
maxPagesintegerNo20Maximum directory pages per search or category, from 1 to 250.
includeInviteEnrichmentbooleanNotrueResolve a discovered public invite code when available.
includeWidgetbooleanNotrueRequest public widget channels and online member samples when a guild ID is known.
maxConcurrencyintegerNo5Concurrent public targets, from 1 to 20.
countrystringNo"US"Two-letter ISO country used for the internal residential proxy region.
includeRawbooleanNofalseInclude the redacted public source object; increases dataset size.
monitorModestringNo"off"off, onlyNew, or newAndChanged.
monitorKeystringWith monitoring"default"Stable comparison-state namespace for recurring runs.
maxSessionRotationsintegerNo3Fresh residential sessions tried after blocks, from 1 to 6.
requestTimeoutSecsintegerNo45Per-request timeout in seconds, from 15 to 120.

Pay-per-event result types

EventCharged when
server-resultOne server row is accepted by the Dataset.
invite-resultOne invite row is accepted by the Dataset.
widget-resultOne widget row is accepted by the Dataset.
sticker-pack-resultOne stickerPack row is accepted by the Dataset.

The Actor does not emit a paid error event. Failed targets are counted by category in RUN_SUMMARY; successful targets continue. Actual event prices are shown on the Actor's Pricing tab.

Use cases

Discover communities and market segments

Search or browse Discord's public server directory to build ranked datasets by keyword or category.

Validate invites and public server health

Resolve public invite destinations, expiry metadata, audience estimates, widget availability, and public presence counts.

Build lead and research pipelines

Export normalized server records to Google Sheets, Airtable, Make, Zapier, n8n, Airbyte, webhooks, or a data warehouse for qualification and analysis.

Monitor public changes

Schedule recurring runs with a stable monitorKey to retain only new or changed public server, invite, and widget records.

Performance and cost

Direct HTTP generally uses substantially less memory and bandwidth than launching a browser, but source response size, retries, optional enrichment, raw objects, and pagination determine actual cost. Start with a small limit, inspect the Dataset and RUN_SUMMARY, then scale. Lower concurrency is usually more reliable on stricter public sites.

API usage

Replace YOUR_USERNAME with the publishing Apify username after publication:

curl -X POST \
"https://api.apify.com/v2/acts/YOUR_USERNAME~discord-server-scraper/runs?token=APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"mode": "searchServers",
"searchTerms": ["artificial intelligence"],
"maxItems": 50,
"country": "US"
}'

The request body is the same JSON used in Apify Console. Read results from the run's default Dataset or use the output link that opens view=overview.

Best for / not for

Best for: public server discovery, directory research, invite validation, public widget monitoring, and sticker-pack metadata.

Not for: messages, threads, DMs, private servers or channels, complete member lists, guild administration, or any workflow requiring a bot or user token.

Limits and good to know

Discord messages, complete member enumeration, private servers, private channels, and account-only APIs require authentication and are deliberately excluded. Widget member data is a public online sample, not a full membership list.

A missing public value is returned as null or an empty array. One failed input does not create a frightening error row in Results. If every input fails, the run fails after writing diagnostic counts to RUN_SUMMARY.

Frequently asked questions

What input should I provide?

Use search terms, directory category slugs, public directory URLs, invite codes or URLs, or guild IDs with enabled public widgets, depending on the selected mode.

How many results can I extract?

maxItems accepts 1-15,000 per search, category, or sticker target and maxPages accepts 1-250. Discord directory availability and pagination can return fewer rows.

Can I process multiple inputs?

Yes. Input arrays accept multiple terms, categories, URLs, invites, or guild IDs. Stable guild and invite identities are deduplicated before saving.

Can I schedule recurring runs?

Yes. Use Apify schedules, monitoring fields, and webhooks to deliver new or changed public records to another system.

Does this Actor open a browser?

No. Runtime extraction uses direct HTTP only and contains no Playwright, Selenium, Chromium, or browser installation.

Do I need an account or cookies?

No. The supported modes use public pages and anonymous endpoints. Cookies or authorization values from research captures are never embedded in the release.

Do I need to configure a proxy?

No. On Apify, the Actor creates a Residential Proxy configuration internally and does not expose proxy settings in Input. Local developers may privately point the documented test-only environment variable at a proxy file; that variable is not an Actor input and is ignored on the platform.

Why are some fields empty?

The single Results view covers every result type. Fields that do not apply to a row remain empty, while the complete key set is preserved in JSON.

Responsible use

Collect only public Discord data you are permitted to process. Respect applicable law, privacy rights, platform terms, rate limits, and intellectual-property rights. This Actor is not affiliated with or endorsed by Discord.

Support

For a reproducible issue, include the Apify run ID, mode, a non-sensitive public target, expected result, and actual result. Never send account credentials, cookies, access tokens, proxy passwords, or private content.

Local development

For local read-only smoke tests only, DISCORD_TEST_PROXY_FILE may point to a private file containing one login:password@host:port proxy per line. The file is never read on Apify and must not be committed.