[{"data":1,"prerenderedAt":1175},["ShallowReactive",2],{"blog-\u002Fblog\u002Ftiktok-handle-to-dataset-in-one-script":3,"blog-related-\u002Fblog\u002Ftiktok-handle-to-dataset-in-one-script":905},{"id":4,"title":5,"author":6,"body":7,"category":889,"cover":890,"description":891,"draft":892,"extension":893,"image":889,"launchCta":889,"meta":894,"navigation":699,"ogImage":889,"path":895,"publishedAt":896,"readTime":889,"seo":897,"stem":898,"tags":899,"updatedAt":889,"__hash__":904},"blogUnlisted\u002Fblog\u002Ftiktok-handle-to-dataset-in-one-script.md","From a TikTok Handle to a Full Dataset in One Script","The Monid Team",{"type":8,"value":9,"toc":875},"minimark",[10,15,81,98,109,114,155,159,164,173,181,189,193,250,258,262,265,289,320,324,338,390,393,426,436,443,447,450,468,471,529,532,536,539,655,665,669,672,798,807,811,824,828,843,849,861,871],[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 turn a TikTok handle into a clean CSV of profile and post engagement.",[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\u002Fapidojo\u002Ftiktok-profile-scraper to turn a TikTok handle into a profile and posts dataset\n","sh","",[23,24,25],"code",{"__ignoreMap":21},[26,27,30,34,38,41,44,47,50,53,56,59,62,65,68,70,73,75,78],"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\u002Fapidojo\u002Ftiktok-profile-scraper",[26,51,52],{"class":36}," to",[26,54,55],{"class":36}," turn",[26,57,58],{"class":36}," a",[26,60,61],{"class":36}," TikTok",[26,63,64],{"class":36}," handle",[26,66,67],{"class":36}," into",[26,69,58],{"class":36},[26,71,72],{"class":36}," profile",[26,74,43],{"class":36},[26,76,77],{"class":36}," posts",[26,79,80],{"class":36}," dataset\n",[11,82,83,84,91,92,97],{},"A single username is enough to build a real dataset: point one endpoint at a handle, get back the profile plus recent posts with views, likes, comments, and shares, then flatten the fields you care about into CSV. This is the whole cookbook, one handle at a time, using ",[85,86,90],"a",{"href":87,"rel":88},"https:\u002F\u002Fmonid.ai",[89],"nofollow","Monid"," as the interface and ",[85,93,96],{"href":94,"rel":95},"https:\u002F\u002Fapify.com",[89],"Apify"," as the source. No per-post pagination, no browser automation, no vendor signup.",[11,99,100,101,104,105,108],{},"Monid is a pay-per-call data-API marketplace: one interface and one wallet to discover and run hundreds of external data endpoints without a separate account for each provider. You inspect a schema for free, then pay only for the run. Here is the script that takes you from ",[23,102,103],{},"@handle"," to ",[23,106,107],{},"profiles.csv",".",[110,111,113],"h2",{"id":112},"tldr","TL;DR",[115,116,117,125,132,138,147],"ul",{},[118,119,120,121,124],"li",{},"One endpoint, ",[23,122,123],{},"apify\u002Fapidojo\u002Ftiktok-profile-scraper",", returns a profile object (bio, followers, verification) plus a list of posts with engagement counts, hashtags, and media URLs.",[118,126,127,128,131],{},"Inspect the schema for free, run one handle with a small ",[23,129,130],{},"maxItems",", then loop a handful of handles.",[118,133,134,137],{},[23,135,136],{},"jq"," flattens the nested JSON into flat rows; a two-line append turns each run into CSV.",[118,139,140,141,146],{},"Cost is billed per result, so a test of a few handles at ten posts each lands in the single-digit-cents range. See ",[85,142,145],{"href":143,"rel":144},"https:\u002F\u002Fmonid.ai\u002Ftools",[89],"monid.ai\u002Ftools"," for live pricing.",[118,148,149,154],{},[85,150,153],{"href":151,"rel":152},"https:\u002F\u002Ftikhub.io",[89],"TikHub"," is an alternate TikTok source if you want a second opinion on the same handle.",[110,156,158],{"id":157},"set-up-monid-once","Set up Monid once",[160,161,163],"h3",{"id":162},"for-agents","For agents",[11,165,166,167,172],{},"Grab an API key at ",[85,168,171],{"href":169,"rel":170},"https:\u002F\u002Fapp.monid.ai\u002F",[89],"app.monid.ai",", then paste this to your agent and hand it the key:",[16,174,179],{"className":175,"code":177,"language":178},[176],"language-text","set up https:\u002F\u002Fmonid.ai\u002FSKILL.md\n","text",[23,180,177],{"__ignoreMap":21},[11,182,183,184,108],{},"It learns the whole discover, inspect, run workflow itself. More details in the ",[85,185,188],{"href":186,"rel":187},"https:\u002F\u002Fmonid.ai\u002Fdocs\u002Fguide\u002Fquickstart-skill",[89],"agent quickstart",[160,190,192],{"id":191},"for-humans","For humans",[16,194,198],{"className":195,"code":196,"language":197,"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,199,200,215],{"__ignoreMap":21},[26,201,202,206,209,212],{"class":28,"line":29},[26,203,205],{"class":204},"sBMFI","npm",[26,207,208],{"class":36}," install",[26,210,211],{"class":36}," -g",[26,213,214],{"class":36}," @monid-ai\u002Fcli\n",[26,216,218,221,224,227,230,233,236,240,243,247],{"class":28,"line":217},2,[26,219,220],{"class":204},"monid",[26,222,223],{"class":36}," keys",[26,225,226],{"class":36}," add",[26,228,229],{"class":36}," --label",[26,231,232],{"class":36}," main",[26,234,235],{"class":36}," --key",[26,237,239],{"class":238},"sMK4o"," \u003C",[26,241,242],{"class":36},"your-api-ke",[26,244,246],{"class":245},"sTEyZ","y",[26,248,249],{"class":238},">\n",[11,251,252,253,108],{},"More details in the ",[85,254,257],{"href":255,"rel":256},"https:\u002F\u002Fmonid.ai\u002Fdocs\u002Fguide\u002Fquickstart-cli",[89],"CLI quickstart",[110,259,261],{"id":260},"step-1-inspect-the-endpoint-free","Step 1: inspect the endpoint (free)",[11,263,264],{},"Before spending anything, read the schema. Inspect shows the accepted input fields and the price per result, and it costs nothing.",[16,266,268],{"className":195,"code":267,"language":197,"meta":21,"style":21},"monid inspect -p apify -e \u002Fapidojo\u002Ftiktok-profile-scraper\n",[23,269,270],{"__ignoreMap":21},[26,271,272,274,277,280,283,286],{"class":28,"line":29},[26,273,220],{"class":204},[26,275,276],{"class":36}," inspect",[26,278,279],{"class":36}," -p",[26,281,282],{"class":36}," apify",[26,284,285],{"class":36}," -e",[26,287,288],{"class":36}," \u002Fapidojo\u002Ftiktok-profile-scraper\n",[11,290,291,292,295,296,299,300,302,303,306,307,310,311,314,315,108],{},"You will see that the input body accepts ",[23,293,294],{},"usernames"," (an array of handles) or ",[23,297,298],{},"startUrls",", plus ",[23,301,130],{},", and optional ",[23,304,305],{},"since"," and ",[23,308,309],{},"until"," date bounds. The output carries a profile block (bio, follower count, verification flag) and a ",[23,312,313],{},"posts"," array where each entry has views, likes, comments, shares, a hashtag list, and media URLs. That output shape is what the rest of the script depends on, so it is worth reading once. The full endpoint reference lives on the ",[85,316,319],{"href":317,"rel":318},"https:\u002F\u002Fapify.com\u002Fapidojo\u002Ftiktok-profile-scraper",[89],"Apify tiktok-profile-scraper page",[110,321,323],{"id":322},"step-2-run-one-handle-with-a-small-limit","Step 2: run one handle with a small limit",[11,325,326,327,329,330,333,334,337],{},"Start with a single handle and a tiny ",[23,328,130],{}," so the first run is cheap and fast. The ",[23,331,332],{},"-i"," flag takes the JSON body, and ",[23,335,336],{},"-w"," waits inline so the result comes straight back.",[16,339,341],{"className":195,"code":340,"language":197,"meta":21,"style":21},"monid run -p apify -e \u002Fapidojo\u002Ftiktok-profile-scraper \\\n  -i '{\"usernames\":[\"nasa\"],\"maxItems\":10}' \\\n  -w -o nasa.json\n",[23,342,343,362,378],{"__ignoreMap":21},[26,344,345,347,350,352,354,356,359],{"class":28,"line":29},[26,346,220],{"class":204},[26,348,349],{"class":36}," run",[26,351,279],{"class":36},[26,353,282],{"class":36},[26,355,285],{"class":36},[26,357,358],{"class":36}," \u002Fapidojo\u002Ftiktok-profile-scraper",[26,360,361],{"class":245}," \\\n",[26,363,364,367,370,373,376],{"class":28,"line":217},[26,365,366],{"class":36},"  -i",[26,368,369],{"class":238}," '",[26,371,372],{"class":36},"{\"usernames\":[\"nasa\"],\"maxItems\":10}",[26,374,375],{"class":238},"'",[26,377,361],{"class":245},[26,379,381,384,387],{"class":28,"line":380},3,[26,382,383],{"class":36},"  -w",[26,385,386],{"class":36}," -o",[26,388,389],{"class":36}," nasa.json\n",[11,391,392],{},"If a run takes long enough to go async, you get a run ID instead. Poll and save it with:",[16,394,396],{"className":195,"code":395,"language":197,"meta":21,"style":21},"monid runs get -r \u003CRunID> -o nasa.json\n",[23,397,398],{"__ignoreMap":21},[26,399,400,402,405,408,411,413,416,419,422,424],{"class":28,"line":29},[26,401,220],{"class":204},[26,403,404],{"class":36}," runs",[26,406,407],{"class":36}," get",[26,409,410],{"class":36}," -r",[26,412,239],{"class":238},[26,414,415],{"class":36},"RunI",[26,417,418],{"class":245},"D",[26,420,421],{"class":238},">",[26,423,386],{"class":36},[26,425,389],{"class":36},[11,427,428,429,432,433,435],{},"Now ",[23,430,431],{},"nasa.json"," holds the profile and the ten most recent posts. Keep ",[23,434,130],{}," small while you shape the pipeline. You can raise it later once the CSV columns are exactly what you want.",[11,437,438],{},[439,440],"img",{"alt":441,"src":442},"Linear flow from a single TikTok handle through one Monid run into a JSON dataset, jq field extraction, and a profiles.csv file, with a loop back for the next handle.","\u002Fimg\u002Fblog\u002Ftiktok-handle-to-dataset-in-one-script-fig-1.png",[110,444,446],{"id":445},"step-3-read-the-fields-that-matter-with-jq","Step 3: read the fields that matter with jq",[11,448,449],{},"The raw JSON is nested. Pull the profile fields first so you know they are landing:",[16,451,453],{"className":195,"code":452,"language":197,"meta":21,"style":21},"jq '{handle: .username, followers: .followerCount, verified: .verified, bio: .bio}' nasa.json\n",[23,454,455],{"__ignoreMap":21},[26,456,457,459,461,464,466],{"class":28,"line":29},[26,458,136],{"class":204},[26,460,369],{"class":238},[26,462,463],{"class":36},"{handle: .username, followers: .followerCount, verified: .verified, bio: .bio}",[26,465,375],{"class":238},[26,467,389],{"class":36},[11,469,470],{},"Then flatten each post into a flat record, one row per video:",[16,472,474],{"className":195,"code":473,"language":197,"meta":21,"style":21},"jq '.posts[] | {\n  handle: input_filename,\n  views: .playCount,\n  likes: .diggCount,\n  comments: .commentCount,\n  shares: .shareCount,\n  hashtags: (.hashtags | join(\"|\"))\n}' nasa.json\n",[23,475,476,485,490,495,501,507,513,519],{"__ignoreMap":21},[26,477,478,480,482],{"class":28,"line":29},[26,479,136],{"class":204},[26,481,369],{"class":238},[26,483,484],{"class":36},".posts[] | {\n",[26,486,487],{"class":28,"line":217},[26,488,489],{"class":36},"  handle: input_filename,\n",[26,491,492],{"class":28,"line":380},[26,493,494],{"class":36},"  views: .playCount,\n",[26,496,498],{"class":28,"line":497},4,[26,499,500],{"class":36},"  likes: .diggCount,\n",[26,502,504],{"class":28,"line":503},5,[26,505,506],{"class":36},"  comments: .commentCount,\n",[26,508,510],{"class":28,"line":509},6,[26,511,512],{"class":36},"  shares: .shareCount,\n",[26,514,516],{"class":28,"line":515},7,[26,517,518],{"class":36},"  hashtags: (.hashtags | join(\"|\"))\n",[26,520,522,525,527],{"class":28,"line":521},8,[26,523,524],{"class":36},"}",[26,526,375],{"class":238},[26,528,389],{"class":36},[11,530,531],{},"Field names follow the schema you saw in Step 1, so if Apify labels a count differently, the inspect output is your source of truth. Confirm the keys there rather than guessing.",[110,533,535],{"id":534},"step-4-loop-a-handful-of-handles","Step 4: loop a handful of handles",[11,537,538],{},"One handle proves the shape. A short list gives you a comparable dataset. Keep the list small and the limit low while testing.",[16,540,542],{"className":195,"code":541,"language":197,"meta":21,"style":21},"for h in nasa duolingo gordonramsayofficial; do\n  monid run -p apify -e \u002Fapidojo\u002Ftiktok-profile-scraper \\\n    -i \"{\\\"usernames\\\":[\\\"$h\\\"],\\\"maxItems\\\":10}\" \\\n    -w -o \"raw_$h.json\"\ndone\n",[23,543,544,571,588,629,650],{"__ignoreMap":21},[26,545,546,550,553,556,559,562,565,568],{"class":28,"line":29},[26,547,549],{"class":548},"s7zQu","for",[26,551,552],{"class":245}," h ",[26,554,555],{"class":548},"in",[26,557,558],{"class":36}," nasa",[26,560,561],{"class":36}," duolingo",[26,563,564],{"class":36}," gordonramsayofficial",[26,566,567],{"class":238},";",[26,569,570],{"class":548}," do\n",[26,572,573,576,578,580,582,584,586],{"class":28,"line":217},[26,574,575],{"class":204},"  monid",[26,577,349],{"class":36},[26,579,279],{"class":36},[26,581,282],{"class":36},[26,583,285],{"class":36},[26,585,358],{"class":36},[26,587,361],{"class":245},[26,589,590,593,596,599,602,604,606,609,612,615,617,619,621,624,627],{"class":28,"line":380},[26,591,592],{"class":36},"    -i",[26,594,595],{"class":238}," \"",[26,597,598],{"class":36},"{",[26,600,601],{"class":245},"\\\"",[26,603,294],{"class":36},[26,605,601],{"class":245},[26,607,608],{"class":36},":[",[26,610,611],{"class":245},"\\\"$h\\\"",[26,613,614],{"class":36},"],",[26,616,601],{"class":245},[26,618,130],{"class":36},[26,620,601],{"class":245},[26,622,623],{"class":36},":10}",[26,625,626],{"class":238},"\"",[26,628,361],{"class":245},[26,630,631,634,636,638,641,644,647],{"class":28,"line":497},[26,632,633],{"class":36},"    -w",[26,635,386],{"class":36},[26,637,595],{"class":238},[26,639,640],{"class":36},"raw_",[26,642,643],{"class":245},"$h",[26,645,646],{"class":36},".json",[26,648,649],{"class":238},"\"\n",[26,651,652],{"class":28,"line":503},[26,653,654],{"class":548},"done\n",[11,656,657,658,661,662,664],{},"Each handle writes its own ",[23,659,660],{},"raw_\u003Chandle>.json",". Running them separately keeps failures isolated: if one handle is private or misspelled, the others still land clean. You could also pass all three inside a single ",[23,663,294],{}," array in one call, but per-handle files make the CSV step simpler to reason about.",[110,666,668],{"id":667},"step-5-write-it-all-to-csv","Step 5: write it all to CSV",[11,670,671],{},"Emit a header once, then append a flattened row for every post across every file.",[16,673,675],{"className":195,"code":674,"language":197,"meta":21,"style":21},"echo \"handle,views,likes,comments,shares,hashtags\" > profiles.csv\n\nfor f in raw_*.json; do\n  handle=$(jq -r '.username' \"$f\")\n  jq -r --arg h \"$handle\" '.posts[] |\n    [$h, .playCount, .diggCount, .commentCount, .shareCount,\n     (.hashtags | join(\"|\"))] | @csv' \"$f\" >> profiles.csv\ndone\n",[23,676,677,695,701,717,746,771,776,794],{"__ignoreMap":21},[26,678,679,682,684,687,689,692],{"class":28,"line":29},[26,680,681],{"class":32},"echo",[26,683,595],{"class":238},[26,685,686],{"class":36},"handle,views,likes,comments,shares,hashtags",[26,688,626],{"class":238},[26,690,691],{"class":238}," >",[26,693,694],{"class":36}," profiles.csv\n",[26,696,697],{"class":28,"line":217},[26,698,700],{"emptyLinePlaceholder":699},true,"\n",[26,702,703,705,708,710,713,715],{"class":28,"line":380},[26,704,549],{"class":548},[26,706,707],{"class":245}," f ",[26,709,555],{"class":548},[26,711,712],{"class":36}," raw_*.json",[26,714,567],{"class":238},[26,716,570],{"class":548},[26,718,719,722,725,727,729,731,734,736,738,741,743],{"class":28,"line":497},[26,720,721],{"class":245},"  handle",[26,723,724],{"class":238},"=$(",[26,726,136],{"class":204},[26,728,410],{"class":36},[26,730,369],{"class":238},[26,732,733],{"class":36},".username",[26,735,375],{"class":238},[26,737,595],{"class":238},[26,739,740],{"class":245},"$f",[26,742,626],{"class":238},[26,744,745],{"class":238},")\n",[26,747,748,751,753,756,759,761,764,766,768],{"class":28,"line":503},[26,749,750],{"class":204},"  jq",[26,752,410],{"class":36},[26,754,755],{"class":36}," --arg",[26,757,758],{"class":36}," h",[26,760,595],{"class":238},[26,762,763],{"class":245},"$handle",[26,765,626],{"class":238},[26,767,369],{"class":238},[26,769,770],{"class":36},".posts[] |\n",[26,772,773],{"class":28,"line":509},[26,774,775],{"class":36},"    [$h, .playCount, .diggCount, .commentCount, .shareCount,\n",[26,777,778,781,783,785,787,789,792],{"class":28,"line":515},[26,779,780],{"class":36},"     (.hashtags | join(\"|\"))] | @csv",[26,782,375],{"class":238},[26,784,595],{"class":238},[26,786,740],{"class":245},[26,788,626],{"class":238},[26,790,791],{"class":238}," >>",[26,793,694],{"class":36},[26,795,796],{"class":28,"line":521},[26,797,654],{"class":548},[11,799,800,803,804,806],{},[23,801,802],{},"@csv"," handles quoting and escaping, so commas inside hashtags or captions will not break your columns. Open ",[23,805,107],{}," in any spreadsheet and you have a per-post engagement table keyed by handle, ready to sort by views or pivot on hashtag.",[110,808,810],{"id":809},"cost-tally","Cost tally",[11,812,813,814,816,817,819,820,823],{},"Everything up to the run was free: discover and inspect cost nothing, so you can read the schema and shape the ",[23,815,136],{}," calls without touching your wallet. The runs in this walkthrough are billed per result, meaning a handful of handles at ten posts each is a single-digit-cents job. Scaling ",[23,818,130],{}," up or adding more handles scales the cost linearly with results returned, so a broader pull of thousands of posts still stays in the low single-digit-dollars range. Check current per-result pricing on ",[85,821,145],{"href":143,"rel":822},[89]," before you widen the net.",[110,825,827],{"id":826},"faq","FAQ",[11,829,830,834,835,837,838,306,840,842],{},[831,832,833],"strong",{},"Can I get more than the recent posts for a handle?","\nRaise ",[23,836,130],{}," in the input body, and use the ",[23,839,305],{},[23,841,309],{}," date fields to bound the window. Start small to confirm your columns, then widen once the CSV looks right.",[11,844,845,848],{},[831,846,847],{},"What if a handle is private or does not exist?","\nThat single run returns an empty or error result while the rest of your loop keeps going, which is exactly why Step 4 writes one file per handle instead of batching them.",[11,850,851,854,855,857,858,108],{},[831,852,853],{},"How much does a test run cost?","\nInspect is free, and runs are billed per result, so a few handles at a small ",[23,856,130],{}," costs cents. Live per-result pricing is on ",[85,859,145],{"href":143,"rel":860},[89],[11,862,863,866,867,870],{},[831,864,865],{},"Is there another source for the same data?","\nYes. ",[85,868,153],{"href":151,"rel":869},[89]," exposes TikTok profile and post endpoints through the same Monid interface, so you can run the same handle against a second provider and compare the fields without a new signup.",[872,873,874],"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 .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}",{"title":21,"searchDepth":217,"depth":217,"links":876},[877,878,882,883,884,885,886,887,888],{"id":112,"depth":217,"text":113},{"id":157,"depth":217,"text":158,"children":879},[880,881],{"id":162,"depth":380,"text":163},{"id":191,"depth":380,"text":192},{"id":260,"depth":217,"text":261},{"id":322,"depth":217,"text":323},{"id":445,"depth":217,"text":446},{"id":534,"depth":217,"text":535},{"id":667,"depth":217,"text":668},{"id":809,"depth":217,"text":810},{"id":826,"depth":217,"text":827},null,"\u002Fimg\u002Fblog\u002Ftiktok-handle-to-dataset-in-one-script.png","Turn a TikTok username into a structured CSV of profile and post engagement with one Monid script over the Apify tiktok-profile-scraper.",false,"md",{},"\u002Fblog\u002Ftiktok-handle-to-dataset-in-one-script","2026-07-15",{"title":5,"description":891},"blog\u002Ftiktok-handle-to-dataset-in-one-script",[900,901,902,903],"tiktok scraping","apify","data pipeline","csv export","YThI63cdW5BuV2DhFNljZ4BUvvCLSvkDZlB-F-mh4XM",[906,968,1036,1102],{"id":907,"title":908,"author":889,"body":909,"category":889,"cover":953,"description":21,"draft":892,"extension":893,"image":889,"launchCta":954,"meta":957,"navigation":699,"ogImage":889,"path":958,"publishedAt":959,"readTime":889,"seo":960,"stem":961,"tags":962,"updatedAt":889,"__hash__":967},"blog\u002Fblog\u002Fakta-pro-is-now-available-on-monid.md","Introducing private markets\ndata for agents",{"type":8,"value":910,"toc":949},[911,915,923,926,930,936,943,946],[110,912,914],{"id":913},"what-is-aktapro","What is akta.pro",[11,916,917,922],{},[85,918,921],{"href":919,"rel":920},"https:\u002F\u002Fwww.akta.pro\u002F",[89],"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,924,925],{},"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.",[110,927,929],{"id":928},"what-is-monid","What is Monid",[11,931,932,935],{},[85,933,90],{"href":87,"rel":934},[89]," 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,937,938,939,108],{},"Today, Monid provides tools for social media scraping, web search, image and\nmusic generation, people data search, weather APIs, ",[85,940,942],{"href":143,"rel":941},[89],"and more",[944,945],"hr",{},[11,947,948],{},"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":217,"depth":217,"links":950},[951,952],{"id":913,"depth":217,"text":914},{"id":928,"depth":217,"text":929},"\u002Fimg\u002Fblog\u002Fakta-pro-is-now-available-on-monid-v2.png",{"label":955,"command":956},"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":908,"description":21},"blog\u002Fakta-pro-is-now-available-on-monid",[963,964,965,966],"agents","partner-tools","private-markets","data","yZnqIVof0gIpw9VH6HcE3rzit5OdTvPyC6k--T1kYa8",{"id":969,"title":970,"author":889,"body":971,"category":889,"cover":1025,"description":1026,"draft":892,"extension":893,"image":889,"launchCta":889,"meta":1027,"navigation":699,"ogImage":889,"path":1028,"publishedAt":1029,"readTime":889,"seo":1030,"stem":1031,"tags":1032,"updatedAt":889,"__hash__":1035},"blog\u002Fblog\u002Fyour-claude-code-can-now-make-phone-calls.md","Your Claude Code can now make phone calls",{"type":8,"value":972,"toc":1021},[973,976,985,989,997,1000,1002,1007,1013,1015,1018],[11,974,975],{"style":13},"Copy this line to your agent to make your first phone call.",[16,977,979],{"className":18,"code":978,"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,980,981],{"__ignoreMap":21},[26,982,983],{"class":28,"line":29},[26,984,978],{},[110,986,988],{"id":987},"what-is-saperly","What is Saperly",[11,990,991,996],{},[85,992,995],{"href":993,"rel":994},"https:\u002F\u002Fsaperly.com\u002F",[89],"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,998,999],{},"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.",[110,1001,929],{"id":928},[11,1003,1004,935],{},[85,1005,90],{"href":87,"rel":1006},[89],[11,1008,1009,1010,108],{},"Today, Monid provides tools for social media scraping, web search, image \u002F\nmusic \u002F 3d model generation, people data search, weather APIs, ",[85,1011,942],{"href":143,"rel":1012},[89],[944,1014],{},[11,1016,1017],{},"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.",[872,1019,1020],{},"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":217,"depth":217,"links":1022},[1023,1024],{"id":987,"depth":217,"text":988},{"id":928,"depth":217,"text":929},"\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":970,"description":1026},"blog\u002Fyour-claude-code-can-now-make-phone-calls",[963,964,1033,1034],"voice","phone","X0vLpqb1Vn9mIFY4XAQ16a67_nbOfiZV8NEdV12nu1A",{"id":1037,"title":1038,"author":889,"body":1039,"category":889,"cover":1091,"description":1092,"draft":892,"extension":893,"image":889,"launchCta":889,"meta":1093,"navigation":699,"ogImage":889,"path":1094,"publishedAt":1095,"readTime":889,"seo":1096,"stem":1097,"tags":1098,"updatedAt":889,"__hash__":1101},"blog\u002Fblog\u002Fintroducing-suzanne-chatgpt-for-3d-models.md","Introducing\nClaude for 3D models",{"type":8,"value":1040,"toc":1087},[1041,1044,1053,1057,1065,1068,1070,1075,1080,1082,1085],[11,1042,1043],{"style":13},"Copy this line to your agent to generate your 3D model.",[16,1045,1047],{"className":18,"code":1046,"language":20,"meta":21,"style":21},"set up https:\u002F\u002Fmonid.ai\u002FSKILL.md and create a 3D model for a rabbit\n",[23,1048,1049],{"__ignoreMap":21},[26,1050,1051],{"class":28,"line":29},[26,1052,1046],{},[110,1054,1056],{"id":1055},"what-is-suzanne","What is Suzanne",[11,1058,1059,1064],{},[85,1060,1063],{"href":1061,"rel":1062},"https:\u002F\u002Fwww.suzanne3d.com",[89],"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,1066,1067],{},"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.",[110,1069,929],{"id":928},[11,1071,1072,935],{},[85,1073,90],{"href":87,"rel":1074},[89],[11,1076,938,1077,108],{},[85,1078,942],{"href":143,"rel":1079},[89],[944,1081],{},[11,1083,1084],{},"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.",[872,1086,1020],{},{"title":21,"searchDepth":217,"depth":217,"links":1088},[1089,1090],{"id":1055,"depth":217,"text":1056},{"id":928,"depth":217,"text":929},"\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":1038,"description":1092},"blog\u002Fintroducing-suzanne-chatgpt-for-3d-models",[1099,963,1100],"3d","creative-tools","_S0uHM_dNVZKt_1ohYV4hn2Fm6SMxsDxzSezZf6lYFQ",{"id":1103,"title":1104,"author":889,"body":1105,"category":889,"cover":1164,"description":1165,"draft":892,"extension":893,"image":889,"launchCta":889,"meta":1166,"navigation":699,"ogImage":889,"path":1167,"publishedAt":1168,"readTime":889,"seo":1169,"stem":1170,"tags":1171,"updatedAt":889,"__hash__":1174},"blog\u002Fblog\u002Fminimax-is-now-available-on-monid.md","MiniMax is now available on Monid",{"type":8,"value":1106,"toc":1159},[1107,1110,1119,1123,1131,1135,1138,1140,1146,1152,1154,1157],[11,1108,1109],{"style":13},"Copy this line to your agent to create music.",[16,1111,1113],{"className":18,"code":1112,"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,1114,1115],{"__ignoreMap":21},[26,1116,1117],{"class":28,"line":29},[26,1118,1112],{},[110,1120,1122],{"id":1121},"minimax-music-26","MiniMax Music 2.6",[11,1124,1125,1130],{},[85,1126,1129],{"href":1127,"rel":1128},"https:\u002F\u002Fwww.minimax.io",[89],"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.",[110,1132,1134],{"id":1133},"minimax-text-to-image-image-01","MiniMax Text-to-Image image-01",[11,1136,1137],{},"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.",[110,1139,929],{"id":928},[11,1141,1142,1145],{},[85,1143,90],{"href":87,"rel":1144},[89]," 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,1147,1148,1149,108],{},"Today, Monid provides tools for social media scraping, web search, image and music generation, people data search, weather APIs, ",[85,1150,942],{"href":143,"rel":1151},[89],[944,1153],{},[11,1155,1156],{},"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.",[872,1158,1020],{},{"title":21,"searchDepth":217,"depth":217,"links":1160},[1161,1162,1163],{"id":1121,"depth":217,"text":1122},{"id":1133,"depth":217,"text":1134},{"id":928,"depth":217,"text":929},"\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":1104,"description":1165},"blog\u002Fminimax-is-now-available-on-monid",[963,1100,1172,1173],"image-generation","music-generation","OYTt4aBpVNeb9nNuUTkZhyl8yzm6h4v8c8tMHC9NmFg",1784441554182]