[{"data":1,"prerenderedAt":1385},["ShallowReactive",2],{"blog-\u002Fblog\u002Fautomate-tiktok-comment-collection":3,"blog-related-\u002Fblog\u002Fautomate-tiktok-comment-collection":1117},{"id":4,"title":5,"author":6,"body":7,"category":1101,"cover":1102,"description":1103,"draft":1104,"extension":1105,"image":1101,"launchCta":1101,"listingCover":1101,"meta":1106,"navigation":1107,"ogImage":1101,"path":1108,"publishedAt":1109,"readTime":1101,"seo":1110,"stem":1111,"tags":1112,"toolCategory":1101,"updatedAt":1101,"__hash__":1116},"blogUnlisted\u002Fblog\u002Fautomate-tiktok-comment-collection.md","Automate TikTok Comment Collection From a Video URL","The Monid Team",{"type":8,"value":9,"toc":1084},"minimark",[10,15,83,94,99,149,153,158,167,175,184,188,245,253,257,263,269,287,351,355,358,387,394,451,461,488,495,499,510,749,756,760,773,817,824,830,834,840,926,943,947,953,983,986,990,997,1001,1016,1020,1026,1035,1047,1056,1065,1069,1080],[11,12,14],"p",{"style":13},"font-size:18px !important;line-height:1.65 !important;margin:0 0 24px;color:inherit;","Copy this line to your agent to collect the comments on any TikTok video.",[16,17,22],"pre",{"className":18,"code":19,"language":20,"meta":21,"style":21},"language-sh shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","set up https:\u002F\u002Fmonid.ai\u002FSKILL.md and use apify\u002Fscraptik\u002Ftiktok-comments-scraper-api to collect the comments on a TikTok video by its aweme_id\n","sh","",[23,24,25],"code",{"__ignoreMap":21},[26,27,30,34,38,41,44,47,50,53,56,59,62,65,68,71,74,77,80],"span",{"class":28,"line":29},"line",1,[26,31,33],{"class":32},"s2Zo4","set",[26,35,37],{"class":36},"sfazB"," up",[26,39,40],{"class":36}," https:\u002F\u002Fmonid.ai\u002FSKILL.md",[26,42,43],{"class":36}," and",[26,45,46],{"class":36}," use",[26,48,49],{"class":36}," apify\u002Fscraptik\u002Ftiktok-comments-scraper-api",[26,51,52],{"class":36}," to",[26,54,55],{"class":36}," collect",[26,57,58],{"class":36}," the",[26,60,61],{"class":36}," comments",[26,63,64],{"class":36}," on",[26,66,67],{"class":36}," a",[26,69,70],{"class":36}," TikTok",[26,72,73],{"class":36}," video",[26,75,76],{"class":36}," by",[26,78,79],{"class":36}," its",[26,81,82],{"class":36}," aweme_id\n",[11,84,85,86,93],{},"Point one endpoint at a TikTok video ID and it hands back the comments on that post, page by page, each with the text, the author, the like count, and a timestamp. ",[87,88,92],"a",{"href":89,"rel":90},"https:\u002F\u002Fmonid.ai",[91],"nofollow","Monid"," is a pay-per-call data API marketplace: one interface and one wallet reach hundreds of external data endpoints across web scraping, enrichment, social data, and search, with no separate signup per vendor. TikTok comments are one of the endpoints we have verified ourselves, and this cookbook walks the whole job start to finish, from a URL in your clipboard to rows in a CSV on a schedule.",[95,96,98],"h2",{"id":97},"tldr","TL;DR",[100,101,102,113,120,129,136,146],"ul",{},[103,104,105,112],"li",{},[87,106,109],{"href":107,"rel":108},"https:\u002F\u002Fapify.com\u002Fscraptik\u002Ftiktok-api",[91],[23,110,111],{},"apify \u002Fscraptik\u002Ftiktok-comments-scraper-api"," returns top-level comments and threaded replies for a TikTok video, with comment text, author metadata, engagement counts, and timestamps.",[103,114,115,116,119],{},"The only input the comment call needs is the ",[23,117,118],{},"aweme_id",", the numeric video ID that sits in every TikTok video URL.",[103,121,122,123,128],{},"It is billed per call at a fraction of a cent, so a full comment sweep of a busy video is still cents (current prices at ",[87,124,127],{"href":125,"rel":126},"https:\u002F\u002Fmonid.ai\u002Ftools",[91],"monid.ai\u002Ftools",").",[103,130,131,132,135],{},"Pagination is a ",[23,133,134],{},"cursor"," integer you carry forward between calls until the page comes back empty.",[103,137,138,139,142,143,145],{},"Replies are a second call keyed on ",[23,140,141],{},"comment_id"," plus ",[23,144,118],{},", so you only pay for reply depth on the threads that matter.",[103,147,148],{},"Monid ships as an MCP server, so an agent can run the whole collect-and-flatten loop mid-task or on a cron.",[95,150,152],{"id":151},"set-up-once","Set up once",[154,155,157],"h3",{"id":156},"for-agents","For agents",[11,159,160,161,166],{},"Grab an API key at ",[87,162,165],{"href":163,"rel":164},"https:\u002F\u002Fapp.monid.ai\u002F",[91],"app.monid.ai",", then paste this to your agent and hand it the key:",[16,168,173],{"className":169,"code":171,"language":172},[170],"language-text","set up https:\u002F\u002Fmonid.ai\u002FSKILL.md\n","text",[23,174,171],{"__ignoreMap":21},[11,176,177,178,183],{},"It learns the whole discover, inspect, run workflow itself. More details in the ",[87,179,182],{"href":180,"rel":181},"https:\u002F\u002Fmonid.ai\u002Fdocs\u002Fguide\u002Fquickstart-skill",[91],"agent quickstart",".",[154,185,187],{"id":186},"for-humans","For humans",[16,189,193],{"className":190,"code":191,"language":192,"meta":21,"style":21},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","npm install -g @monid-ai\u002Fcli\nmonid keys add --label main --key \u003Cyour-api-key>\n","bash",[23,194,195,210],{"__ignoreMap":21},[26,196,197,201,204,207],{"class":28,"line":29},[26,198,200],{"class":199},"sBMFI","npm",[26,202,203],{"class":36}," install",[26,205,206],{"class":36}," -g",[26,208,209],{"class":36}," @monid-ai\u002Fcli\n",[26,211,213,216,219,222,225,228,231,235,238,242],{"class":28,"line":212},2,[26,214,215],{"class":199},"monid",[26,217,218],{"class":36}," keys",[26,220,221],{"class":36}," add",[26,223,224],{"class":36}," --label",[26,226,227],{"class":36}," main",[26,229,230],{"class":36}," --key",[26,232,234],{"class":233},"sMK4o"," \u003C",[26,236,237],{"class":36},"your-api-ke",[26,239,241],{"class":240},"sTEyZ","y",[26,243,244],{"class":233},">\n",[11,246,247,248,183],{},"More details in the ",[87,249,252],{"href":250,"rel":251},"https:\u002F\u002Fmonid.ai\u002Fdocs\u002Fguide\u002Fquickstart-cli",[91],"CLI quickstart",[95,254,256],{"id":255},"step-1-pull-the-aweme_id-out-of-the-url","Step 1: Pull the aweme_id out of the URL",[11,258,259,260,262],{},"Every TikTok video URL ends in the numeric ID this endpoint calls ",[23,261,118],{},". Take a link like:",[16,264,267],{"className":265,"code":266,"language":172},[170],"https:\u002F\u002Fwww.tiktok.com\u002F@jenni.ai\u002Fvideo\u002F7127359192452599042\n",[23,268,266],{"__ignoreMap":21},[11,270,271,272,275,276,279,280,283,284,183],{},"The trailing run of digits, ",[23,273,274],{},"7127359192452599042",", is the whole input. No handle, no scraping the page first. If your URL is a short ",[23,277,278],{},"vm.tiktok.com"," share link, open it once in a browser and copy the expanded address, or fetch it and read the ",[23,281,282],{},"Location"," header, then take the digits after ",[23,285,286],{},"\u002Fvideo\u002F",[16,288,290],{"className":190,"code":289,"language":192,"meta":21,"style":21},"URL=\"https:\u002F\u002Fwww.tiktok.com\u002F@jenni.ai\u002Fvideo\u002F7127359192452599042\"\nAWEME_ID=\"${URL##*\u002Fvideo\u002F}\"\necho \"$AWEME_ID\"\n# -> 7127359192452599042\n",[23,291,292,309,330,344],{"__ignoreMap":21},[26,293,294,297,300,303,306],{"class":28,"line":29},[26,295,296],{"class":240},"URL",[26,298,299],{"class":233},"=",[26,301,302],{"class":233},"\"",[26,304,305],{"class":36},"https:\u002F\u002Fwww.tiktok.com\u002F@jenni.ai\u002Fvideo\u002F7127359192452599042",[26,307,308],{"class":233},"\"\n",[26,310,311,314,316,319,321,324,327],{"class":28,"line":212},[26,312,313],{"class":240},"AWEME_ID",[26,315,299],{"class":233},[26,317,318],{"class":233},"\"${",[26,320,296],{"class":240},[26,322,323],{"class":233},"##*\u002F",[26,325,326],{"class":240},"video",[26,328,329],{"class":233},"\u002F}\"\n",[26,331,333,336,339,342],{"class":28,"line":332},3,[26,334,335],{"class":32},"echo",[26,337,338],{"class":233}," \"",[26,340,341],{"class":240},"$AWEME_ID",[26,343,308],{"class":233},[26,345,347],{"class":28,"line":346},4,[26,348,350],{"class":349},"sHwdD","# -> 7127359192452599042\n",[95,352,354],{"id":353},"step-2-check-the-schema-then-pull-the-first-page","Step 2: Check the schema, then pull the first page",[11,356,357],{},"Inspect is free, so confirm the input shape and the current per-call price before you spend anything.",[16,359,361],{"className":190,"code":360,"language":192,"meta":21,"style":21},"monid inspect -p apify -e \u002Fscraptik\u002Ftiktok-comments-scraper-api\n# -> input schema, field docs, and per-call price (free)\n",[23,362,363,382],{"__ignoreMap":21},[26,364,365,367,370,373,376,379],{"class":28,"line":29},[26,366,215],{"class":199},[26,368,369],{"class":36}," inspect",[26,371,372],{"class":36}," -p",[26,374,375],{"class":36}," apify",[26,377,378],{"class":36}," -e",[26,380,381],{"class":36}," \u002Fscraptik\u002Ftiktok-comments-scraper-api\n",[26,383,384],{"class":28,"line":212},[26,385,386],{"class":349},"# -> input schema, field docs, and per-call price (free)\n",[11,388,389,390,393],{},"The comment call lives in the ",[23,391,392],{},"listComments_*"," section of the body. Fill in the video ID and how many comments you want on this page, and run it. This is the exact verified command:",[16,395,397],{"className":190,"code":396,"language":192,"meta":21,"style":21},"monid run -p apify -e \u002Fscraptik\u002Ftiktok-comments-scraper-api \\\n  -i '{\"listComments_awemeId\":\"7127359192452599042\",\"listComments_count\":50}' -w\n# -> COMPLETED: up to 50 top-level comments,\n#    each with text, author, like count, and timestamp,\n#    billed per call\n",[23,398,399,418,435,440,445],{"__ignoreMap":21},[26,400,401,403,406,408,410,412,415],{"class":28,"line":29},[26,402,215],{"class":199},[26,404,405],{"class":36}," run",[26,407,372],{"class":36},[26,409,375],{"class":36},[26,411,378],{"class":36},[26,413,414],{"class":36}," \u002Fscraptik\u002Ftiktok-comments-scraper-api",[26,416,417],{"class":240}," \\\n",[26,419,420,423,426,429,432],{"class":28,"line":212},[26,421,422],{"class":36},"  -i",[26,424,425],{"class":233}," '",[26,427,428],{"class":36},"{\"listComments_awemeId\":\"7127359192452599042\",\"listComments_count\":50}",[26,430,431],{"class":233},"'",[26,433,434],{"class":36}," -w\n",[26,436,437],{"class":28,"line":332},[26,438,439],{"class":349},"# -> COMPLETED: up to 50 top-level comments,\n",[26,441,442],{"class":28,"line":346},[26,443,444],{"class":349},"#    each with text, author, like count, and timestamp,\n",[26,446,448],{"class":28,"line":447},5,[26,449,450],{"class":349},"#    billed per call\n",[11,452,453,456,457,460],{},[23,454,455],{},"run"," is the only step that bills. The ",[23,458,459],{},"-w"," flag waits for the result and prints it. Every returned comment carries the four fields that make a comment set useful rather than decorative:",[100,462,463,470,476,482],{},[103,464,465,469],{},[466,467,468],"strong",{},"Text",": the comment body, ready to feed an LLM for sentiment, objections, or FAQ mining.",[103,471,472,475],{},[466,473,474],{},"Author",": the commenter's username and user metadata, so you can weight or dedupe by account.",[103,477,478,481],{},[466,479,480],{},"Likes",": engagement on the comment itself, which is how you surface the one objection a hundred people silently agree with.",[103,483,484,487],{},[466,485,486],{},"Timestamp",": when it was posted, the axis you need to watch a comment section react over the hours after a video lands.",[11,489,490],{},[491,492],"img",{"alt":493,"src":494},"From a TikTok video URL to the aweme_id, a listComments call that pages through the cursor until empty, then flattened to text, author, likes, and time in comments.csv","\u002Fimg\u002Fblog\u002Fautomate-tiktok-comment-collection-fig-url-to-rows.png",[95,496,498],{"id":497},"step-3-page-through-with-the-cursor","Step 3: Page through with the cursor",[11,500,501,502,505,506,509],{},"The default page is small, so a real collection means paging. The endpoint gives you a ",[23,503,504],{},"listComments_cursor"," integer for exactly this. Start at ",[23,507,508],{},"0",", and after each call carry the cursor forward by the count you requested. Keep going until a page comes back empty, which is the signal you have reached the end of the comment stream.",[16,511,513],{"className":190,"code":512,"language":192,"meta":21,"style":21},"CURSOR=0\nSTEP=50\nwhile : ; do\n  monid run -p apify -e \u002Fscraptik\u002Ftiktok-comments-scraper-api \\\n    -i \"{\\\"listComments_awemeId\\\":\\\"$AWEME_ID\\\",\\\"listComments_count\\\":$STEP,\\\"listComments_cursor\\\":$CURSOR}\" -w \\\n    -o \"page_$CURSOR.json\"\n  COUNT=$(jq '.comments | length' \"page_$CURSOR.json\" 2>\u002Fdev\u002Fnull || echo 0)\n  [ \"$COUNT\" -lt 1 ] && break\n  CURSOR=$((CURSOR + STEP))\ndone\n",[23,514,515,525,535,550,567,629,647,695,723,743],{"__ignoreMap":21},[26,516,517,520,522],{"class":28,"line":29},[26,518,519],{"class":240},"CURSOR",[26,521,299],{"class":233},[26,523,524],{"class":36},"0\n",[26,526,527,530,532],{"class":28,"line":212},[26,528,529],{"class":240},"STEP",[26,531,299],{"class":233},[26,533,534],{"class":36},"50\n",[26,536,537,541,544,547],{"class":28,"line":332},[26,538,540],{"class":539},"s7zQu","while",[26,542,543],{"class":32}," :",[26,545,546],{"class":233}," ;",[26,548,549],{"class":539}," do\n",[26,551,552,555,557,559,561,563,565],{"class":28,"line":346},[26,553,554],{"class":199},"  monid",[26,556,405],{"class":36},[26,558,372],{"class":36},[26,560,375],{"class":36},[26,562,378],{"class":36},[26,564,414],{"class":36},[26,566,417],{"class":240},[26,568,569,572,574,577,580,583,585,588,591,594,596,599,601,603,606,608,610,612,614,616,619,622,624,627],{"class":28,"line":447},[26,570,571],{"class":36},"    -i",[26,573,338],{"class":233},[26,575,576],{"class":36},"{",[26,578,579],{"class":240},"\\\"",[26,581,582],{"class":36},"listComments_awemeId",[26,584,579],{"class":240},[26,586,587],{"class":36},":",[26,589,590],{"class":240},"\\\"$AWEME_ID\\\"",[26,592,593],{"class":36},",",[26,595,579],{"class":240},[26,597,598],{"class":36},"listComments_count",[26,600,579],{"class":240},[26,602,587],{"class":36},[26,604,605],{"class":240},"$STEP",[26,607,593],{"class":36},[26,609,579],{"class":240},[26,611,504],{"class":36},[26,613,579],{"class":240},[26,615,587],{"class":36},[26,617,618],{"class":240},"$CURSOR",[26,620,621],{"class":36},"}",[26,623,302],{"class":233},[26,625,626],{"class":36}," -w",[26,628,417],{"class":240},[26,630,632,635,637,640,642,645],{"class":28,"line":631},6,[26,633,634],{"class":36},"    -o",[26,636,338],{"class":233},[26,638,639],{"class":36},"page_",[26,641,618],{"class":240},[26,643,644],{"class":36},".json",[26,646,308],{"class":233},[26,648,650,653,656,659,661,664,666,668,670,672,674,676,679,682,685,688,692],{"class":28,"line":649},7,[26,651,652],{"class":240},"  COUNT",[26,654,655],{"class":233},"=$(",[26,657,658],{"class":199},"jq",[26,660,425],{"class":233},[26,662,663],{"class":36},".comments | length",[26,665,431],{"class":233},[26,667,338],{"class":233},[26,669,639],{"class":36},[26,671,618],{"class":240},[26,673,644],{"class":36},[26,675,302],{"class":233},[26,677,678],{"class":233}," 2>",[26,680,681],{"class":36},"\u002Fdev\u002Fnull",[26,683,684],{"class":233}," ||",[26,686,687],{"class":32}," echo",[26,689,691],{"class":690},"sbssI"," 0",[26,693,694],{"class":233},")\n",[26,696,698,701,703,706,708,711,714,717,720],{"class":28,"line":697},8,[26,699,700],{"class":233},"  [",[26,702,338],{"class":233},[26,704,705],{"class":240},"$COUNT",[26,707,302],{"class":233},[26,709,710],{"class":233}," -lt",[26,712,713],{"class":690}," 1",[26,715,716],{"class":233}," ]",[26,718,719],{"class":233}," &&",[26,721,722],{"class":539}," break\n",[26,724,726,729,732,734,737,740],{"class":28,"line":725},9,[26,727,728],{"class":240},"  CURSOR",[26,730,731],{"class":233},"=$((",[26,733,519],{"class":199},[26,735,736],{"class":36}," +",[26,738,739],{"class":36}," STEP",[26,741,742],{"class":233},"))\n",[26,744,746],{"class":28,"line":745},10,[26,747,748],{"class":539},"done\n",[11,750,751,752,755],{},"That loop writes one JSON file per page and stops on its own. Because billing is per call, a bigger ",[23,753,754],{},"count"," per page means fewer calls for the same coverage, so lean toward larger pages on videos you expect to be busy.",[95,757,759],{"id":758},"step-4-add-replies-for-the-threads-that-matter","Step 4: Add replies for the threads that matter",[11,761,762,763,765,766,768,769,772],{},"Top-level comments are the map. The replies are where an argument actually plays out, and where a creator answers a buying question in public. Replies are a separate call keyed on the parent ",[23,764,141],{}," plus the same ",[23,767,118],{},". Pull the top-level page first, pick the comment IDs worth expanding (usually the highest-liked ones), and fetch their replies with the ",[23,770,771],{},"commentReplies_*"," fields.",[16,774,776],{"className":190,"code":775,"language":192,"meta":21,"style":21},"monid run -p apify -e \u002Fscraptik\u002Ftiktok-comments-scraper-api \\\n  -i '{\"commentReplies_commentId\":\"6999860547420766982\",\"commentReplies_awemeId\":\"7127359192452599042\",\"commentReplies_count\":50}' -w\n# -> COMPLETED: replies under that one comment,\n#    same fields, same per-call price\n",[23,777,778,794,807,812],{"__ignoreMap":21},[26,779,780,782,784,786,788,790,792],{"class":28,"line":29},[26,781,215],{"class":199},[26,783,405],{"class":36},[26,785,372],{"class":36},[26,787,375],{"class":36},[26,789,378],{"class":36},[26,791,414],{"class":36},[26,793,417],{"class":240},[26,795,796,798,800,803,805],{"class":28,"line":212},[26,797,422],{"class":36},[26,799,425],{"class":233},[26,801,802],{"class":36},"{\"commentReplies_commentId\":\"6999860547420766982\",\"commentReplies_awemeId\":\"7127359192452599042\",\"commentReplies_count\":50}",[26,804,431],{"class":233},[26,806,434],{"class":36},[26,808,809],{"class":28,"line":332},[26,810,811],{"class":349},"# -> COMPLETED: replies under that one comment,\n",[26,813,814],{"class":28,"line":346},[26,815,816],{"class":349},"#    same fields, same per-call price\n",[11,818,819,820,823],{},"Replies paginate the same way, with ",[23,821,822],{},"commentReplies_cursor",". Keeping replies as a second, targeted call is deliberate: you never pay for reply depth on the hundred low-signal comments, only on the handful you chose.",[11,825,826],{},[491,827],{"alt":828,"src":829},"One aweme_id returns the top-level comments via listComments, and only for chosen threads each top comment fans out to its replies via commentReplies","\u002Fimg\u002Fblog\u002Fautomate-tiktok-comment-collection-fig-comments-and-replies.png",[95,831,833],{"id":832},"step-5-flatten-the-json-to-clean-rows","Step 5: Flatten the JSON to clean rows",[11,835,836,837,839],{},"The per-page JSON is fine for a program to read, but analysis wants a flat table. Pull the four load-bearing fields out of every comment across every page and write one CSV. Field names vary slightly by response, so inspect one page first and adjust the ",[23,838,658],{}," paths to match what you actually got back.",[16,841,843],{"className":190,"code":842,"language":192,"meta":21,"style":21},"echo \"text,author,likes,created_at\" > comments.csv\nfor f in page_*.json ; do\n  jq -r '.comments[] | [.text, .user.nickname, .digg_count, .create_time] | @csv' \"$f\" >> comments.csv\ndone\nwc -l comments.csv\n# -> one row per comment, ready for a spreadsheet or an LLM\n",[23,844,845,862,880,907,911,921],{"__ignoreMap":21},[26,846,847,849,851,854,856,859],{"class":28,"line":29},[26,848,335],{"class":32},[26,850,338],{"class":233},[26,852,853],{"class":36},"text,author,likes,created_at",[26,855,302],{"class":233},[26,857,858],{"class":233}," >",[26,860,861],{"class":36}," comments.csv\n",[26,863,864,867,870,873,876,878],{"class":28,"line":212},[26,865,866],{"class":539},"for",[26,868,869],{"class":240}," f ",[26,871,872],{"class":539},"in",[26,874,875],{"class":36}," page_*.json",[26,877,546],{"class":233},[26,879,549],{"class":539},[26,881,882,885,888,890,893,895,897,900,902,905],{"class":28,"line":332},[26,883,884],{"class":199},"  jq",[26,886,887],{"class":36}," -r",[26,889,425],{"class":233},[26,891,892],{"class":36},".comments[] | [.text, .user.nickname, .digg_count, .create_time] | @csv",[26,894,431],{"class":233},[26,896,338],{"class":233},[26,898,899],{"class":240},"$f",[26,901,302],{"class":233},[26,903,904],{"class":233}," >>",[26,906,861],{"class":36},[26,908,909],{"class":28,"line":346},[26,910,748],{"class":539},[26,912,913,916,919],{"class":28,"line":447},[26,914,915],{"class":199},"wc",[26,917,918],{"class":36}," -l",[26,920,861],{"class":36},[26,922,923],{"class":28,"line":631},[26,924,925],{"class":349},"# -> one row per comment, ready for a spreadsheet or an LLM\n",[11,927,928,929,931,932,931,935,938,939,942],{},"Now you have ",[23,930,172],{},", ",[23,933,934],{},"author",[23,936,937],{},"likes",", and a Unix ",[23,940,941],{},"created_at"," in one file. Convert the timestamp to a date in your spreadsheet, sort by likes to see what the section actually cared about, or hand the whole column of text to a model and ask for the top five recurring themes.",[95,944,946],{"id":945},"step-6-put-it-on-a-schedule","Step 6: Put it on a schedule",[11,948,949,950,952],{},"Comment sections move most in the hours after a video posts, so a one-time pull misses the story. Drop steps 1 through 5 into a script and let cron run it. A daily re-pull of the same ",[23,951,118],{},", diffed against yesterday's CSV, gives you new comments and how the like counts shifted, which is a lightweight way to watch sentiment turn on a launch or a controversy.",[16,954,956],{"className":190,"code":955,"language":192,"meta":21,"style":21},"# crontab -e, then add: pull one video's comments every morning at 9\n0 9 * * * \u002Fhome\u002Fyou\u002Ftiktok-comments.sh 7127359192452599042\n",[23,957,958,963],{"__ignoreMap":21},[26,959,960],{"class":28,"line":29},[26,961,962],{"class":349},"# crontab -e, then add: pull one video's comments every morning at 9\n",[26,964,965,967,970,973,975,977,980],{"class":28,"line":212},[26,966,508],{"class":199},[26,968,969],{"class":690}," 9",[26,971,972],{"class":240}," *",[26,974,972],{"class":240},[26,976,972],{"class":240},[26,978,979],{"class":36}," \u002Fhome\u002Fyou\u002Ftiktok-comments.sh",[26,981,982],{"class":690}," 7127359192452599042\n",[11,984,985],{},"Because Monid is also an MCP server, the same job runs agent-shaped. Hand an agent \"collect the comments on this TikTok video every morning and tell me what changed,\" and it can discover the endpoint, page the cursor, pull replies on the hot threads, and diff the result on its own, with the free discover and inspect steps letting it check the price before it ever spends.",[95,987,989],{"id":988},"what-the-whole-collection-costs","What the whole collection costs",[11,991,992,993,996],{},"The comment call is billed per call at a fraction of a cent, and each call returns a full page of comments. So the bill is a function of pages, not comments. A video with a few hundred comments at 50 per page is a handful of calls, which lands in single-digit cents. Add reply pulls on ten hot threads and you are still in cents. A daily scheduled re-pull of one video runs pennies a week. The per-call price is always shown before the run and listed at ",[87,994,127],{"href":125,"rel":995},[91],", with no subscription and no per-vendor minimum underneath it.",[95,998,1000],{"id":999},"why-not-the-official-tiktok-api","Why not the official TikTok API?",[11,1002,1003,1004,1009,1010,1015],{},"Because it will not hand you the comments on a video you do not own. TikTok's ",[87,1005,1008],{"href":1006,"rel":1007},"https:\u002F\u002Fdevelopers.tiktok.com\u002F",[91],"developer platform"," is built around registered apps that pass review and users who log in and authorize them, which is the right design for building a consumer app and the wrong one for reading the public comment section of an arbitrary viral post. There is no supported endpoint that returns arbitrary public video comments without an approved app plus user auth, and the research-access route is gated to qualifying institutions. That gap is exactly why this endpoint, maintained by scraping specialists on ",[87,1011,1014],{"href":1012,"rel":1013},"https:\u002F\u002Fapify.com",[91],"Apify",", exists: it does the access, proxy, and parser work so a video ID is the only input you supply.",[95,1017,1019],{"id":1018},"faq","FAQ",[11,1021,1022,1025],{},[466,1023,1024],{},"Do I need a TikTok developer account or an approved app?","\nNo. You integrate Monid once and fund one pay-as-you-go wallet. The provider handles TikTok access, proxies, and parser upkeep, and the only input you supply is the numeric video ID.",[11,1027,1028,1031,1032,1034],{},[466,1029,1030],{},"Where do I find the aweme_id?","\nIt is the run of digits at the end of any TikTok video URL, right after ",[23,1033,286],{},". For a short share link, expand it in a browser first and copy the full address.",[11,1036,1037,1040,1041,1043,1044,1046],{},[466,1038,1039],{},"Can I get replies, not just top-level comments?","\nYes. Replies are a separate call keyed on the parent ",[23,1042,141],{}," plus the video's ",[23,1045,118],{},", so you pull reply depth only on the threads you choose.",[11,1048,1049,1052,1053,1055],{},[466,1050,1051],{},"How do I collect more than the default page of comments?","\nUse the ",[23,1054,504],{}," integer. Start at 0 and carry it forward by your page size between calls until a page comes back empty.",[11,1057,1058,1061,1062,183],{},[466,1059,1060],{},"How much does it cost?","\nPer call, a fraction of a cent, and each call returns a full page, so a whole video's comments is usually single-digit cents. The current price shows before every run and is listed at ",[87,1063,127],{"href":125,"rel":1064},[91],[95,1066,1068],{"id":1067},"try-it","Try it",[11,1070,1071,1072,1075,1076,183],{},"Grab a key at ",[87,1073,165],{"href":163,"rel":1074},[91],", inspect the endpoint for free, and pull one page of comments from a video you already know. If the text, authors, and like counts match what you see on TikTok, wire in the cursor loop and the daily cron. Start at ",[87,1077,1079],{"href":89,"rel":1078},[91],"monid.ai",[1081,1082,1083],"style",{},"html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":21,"searchDepth":212,"depth":212,"links":1085},[1086,1087,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100],{"id":97,"depth":212,"text":98},{"id":151,"depth":212,"text":152,"children":1088},[1089,1090],{"id":156,"depth":332,"text":157},{"id":186,"depth":332,"text":187},{"id":255,"depth":212,"text":256},{"id":353,"depth":212,"text":354},{"id":497,"depth":212,"text":498},{"id":758,"depth":212,"text":759},{"id":832,"depth":212,"text":833},{"id":945,"depth":212,"text":946},{"id":988,"depth":212,"text":989},{"id":999,"depth":212,"text":1000},{"id":1018,"depth":212,"text":1019},{"id":1067,"depth":212,"text":1068},null,"\u002Fimg\u002Fblog\u002Fautomate-tiktok-comment-collection.png","Turn a TikTok video URL into a saved set of top-level comments and replies on a schedule, billed per call on Monid. No TikTok developer app.",false,"md",{},true,"\u002Fblog\u002Fautomate-tiktok-comment-collection","2026-07-24",{"title":5,"description":1103},"blog\u002Fautomate-tiktok-comment-collection",[1113,1114,1115],"data","agents","social","dN6Jnj0-QjEESskNRsmYG31EDWWv8Qp5hYjaaoMGMyM",[1118,1178,1246,1312],{"id":1119,"title":1120,"author":1101,"body":1121,"category":1101,"cover":1165,"description":21,"draft":1104,"extension":1105,"image":1101,"launchCta":1166,"listingCover":1101,"meta":1169,"navigation":1107,"ogImage":1101,"path":1170,"publishedAt":1171,"readTime":1101,"seo":1172,"stem":1173,"tags":1174,"toolCategory":1101,"updatedAt":1101,"__hash__":1177},"blog\u002Fblog\u002Fakta-pro-is-now-available-on-monid.md","Introducing private markets\ndata for agents",{"type":8,"value":1122,"toc":1161},[1123,1127,1135,1138,1142,1148,1155,1158],[95,1124,1126],{"id":1125},"what-is-aktapro","What is akta.pro",[11,1128,1129,1134],{},[87,1130,1133],{"href":1131,"rel":1132},"https:\u002F\u002Fwww.akta.pro\u002F",[91],"akta.pro"," is a private company data and signals API for\nAI agents. Company Database covers 20M+ companies with 75+ structured fields\neach. News Signals delivers deduplicated, entity-resolved company news,\nindustry news, and signals on open-ended topics, all scored for impact and\nsentiment.",[11,1136,1137],{},"Private-company research is usually scattered across databases, news feeds,\nreview sites, and web search. akta.pro turns that into structured API calls, so\nan agent gets the right company context and keeps moving.",[95,1139,1141],{"id":1140},"what-is-monid","What is Monid",[11,1143,1144,1147],{},[87,1145,92],{"href":89,"rel":1146},[91]," is the tool layer for agents. It lets agents connect\nto all the tools and APIs they need, without managing signups, API keys, or\nsubscriptions.",[11,1149,1150,1151,183],{},"Today, Monid provides tools for social media scraping, web search, image and\nmusic generation, people data search, weather APIs, ",[87,1152,1154],{"href":125,"rel":1153},[91],"and more",[1156,1157],"hr",{},[11,1159,1160],{},"On Monid, akta.pro becomes available as part of that same layer. Your agent can\nrequest private-company context, call akta.pro through Monid, receive structured\nmarket data, and continue the task. Private markets research should feel like\nany other tool call: describe the company or sector, get the signal, keep\nbuilding.",{"title":21,"searchDepth":212,"depth":212,"links":1162},[1163,1164],{"id":1125,"depth":212,"text":1126},{"id":1140,"depth":212,"text":1141},"\u002Fimg\u002Fblog\u002Fakta-pro-is-now-available-on-monid-v2.png",{"label":1167,"command":1168},"Give your agent this line to get started.","set up https:\u002F\u002Fmonid.ai\u002FSKILL.md and use akta.pro to research recent news, company enrichment, and alternative signals for Databricks",{},"\u002Fblog\u002Fakta-pro-is-now-available-on-monid","2026-07-07",{"title":1120,"description":21},"blog\u002Fakta-pro-is-now-available-on-monid",[1114,1175,1176,1113],"partner-tools","private-markets","05ST9oH9qSQ4_vNxcczvHDEyev2JDIqBwMiM-zelWJo",{"id":1179,"title":1180,"author":1101,"body":1181,"category":1101,"cover":1235,"description":1236,"draft":1104,"extension":1105,"image":1101,"launchCta":1101,"listingCover":1101,"meta":1237,"navigation":1107,"ogImage":1101,"path":1238,"publishedAt":1239,"readTime":1101,"seo":1240,"stem":1241,"tags":1242,"toolCategory":1101,"updatedAt":1101,"__hash__":1245},"blog\u002Fblog\u002Fyour-claude-code-can-now-make-phone-calls.md","Your Claude Code can now make phone calls",{"type":8,"value":1182,"toc":1231},[1183,1186,1195,1199,1207,1210,1212,1217,1223,1225,1228],[11,1184,1185],{"style":13},"Copy this line to your agent to make your first phone call.",[16,1187,1189],{"className":18,"code":1188,"language":20,"meta":21,"style":21},"set up https:\u002F\u002Fmonid.ai\u002FSKILL.md and use Saperly to call my phone number to confirm the connection works\n",[23,1190,1191],{"__ignoreMap":21},[26,1192,1193],{"class":28,"line":29},[26,1194,1188],{},[95,1196,1198],{"id":1197},"what-is-saperly","What is Saperly",[11,1200,1201,1206],{},[87,1202,1205],{"href":1203,"rel":1204},"https:\u002F\u002Fsaperly.com\u002F",[91],"Saperly"," is phone infrastructure for AI agents. It gives\nan agent a real phone number with voice, SMS, routing, spend controls, and\ncompliance built in, without making the builder manage carrier accounts or\ntelephony paperwork.",[11,1208,1209],{},"Your agent can confirm an appointment, follow up on a lead, check availability,\nor route a conversation without leaving the workflow it is already running.",[95,1211,1141],{"id":1140},[11,1213,1214,1147],{},[87,1215,92],{"href":89,"rel":1216},[91],[11,1218,1219,1220,183],{},"Today, Monid provides tools for social media scraping, web search, image \u002F\nmusic \u002F 3d model generation, people data search, weather APIs, ",[87,1221,1154],{"href":125,"rel":1222},[91],[1156,1224],{},[11,1226,1227],{},"On Monid, Saperly becomes available as part of that same layer. Your agent can\nrequest a phone call, use Saperly through Monid, receive the result, and keep\ngoing. Calling should feel like any other tool call: describe the outcome, let\nthe agent handle the phone work, and continue the task.",[1081,1229,1230],{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":21,"searchDepth":212,"depth":212,"links":1232},[1233,1234],{"id":1197,"depth":212,"text":1198},{"id":1140,"depth":212,"text":1141},"\u002Fimg\u002Fblog\u002Fyour-claude-code-can-now-make-phone-calls.png","Saperly is now available on Monid. Your agent can now make phone calls for you.",{},"\u002Fblog\u002Fyour-claude-code-can-now-make-phone-calls","2026-07-05",{"title":1180,"description":1236},"blog\u002Fyour-claude-code-can-now-make-phone-calls",[1114,1175,1243,1244],"voice","phone","Wp96EVH5j2eyHDSu2f5Rtv0RYmyWX7frAhalel9fOus",{"id":1247,"title":1248,"author":1101,"body":1249,"category":1101,"cover":1301,"description":1302,"draft":1104,"extension":1105,"image":1101,"launchCta":1101,"listingCover":1101,"meta":1303,"navigation":1107,"ogImage":1101,"path":1304,"publishedAt":1305,"readTime":1101,"seo":1306,"stem":1307,"tags":1308,"toolCategory":1101,"updatedAt":1101,"__hash__":1311},"blog\u002Fblog\u002Fintroducing-suzanne-chatgpt-for-3d-models.md","Introducing\nClaude for 3D models",{"type":8,"value":1250,"toc":1297},[1251,1254,1263,1267,1275,1278,1280,1285,1290,1292,1295],[11,1252,1253],{"style":13},"Copy this line to your agent to generate your 3D model.",[16,1255,1257],{"className":18,"code":1256,"language":20,"meta":21,"style":21},"set up https:\u002F\u002Fmonid.ai\u002FSKILL.md and create a 3D model for a rabbit\n",[23,1258,1259],{"__ignoreMap":21},[26,1260,1261],{"class":28,"line":29},[26,1262,1256],{},[95,1264,1266],{"id":1265},"what-is-suzanne","What is Suzanne",[11,1268,1269,1274],{},[87,1270,1273],{"href":1271,"rel":1272},"https:\u002F\u002Fwww.suzanne3d.com",[91],"Suzanne"," is an AI-native 3D modeling tool that turns a prompt into a\nusable 3D asset. Instead of opening a modeling tool, blocking out forms,\nadding details, and exporting by hand, you describe what you want and let\nSuzanne generate the model for you.",[11,1276,1277],{},"That changes who can create 3D objects. Product teams can prototype visual\nideas faster. Game builders can rough out props and characters without\nwaiting on a full art pass. Agents can generate assets as part of a larger\nworkflow, then hand those files to downstream tools for rendering, testing,\nor iteration.",[95,1279,1141],{"id":1140},[11,1281,1282,1147],{},[87,1283,92],{"href":89,"rel":1284},[91],[11,1286,1150,1287,183],{},[87,1288,1154],{"href":125,"rel":1289},[91],[1156,1291],{},[11,1293,1294],{},"On Monid, Suzanne becomes available as part of that same layer. Your agent can\nask for the 3D asset it needs, call Suzanne through Monid, and continue the task.\n3D creation should feel as direct as text generation: describe the thing, get\nthe artifact, keep building.",[1081,1296,1230],{},{"title":21,"searchDepth":212,"depth":212,"links":1298},[1299,1300],{"id":1265,"depth":212,"text":1266},{"id":1140,"depth":212,"text":1141},"\u002Fimg\u002Fblog\u002Fintroducing-suzanne-chatgpt-for-3d-models.png","Suzanne is now available on Monid. Turn any idea into a production-ready 3D model in one prompt.",{},"\u002Fblog\u002Fintroducing-suzanne-chatgpt-for-3d-models","2026-06-25",{"title":1248,"description":1302},"blog\u002Fintroducing-suzanne-chatgpt-for-3d-models",[1309,1114,1310],"3d","creative-tools","Mz475YlhLBgR80gyiTlL2MhfALZKYwbl4Rfwy96HZG0",{"id":1313,"title":1314,"author":1101,"body":1315,"category":1101,"cover":1374,"description":1375,"draft":1104,"extension":1105,"image":1101,"launchCta":1101,"listingCover":1101,"meta":1376,"navigation":1107,"ogImage":1101,"path":1377,"publishedAt":1378,"readTime":1101,"seo":1379,"stem":1380,"tags":1381,"toolCategory":1101,"updatedAt":1101,"__hash__":1384},"blog\u002Fblog\u002Fminimax-is-now-available-on-monid.md","MiniMax is now available on Monid",{"type":8,"value":1316,"toc":1369},[1317,1320,1329,1333,1341,1345,1348,1350,1356,1362,1364,1367],[11,1318,1319],{"style":13},"Copy this line to your agent to create music.",[16,1321,1323],{"className":18,"code":1322,"language":20,"meta":21,"style":21},"set up https:\u002F\u002Fmonid.ai\u002FSKILL.md and create a song with MiniMax Music 2.6\n",[23,1324,1325],{"__ignoreMap":21},[26,1326,1327],{"class":28,"line":29},[26,1328,1322],{},[95,1330,1332],{"id":1331},"minimax-music-26","MiniMax Music 2.6",[11,1334,1335,1340],{},[87,1336,1339],{"href":1337,"rel":1338},"https:\u002F\u002Fwww.minimax.io",[91],"MiniMax"," Music 2.6 turns a prompt into music your agent can use right away. Describe the style, mood, lyrics, or use case, and generate a track inside the same workflow.",[95,1342,1344],{"id":1343},"minimax-text-to-image-image-01","MiniMax Text-to-Image image-01",[11,1346,1347],{},"MiniMax image-01 turns text prompts into images. Ask for a concept, scene, product visual, or creative asset, and let your agent generate it through Monid.",[95,1349,1141],{"id":1140},[11,1351,1352,1355],{},[87,1353,92],{"href":89,"rel":1354},[91]," is the tool layer for agents. It lets agents connect to all the tools and APIs they need, without managing signups, API keys, or subscriptions.",[11,1357,1358,1359,183],{},"Today, Monid provides tools for social media scraping, web search, image and music generation, people data search, weather APIs, ",[87,1360,1154],{"href":125,"rel":1361},[91],[1156,1363],{},[11,1365,1366],{},"On Monid, MiniMax becomes part of the same tool layer your agent already uses. Describe what you need, generate the image or music, and keep building.",[1081,1368,1230],{},{"title":21,"searchDepth":212,"depth":212,"links":1370},[1371,1372,1373],{"id":1331,"depth":212,"text":1332},{"id":1343,"depth":212,"text":1344},{"id":1140,"depth":212,"text":1141},"\u002Fimg\u002Fblog\u002Fminimax-is-now-available-on-monid.png","Create images and music with MiniMax models through Monid.",{},"\u002Fblog\u002Fminimax-is-now-available-on-monid","2026-06-24",{"title":1314,"description":1375},"blog\u002Fminimax-is-now-available-on-monid",[1114,1310,1382,1383],"image-generation","music-generation","B3dZqIjNJNK7Y9ysAenI0XzKobOZMlEP87FRWrW19Vc",1786670264717]