{
  "openapi": "3.0.1",
  "info": {
    "title": "Telegram Channel Scraper & Keyword Monitor",
    "description": "Scrape posts, views, reactions, comments & media from public Telegram channels, with virality scores, channel analytics (ERR), subscriber growth tracking and a similar-channel finder. No login. $1 / 1,000 posts.",
    "version": "1.0",
    "x-build-id": "6wQfXgADHlQhttQqf"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/signalscope-data~telegram-channel-monitor/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-signalscope-data-telegram-channel-monitor",
        "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/signalscope-data~telegram-channel-monitor/runs": {
      "post": {
        "operationId": "runs-sync-signalscope-data-telegram-channel-monitor",
        "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/signalscope-data~telegram-channel-monitor/run-sync": {
      "post": {
        "operationId": "run-sync-signalscope-data-telegram-channel-monitor",
        "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": "Channels",
            "type": "array",
            "description": "Public channel usernames or links: \"durov\", \"@telegram\", \"https://t.me/s/bbcnews\". Direct post links (\"https://t.me/durov/300\") return just that post.",
            "items": {
              "type": "string"
            }
          },
          "maxPostsPerChannel": {
            "title": "Max posts per channel",
            "minimum": 1,
            "type": "integer",
            "description": "How many latest posts to scan per channel (newest first).",
            "default": 100
          },
          "keywords": {
            "title": "Keywords (alert mode)",
            "type": "array",
            "description": "Output only posts containing ANY of these words (case-insensitive). Leave empty for all posts.",
            "items": {
              "type": "string"
            }
          },
          "searchFullHistory": {
            "title": "Search full channel history",
            "type": "boolean",
            "description": "Use Telegram's built-in channel search to find posts matching your keywords across the ENTIRE channel history (years back), instead of only filtering the latest posts. \"Max posts per channel\" then limits the number of matching posts. Telegram search also matches word forms (e.g. \"wallet\" finds \"wallets\").",
            "default": false
          },
          "minViews": {
            "title": "Minimum views",
            "minimum": 0,
            "type": "integer",
            "description": "Output only posts with at least this many views (e.g. 10000 to keep only popular posts). 0 = no limit. Skipped posts are not charged.",
            "default": 0
          },
          "minViralityScore": {
            "title": "Minimum virality score",
            "type": "string",
            "description": "Output only posts that beat the channel's normal reach: viralityScore = post views ÷ median views of the channel's latest own posts. 2 = at least twice the usual views (a viral post), 1.5 = clearly above average. Empty or 0 = no limit. Forwarded posts have no score (they show the original post's views) and are skipped when this is set. Skipped posts are not charged. Combine with \"Only new posts\" for a daily viral-post alert.",
            "default": ""
          },
          "sinceDate": {
            "title": "Posts since date",
            "type": "string",
            "description": "Optional ISO date, e.g. 2026-09-01. Older posts are skipped."
          },
          "onlyNewPosts": {
            "title": "Only new posts since last run",
            "type": "boolean",
            "description": "Remember the last post seen per channel and output only newer ones. Ideal for scheduled monitoring and alerts.",
            "default": false
          },
          "stateKey": {
            "title": "Monitor name",
            "type": "string",
            "description": "Used with 'Only new posts'. Use a different name for each separate monitor/schedule.",
            "default": "default"
          },
          "includeChannelInfo": {
            "title": "Include channel info",
            "type": "boolean",
            "description": "One record per channel with title, description, subscriber count and media counts.",
            "default": true
          },
          "trackGrowth": {
            "title": "Track subscriber growth",
            "type": "boolean",
            "description": "Save a snapshot of each channel's exact subscriber count and typical reach on every run (under 'State key'), and add growth fields to channel rows: subscribersChange since the last run, 7-day and 30-day change (count and %), average daily growth, growth trend and the last 14 snapshots. Schedule the Actor daily to build the history. No extra charge.",
            "default": true
          },
          "includeComments": {
            "title": "Include comments",
            "type": "boolean",
            "description": "For channels with a public discussion group: add commentCount and the latest comments (text, date, reply-to, reactions) to each post. Commenter names/usernames are NOT included. Adds one request per post; channels without comments are detected after 3 posts and skipped.",
            "default": false
          },
          "maxCommentsPerPost": {
            "title": "Max comments per post",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "How many comments to include per post (Telegram's public widget returns up to 100). 0 = only the comment count.",
            "default": 20
          },
          "includeAnalytics": {
            "title": "Include channel analytics",
            "type": "boolean",
            "description": "Add one 'channel-analytics' row per channel computed from the scanned posts: posting frequency, average/median views, ERR (views per subscriber %), engagement rate, views trend, best weekday/hour (UTC), content mix with views per type, top posts, top hashtags, mentioned channels, forward sources and linked domains. Scan more posts (e.g. 200–500) for stable numbers.",
            "default": false
          },
          "analyticsOnly": {
            "title": "Analytics only (no post rows)",
            "type": "boolean",
            "description": "Scan the posts but output only channel info + the analytics row (posts are not output or charged). Cheapest way to compare many channels.",
            "default": false
          },
          "discoverRelatedChannels": {
            "title": "Discover related channels",
            "type": "boolean",
            "description": "Find similar / related public channels from the scanned posts: channels your seed channels forward from, link to (t.me/...) or @mention. Candidates are ranked by relevance (forward = 3, link = 2, mention = 1, +5 per extra seed that references them), verified as public channels and output as 'related-channel' rows with title, description, subscribers, last post date, recent average views and ERR. Users, bots and groups are never output. Use several seed channels from one niche for the best results.",
            "default": false
          },
          "relatedChannelsOnly": {
            "title": "Related channels only (no post rows)",
            "type": "boolean",
            "description": "Scan the seed channels' posts but output only the related-channel rows (no posts, no channel info). Cheapest way to build a list of channels in a niche.",
            "default": false
          },
          "maxRelatedChannels": {
            "title": "Max related channels",
            "minimum": 1,
            "maximum": 200,
            "type": "integer",
            "description": "How many related channels to output in total (best-ranked first).",
            "default": 20
          },
          "minRelatedSubscribers": {
            "title": "Min subscribers (related channels)",
            "minimum": 0,
            "type": "integer",
            "description": "Skip related channels with fewer subscribers than this. 0 = no limit.",
            "default": 0
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}