{
  "openapi": "3.0.1",
  "info": {
    "title": "Telegram Channel Scraper & Monitor: Posts, Views, Search",
    "description": "Scrape public Telegram channels without login: every post with text, date, views as numbers, reactions, links, photos and videos, plus channel profile and exact subscriber count. Keyword search inside channels and 'only new posts' monitoring.",
    "version": "1.1",
    "x-build-id": "V0rMMBRRTZ3i389i3"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/hydrocore~telegram-channel-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-hydrocore-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/hydrocore~telegram-channel-scraper/runs": {
      "post": {
        "operationId": "runs-sync-hydrocore-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/hydrocore~telegram-channel-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-hydrocore-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",
        "required": [
          "channels"
        ],
        "properties": {
          "channels": {
            "title": "Telegram channels",
            "type": "array",
            "description": "Public channels, one per line. Use the name (durov), @durov or the link (https://t.me/durov or https://t.me/s/durov). Only public channels with a web preview work. Private invite links (t.me/+...), groups, users and bots are skipped for free.",
            "items": {
              "type": "string"
            }
          },
          "searchKeywords": {
            "title": "Search inside the channels (optional)",
            "type": "array",
            "description": "Leave empty to get the latest posts. Add words to use Telegram's own search inside each channel, for example bitcoin or \"price alert\". Each post is saved once, with the keyword that found it.",
            "items": {
              "type": "string"
            }
          },
          "maxMessagesPerChannel": {
            "title": "Max posts per channel",
            "minimum": 0,
            "maximum": 1000000,
            "type": "integer",
            "description": "Stop after this many posts for each channel, newest first. 0 = channel profiles only (no posts).",
            "default": 100
          },
          "maxMessagesTotal": {
            "title": "Max posts in total",
            "minimum": 0,
            "maximum": 100000000,
            "type": "integer",
            "description": "Optional overall limit for the whole run. 0 or empty = no overall limit."
          },
          "sortBy": {
            "title": "Sort messages by",
            "enum": [
              "newest",
              "oldest",
              "mostViews",
              "mostReactions"
            ],
            "type": "string",
            "description": "Order of the saved messages for each channel. Newest first is fastest. Other orders are applied before 'Max messages per channel': the Actor reads up to max(300, 5 × that limit) messages (at most 3,000, inside the date filter) for free, sorts them and saves the top ones.",
            "default": "newest"
          },
          "minViews": {
            "title": "Minimum views",
            "minimum": 0,
            "type": "integer",
            "description": "Only save messages with at least this many views. Skipped messages are not charged. 0 = no filter.",
            "default": 0
          },
          "dateFrom": {
            "title": "Posted on or after",
            "type": "string",
            "description": "Only posts from this date on (YYYY-MM-DD, UTC). The scraper stops paging back once it reaches older posts. Leave empty for no limit."
          },
          "dateTo": {
            "title": "Posted on or before",
            "type": "string",
            "description": "Only posts up to this date (YYYY-MM-DD, UTC). Leave empty for today."
          },
          "lastDays": {
            "title": "Or: posted in the last N days",
            "minimum": 0,
            "maximum": 36500,
            "type": "integer",
            "description": "Shortcut for a moving window, handy for scheduled runs: 7 = posts from the last 7 days. Overrides the two dates above. 0 or empty = off."
          },
          "onlyNewMessages": {
            "title": "Only new posts since the last run (monitoring)",
            "type": "boolean",
            "description": "Remember the newest post you received from each channel (and each keyword) and next time save only newer posts, so you never pay twice for the same post. The first run saves up to 'Max posts per channel' (your starting point). Schedule the Actor hourly or daily to get a feed of new posts. Memory is kept in your account's key-value store telegram-channel-monitor.",
            "default": false
          },
          "monitorKey": {
            "title": "Monitoring list name",
            "type": "string",
            "description": "Optional. By default the memory is tied to the exact channels and keywords. Set a name (for example crypto-news) to keep the same memory even if you edit the list."
          },
          "includeMessages": {
            "title": "Save posts",
            "type": "boolean",
            "description": "Switch off to save only one channel profile row per channel (title, description, exact subscriber count). Handy for daily subscriber tracking.",
            "default": true
          },
          "extractCryptoAddresses": {
            "title": "Find crypto wallet / contract addresses",
            "type": "boolean",
            "description": "Adds a cryptoAddresses list to each post with EVM (0x...), Solana and TRON-looking addresses found in the text. Cashtags such as $BTC are always extracted. Free.",
            "default": false
          },
          "maxSpendUsd": {
            "title": "Max spend for this run (USD)",
            "type": "string",
            "description": "Optional, for example 1.50. The run stops before going over it. Apify's own \"Maximum cost per run\" option is respected too; the lower of the two applies. Leave empty for no extra limit."
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Not needed for normal use. Only if Telegram starts answering 'too many requests' to the server, enable Apify Proxy and the Actor switches to a fresh IP. Proxy traffic is billed by Apify to your account.",
            "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}