API documentation

Use YouTube channel subscriber estimates and video view, like, and comment estimates in your streams and applications.

Base URLhttps://ests.sctools.org

The API is public and requires no API key. There is currently no rate limiting. Please be mindful of your API usage and do not abuse it. SCTools is not responsible for any misuse of the API.

Channels

2 endpoints
GET

Get a channel

/api/get/channel/{id}

Get subscriber estimates and YouTube statistics for one channel.

Path parameter

id string · required
A YouTube channel ID, starting with UC.

Query parameter

verbose boolean · default false
Use ?verbose=true to add correction counts, day/night multipliers, and history. Other values leave verbose output disabled.

See channel response fields and verbose fields.

A successful request returns one object. Invalid IDs return 400; a channel not found on YouTube returns 404. A channel without estimation data may return null.

Example request

HTTP
GET https://ests.sctools.org/api/get/channel/UCX6OQ3DkcsbYNE6H8uQQuVA

Example response

200 OKapplication/json
{
  "info": {
    "id": "UCX6OQ3DkcsbYNE6H8uQQuVA",
    "name": "MrBeast",
    "avatar": "https://yt3.ggpht.com/nxYrc_1_2f77DoBadyxMTmv7ZpRZapHR5jbuYe7PlPd5cIRJxtNNEYyOC0ZsxaDyJJzXrnJiuDE=s800-c-k-c0x00ffffff-no-rj",
    "country": "US"
  },
  "stats": {
    "apiCount": 300000000,
    "estCount": 300320516,
    "linearCount": 300315000,
    "viewCount": 76881604277,
    "videoCount": 800
  },
  "averages": {
    "hourly": 8229,
    "daily": 422410
  },
  "nextUpdate": 1790985600000
}

Illustrative data. Values do not update automatically.

GET

Get a batch of channels

/api/get/channel/{ids}

Get up to 50 channels in one request.

Path parameter

ids string · required
Comma-separated YouTube channel IDs. Do not add a trailing comma.

Query parameter

?verbose=true adds the verbose fields to every returned channel.

Response shape

Multiple IDs return an array in request order. Each entry uses the single-channel structure. Unavailable channels or missing estimation data appear as null. One ID returns a single object rather than an array.

Example request

HTTP
GET https://ests.sctools.org/api/get/channel/UCX6OQ3DkcsbYNE6H8uQQuVA,UC-lHJZR3Gqxm24_Vd_AJ5Yw

Example response

200 OKapplication/json
[
  {
    "info": {
      "id": "UCX6OQ3DkcsbYNE6H8uQQuVA",
      "name": "MrBeast",
      "avatar": "https://yt3.ggpht.com/nxYrc_1_2f77DoBadyxMTmv7ZpRZapHR5jbuYe7PlPd5cIRJxtNNEYyOC0ZsxaDyJJzXrnJiuDE=s800-c-k-c0x00ffffff-no-rj",
      "country": "US"
    },
    "stats": {
      "apiCount": 300000000,
      "estCount": 300320516,
      "linearCount": 300315000,
      "viewCount": 76881604277,
      "videoCount": 800
    },
    "averages": {
      "hourly": 8229,
      "daily": 422410
    },
    "nextUpdate": 1790985600000
  },
  null
]

Illustrative data. Values do not update automatically.

Channel response fields

These fields appear in both standard and verbose responses. Counts and growth rates are integers; estimates can differ from YouTube's reported counts.

Channel response fields
Field Type Description
info.id string YouTube channel ID.
info.name string Channel display name.
info.avatar string URL of the channel avatar.
info.country string · optional Country code reported by YouTube. Omitted if unavailable.
stats.apiCount integer Latest reported subscriber count. YouTube rounds this value to the first 3 digits.
stats.estCount integer Estimated subscriber count, using a day/night pattern when available.
stats.linearCount integer Estimated subscriber count with linear growth.
stats.viewCount integer Channel view count reported by YouTube.
stats.videoCount integer Channel video count reported by YouTube.
averages.hourly integer Estimated subscriber growth over an hour. Can be negative.
averages.daily integer Estimated subscriber growth over a day. Can be negative.
nextUpdate integer | null Predicted time of the next reported subscriber count change, as Unix milliseconds. This is an estimate, not a refresh schedule. Can be null when no finite prediction is available.

Verbose channel fields

Add ?verbose=true to a single-channel or batch request. These fields appear alongside info, stats, averages, and nextUpdate.

Additional verbose fields
Field Type Description
corrections integer Number of adjustments the estimator has made to keep the estimate within the reported subscriber count boundaries.
dncRates number[] · optional Day/night cycle multipliers, indexed by UTC hour 0 through 23. Empty when no pattern is available; may be omitted with insufficient history.
history.raw object[] Input subscriber history supplied to the estimator. Each entry has date and count.
history.raw[].date string | number Observation timestamp as an ISO 8601 date string.
history.raw[].count integer Observed subscriber count.
history.transformed object[] · optional Filtered history used for estimation. Some repeated observations are removed and some rounded counts are adjusted. May be omitted with insufficient history.
history.transformed[].date string Observation timestamp as an ISO 8601 date string.
history.transformed[].count integer Subscriber count after history filtering and adjustments.

Videos New

2 endpoints
GET

Get a video

/api/get/video/{id}

Get estimated views, likes, and comments for a YouTube video, Short, or livestream.

Path parameter

id string · required
A YouTube video ID, such as the v value in a watch URL.

Response shape

Returns one object with video information, reported and estimated counts, and hourly and daily growth. See video response fields.

Unavailable or hidden videos return 404.

Example request

HTTP
GET https://ests.sctools.org/api/get/video/TQHEJj68Jew

Example response

200 OKapplication/json
{
  "info": {
    "id": "TQHEJj68Jew",
    "channelId": "UCX6OQ3DkcsbYNE6H8uQQuVA",
    "title": "Example video",
    "thumbnail": "https://i.ytimg.com/vi/TQHEJj68Jew/hqdefault.jpg",
    "published": "2026-10-01T16:00:00Z"
  },
  "stats": {
    "apiViews": 1000000,
    "estViews": 1000250,
    "apiLikes": 75000,
    "estLikes": 75020,
    "apiComments": 2000,
    "estComments": 2001
  },
  "averages": {
    "views": {
      "hourly": 18000,
      "daily": 432000
    },
    "likes": {
      "hourly": 1400,
      "daily": 33600
    },
    "comments": {
      "hourly": 60,
      "daily": 1440
    }
  }
}

Illustrative data. Values do not update automatically.

GET

Get a batch of videos

/api/get/video/{ids}

Get up to 50 videos in one request.

Path parameter

ids string · required
Comma-separated YouTube video IDs. Do not add a leading or trailing comma.

Response shape

Multiple IDs return an array in request order. Each entry uses the single-video structure. Unavailable or hidden videos appear as null.

Example request

HTTP
GET https://ests.sctools.org/api/get/video/TQHEJj68Jew,dQw4w9WgXcQ

Example response

200 OKapplication/json
[
  {
    "info": {
      "id": "TQHEJj68Jew",
      "channelId": "UCX6OQ3DkcsbYNE6H8uQQuVA",
      "title": "Example video",
      "thumbnail": "https://i.ytimg.com/vi/TQHEJj68Jew/hqdefault.jpg",
      "published": "2026-10-01T16:00:00Z"
    },
    "stats": {
      "apiViews": 1000000,
      "estViews": 1000250,
      "apiLikes": 75000,
      "estLikes": 75020,
      "apiComments": 2000,
      "estComments": 2001
    },
    "averages": {
      "views": {
        "hourly": 18000,
        "daily": 432000
      },
      "likes": {
        "hourly": 1400,
        "daily": 33600
      },
      "comments": {
        "hourly": 60,
        "daily": 1440
      }
    }
  },
  null
]

Illustrative data. Values do not update automatically.

Video response fields

Reported and estimated counts are separate for views, likes, and comments. Growth rates are integers and can be negative.

Video response fields
Field Type Description
info.id string YouTube video ID.
info.channelId string YouTube channel ID of the video's uploader.
info.title string Video title.
info.thumbnail string URL of the selected video thumbnail.
info.published string Actual livestream start time when available, otherwise the publication time. ISO 8601 date string.
stats.apiViews integer Latest reported view count.
stats.estViews integer Estimated view count.
stats.apiLikes integer Latest reported like count.
stats.estLikes integer Estimated like count.
stats.apiComments integer Latest reported comment count.
stats.estComments integer Estimated comment count.
averages.views.hourly integer Estimated views gained per hour.
averages.views.daily integer Estimated views gained per day.
averages.likes.hourly integer Estimated likes gained per hour.
averages.likes.daily integer Estimated likes gained per day.
averages.comments.hourly integer Estimated comments gained per hour.
averages.comments.daily integer Estimated comments gained per day.

Statistics

GET

Get total statistics

/api/stats

Get totals for the SCTools channel tracking database.

This endpoint has no path or query parameters.

Statistics response fields
Field Type Description
channels integer Number of channels in the database that are not terminated.
videos integer Number of videos in the database.
updates integer Number of recorded channel subscriber history updates.
subscribers integer Sum of reported subscriber counts for channels that are not terminated.

Example request

HTTP
GET https://ests.sctools.org/api/stats

Example response

200 OKapplication/json
{
  "channels": 229,
  "videos": 1052,
  "updates": 19251,
  "subscribers": 10667056000
}

Illustrative data. Values do not update automatically.