YouTube comments API
Use when you need what viewers say about a YouTube video, e.g. sentiment, feedback mining, FAQ or product research: up to 100 top-level comments with text, like count, reply count, relative publish time and pinned / by-creator flags, plus the total comment count. Commenter names, handles and channel IDs are intentionally NOT returned. $0.005 per successful call; videos with comments off and errors are not charged.
Parameters
GET https://scrapemole-api-mainnet.scrapemole.workers.dev/v1/youtube/comments
| Name | Required | Description |
|---|---|---|
video | yes | YouTube video URL or 11-character video ID. |
sort | no | Comment order. One of: top newestDefault: top |
limit | no | Max comments (1-100). Default: 20 |
lang | no | Interface language (hl), e.g. en, de. |
country | no | Country (gl), e.g. US, GB. |
Call it
// npm i @x402/fetch @x402/evm viem import { wrapFetchWithPaymentFromConfig, decodePaymentResponseHeader } from '@x402/fetch'; import { ExactEvmScheme } from '@x402/evm'; import { privateKeyToAccount } from 'viem/accounts'; // Your agent's own wallet, holding a little USDC on Base. No ScrapeMole account or API key. const account = privateKeyToAccount(process.env.AGENT_PRIVATE_KEY); const pay = wrapFetchWithPaymentFromConfig(fetch, { schemes: [{ network: 'eip155:8453', client: new ExactEvmScheme(account) }], }); // On 402 the wrapper signs the USDC authorization and retries once. const res = await pay('https://scrapemole-api-mainnet.scrapemole.workers.dev/v1/youtube/comments?video=aircAruvnKk&limit=20'); console.log(res.status, await res.json()); // Settled only on 200; the receipt (tx hash) is in the PAYMENT-RESPONSE header. if (res.ok) console.log(decodePaymentResponseHeader(res.headers.get('payment-response')));
# 1. Unpaid: returns 402 with price $0.005 and the payTo address curl -i "https://scrapemole-api-mainnet.scrapemole.workers.dev/v1/youtube/comments?video=aircAruvnKk&limit=20" # 2. Paid: repeat the request with a PAYMENT-SIGNATURE header (a signed USDC # authorization for the quoted amount). An x402 client does this for you: # see the JavaScript tab.
Also available as the MCP tool youtube_comments on https://scrapemole-api-mainnet.scrapemole.workers.dev/mcp (x402 MCP transport, same price).
Example response
A real response from this endpoint (arrays and long strings trimmed here).
{
"videoId": "aircAruvnKk",
"title": "But what is a neural network? | Deep learning chapter 1",
"sort": "top",
"totalComments": 9000,
"count": 1,
"comments": [
{
"commentId": "Ugx…",
"text": "This is the clearest explanation of backprop I have seen.",
"publishedText": "3 years ago",
"likeCount": 1200,
"replyCount": 14,
"isByVideoCreator": false,
"isPinned": false
}
]
}Live test results
Paid end-to-end checks (Base Sepolia testnet, 12 Oct 2026 08:12 UTC)
| Call | Status | Charged | Pass |
|---|---|---|---|
unpaid /v1/youtube/comments | 402 | price quoted | ✓ |
paid /v1/youtube/comments?video=aircAruvnKk&limit=30 | 200 | $0.005 | ✓ |
paid /v1/youtube/comments?video=aircAruvnKk&sort=newest&limit=5 | 200 | $0.005 | ✓ |
paid /v1/youtube/comments?video=nope (bad video ref) | 400 | $0 | ✓ |
Errors
Failures return JSON like {"error": {"code": "NOT_FOUND", "message": "…", "charged": false}}. None of them are charged.
| Status / errorCode | Meaning |
|---|---|
400 INVALID_INPUT | Missing or malformed parameter. Fix the input. |
404 NOT_FOUND | The video, channel, product or term doesn't exist or isn't public. |
404 NO_DATA | It exists, but has nothing to return (for example no captions). |
503 BLOCKED | The source rate-limited us even after retries. Try again later. |
502 / 504 | Upstream error or timeout. Try again. |
402 | No or invalid payment. Pay the quoted amount and retry. |