{
  "openapi": "3.0.1",
  "info": {
    "title": "Telegram Channel Scraper API - Messages, Reactions & Search",
    "description": "Scrape public Telegram channels without a Telegram account. Complete post history back to the first message, keyword search across many channels at once, view counts, emoji reactions, forward attribution and reply threads. No phone number, no session string. Pay per post, failures are free.",
    "version": "1.0",
    "x-build-id": "KtXv5sfa84CunkjMm"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/vonsensey~telegram-channel-scraper-api/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-vonsensey-telegram-channel-scraper-api",
        "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/vonsensey~telegram-channel-scraper-api/runs": {
      "post": {
        "operationId": "runs-sync-vonsensey-telegram-channel-scraper-api",
        "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/vonsensey~telegram-channel-scraper-api/run-sync": {
      "post": {
        "operationId": "run-sync-vonsensey-telegram-channel-scraper-api",
        "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",
        "required": [
          "channels"
        ],
        "properties": {
          "channels": {
            "title": "Telegram channels",
            "type": "array",
            "description": "Public channels to scrape. Paste them in any form — <code>@durov</code>, <code>durov</code>, <code>https://t.me/durov</code> or <code>t.me/s/durov</code> — one per line. Private channels, user profiles and bots have no public page and are reported as free error rows instead of failing the run.",
            "default": [
              "@durov",
              "@telegram"
            ],
            "items": {
              "type": "string"
            }
          },
          "mode": {
            "title": "What to return",
            "enum": [
              "messages",
              "channels",
              "both"
            ],
            "type": "string",
            "description": "<b>Messages</b> returns posts only. <b>Channel profiles</b> returns just the profile card for each channel (title, description, avatar, subscriber count) and no posts. <b>Both</b> returns each channel's profile plus its posts.",
            "default": "messages"
          },
          "maxMessagesPerChannel": {
            "title": "Max messages per channel",
            "minimum": 1,
            "maximum": 1000000,
            "type": "integer",
            "description": "How far back to walk in each channel. Set it high to export a channel's complete history — the walk stops on its own at the first post ever published.",
            "default": 200
          },
          "maxItems": {
            "title": "Max billable items (whole run)",
            "minimum": 1,
            "maximum": 1000000,
            "type": "integer",
            "description": "A hard ceiling on billable rows across every channel, so a run's cost is predictable before it starts. Free rows — errors, the coverage report and the summary — never count against it.",
            "default": 1000
          },
          "searchQuery": {
            "title": "Keyword filter (optional)",
            "type": "string",
            "description": "Return only posts matching this keyword or phrase, matched by Telegram's own in-channel search. Combine it with a list of channels to monitor a term across all of them in one run."
          },
          "dateFrom": {
            "title": "Only posts on or after",
            "type": "string",
            "description": "ISO date or date-time, for example <code>2026-01-01</code>. The walk stops as soon as it reaches older posts, so a narrow window is cheap."
          },
          "dateTo": {
            "title": "Only posts on or before",
            "type": "string",
            "description": "ISO date or date-time, for example <code>2026-06-30</code>."
          },
          "onlyNewSinceLastRun": {
            "title": "Only new posts since the last run",
            "type": "boolean",
            "description": "For schedules. Remembers the last post id seen per channel and returns only what was published since — so a daily run bills for the new posts, not for history you already have.",
            "default": false
          },
          "stateLabel": {
            "title": "Tracking label",
            "type": "string",
            "description": "Names the memory used by <b>Only new posts since the last run</b>. Leave it empty unless you run several different channel lists on separate schedules; then give each its own label. Re-enter the same label to keep tracking the same feed."
          },
          "enrichMessages": {
            "title": "Add analysis fields (charged separately)",
            "type": "boolean",
            "description": "Adds sentiment, keywords, ticker symbols such as $BTC, wallet/contract addresses, a question flag, writing system and word count to every post. Billed as its own event, only for posts actually scored. A lexicon signal for triage and sorting — not financial advice and not a moderation verdict.",
            "default": false
          },
          "includeHtml": {
            "title": "Include the post's rendered HTML",
            "type": "boolean",
            "description": "Keeps the original post markup alongside the plain text. Useful when you need the exact formatting, links or embedded entities.",
            "default": false
          },
          "skipServiceMessages": {
            "title": "Skip Telegram service messages",
            "type": "boolean",
            "description": "Leaves out pinned-message and channel-event notices, keeping only real posts.",
            "default": true
          },
          "maxCostUsd": {
            "title": "Stop at this cost (USD)",
            "minimum": 1,
            "type": "integer",
            "description": "Optional hard spend ceiling. The run stops delivering billable rows once it reaches this amount, and still writes its coverage report and summary."
          },
          "concurrency": {
            "title": "Channels in parallel",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "How many channels to read at once. The default suits any list; raise it for very large batches.",
            "default": 5
          },
          "useProxy": {
            "title": "Route through Apify Proxy",
            "type": "boolean",
            "description": "Off by default, and off is correct: this Actor reads Telegram's public pages directly and needs no proxy. Turn it on only if your own network blocks t.me.",
            "default": false
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}