
TikTok Shop Scraper
scrape.ly/store/shelfbright/tiktok-shop-scraperE-commerceSocial media
1 monthly user

Extract public YouTube comments from video links: text, author, likes, replies, publish time, and the video title.
Pull the comments from any public YouTube video into a clean dataset: text, author, likes, reply count, creator hearts, and publish time. Paste video links, pick how many comments you want, and export to JSON, CSV, or Excel. No API key, no login. $0.0012 per comment, which is $1.20 per 1,000.
OUTPUT record, never as a paid row.| Field | Key | Description |
|---|---|---|
| Video URLs | startUrls | Links to public YouTube videos. |
| Maximum comments per video | maxComments | How many comments to return for each video. Default 10. |
| Sort comments by | sortCommentsBy | NEWEST_FIRST or TOP_COMMENTS. A date filter always reads newest first. |
| Comments published after | oldestCommentDate | A date like 2026-03-01 or a relative value like 1 day or 2 weeks. |
| Proxy configuration | proxyConfiguration | Datacenter by default. |
{
"startUrls": [
{ "url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ" }
],
"maxComments": 10,
"sortCommentsBy": "NEWEST_FIRST",
"oldestCommentDate": "1 day",
"proxyConfiguration": {
"useScrapelyProxy": true,
"scrapelyProxyGroups": ["DATACENTER"]
}
}
One row per comment.
| Field | Description |
|---|---|
cid | Comment id |
comment | Comment text |
author | Author handle or name |
authorIsChannelOwner | Whether the author owns the video's channel |
voteCount | Likes on the comment (a value like 104K becomes 104000) |
replyCount | Number of replies |
hasCreatorHeart | Whether the creator hearted the comment |
publishedTimeText | Relative publish time, such as 6 minutes ago |
type, replyToCid | Row type and parent comment id |
videoId, pageUrl, title | The video the comment belongs to |
commentsCount | Total comment count of the video |
Example item:
{
"cid": "UgzLAaEp8N5Q-McgwOJ4AaABAg",
"replyToCid": null,
"type": "comment",
"publishedTimeText": "6 minutes ago",
"comment": "Still a classic.",
"author": "@janedoe",
"authorIsChannelOwner": false,
"replyCount": 0,
"voteCount": 0,
"hasCreatorHeart": false,
"videoId": "dQw4w9WgXcQ",
"pageUrl": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
"commentsCount": 2459071,
"title": "Rick Astley - Never Gonna Give You Up (Official Video) (4K Remaster)"
}
If a video cannot be read, no row is saved for it. The run's OUTPUT record lists it under failedInputs with the URL, a code (NO_RESULTS, VIDEO_UNAVAILABLE, AGE_RESTRICTED, or NO_COMMENTS) and a short reason, and the status message names it.
$0.0012 per comment ($1.20 per 1,000). Videos that cannot be read cost nothing. Platform usage (compute and datacenter proxy, billed at standard rates) is added on top and is small.
Worked example: 10 comments cost 10 × $0.0012 = $0.012 in result fees. Including platform usage, our measured cost for a typical 10-comment job is about $0.014.
The actor reads public comments that anyone can see without logging in. Make sure your use follows YouTube's terms and privacy laws such as GDPR.
No key and no login. Datacenter proxies are used by default.
As many as the video has. Set a high limit and the actor pages through all top-level comments.
Not as separate rows. Only top-level comments are returned, with replyCount showing how many replies each one has.
No rows are saved for that video and nothing is charged; OUTPUT.failedInputs lists it with the code NO_COMMENTS.
Yes. Use Schedules for recurring runs, or start it through the REST API and fetch the dataset in any format.
publishedTimeText is relative ("6 minutes ago"), not an exact timestamp.OUTPUT.failedInputs.Every field below can be set in the run form, passed through the API, or saved as a task. Unset fields fall back to the defaults shown.
startUrlsarrayRequiredVideo URLs
Links to public YouTube videos. Watch, youtu.be, shorts, embed, and live links all work.
maxCommentsintegerOptionaldefault 10Maximum comments per video
How many comments to return for each video.
Choose the comment order, or keep only comments published after a date.
sortCommentsByenumOptionaldefault "NEWEST_FIRST"Sort comments by
Newest first or top comments. A date filter always reads newest first.
oldestCommentDatestringOptionalComments published after
Only comments published after this time. Use a date such as 2026-03-01, or a relative value such as 1 day or 2 weeks. 1 day keeps today's comments. 2 days keeps yesterday and today.
proxyConfigurationobjectOptionaldefault {"useScrapelyProxy":true,"scrapelyProxyGroups":["DATACENTER…Proxy configuration
Datacenter addresses are the default.
Every run writes its results to a dataset. Preview it in the dashboard, then export it or read it through the API.
| Field | Type | Description |
|---|---|---|
| author | string | Display name of the comment author |
| comment | string | Text of the comment |
| cid | string | YouTube comment id |
| replyCount | number | Number of replies on this comment |
| replyToCid | string | Parent comment id when this row is a reply |
| voteCount | number | Number of likes on the comment |
| authorIsChannelOwner | boolean | Whether the author owns the video channel |
| publishedTimeText | string | Relative publish time, such as 3 days ago |
| type | string | comment for a top-level comment, or reply |
| hasCreatorHeart | boolean | Whether the video creator hearted the comment |
| videoId | string | YouTube video id |
| pageUrl | string | Watch URL of the video |
| commentsCount | number | Total comment count shown for the video |
| title | string | Title of the video |
You pay for the events the actor reports, such as each result or page it produces. Platform usage is included in the event prices.
| Event | Charged when | Price |
|---|---|---|
| Comment | One public comment returned. | $0.0012 |
Run this actor from your own code. Swap in your API token and the examples work as-is.
import { ScrapelyClient } from 'scrapely-client'
const client = new ScrapelyClient({ token: process.env.SCRAPELY_TOKEN })
// Start the actor and wait for the run to finish.
const run = await client.actor('echofield/youtube-comments-scraper').call({
"startUrls": [
{
"url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ"
}
],
"maxComments": 10,
"sortCommentsBy": "NEWEST_FIRST"
})
// Read the dataset the run produced.
const { items } = await client.dataset(run.defaultDatasetId).listItems()
console.log(items)Tokens live in your account settings. Keep them server-side: a token carries the full permissions of your account.
Connect the Scrape.ly MCP server once and your agent can run this actor as a tool. Pick your tool:
Fetch scrape.ly/agents.md and run echofield/youtube-comments-scraperPaste into Claude Code, Codex, Cursor or any AI agent. It signs you in once in the browser.
{
"mcpServers": {
"scrapely": {
"url": "https://api.scrape.ly/mcp?tools=actors,runs,storage,docs&actors=echofield/youtube-comments-scraper"
}
}
}No key in the file: your client opens the browser to sign you in the first time it connects.
Inputs the developer prepared for common jobs. Open one to see its input, then copy it to your account to run it as-is or adjust it.
The most liked comments on a video.
Works with youtu.be links and Shorts URLs.
Newest comments on a video within a time window.
Scrape.ly gives you the infrastructure, the tooling, and the team to extract, process, and operationalize web data at any scale. Setup takes minutes. The advantage lasts forever.