# Discord Emoji Downloader - Bulk PNG, GIF, WebP (`tonyginkleheim/discord-emoji-downloader`) Actor

Download Discord custom emojis in bulk by ID, <:name:id> code or link. Pick PNG, JPG, WebP or GIF and any size Discord serves. Animated emojis stay animated. Get every file plus one ZIP.

- **URL**: https://apify.com/tonyginkleheim/discord-emoji-downloader.md
- **Developed by:** [Tony](https://apify.com/tonyginkleheim) (community)
- **Categories:** Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$0.50 / 1,000 emoji downloadeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

### What this Discord emoji downloader does

It downloads Discord custom emojis in bulk. Paste emoji IDs, `<:name:id>` codes, CDN links, or a whole block of text such as a copied Discord message, and it picks out every emoji and saves the image files.

You choose the file type (PNG, JPG, WebP or GIF) and the size. Animated emojis stay animated by default. When the run finishes you get a direct link to each file and one ZIP with all of them.

### Features

- Accepts IDs, `<:name:id>` and `<a:name:id>` codes, and cdn.discordapp.com links
- Paste any text and every emoji in it is found
- PNG, JPG, WebP or GIF, with animated WebP for animated emojis
- Any size Discord's CDN serves, from 16 to 4096 px. Other values snap to the nearest valid size
- Files named after the emoji when the name is known, like `pepe_830555102263378022.png`
- One ZIP of everything, plus a link to every single file

### How to find an emoji ID

In Discord, type a backslash before the emoji, for example `\:pepe:`, and send it. Discord shows the code `<:pepe:830555102263378022>`. Paste that code or just the number.

### Output example

```json
{
  "emojiId": "830555102263378022",
  "name": "pepe",
  "format": "png",
  "size": 80,
  "animated": false,
  "bytes": 7790,
  "fileName": "pepe_830555102263378022.png",
  "fileUrl": "https://api.apify.com/v2/key-value-stores/.../records/pepe_830555102263378022.png",
  "status": "ok"
}
```

The ZIP link is in the run's OUTPUT record and in the log.

### Pricing

| Event | Charged when |
|---|---|
| `emoji` | one emoji was downloaded |

IDs that don't exist are reported and not charged.

### FAQ

#### Why is my 4096 px emoji the same as 128 px?

Discord doesn't upscale. If an emoji was uploaded at 128 px, larger sizes return the original file.

#### I picked GIF but got a PNG.

The emoji isn't animated, and Discord only serves GIF for animated emojis. Static ones are saved as PNG instead.

# Actor input Schema

## `emojis` (type: `array`):

Emoji IDs, <:name:id> codes or emoji CDN links, one per line.

## `emojiText` (type: `string`):

Paste any text, such as a Discord message or an exported emoji list. Every emoji ID and <:name:id> code in it is picked up.

## `format` (type: `string`):

GIF only exists for animated emojis. Static emojis requested as GIF are saved as PNG.

## `size` (type: `string`):

Sizes Discord's CDN serves. Discord doesn't upscale, so sizes above the original upload return the original.

## `keepAnimated` (type: `boolean`):

Save animated emojis as GIF even when another file type is selected.

## `zip` (type: `boolean`):

Also save one ZIP file with every emoji.

## `maxConcurrency` (type: `integer`):

Parallel downloads.

## Actor input object example

```json
{
  "emojis": [
    "830555102263378022"
  ],
  "format": "png",
  "size": "80",
  "keepAnimated": true,
  "zip": true,
  "maxConcurrency": 20
}
```

# Actor output Schema

## `results` (type: `string`):

All results as JSON

## `files` (type: `string`):

Every saved file

## `zip` (type: `string`):

One ZIP file with every emoji

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## 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 = {
    "emojis": [
        "830555102263378022"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("tonyginkleheim/discord-emoji-downloader").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 = { "emojis": ["830555102263378022"] }

# Run the Actor and wait for it to finish
run = client.actor("tonyginkleheim/discord-emoji-downloader").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "emojis": [
    "830555102263378022"
  ]
}' |
apify call tonyginkleheim/discord-emoji-downloader --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,tonyginkleheim/discord-emoji-downloader"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/udW1sDvOokwe9M5js/builds/0L35SqfiWwtIcpVjD/openapi.json
