{
  "openapi": "3.0.1",
  "info": {
    "title": "Telegram Channel Scraper — Messages, Views, Media & OSINT",
    "description": "Scrape public Telegram channels with no API key: messages, view counts, reactions, media URLs and channel analytics. Messaging data for OSINT, crypto signal tracking and brand monitoring. An optional Telethon mode adds groups and member lists with your own credentials.",
    "version": "2.0",
    "x-build-id": "6WH1dFaKuRGXHB70b"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/zhorex~telegram-channel-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-zhorex-telegram-channel-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/zhorex~telegram-channel-scraper/runs": {
      "post": {
        "operationId": "runs-sync-zhorex-telegram-channel-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/zhorex~telegram-channel-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-zhorex-telegram-channel-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "channels": {
            "title": "Channel/Group URLs or usernames",
            "type": "array",
            "description": "List of Telegram channel URLs (https://t.me/channelname) or usernames (@channelname or just channelname). Works with both channels and public groups.",
            "items": {
              "type": "string"
            }
          },
          "channelUrls": {
            "title": "Channel URLs (legacy alias)",
            "type": "array",
            "description": "Backward-compatible alias for 'channels' used by older saved tasks. Prefer the 'channels' field above. If both are set, 'channels' wins.",
            "items": {
              "type": "string"
            }
          },
          "mode": {
            "title": "Scraping mode",
            "enum": [
              "web_preview",
              "telethon_api"
            ],
            "type": "string",
            "description": "web_preview: No login needed, extracts latest messages from public channels (default). telethon_api: Full access with your Telegram API credentials — complete history, members, media.",
            "default": "web_preview"
          },
          "maxMessagesPerChannel": {
            "title": "Max messages per channel",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "Maximum messages to extract per channel. <b>Billing is per started block of 1,000 messages, so 100 messages and 1,000 messages cost exactly the same</b> — the default is set to 1,000 so a run delivers a full block for the price of one. There is no ~500 cap: Telegram's public web preview paginates the FULL channel history (measured: 11 years and 424 messages of @durov in a single run), with random access anywhere in the archive, no API key and no login. Raise it further for corpus building, OSINT backfills and crypto-channel history; the run just takes longer. One caveat: some channels switch the public preview off entirely and return nothing — those need Telethon mode with your own credentials.",
            "default": 1000
          },
          "deltaMode": {
            "title": "Delta mode — only NEW messages since last run",
            "type": "boolean",
            "description": "Turn this on for a scheduled monitor: each run returns (and bills) ONLY messages posted since the previous run of the same stream, per channel. A quiet channel costs nothing. The FIRST run returns the current history and sets the baseline. Pair with an Apify Schedule to get a hands-off 'what's new in these channels' feed.",
            "default": false
          },
          "deltaStateKey": {
            "title": "Delta stream name",
            "type": "string",
            "description": "Names an independent delta stream so several monitors don't collide. Use a distinct value per watchlist, e.g. 'crypto-alpha' vs 'tipsters'. Only matters when Delta mode is on.",
            "default": "default"
          },
          "extractMedia": {
            "title": "Extract media metadata",
            "type": "boolean",
            "description": "Include media URLs, types, and thumbnails in output.",
            "default": true
          },
          "extractReactions": {
            "title": "Extract reactions",
            "type": "boolean",
            "description": "Include reaction counts (emoji + count) for each message.",
            "default": true
          },
          "extractMemberData": {
            "title": "Extract member list (Telethon mode only)",
            "type": "boolean",
            "description": "Extract group/channel member list. Requires Telethon mode and appropriate permissions. Note: contains personal data — ensure GDPR compliance. <b>Billing:</b> member extraction is charged as <code>members-1k</code> at <b>$1.00 per 1,000 members</b> — 50x the $0.02 base row — so a 50,000-member group costs about $50. Leave this off unless you need the roster.",
            "default": false
          },
          "dateFrom": {
            "title": "Messages from date",
            "type": "string",
            "description": "Only extract messages after this date (ISO format: 2026-01-01). Optional."
          },
          "dateTo": {
            "title": "Messages until date",
            "type": "string",
            "description": "Only extract messages before this date (ISO format: 2026-12-31). Optional."
          },
          "apiId": {
            "title": "Telegram API ID (Telethon mode only)",
            "type": "integer",
            "description": "Your Telegram API ID from https://my.telegram.org/apps. Required for Telethon mode."
          },
          "apiHash": {
            "title": "Telegram API Hash (Telethon mode only)",
            "type": "string",
            "description": "Your Telegram API Hash from https://my.telegram.org/apps. Required for Telethon mode."
          },
          "sessionString": {
            "title": "Telethon Session String (Telethon mode only)",
            "type": "string",
            "description": "Pre-generated StringSession for authentication. See README for how to generate one."
          },
          "botToken": {
            "title": "Bot Token (alternative to session string)",
            "type": "string",
            "description": "Telegram Bot Token from @BotFather. Can read public channel messages but NOT member lists. Alternative to session string."
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}