{
  "openapi": "3.0.1",
  "info": {
    "title": "Telegram Channel Scraper — Search Without a Handle or Login",
    "description": "Scrape public Telegram channels without an account: full post text, view counts, reactions, links, inline buttons, exact subscriber counts and server-side keyword search. Or search a curated catalog of verified channels by niche. No login, no phone number, no bot token, no API key.",
    "version": "0.1",
    "x-build-id": "eEougyFLcs5q5cBPL"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/oswaldocarabano~telegram-channel-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-oswaldocarabano-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/oswaldocarabano~telegram-channel-scraper/runs": {
      "post": {
        "operationId": "runs-sync-oswaldocarabano-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/oswaldocarabano~telegram-channel-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-oswaldocarabano-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": {
          "mode": {
            "title": "What to do",
            "enum": [
              "messages",
              "search",
              "discover",
              "channel-info"
            ],
            "type": "string",
            "description": "messages: read a channel's posts. search: read only posts matching your keywords, filtered on Telegram's side. discover: search a curated catalog of verified channels by niche, so you do not need to know any channel names. channel-info: metadata and exact subscriber count only.",
            "default": "messages"
          },
          "channels": {
            "title": "Channels",
            "type": "array",
            "description": "Public channel handles or t.me URLs. All of these work and mean the same channel: durov, @durov, t.me/durov, https://t.me/s/durov. Not needed in Discover mode.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "searchTerms": {
            "title": "Search terms",
            "type": "array",
            "description": "Keywords to look for. Telegram filters on its side, which is far cheaper than reading a whole channel. Required in Search and Discover modes.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "exactMatch": {
            "title": "Exact match only",
            "type": "boolean",
            "description": "Telegram's search uses stemming, not substring matching, so a search for hiring can return a post that says hire a cab. With this on, those false positives are removed before delivery and you are never charged for them. Costs nothing and is on by default.",
            "default": true
          },
          "niche": {
            "title": "Niche (Discover mode)",
            "enum": [
              "all",
              "jobs",
              "business",
              "crypto",
              "tech",
              "news",
              "marketing",
              "education",
              "health",
              "law",
              "lifestyle",
              "culture",
              "sport",
              "social",
              "other"
            ],
            "type": "string",
            "description": "Which part of the curated catalog to search. Use all to search every verified channel in the catalog.",
            "default": "all"
          },
          "maxChannels": {
            "title": "Maximum channels (Discover mode)",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "How many catalog channels to search, largest first. Each channel costs one request.",
            "default": 40
          },
          "maxMessagesPerChannel": {
            "title": "Maximum posts per channel",
            "minimum": 1,
            "maximum": 20000,
            "type": "integer",
            "description": "A hard cap, so a large channel can never run up an unexpected bill. In Discover mode the default is 20 per channel instead, because that mode opens many channels at once.",
            "default": 200
          },
          "newestFirst": {
            "title": "Newest posts first",
            "type": "boolean",
            "description": "Off walks the channel forward from the oldest post instead, which is resumable across runs.",
            "default": true
          },
          "sinceDate": {
            "title": "Only posts after",
            "type": "string",
            "description": "ISO date, for example 2026-01-01. Walking newest-first stops as soon as it passes this date, so you are not charged for posts you did not want."
          },
          "untilDate": {
            "title": "Only posts before",
            "type": "string",
            "description": "ISO date, for example 2026-08-01."
          },
          "includeExactSubscribers": {
            "title": "Exact subscriber count",
            "type": "boolean",
            "description": "The channel preview only shows a rounded count like 11.1M. This fetches one extra 4 KB page to get the exact number, 11143438. Ignored in Discover mode.",
            "default": true
          },
          "includeContactFields": {
            "title": "Include contact entities",
            "type": "boolean",
            "description": "Emails, phone numbers, @mentions and t.me handles found in the post text, each in its own column. Turn this off if you do not want them in your dataset. The post text itself is always returned in full either way.",
            "default": true
          },
          "maxCacheAgeDays": {
            "title": "Accept cached pages up to (days)",
            "minimum": 0,
            "maximum": 7,
            "type": "number",
            "description": "Pages already fetched recently are reused, which is faster and puts less load on Telegram. Every row tells you whether it came from cache and how old it is. Set to 0 to force a fresh fetch.",
            "default": 1
          },
          "maxConcurrency": {
            "title": "Parallel requests",
            "minimum": 1,
            "maximum": 5,
            "type": "integer",
            "description": "Deliberately capped at 5. This Actor stays well inside polite crawling limits.",
            "default": 5
          },
          "proxyFallback": {
            "title": "Proxy fallback",
            "type": "boolean",
            "description": "A safety net, off unless it is needed. Requests go direct, which costs nothing and is what works: no rate limiting has ever been observed on these pages. If Telegram starts refusing our requests, this retries through a proxy with a sticky session instead of silently returning fewer rows. Turn it off for a guaranteed zero proxy cost.",
            "default": true
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Not needed. This Actor reads public pages that Telegram serves to any anonymous visitor, and no rate limiting has been observed. Leave it off unless a run reports blocks.",
            "default": {
              "useApifyProxy": 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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}