# Discord Forum To Website

Transform your Discord forum channels into beautiful, SEO-optimized static websites with customizable templates and one-click deployment to Vercel, Netlify, or GitHub Pages.

## Actor Statistics

- Total users: 1
- Monthly users: 1
- Runs succeeded: 0.00%
- Categories: Developer tools, SEO tools, Other

## Pricing

$25.00/month + usage

## Input Schema

- **discordToken** (type: string): Your Discord bot token (required). Create a bot at https://discord.com/developers/applications
- **serverId** (type: string): The Discord server (guild) ID containing the forum channels
- **forumChannelIds** (type: array): Array of Discord forum channel IDs to scrape
- **scrapeUntilDate** (type: string): Only scrape threads created before this date (YYYY-MM-DD format)
- **maxThreadsPerChannel** (type: integer): Maximum number of threads to scrape per channel (optional)
- **includeArchived** (type: boolean): Whether to include archived threads in the scraping
- **siteTitle** (type: string): Title for the generated website (leave empty to use Discord server name)
- **siteDescription** (type: string): Description for the generated website (leave empty for auto-generated)
- **siteTagline** (type: string): Optional tagline/subtitle for the website
- **enableLeaderboard** (type: boolean): Enable a leaderboard page showing top contributors
- **searchEnabled** (type: boolean): Enable search functionality on the website
- **itemsPerPage** (type: integer): Number of items to show per page
- **baseUrl** (type: string): Base URL for asset paths (e.g., '/' for root, '/repo-name/' for GitHub Pages)
- **template** (type: string): Choose a template style for your website
- **logoUrl** (type: string): Optional logo URL for branding
- **faviconUrl** (type: string): Optional favicon URL
- **secondaryColor** (type: string): Custom secondary color (hex, rgb, or color name)
- **backgroundColor** (type: string): Custom background color (hex, rgb, or color name)
- **textColor** (type: string): Custom text color (hex, rgb, or color name)
- **fontFamily** (type: string): Custom font family (e.g., 'Inter', 'Roboto', 'Open Sans')
- **accentColor** (type: string): Accent color for special highlights and notifications (hex, rgb, or color name)
- **surfaceColor** (type: string): Color for elevated surfaces and containers (hex, rgb, or color name)
- **cardColor** (type: string): Background color for cards and content blocks (hex, rgb, or color name)
- **textPrimary** (type: string): Main text color for headings and content (hex, rgb, or color name)
- **textSecondary** (type: string): Secondary text color for subtitles and metadata (hex, rgb, or color name)
- **textMuted** (type: string): Muted text color for placeholders and inactive elements (hex, rgb, or color name)
- **borderColor** (type: string): Color for borders and dividers (hex, rgb, or color name)
- **successColor** (type: string): Color for success messages and positive states (hex, rgb, or color name)
- **warningColor** (type: string): Color for warning messages and caution states (hex, rgb, or color name)
- **errorColor** (type: string): Color for error messages and danger states (hex, rgb, or color name)
- **customCss** (type: string): Additional CSS to inject into the website
- **customJs** (type: string): Additional JavaScript to inject into the website
- **maxThreadTitleLength** (type: integer): Maximum length for thread titles (will be truncated)
- **maxPostContentLength** (type: integer): Maximum length for post content preview on cards
- **showUserAvatars** (type: boolean): Display user profile pictures
- **showTimestamps** (type: boolean): Display post timestamps
- **showThreadTags** (type: boolean): Display Discord thread tags if available
- **threadSorting** (type: string): Default sorting method for threads
- **metaKeywords** (type: string): Comma-separated SEO keywords
- **metaAuthor** (type: string): Website author for SEO
- **googleAnalyticsId** (type: string): Google Analytics tracking ID (e.g., GA-XXXXXXXXX-X)
- **googleSiteVerification** (type: string): Google Search Console verification code
- **twitterHandle** (type: string): Twitter handle for Twitter Cards (without @)
- **ogImage** (type: string): URL for Open Graph image for social media sharing
- **deploymentMethod** (type: string): How to deploy the generated website
- **vercelToken** (type: string): Vercel deployment token (required if using Vercel deployment)
- **netlifyToken** (type: string): Netlify deployment token (required if using Netlify deployment)
- **githubRepo** (type: string): GitHub repository in format 'username/repo-name' (required if using GitHub deployment)
- **githubToken** (type: string): GitHub personal access token (required if using GitHub deployment)
- **customDomain** (type: string): Optional custom domain for deployment

## API example

## Discord Forum To Website

- **OpenAPI Version:** `3.1.1`
- **API Version:** `0.0`

Transform your Discord forum channels into beautiful, SEO-optimized static websites with customizable templates and one-click deployment to Vercel, Netlify, or GitHub Pages.

### Servers

- **URL:** `https://api.apify.com/v2`

### Operations

#### Executes an Actor, waits for its completion, and returns Actor's dataset items in response.

- **Method:** `POST`
- **Path:** `/acts/code-node-tools~discord-forum-to-website/run-sync-get-dataset-items`
- **Tags:** Run Actor

##### Request Body

###### Content-Type: application/json

- **`discordToken` (required)**

  `string` — Your Discord bot token (required). Create a bot at https://discord.com/developers/applications

- **`forumChannelIds` (required)**

  `array` — Array of Discord forum channel IDs to scrape

  **Items:**

  `string`

- **`serverId` (required)**

  `string` — The Discord server (guild) ID containing the forum channels

- **`accentColor`**

  `string` — Accent color for special highlights and notifications (hex, rgb, or color name)

- **`backgroundColor`**

  `string` — Custom background color (hex, rgb, or color name)

- **`baseUrl`**

  `string`, default: `"/"` — Base URL for asset paths (e.g., '/' for root, '/repo-name/' for GitHub Pages)

- **`borderColor`**

  `string` — Color for borders and dividers (hex, rgb, or color name)

- **`cardColor`**

  `string` — Background color for cards and content blocks (hex, rgb, or color name)

- **`customCss`**

  `string` — Additional CSS to inject into the website

- **`customDomain`**

  `string` — Optional custom domain for deployment

- **`customJs`**

  `string` — Additional JavaScript to inject into the website

- **`deploymentMethod`**

  `string`, possible values: `"vercel", "netlify", "github", "zip"`, default: `"zip"` — How to deploy the generated website

- **`enableLeaderboard`**

  `boolean`, default: `true` — Enable a leaderboard page showing top contributors

- **`errorColor`**

  `string` — Color for error messages and danger states (hex, rgb, or color name)

- **`faviconUrl`**

  `string` — Optional favicon URL

- **`fontFamily`**

  `string` — Custom font family (e.g., 'Inter', 'Roboto', 'Open Sans')

- **`githubRepo`**

  `string` — GitHub repository in format 'username/repo-name' (required if using GitHub deployment)

- **`githubToken`**

  `string` — GitHub personal access token (required if using GitHub deployment)

- **`googleAnalyticsId`**

  `string` — Google Analytics tracking ID (e.g., GA-XXXXXXXXX-X)

- **`googleSiteVerification`**

  `string` — Google Search Console verification code

- **`includeArchived`**

  `boolean`, default: `false` — Whether to include archived threads in the scraping

- **`itemsPerPage`**

  `integer`, default: `20` — Number of items to show per page

- **`logoUrl`**

  `string` — Optional logo URL for branding

- **`maxPostContentLength`**

  `integer`, default: `500` — Maximum length for post content preview on cards

- **`maxThreadsPerChannel`**

  `integer`, default: `100` — Maximum number of threads to scrape per channel (optional)

- **`maxThreadTitleLength`**

  `integer`, default: `100` — Maximum length for thread titles (will be truncated)

- **`metaAuthor`**

  `string` — Website author for SEO

- **`metaKeywords`**

  `string` — Comma-separated SEO keywords

- **`netlifyToken`**

  `string` — Netlify deployment token (required if using Netlify deployment)

- **`ogImage`**

  `string` — URL for Open Graph image for social media sharing

- **`scrapeUntilDate`**

  `string`, default: `"2025-07-20"` — Only scrape threads created before this date (YYYY-MM-DD format)

- **`searchEnabled`**

  `boolean`, default: `true` — Enable search functionality on the website

- **`secondaryColor`**

  `string` — Custom secondary color (hex, rgb, or color name)

- **`showThreadTags`**

  `boolean`, default: `true` — Display Discord thread tags if available

- **`showTimestamps`**

  `boolean`, default: `true` — Display post timestamps

- **`showUserAvatars`**

  `boolean`, default: `true` — Display user profile pictures

- **`siteDescription`**

  `string` — Description for the generated website (leave empty for auto-generated)

- **`siteTagline`**

  `string` — Optional tagline/subtitle for the website

- **`siteTitle`**

  `string` — Title for the generated website (leave empty to use Discord server name)

- **`successColor`**

  `string` — Color for success messages and positive states (hex, rgb, or color name)

- **`surfaceColor`**

  `string` — Color for elevated surfaces and containers (hex, rgb, or color name)

- **`template`**

  `string`, possible values: `"tech", "gaming", "startup", "crypto", "education", "support"`, default: `"tech"` — Choose a template style for your website

- **`textColor`**

  `string` — Custom text color (hex, rgb, or color name)

- **`textMuted`**

  `string` — Muted text color for placeholders and inactive elements (hex, rgb, or color name)

- **`textPrimary`**

  `string` — Main text color for headings and content (hex, rgb, or color name)

- **`textSecondary`**

  `string` — Secondary text color for subtitles and metadata (hex, rgb, or color name)

- **`threadSorting`**

  `string`, possible values: `"date", "popularity", "replies"`, default: `"date"` — Default sorting method for threads

- **`twitterHandle`**

  `string` — Twitter handle for Twitter Cards (without @)

- **`vercelToken`**

  `string` — Vercel deployment token (required if using Vercel deployment)

- **`warningColor`**

  `string` — Color for warning messages and caution states (hex, rgb, or color name)

**Example:**

```
{
  "discordToken": "",
  "serverId": "",
  "forumChannelIds": [
    ""
  ],
  "scrapeUntilDate": "2025-07-20",
  "maxThreadsPerChannel": 100,
  "includeArchived": false,
  "siteTitle": "",
  "siteDescription": "",
  "siteTagline": "",
  "enableLeaderboard": true,
  "searchEnabled": true,
  "itemsPerPage": 20,
  "baseUrl": "/",
  "template": "tech",
  "logoUrl": "",
  "faviconUrl": "",
  "secondaryColor": "",
  "backgroundColor": "",
  "textColor": "",
  "fontFamily": "",
  "accentColor": "",
  "surfaceColor": "",
  "cardColor": "",
  "textPrimary": "",
  "textSecondary": "",
  "textMuted": "",
  "borderColor": "",
  "successColor": "",
  "warningColor": "",
  "errorColor": "",
  "customCss": "",
  "customJs": "",
  "maxThreadTitleLength": 100,
  "maxPostContentLength": 500,
  "showUserAvatars": true,
  "showTimestamps": true,
  "showThreadTags": true,
  "threadSorting": "date",
  "metaKeywords": "",
  "metaAuthor": "",
  "googleAnalyticsId": "",
  "googleSiteVerification": "",
  "twitterHandle": "",
  "ogImage": "",
  "deploymentMethod": "zip",
  "vercelToken": "",
  "netlifyToken": "",
  "githubRepo": "",
  "githubToken": "",
  "customDomain": ""
}
```

##### Responses

###### Status: 200 OK

#### Executes an Actor and returns information about the initiated run in response.

- **Method:** `POST`
- **Path:** `/acts/code-node-tools~discord-forum-to-website/runs`
- **Tags:** Run Actor

##### Request Body

###### Content-Type: application/json

- **`discordToken` (required)**

  `string` — Your Discord bot token (required). Create a bot at https://discord.com/developers/applications

- **`forumChannelIds` (required)**

  `array` — Array of Discord forum channel IDs to scrape

  **Items:**

  `string`

- **`serverId` (required)**

  `string` — The Discord server (guild) ID containing the forum channels

- **`accentColor`**

  `string` — Accent color for special highlights and notifications (hex, rgb, or color name)

- **`backgroundColor`**

  `string` — Custom background color (hex, rgb, or color name)

- **`baseUrl`**

  `string`, default: `"/"` — Base URL for asset paths (e.g., '/' for root, '/repo-name/' for GitHub Pages)

- **`borderColor`**

  `string` — Color for borders and dividers (hex, rgb, or color name)

- **`cardColor`**

  `string` — Background color for cards and content blocks (hex, rgb, or color name)

- **`customCss`**

  `string` — Additional CSS to inject into the website

- **`customDomain`**

  `string` — Optional custom domain for deployment

- **`customJs`**

  `string` — Additional JavaScript to inject into the website

- **`deploymentMethod`**

  `string`, possible values: `"vercel", "netlify", "github", "zip"`, default: `"zip"` — How to deploy the generated website

- **`enableLeaderboard`**

  `boolean`, default: `true` — Enable a leaderboard page showing top contributors

- **`errorColor`**

  `string` — Color for error messages and danger states (hex, rgb, or color name)

- **`faviconUrl`**

  `string` — Optional favicon URL

- **`fontFamily`**

  `string` — Custom font family (e.g., 'Inter', 'Roboto', 'Open Sans')

- **`githubRepo`**

  `string` — GitHub repository in format 'username/repo-name' (required if using GitHub deployment)

- **`githubToken`**

  `string` — GitHub personal access token (required if using GitHub deployment)

- **`googleAnalyticsId`**

  `string` — Google Analytics tracking ID (e.g., GA-XXXXXXXXX-X)

- **`googleSiteVerification`**

  `string` — Google Search Console verification code

- **`includeArchived`**

  `boolean`, default: `false` — Whether to include archived threads in the scraping

- **`itemsPerPage`**

  `integer`, default: `20` — Number of items to show per page

- **`logoUrl`**

  `string` — Optional logo URL for branding

- **`maxPostContentLength`**

  `integer`, default: `500` — Maximum length for post content preview on cards

- **`maxThreadsPerChannel`**

  `integer`, default: `100` — Maximum number of threads to scrape per channel (optional)

- **`maxThreadTitleLength`**

  `integer`, default: `100` — Maximum length for thread titles (will be truncated)

- **`metaAuthor`**

  `string` — Website author for SEO

- **`metaKeywords`**

  `string` — Comma-separated SEO keywords

- **`netlifyToken`**

  `string` — Netlify deployment token (required if using Netlify deployment)

- **`ogImage`**

  `string` — URL for Open Graph image for social media sharing

- **`scrapeUntilDate`**

  `string`, default: `"2025-07-20"` — Only scrape threads created before this date (YYYY-MM-DD format)

- **`searchEnabled`**

  `boolean`, default: `true` — Enable search functionality on the website

- **`secondaryColor`**

  `string` — Custom secondary color (hex, rgb, or color name)

- **`showThreadTags`**

  `boolean`, default: `true` — Display Discord thread tags if available

- **`showTimestamps`**

  `boolean`, default: `true` — Display post timestamps

- **`showUserAvatars`**

  `boolean`, default: `true` — Display user profile pictures

- **`siteDescription`**

  `string` — Description for the generated website (leave empty for auto-generated)

- **`siteTagline`**

  `string` — Optional tagline/subtitle for the website

- **`siteTitle`**

  `string` — Title for the generated website (leave empty to use Discord server name)

- **`successColor`**

  `string` — Color for success messages and positive states (hex, rgb, or color name)

- **`surfaceColor`**

  `string` — Color for elevated surfaces and containers (hex, rgb, or color name)

- **`template`**

  `string`, possible values: `"tech", "gaming", "startup", "crypto", "education", "support"`, default: `"tech"` — Choose a template style for your website

- **`textColor`**

  `string` — Custom text color (hex, rgb, or color name)

- **`textMuted`**

  `string` — Muted text color for placeholders and inactive elements (hex, rgb, or color name)

- **`textPrimary`**

  `string` — Main text color for headings and content (hex, rgb, or color name)

- **`textSecondary`**

  `string` — Secondary text color for subtitles and metadata (hex, rgb, or color name)

- **`threadSorting`**

  `string`, possible values: `"date", "popularity", "replies"`, default: `"date"` — Default sorting method for threads

- **`twitterHandle`**

  `string` — Twitter handle for Twitter Cards (without @)

- **`vercelToken`**

  `string` — Vercel deployment token (required if using Vercel deployment)

- **`warningColor`**

  `string` — Color for warning messages and caution states (hex, rgb, or color name)

**Example:**

```
{
  "discordToken": "",
  "serverId": "",
  "forumChannelIds": [
    ""
  ],
  "scrapeUntilDate": "2025-07-20",
  "maxThreadsPerChannel": 100,
  "includeArchived": false,
  "siteTitle": "",
  "siteDescription": "",
  "siteTagline": "",
  "enableLeaderboard": true,
  "searchEnabled": true,
  "itemsPerPage": 20,
  "baseUrl": "/",
  "template": "tech",
  "logoUrl": "",
  "faviconUrl": "",
  "secondaryColor": "",
  "backgroundColor": "",
  "textColor": "",
  "fontFamily": "",
  "accentColor": "",
  "surfaceColor": "",
  "cardColor": "",
  "textPrimary": "",
  "textSecondary": "",
  "textMuted": "",
  "borderColor": "",
  "successColor": "",
  "warningColor": "",
  "errorColor": "",
  "customCss": "",
  "customJs": "",
  "maxThreadTitleLength": 100,
  "maxPostContentLength": 500,
  "showUserAvatars": true,
  "showTimestamps": true,
  "showThreadTags": true,
  "threadSorting": "date",
  "metaKeywords": "",
  "metaAuthor": "",
  "googleAnalyticsId": "",
  "googleSiteVerification": "",
  "twitterHandle": "",
  "ogImage": "",
  "deploymentMethod": "zip",
  "vercelToken": "",
  "netlifyToken": "",
  "githubRepo": "",
  "githubToken": "",
  "customDomain": ""
}
```

##### Responses

###### Status: 200 OK

\####### Content-Type: application/json

- **`data`**

  `object`

  - **`actId`**

    `string`

  - **`buildId`**

    `string`

  - **`buildNumber`**

    `string`

  - **`containerUrl`**

    `string`

  - **`defaultDatasetId`**

    `string`

  - **`defaultKeyValueStoreId`**

    `string`

  - **`defaultRequestQueueId`**

    `string`

  - **`finishedAt`**

    `string`, format: `date-time`

  - **`id`**

    `string`

  - **`meta`**

    `object`

    - **`origin`**

      `string`

    - **`userAgent`**

      `string`

  - **`options`**

    `object`

    - **`build`**

      `string`

    - **`diskMbytes`**

      `integer`

    - **`memoryMbytes`**

      `integer`

    - **`timeoutSecs`**

      `integer`

  - **`startedAt`**

    `string`, format: `date-time`

  - **`stats`**

    `object`

    - **`computeUnits`**

      `integer`

    - **`inputBodyLen`**

      `integer`

    - **`rebootCount`**

      `integer`

    - **`restartCount`**

      `integer`

    - **`resurrectCount`**

      `integer`

  - **`status`**

    `string`

  - **`usage`**

    `object`

    - **`ACTOR_COMPUTE_UNITS`**

      `integer`

    - **`DATA_TRANSFER_EXTERNAL_GBYTES`**

      `integer`

    - **`DATA_TRANSFER_INTERNAL_GBYTES`**

      `integer`

    - **`DATASET_READS`**

      `integer`

    - **`DATASET_WRITES`**

      `integer`

    - **`KEY_VALUE_STORE_LISTS`**

      `integer`

    - **`KEY_VALUE_STORE_READS`**

      `integer`

    - **`KEY_VALUE_STORE_WRITES`**

      `integer`

    - **`PROXY_RESIDENTIAL_TRANSFER_GBYTES`**

      `integer`

    - **`PROXY_SERPS`**

      `integer`

    - **`REQUEST_QUEUE_READS`**

      `integer`

    - **`REQUEST_QUEUE_WRITES`**

      `integer`

  - **`usageTotalUsd`**

    `number`

  - **`usageUsd`**

    `object`

    - **`ACTOR_COMPUTE_UNITS`**

      `integer`

    - **`DATA_TRANSFER_EXTERNAL_GBYTES`**

      `integer`

    - **`DATA_TRANSFER_INTERNAL_GBYTES`**

      `integer`

    - **`DATASET_READS`**

      `integer`

    - **`DATASET_WRITES`**

      `integer`

    - **`KEY_VALUE_STORE_LISTS`**

      `integer`

    - **`KEY_VALUE_STORE_READS`**

      `integer`

    - **`KEY_VALUE_STORE_WRITES`**

      `number`

    - **`PROXY_RESIDENTIAL_TRANSFER_GBYTES`**

      `integer`

    - **`PROXY_SERPS`**

      `integer`

    - **`REQUEST_QUEUE_READS`**

      `integer`

    - **`REQUEST_QUEUE_WRITES`**

      `integer`

  - **`userId`**

    `string`

**Example:**

```
{
  "data": {
    "id": "",
    "actId": "",
    "userId": "",
    "startedAt": "2025-01-08T00:00:00.000Z",
    "finishedAt": "2025-01-08T00:00:00.000Z",
    "status": "READY",
    "meta": {
      "origin": "API",
      "userAgent": ""
    },
    "stats": {
      "inputBodyLen": 2000,
      "rebootCount": 0,
      "restartCount": 0,
      "resurrectCount": 0,
      "computeUnits": 0
    },
    "options": {
      "build": "latest",
      "timeoutSecs": 300,
      "memoryMbytes": 1024,
      "diskMbytes": 2048
    },
    "buildId": "",
    "defaultKeyValueStoreId": "",
    "defaultDatasetId": "",
    "defaultRequestQueueId": "",
    "buildNumber": "1.0.0",
    "containerUrl": "",
    "usage": {
      "ACTOR_COMPUTE_UNITS": 0,
      "DATASET_READS": 0,
      "DATASET_WRITES": 0,
      "KEY_VALUE_STORE_READS": 0,
      "KEY_VALUE_STORE_WRITES": 1,
      "KEY_VALUE_STORE_LISTS": 0,
      "REQUEST_QUEUE_READS": 0,
      "REQUEST_QUEUE_WRITES": 0,
      "DATA_TRANSFER_INTERNAL_GBYTES": 0,
      "DATA_TRANSFER_EXTERNAL_GBYTES": 0,
      "PROXY_RESIDENTIAL_TRANSFER_GBYTES": 0,
      "PROXY_SERPS": 0
    },
    "usageTotalUsd": 0.00005,
    "usageUsd": {
      "ACTOR_COMPUTE_UNITS": 0,
      "DATASET_READS": 0,
      "DATASET_WRITES": 0,
      "KEY_VALUE_STORE_READS": 0,
      "KEY_VALUE_STORE_WRITES": 0.00005,
      "KEY_VALUE_STORE_LISTS": 0,
      "REQUEST_QUEUE_READS": 0,
      "REQUEST_QUEUE_WRITES": 0,
      "DATA_TRANSFER_INTERNAL_GBYTES": 0,
      "DATA_TRANSFER_EXTERNAL_GBYTES": 0,
      "PROXY_RESIDENTIAL_TRANSFER_GBYTES": 0,
      "PROXY_SERPS": 0
    }
  }
}
```

#### Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.

- **Method:** `POST`
- **Path:** `/acts/code-node-tools~discord-forum-to-website/run-sync`
- **Tags:** Run Actor

##### Request Body

###### Content-Type: application/json

- **`discordToken` (required)**

  `string` — Your Discord bot token (required). Create a bot at https://discord.com/developers/applications

- **`forumChannelIds` (required)**

  `array` — Array of Discord forum channel IDs to scrape

  **Items:**

  `string`

- **`serverId` (required)**

  `string` — The Discord server (guild) ID containing the forum channels

- **`accentColor`**

  `string` — Accent color for special highlights and notifications (hex, rgb, or color name)

- **`backgroundColor`**

  `string` — Custom background color (hex, rgb, or color name)

- **`baseUrl`**

  `string`, default: `"/"` — Base URL for asset paths (e.g., '/' for root, '/repo-name/' for GitHub Pages)

- **`borderColor`**

  `string` — Color for borders and dividers (hex, rgb, or color name)

- **`cardColor`**

  `string` — Background color for cards and content blocks (hex, rgb, or color name)

- **`customCss`**

  `string` — Additional CSS to inject into the website

- **`customDomain`**

  `string` — Optional custom domain for deployment

- **`customJs`**

  `string` — Additional JavaScript to inject into the website

- **`deploymentMethod`**

  `string`, possible values: `"vercel", "netlify", "github", "zip"`, default: `"zip"` — How to deploy the generated website

- **`enableLeaderboard`**

  `boolean`, default: `true` — Enable a leaderboard page showing top contributors

- **`errorColor`**

  `string` — Color for error messages and danger states (hex, rgb, or color name)

- **`faviconUrl`**

  `string` — Optional favicon URL

- **`fontFamily`**

  `string` — Custom font family (e.g., 'Inter', 'Roboto', 'Open Sans')

- **`githubRepo`**

  `string` — GitHub repository in format 'username/repo-name' (required if using GitHub deployment)

- **`githubToken`**

  `string` — GitHub personal access token (required if using GitHub deployment)

- **`googleAnalyticsId`**

  `string` — Google Analytics tracking ID (e.g., GA-XXXXXXXXX-X)

- **`googleSiteVerification`**

  `string` — Google Search Console verification code

- **`includeArchived`**

  `boolean`, default: `false` — Whether to include archived threads in the scraping

- **`itemsPerPage`**

  `integer`, default: `20` — Number of items to show per page

- **`logoUrl`**

  `string` — Optional logo URL for branding

- **`maxPostContentLength`**

  `integer`, default: `500` — Maximum length for post content preview on cards

- **`maxThreadsPerChannel`**

  `integer`, default: `100` — Maximum number of threads to scrape per channel (optional)

- **`maxThreadTitleLength`**

  `integer`, default: `100` — Maximum length for thread titles (will be truncated)

- **`metaAuthor`**

  `string` — Website author for SEO

- **`metaKeywords`**

  `string` — Comma-separated SEO keywords

- **`netlifyToken`**

  `string` — Netlify deployment token (required if using Netlify deployment)

- **`ogImage`**

  `string` — URL for Open Graph image for social media sharing

- **`scrapeUntilDate`**

  `string`, default: `"2025-07-20"` — Only scrape threads created before this date (YYYY-MM-DD format)

- **`searchEnabled`**

  `boolean`, default: `true` — Enable search functionality on the website

- **`secondaryColor`**

  `string` — Custom secondary color (hex, rgb, or color name)

- **`showThreadTags`**

  `boolean`, default: `true` — Display Discord thread tags if available

- **`showTimestamps`**

  `boolean`, default: `true` — Display post timestamps

- **`showUserAvatars`**

  `boolean`, default: `true` — Display user profile pictures

- **`siteDescription`**

  `string` — Description for the generated website (leave empty for auto-generated)

- **`siteTagline`**

  `string` — Optional tagline/subtitle for the website

- **`siteTitle`**

  `string` — Title for the generated website (leave empty to use Discord server name)

- **`successColor`**

  `string` — Color for success messages and positive states (hex, rgb, or color name)

- **`surfaceColor`**

  `string` — Color for elevated surfaces and containers (hex, rgb, or color name)

- **`template`**

  `string`, possible values: `"tech", "gaming", "startup", "crypto", "education", "support"`, default: `"tech"` — Choose a template style for your website

- **`textColor`**

  `string` — Custom text color (hex, rgb, or color name)

- **`textMuted`**

  `string` — Muted text color for placeholders and inactive elements (hex, rgb, or color name)

- **`textPrimary`**

  `string` — Main text color for headings and content (hex, rgb, or color name)

- **`textSecondary`**

  `string` — Secondary text color for subtitles and metadata (hex, rgb, or color name)

- **`threadSorting`**

  `string`, possible values: `"date", "popularity", "replies"`, default: `"date"` — Default sorting method for threads

- **`twitterHandle`**

  `string` — Twitter handle for Twitter Cards (without @)

- **`vercelToken`**

  `string` — Vercel deployment token (required if using Vercel deployment)

- **`warningColor`**

  `string` — Color for warning messages and caution states (hex, rgb, or color name)

**Example:**

```
{
  "discordToken": "",
  "serverId": "",
  "forumChannelIds": [
    ""
  ],
  "scrapeUntilDate": "2025-07-20",
  "maxThreadsPerChannel": 100,
  "includeArchived": false,
  "siteTitle": "",
  "siteDescription": "",
  "siteTagline": "",
  "enableLeaderboard": true,
  "searchEnabled": true,
  "itemsPerPage": 20,
  "baseUrl": "/",
  "template": "tech",
  "logoUrl": "",
  "faviconUrl": "",
  "secondaryColor": "",
  "backgroundColor": "",
  "textColor": "",
  "fontFamily": "",
  "accentColor": "",
  "surfaceColor": "",
  "cardColor": "",
  "textPrimary": "",
  "textSecondary": "",
  "textMuted": "",
  "borderColor": "",
  "successColor": "",
  "warningColor": "",
  "errorColor": "",
  "customCss": "",
  "customJs": "",
  "maxThreadTitleLength": 100,
  "maxPostContentLength": 500,
  "showUserAvatars": true,
  "showTimestamps": true,
  "showThreadTags": true,
  "threadSorting": "date",
  "metaKeywords": "",
  "metaAuthor": "",
  "googleAnalyticsId": "",
  "googleSiteVerification": "",
  "twitterHandle": "",
  "ogImage": "",
  "deploymentMethod": "zip",
  "vercelToken": "",
  "netlifyToken": "",
  "githubRepo": "",
  "githubToken": "",
  "customDomain": ""
}
```

##### Responses

###### Status: 200 OK

### Schemas

#### inputSchema

- **Type:**`object`

* **`discordToken` (required)**

  `string` — Your Discord bot token (required). Create a bot at https://discord.com/developers/applications

* **`forumChannelIds` (required)**

  `array` — Array of Discord forum channel IDs to scrape

  **Items:**

  `string`

* **`serverId` (required)**

  `string` — The Discord server (guild) ID containing the forum channels

* **`accentColor`**

  `string` — Accent color for special highlights and notifications (hex, rgb, or color name)

* **`backgroundColor`**

  `string` — Custom background color (hex, rgb, or color name)

* **`baseUrl`**

  `string`, default: `"/"` — Base URL for asset paths (e.g., '/' for root, '/repo-name/' for GitHub Pages)

* **`borderColor`**

  `string` — Color for borders and dividers (hex, rgb, or color name)

* **`cardColor`**

  `string` — Background color for cards and content blocks (hex, rgb, or color name)

* **`customCss`**

  `string` — Additional CSS to inject into the website

* **`customDomain`**

  `string` — Optional custom domain for deployment

* **`customJs`**

  `string` — Additional JavaScript to inject into the website

* **`deploymentMethod`**

  `string`, possible values: `"vercel", "netlify", "github", "zip"`, default: `"zip"` — How to deploy the generated website

* **`enableLeaderboard`**

  `boolean`, default: `true` — Enable a leaderboard page showing top contributors

* **`errorColor`**

  `string` — Color for error messages and danger states (hex, rgb, or color name)

* **`faviconUrl`**

  `string` — Optional favicon URL

* **`fontFamily`**

  `string` — Custom font family (e.g., 'Inter', 'Roboto', 'Open Sans')

* **`githubRepo`**

  `string` — GitHub repository in format 'username/repo-name' (required if using GitHub deployment)

* **`githubToken`**

  `string` — GitHub personal access token (required if using GitHub deployment)

* **`googleAnalyticsId`**

  `string` — Google Analytics tracking ID (e.g., GA-XXXXXXXXX-X)

* **`googleSiteVerification`**

  `string` — Google Search Console verification code

* **`includeArchived`**

  `boolean`, default: `false` — Whether to include archived threads in the scraping

* **`itemsPerPage`**

  `integer`, default: `20` — Number of items to show per page

* **`logoUrl`**

  `string` — Optional logo URL for branding

* **`maxPostContentLength`**

  `integer`, default: `500` — Maximum length for post content preview on cards

* **`maxThreadsPerChannel`**

  `integer`, default: `100` — Maximum number of threads to scrape per channel (optional)

* **`maxThreadTitleLength`**

  `integer`, default: `100` — Maximum length for thread titles (will be truncated)

* **`metaAuthor`**

  `string` — Website author for SEO

* **`metaKeywords`**

  `string` — Comma-separated SEO keywords

* **`netlifyToken`**

  `string` — Netlify deployment token (required if using Netlify deployment)

* **`ogImage`**

  `string` — URL for Open Graph image for social media sharing

* **`scrapeUntilDate`**

  `string`, default: `"2025-07-20"` — Only scrape threads created before this date (YYYY-MM-DD format)

* **`searchEnabled`**

  `boolean`, default: `true` — Enable search functionality on the website

* **`secondaryColor`**

  `string` — Custom secondary color (hex, rgb, or color name)

* **`showThreadTags`**

  `boolean`, default: `true` — Display Discord thread tags if available

* **`showTimestamps`**

  `boolean`, default: `true` — Display post timestamps

* **`showUserAvatars`**

  `boolean`, default: `true` — Display user profile pictures

* **`siteDescription`**

  `string` — Description for the generated website (leave empty for auto-generated)

* **`siteTagline`**

  `string` — Optional tagline/subtitle for the website

* **`siteTitle`**

  `string` — Title for the generated website (leave empty to use Discord server name)

* **`successColor`**

  `string` — Color for success messages and positive states (hex, rgb, or color name)

* **`surfaceColor`**

  `string` — Color for elevated surfaces and containers (hex, rgb, or color name)

* **`template`**

  `string`, possible values: `"tech", "gaming", "startup", "crypto", "education", "support"`, default: `"tech"` — Choose a template style for your website

* **`textColor`**

  `string` — Custom text color (hex, rgb, or color name)

* **`textMuted`**

  `string` — Muted text color for placeholders and inactive elements (hex, rgb, or color name)

* **`textPrimary`**

  `string` — Main text color for headings and content (hex, rgb, or color name)

* **`textSecondary`**

  `string` — Secondary text color for subtitles and metadata (hex, rgb, or color name)

* **`threadSorting`**

  `string`, possible values: `"date", "popularity", "replies"`, default: `"date"` — Default sorting method for threads

* **`twitterHandle`**

  `string` — Twitter handle for Twitter Cards (without @)

* **`vercelToken`**

  `string` — Vercel deployment token (required if using Vercel deployment)

* **`warningColor`**

  `string` — Color for warning messages and caution states (hex, rgb, or color name)

**Example:**

```
{
  "discordToken": "",
  "serverId": "",
  "forumChannelIds": [
    ""
  ],
  "scrapeUntilDate": "2025-07-20",
  "maxThreadsPerChannel": 100,
  "includeArchived": false,
  "siteTitle": "",
  "siteDescription": "",
  "siteTagline": "",
  "enableLeaderboard": true,
  "searchEnabled": true,
  "itemsPerPage": 20,
  "baseUrl": "/",
  "template": "tech",
  "logoUrl": "",
  "faviconUrl": "",
  "secondaryColor": "",
  "backgroundColor": "",
  "textColor": "",
  "fontFamily": "",
  "accentColor": "",
  "surfaceColor": "",
  "cardColor": "",
  "textPrimary": "",
  "textSecondary": "",
  "textMuted": "",
  "borderColor": "",
  "successColor": "",
  "warningColor": "",
  "errorColor": "",
  "customCss": "",
  "customJs": "",
  "maxThreadTitleLength": 100,
  "maxPostContentLength": 500,
  "showUserAvatars": true,
  "showTimestamps": true,
  "showThreadTags": true,
  "threadSorting": "date",
  "metaKeywords": "",
  "metaAuthor": "",
  "googleAnalyticsId": "",
  "googleSiteVerification": "",
  "twitterHandle": "",
  "ogImage": "",
  "deploymentMethod": "zip",
  "vercelToken": "",
  "netlifyToken": "",
  "githubRepo": "",
  "githubToken": "",
  "customDomain": ""
}
```

#### runsResponseSchema

- **Type:**`object`

* **`data`**

  `object`

  - **`actId`**

    `string`

  - **`buildId`**

    `string`

  - **`buildNumber`**

    `string`

  - **`containerUrl`**

    `string`

  - **`defaultDatasetId`**

    `string`

  - **`defaultKeyValueStoreId`**

    `string`

  - **`defaultRequestQueueId`**

    `string`

  - **`finishedAt`**

    `string`, format: `date-time`

  - **`id`**

    `string`

  - **`meta`**

    `object`

    - **`origin`**

      `string`

    - **`userAgent`**

      `string`

  - **`options`**

    `object`

    - **`build`**

      `string`

    - **`diskMbytes`**

      `integer`

    - **`memoryMbytes`**

      `integer`

    - **`timeoutSecs`**

      `integer`

  - **`startedAt`**

    `string`, format: `date-time`

  - **`stats`**

    `object`

    - **`computeUnits`**

      `integer`

    - **`inputBodyLen`**

      `integer`

    - **`rebootCount`**

      `integer`

    - **`restartCount`**

      `integer`

    - **`resurrectCount`**

      `integer`

  - **`status`**

    `string`

  - **`usage`**

    `object`

    - **`ACTOR_COMPUTE_UNITS`**

      `integer`

    - **`DATA_TRANSFER_EXTERNAL_GBYTES`**

      `integer`

    - **`DATA_TRANSFER_INTERNAL_GBYTES`**

      `integer`

    - **`DATASET_READS`**

      `integer`

    - **`DATASET_WRITES`**

      `integer`

    - **`KEY_VALUE_STORE_LISTS`**

      `integer`

    - **`KEY_VALUE_STORE_READS`**

      `integer`

    - **`KEY_VALUE_STORE_WRITES`**

      `integer`

    - **`PROXY_RESIDENTIAL_TRANSFER_GBYTES`**

      `integer`

    - **`PROXY_SERPS`**

      `integer`

    - **`REQUEST_QUEUE_READS`**

      `integer`

    - **`REQUEST_QUEUE_WRITES`**

      `integer`

  - **`usageTotalUsd`**

    `number`

  - **`usageUsd`**

    `object`

    - **`ACTOR_COMPUTE_UNITS`**

      `integer`

    - **`DATA_TRANSFER_EXTERNAL_GBYTES`**

      `integer`

    - **`DATA_TRANSFER_INTERNAL_GBYTES`**

      `integer`

    - **`DATASET_READS`**

      `integer`

    - **`DATASET_WRITES`**

      `integer`

    - **`KEY_VALUE_STORE_LISTS`**

      `integer`

    - **`KEY_VALUE_STORE_READS`**

      `integer`

    - **`KEY_VALUE_STORE_WRITES`**

      `number`

    - **`PROXY_RESIDENTIAL_TRANSFER_GBYTES`**

      `integer`

    - **`PROXY_SERPS`**

      `integer`

    - **`REQUEST_QUEUE_READS`**

      `integer`

    - **`REQUEST_QUEUE_WRITES`**

      `integer`

  - **`userId`**

    `string`

**Example:**

```
{
  "data": {
    "id": "",
    "actId": "",
    "userId": "",
    "startedAt": "2025-01-08T00:00:00.000Z",
    "finishedAt": "2025-01-08T00:00:00.000Z",
    "status": "READY",
    "meta": {
      "origin": "API",
      "userAgent": ""
    },
    "stats": {
      "inputBodyLen": 2000,
      "rebootCount": 0,
      "restartCount": 0,
      "resurrectCount": 0,
      "computeUnits": 0
    },
    "options": {
      "build": "latest",
      "timeoutSecs": 300,
      "memoryMbytes": 1024,
      "diskMbytes": 2048
    },
    "buildId": "",
    "defaultKeyValueStoreId": "",
    "defaultDatasetId": "",
    "defaultRequestQueueId": "",
    "buildNumber": "1.0.0",
    "containerUrl": "",
    "usage": {
      "ACTOR_COMPUTE_UNITS": 0,
      "DATASET_READS": 0,
      "DATASET_WRITES": 0,
      "KEY_VALUE_STORE_READS": 0,
      "KEY_VALUE_STORE_WRITES": 1,
      "KEY_VALUE_STORE_LISTS": 0,
      "REQUEST_QUEUE_READS": 0,
      "REQUEST_QUEUE_WRITES": 0,
      "DATA_TRANSFER_INTERNAL_GBYTES": 0,
      "DATA_TRANSFER_EXTERNAL_GBYTES": 0,
      "PROXY_RESIDENTIAL_TRANSFER_GBYTES": 0,
      "PROXY_SERPS": 0
    },
    "usageTotalUsd": 0.00005,
    "usageUsd": {
      "ACTOR_COMPUTE_UNITS": 0,
      "DATASET_READS": 0,
      "DATASET_WRITES": 0,
      "KEY_VALUE_STORE_READS": 0,
      "KEY_VALUE_STORE_WRITES": 0.00005,
      "KEY_VALUE_STORE_LISTS": 0,
      "REQUEST_QUEUE_READS": 0,
      "REQUEST_QUEUE_WRITES": 0,
      "DATA_TRANSFER_INTERNAL_GBYTES": 0,
      "DATA_TRANSFER_EXTERNAL_GBYTES": 0,
      "PROXY_RESIDENTIAL_TRANSFER_GBYTES": 0,
      "PROXY_SERPS": 0
    }
  }
}
```

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {};

// Run the Actor and wait for it to finish
const run = await client.actor("code-node-tools/discord-forum-to-website").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {}

# Run the Actor and wait for it to finish
run = client.actor("code-node-tools/discord-forum-to-website").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{}' |
apify call code-node-tools/discord-forum-to-website --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?actors=code-node-tools/discord-forum-to-website",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## Discord Forum to Website Generator

Transform your Discord forum channels into beautiful, SEO-optimized static websites with customizable templates and one-click deployment to Vercel, Netlify, or GitHub Pages.

***

### ⭐ Features

- 🔄 **Forum Scraping**: Extract threads, posts, users, tags, and timestamps from Discord forum channels
- 🎨 **Template Gallery**: Choose from 6 industry-specific templates: Tech, Gaming, Startup, Crypto, Education, Support
- 🏁 **Instant Deployment**: One-click deployment to Vercel, Netlify, GitHub Pages, or download as a ZIP
- 📱 **Mobile Responsive**: All templates are mobile-first, fully responsive, and production-ready
- 🔍 **Built-in Search Engine**: Client-side search with full-text indexing for fast, accurate search
- 🏆 **Leaderboard**: Displays top contributors based on posts, likes, and activity
- 🔧 **Fully Customizable**: Fonts, colors, branding, logo, favicon, custom CSS & JavaScript
- 🌐 **SEO-Optimized**: Sitemap.xml, meta tags, Open Graph, Twitter Cards, analytics & structured data

***

### Examples of Generated Websites

- **Tech Template:** https://discord-forum-site-1753027273847.netlify.app/
- **Support Template:** https://discord-forum-site.vercel.app/
- **Gaming Template:** https://randomdudeatnight.github.io/test/

***

### 🤔 Why Use This?

- ✅ **Archive Discord Knowledge**: Convert community insights into searchable, readable websites
- ✅ **Content Portability**: Export discussions for offline use or permanent storage
- ✅ **Community Engagement**: Highlight contributors, organize threads, and improve discoverability
- ✅ **Zero Code Needed**: No coding or manual deployment required
- ✅ **Designed for Everyone**: DAOs, gaming guilds, dev forums, education groups, support desks

***

### ⚙️ Configuration

#### 🛠️ Discord Setup

1. **Create a Discord Application**

   - Visit: <https://discord.com/developers/applications>
   - Click “New Application” and give it a name.

2. **OAuth2 Redirect & Bot Permissions**

   - Go to the **OAuth2 → Redirects** section and add:
     ```
     https://example.com/callback
     ```
   - Under **OAuth2 → URL Generator**:
     - Select **scopes**: `bot`
     - Select **Bot Permissions**:
       - `VIEW_CHANNEL`
       - `READ_MESSAGE_HISTORY`
       - `USE_EXTERNAL_EMOJIS`

3. **Invite the Bot to Your Server**

   - Copy the generated OAuth2 URL and open it in your browser.
   - Select the target server and authorize.

4. **Generate Bot Token**

   - In the **Bot** tab, click **Reset Token** (or copy if already generated).
   - Paste this token into the `discordToken` input field of the actor.

5. **Get Server & Forum Channel IDs**
   - In Discord:
     - Go to **User Settings → Advanced** and enable **Developer Mode**
     - Right-click on:
       - Your **server icon** → "Copy Server ID"
       - Each **forum channel** → "Copy Channel ID"
   - Use these IDs as the `serverId` and `forumChannelIds` input fields respectively.

***

#### Deployment API Tokens

To enable one-click deployment, you'll need to generate personal access tokens:

##### Netlify:

1. Go to your **User Settings** → **Applications**
2. Under **Personal Access Tokens**, click **New access token**

##### Vercel:

1. Go to your **Account Settings** → **Tokens**
2. Click **Create New Token**

Paste these tokens into the Actor configuration when prompted.

***

### 📝 Sample Input Schema

```json
{
  "discordToken": "YOUR_DISCORD_BOT_TOKEN",
  "serverId": "1234567890",
  "channelIds": ["9876543210", "1357924680"],
  "deploymentMethod": "vercel",
  "vercelToken": "vercel_token_here",
  "siteTitle": "Your Community Hub",
  "template": "tech",
  "enableSearch": true,
  "enableLeaderboard": true,
  "primaryColor": "#1E90FF",
  "logoUrl": "https://example.com/logo.png"
}
```

***

### 📥 Input Field Descriptions

#### Required Fields

| Field          | Description                                                         |
| -------------- | ------------------------------------------------------------------- |
| `discordToken` | Your Discord bot token (create from https://discord.com/developers) |
| `serverId`     | The server (guild) ID to scrape forums from                         |
| `channelIds`   | List of forum channel IDs to extract data from                      |

#### Optional: Scraping Settings

| Field                  | Description                                               |
| ---------------------- | --------------------------------------------------------- |
| `scrapeUntilDate`      | Scrape only threads created before this date (YYYY-MM-DD) |
| `maxThreadsPerChannel` | Limit the number of threads per channel (default 1000)    |
| `includeArchived`      | Include archived threads if `true`                        |

#### Optional: Site Customization

| Field               | Description                                                           |
| ------------------- | --------------------------------------------------------------------- |
| `siteTitle`         | Custom title for the site                                             |
| `siteDescription`   | Custom meta description                                               |
| `siteTagline`       | Optional subtitle under the title                                     |
| `template`          | One of: `tech`, `gaming`, `startup`, `crypto`, `education`, `support` |
| `enableLeaderboard` | Show contributor leaderboard                                          |
| `enableSearch`      | Enable internal search engine                                         |

#### Optional: Branding & Design

| Field              | Description                    |
| ------------------ | ------------------------------ |
| `logoUrl`          | Link to a logo image           |
| `faviconUrl`       | Link to favicon icon           |
| `primaryColor`     | Main accent color              |
| `secondaryColor`   | Secondary accent color         |
| `backgroundColor`  | Background color of the site   |
| `textColor`        | Text color for body content    |
| `fontFamily`       | Font used (e.g. Inter, Roboto) |
| `customCss`        | Inject custom CSS code         |
| `customJavaScript` | Inject custom JavaScript       |

#### Optional: Content Display

| Field                  | Description                                 |
| ---------------------- | ------------------------------------------- |
| `maxThreadTitleLength` | Truncate thread titles (20–500 characters)  |
| `maxPostContentLength` | Truncate post previews (50–2000 characters) |
| `showUserAvatars`      | Display profile pictures                    |
| `showTimestamps`       | Display when posts were made                |
| `showThreadTags`       | Include Discord thread tags                 |
| `threadSorting`        | Options: `date`, `popularity`, or `replies` |

#### Optional: SEO & Analytics

| Field                    | Description                           |
| ------------------------ | ------------------------------------- |
| `metaKeywords`           | Comma-separated SEO keywords          |
| `metaAuthor`             | Author for meta tags                  |
| `googleAnalyticsId`      | GA tracking ID (e.g. G-XXXXXXX)       |
| `googleSiteVerification` | HTML tag for Google Search Console    |
| `twitterHandle`          | For Twitter Cards integration         |
| `openGraphImage`         | Image URL for social sharing previews |

#### Optional: Deployment

| Field              | Description                                  |
| ------------------ | -------------------------------------------- |
| `deploymentMethod` | One of: `vercel`, `netlify`, `github`, `zip` |
| `vercelToken`      | API token for Vercel                         |
| `netlifyToken`     | API token for Netlify                        |
| `githubRepository` | Format: username/repo-name                   |
| `githubToken`      | Personal access token for GitHub Pages       |
| `customDomain`     | (Optional) Custom domain to use              |

***

### 📤 Output

- ✅ Static HTML/CSS/JS website with forum content
- ✅ Deployment results (URL or downloadable ZIP)
- ✅ JSON preview of scraped threads, users, and metadata
- ✅ Summary statistics (thread count, users, etc.)

***

### 🎨 Templates

- **Tech**: Clean, minimal design perfect for dev or SaaS communities
- **Gaming**: Dark theme with neon accents and immersive visuals
- **Startup**: Business-friendly, professional layout with modern fonts
- **Crypto**: Futuristic dark mode with gold and green touches
- **Education**: Bright, readable layout with scholastic icons
- **Support**: Structured Q\&A and support-focused appearance

***

### 🔧 Usage Tips

1. **Create Bot**: https://discord.com/developers/applications → Add bot to server
2. **Enable Dev Mode** in Discord → Copy Channel IDs
3. **Choose a Template** that matches your branding and audience
4. **Customize Colors & Fonts** for consistency with your identity
5. **Set Meta Tags & Keywords** to improve search engine visibility
6. **Deploy or Download** in one click

***

### 📌 Example Use Cases

- 🧑‍💻 Developer Communities: Document open-source discussions
- 🕹️ Gaming Guilds: Publish strategies, guides, member interactions
- 📚 Educational Groups: Turn class discussions into knowledge bases
- 💼 Business Forums: Share industry insights, news, and networking
- 💬 Support Communities: Archive solved issues and troubleshooting

***

### ⚖️ Legal & Compliance

- Ensure consent or legal permission to republish community content
- Respect Discord API terms of service and rate limits
- Use moderation tools to review or filter sensitive data

***

### 💬 Support

For issues or questions:

- ✅ Check dataset logs and debug messages
- ✅ Validate your Discord token and channel IDs
- ✅ Start with 1–2 test threads
- ✅ Contact us via Apify inbox or GitHub Issues

***

Start converting your Discord knowledge into beautiful public websites today!
