100 free credits. No credit card required.Start building
Logo
How-to guide

How to analyze a TikTok profile, its videos and their comments

Start with tiktok/profile for the account snapshot, call tiktok/profile/videos for its recent posts, then pass one video url to tiktok/post/comments. That is 3 API calls and about 3 credits for one run of the example, ending with the commenters' own words.

3 credits per run, across 3 API calls

The calls, in order

Each step is one request to the SocialCrawl API. Copy the curl, add your key and run it.

  1. Get TikTok user profile

    1 credit per call
    curl
    curl -H "x-api-key: YOUR_API_KEY" \
      "https://www.socialcrawl.dev/v1/tiktok/profile?handle=charlidamelio"
    Try this call on its endpoint page: Get TikTok user profile
  2. List TikTok user videos

    Each row's url feeds the comments call.

    1 credit per call
    curl
    curl -H "x-api-key: YOUR_API_KEY" \
      "https://www.socialcrawl.dev/v1/tiktok/profile/videos?handle=charlidamelio"
    Try this call on its endpoint page: List TikTok user videos
  3. List TikTok post comments

    1 credit per call
    curl
    curl -H "x-api-key: YOUR_API_KEY" \
      "https://www.socialcrawl.dev/v1/tiktok/post/comments?url={url}"
    Try this call on its endpoint page: List TikTok post comments

What comes back

A real response from tiktok/post/comments, captured from the SocialCrawl API, with long lists cut to two rows.

JSON
{
  "success": true,
  "platform": "tiktok",
  "endpoint": "/v1/tiktok/post/comments",
  "data": {
    "items": [
      {
        "comment": {
          "id": "7623828115408274207",
          "url": null,
          "parent_id": null,
          "post_id": "7623818255903329566",
          "text": "Sample comment text (redacted).",
          "author": {
            "username": "user_da42e5",
            "display_name": "user_a15de0",
            "avatar_url": "https://example.com/avatars/user_5d925d.png",
            "verified": false
          },
          "engagement": {
            "likes": 17771,
            "replies": 55
          },
          "flags": {
            "pinned": false,
            "deleted": false
          },
          "published_at": "2026-04-01T16:27:52.000Z",
          "ext": {
            "published_at_epoch": 1775060872
          }
        },
        "computed": {
          "language": "en",
          "labels": {
            "sentiment": {
              "level": 3,
              "score_0_1": 0.76,
              "confidence": 0.78
            },
            "question": {
              "p": 0.03
            },
            "purchase_intent": {
              "p": 0.03
            },
            "complaint": {
              "p": 0.01
            }
          }
        }
      },
      {
        "comment": {
          "id": "7623869779602457374",
          "url": null,
          "parent_id": null,
          "post_id": "7623818255903329566",
          "text": "Sample comment text (redacted).",
          "author": {
            "username": "user_d39d34",
            "display_name": "user_bea79b",
            "avatar_url": "https://example.com/avatars/user_56ecda.png",
            "verified": false
          },
          "engagement": {
            "likes": 13666,
            "replies": 25
          },
          "flags": {
            "pinned": false,
            "deleted": false
          },
          "published_at": "2026-04-01T19:08:53.000Z",
          "ext": {
            "published_at_epoch": 1775070533
          }
        },
        "computed": {
          "language": "en",
          "labels": {
            "sentiment": {
              "level": 2,
              "score_0_1": 0.43,
              "confidence": 0.39
            },
            "question": {
              "p": 0.05
            },
            "purchase_intent": {
              "p": 0.03
            },
            "complaint": {
              "p": 0.02
            }
          }
        }
      }
    ],
    "next_cursor": "sc2.eyJzIjoiaCIsImMiOiJzYzEuZXlKaklqb2lOVEFpTENKeklqcGJJamMyTWpNNE1qZ3hNVFUwTURneU56UXlNRGNpTENJM05qSXpPRFk1TnpjNU5qQXlORFUzTXpjMElpd2lOell5TXprek5UQXlNRE14T1RRNU1EZzBOeUlzSWpjMk1qTTROelkxTnpreE5qa3lOekkyTURjaUxDSTNOakl6T0RnMU9ERTRORFE1TXpFME5UYzBJaXdpTnpZeU16ZzJOVGt6T1RNek1qQTNNakl3TlNJc0lqYzJNak00TWpJeE5EWXpOalV3TkRjMU9ETWlMQ0kzTmpJek9ESTNPREE0TVRJMU56WTBNelkxSWl3aU56WXlNemszTURJeE9ERXlOalU1TURjMU1DSXNJamMyTWpReU5UTXhNRFF4TnpVM05ETTNOelVpTENJM05qSXpPREk1TkRZMk56azFPVGd6TmpJNUlpd2lOell5TXpnek5EazRNelk1TlRBMU56WTNPQ0lzSWpjMk1qTTRORGszT0RNeU1URTNOekEyTXpnaUxDSTNOakk1TlRFNE1qa3hNelV4TURFeU1URXdJaXdpTnpZeU16Z3hPVFV5TlRrMU1UazVOalk0TlNJc0lqYzJNalF3TVRFd01URTVNelExTmpreU5EWWlMQ0kzTmpJNE56RTNNelUzT1RrMk56VXpOamM0SWl3aU56WXlNemd5T0RBeE1ERTBNREF5TlRZek1TSXNJamMyTWpNNE1qTXhOVFEwT1RBME1qWXhNallpTENJM05qSXpPREU1TkRjeE9EWTFOVEk1TVRFNElpd2lOell5TXprME9UTXlOalV4TVRJMk1EUXpNQ0lzSWpjMk1qTTVNalUyTVRJeU1ERTBNamMzTWpVaUxDSTNOakl6T0RJeU9EazJPREUzTmpZNE9EazBJaXdpTnpZeU5ERTVNVGt6TmpVMU5qRTFOVFkzT1NJc0lqYzJNak00TWpnNU56VTJOekk0T0RZd05EY2lMQ0kzTmpJek9ETTVNVFV4TnpBME1EUTRNems0SWl3aU56WXlNemc0TXpjek9ERTNPRGN3TURBMk15SXNJamMyTWpRek5EYzJPVGd6TURreE1qQTNPVGdpTENJM05qSTBOekk0TVRZM05UZzRNalkyTnpneklpd2lOell5TkRVeE56SXpNelF5TkRBM016VXdNeUlzSWpjMk1qTTRNakEyTWpFd05qYzRORFkwTXpFaUxDSTNOakl6T0RRNU5UQTJNVGd5T1RBMk5qTTRJaXdpTnpZeU16azBNek13T1RJNE56VTRPRFl6T1NJc0lqYzJNak00TXpNMk16QXdOVEF4TkRBNU5ERWlMQ0kzTmpJek9UQXlOamcwTnpZNE5UWTRNRGM0SWl3aU56WXlNemd5Tmpnek9UQTVNRE00TVRVNE1pSXNJamMyTWpRek5qQTBNalUxTlRFMk5UazRNRGNpTENJM05qSTBNREF3TXpJMk56WXhNems1TURjeElpd2lOell5TkRNeU1EUXdOemszTXpNMk5EUTVOQ0lzSWpjMk1qUXpPRGs1TXpnNE1UUXhOVGMxT1RraUxDSTNOakl6T0RNd01EQTFNalkxTXpZM09ESXhJaXdpTnpZeU16ZzNPREkzTkRBd056QTRPVGsxTUNJc0lqYzJNalV6TmpneU5UUXlNelU1TlRFNU1ESWlMQ0kzTmpJek9UZ3lOVE0wTmpjNE56STFOREEzSWl3aU56WXlOREEwTXpJMU5UVXlPVEU1TkRJMU15SXNJamMyTWpNNE56UXlNVEl3T0RneU9ETTVNVGNpTENJM05qSXpPREkyTlRNMU5EQXhNVEV5TXpVeElpd2lOell5TXpnME1EQTVORFk0TlRBNE5qUTNPQ0lzSWpjMk1qTTROREl5T1RZNU1EQXhNRGt3T0RjaVhYMCJ9",
    "total": 2196,
    "labels": {
      "presets": [
        "sentiment",
        "question"
      ],
      "rows": 49,
      "labelled": 49,
      "cached": 49,
      "skipped": 0,
      "unjudged": 0,
      "dropped": 0,
      "dropped_ids": [],
      "extra_credits": 0,
      "methodology_version": "labels/1",
      "mode": "default",
      "status": "complete",
      "pending": 0,
      "pending_ids": []
    },
    "label_share": {
      "policy_version": "share/1",
      "presets": {
        "question": {
          "n": 49,
          "counted": 4,
          "abstained": 6,
          "share": 0.093,
          "low": 0.0425,
          "high": 0.1918,
          "receipts": [
            {
              "id": "7624253104175743775",
              "text": "Sample comment text (redacted)."
            },
            {
              "id": "7623828010140025631",
              "text": "Sample comment text (redacted)."
            }
          ],
          "policy_version": "share/1",
          "too_few": false,
          "at_cut": 8,
          "nulls": 0,
          "low_confidence": 6
        },
        "purchase_intent": {
          "n": 49,
          "counted": 0,
          "abstained": 1,
          "share": 0,
          "low": 0,
          "high": 0.0534,
          "receipts": [],
          "policy_version": "share/1",
          "too_few": false,
          "at_cut": 0,
          "nulls": 0,
          "low_confidence": 1
        },
        "complaint": {
          "n": 49,
          "counted": 0,
          "abstained": 0,
          "share": 0,
          "low": 0,
          "high": 0.0523,
          "receipts": [],
          "policy_version": "share/1",
          "too_few": false,
          "at_cut": 0,
          "nulls": 0,
          "low_confidence": 0
        },
        "sentiment": {
          "positive": {
            "n": 49,
            "counted": 36,
            "abstained": 6,
            "share": 0.8372,
            "low": 0.7252,
            "high": 0.9093,
            "receipts": [
              {
                "id": "7623828115408274207",
                "text": "Sample comment text (redacted)."
              },
              {
                "id": "7623876579169272607",
                "text": "Sample comment text (redacted)."
              }
            ],
            "policy_version": "share/1",
            "too_few": false,
            "at_cut": 36,
            "nulls": 0,
            "low_confidence": 6
          },
          "neutral": {
            "n": 49,
            "counted": 7,
            "abstained": 6,
            "share": 0.1628,
            "low": 0.0907,
            "high": 0.2748,
            "receipts": [
              {
                "id": "7623935020319490847",
                "text": "Sample comment text (redacted)."
              },
              {
                "id": "7623865939332072205",
                "text": "Sample comment text (redacted)."
              }
            ],
            "policy_version": "share/1",
            "too_few": false,
            "at_cut": 7,
            "nulls": 0,
            "low_confidence": 6
          },
          "negative": {
            "n": 49,
            "counted": 0,
            "abstained": 6,
            "share": 0,
            "low": 0,
            "high": 0.0592,
            "receipts": [],
            "policy_version": "share/1",
            "too_few": false,
            "at_cut": 0,
            "nulls": 0,
            "low_confidence": 6
          }
        }
      }
    },
    "comment_language": {
      "policy_version": "share/1",
      "n": 49,
      "abstained": 0,
      "judged_by": {
        "script": 0,
        "choice": 49
      },
      "shares": {
        "en": {
          "n": 49,
          "counted": 49,
          "abstained": 0,
          "share": 1,
          "low": 0.9477,
          "high": 1,
          "receipts": [
            {
              "id": "7623828115408274207",
              "text": "Sample comment text (redacted)."
            },
            {
              "id": "7623869779602457374",
              "text": "Sample comment text (redacted)."
            }
          ],
          "policy_version": "share/1",
          "too_few": false
        }
      }
    },
    "comment_recency": {
      "policy_version": "d09-1",
      "n": 49,
      "counted": 49,
      "abstained": 0,
      "share_last_24h": 0,
      "share_later_half": null,
      "too_few": false,
      "stage": "unknown",
      "order": "default",
      "recent_share_is_floor": true,
      "receipts": []
    },
    "dropped": 0
  },
  "credits_used": 1,
  "request_id": "req_example000000",
  "cached": false,
  "pagination": {
    "next_cursor": "sc.eyJ2IjoyLCJjIjoic2MyLmV5SnpJam9pYUNJc0ltTWlPaUp6WXpFdVpYbEtha2xxYjJsT1ZFRnBURU5LZWtscWNHSkphbU15VFdwTk5FMXFaM2hOVkZVd1RVUm5lVTU2VVhsTlJHTnBURU5KTTA1cVNYcFBSRmsxVG5wak5VNXFRWGxPUkZVelRYcGpNRWxwZDJsT2VsbDVUWHByZWs1VVFYbE5SRTE0VDFSUk5VMUVaekJPZVVselNXcGpNazFxVFRST2Vsa3hUbnByZUU1cWEzbE9la2t5VFVSamFVeERTVE5PYWtsNlQwUm5NVTlFUlRST1JGRTFUWHBGTUU1VVl6QkphWGRwVG5wWmVVMTZaekpPVkd0NlQxUk5lazFxUVROTmFrbDNUbE5KYzBscVl6Sk5hazAwVFdwSmVFNUVXWHBPYWxWM1RrUmpNVTlFVFdsTVEwa3pUbXBKZWs5RVNUTlBSRUUwVFZSSk1VNTZXVEJOZWxreFNXbDNhVTU2V1hsTmVtc3pUVVJKZUU5RVJYbE9hbFUxVFVSak1VMURTWE5KYW1NeVRXcFJlVTVVVFhoTlJGRjRUbnBWTTA1RVRUTk9lbFZwVEVOSk0wNXFTWHBQUkVrMVRrUlpNazU2YXpGUFZHZDZUbXBKTlVscGQybE9lbGw1VFhwbmVrNUVhelJOZWxrMVRsUkJNVTU2V1ROUFEwbHpTV3BqTWsxcVRUUk9SR3N6VDBSTmVVMVVSVE5PZWtFeVRYcG5hVXhEU1ROT2FrazFUbFJGTkUxcWEzaE5lbFY0VFVSRmVVMVVSWGRKYVhkcFRucFplVTE2WjNoUFZGVjVUbFJyTVUxVWF6Vk9hbGswVGxOSmMwbHFZekpOYWxGM1RWUkZkMDFVUlRWTmVsRXhUbXByZVU1RVdXbE1RMGt6VG1wSk5FNTZSVE5OZWxVelQxUnJNazU2VlhwT2FtTTBTV2wzYVU1NldYbE5lbWQ1VDBSQmVFMUVSVEJOUkVGNVRsUlplazFUU1hOSmFtTXlUV3BOTkUxcVRYaE9WRkV3VDFSQk1FMXFXWGhOYWxscFRFTkpNMDVxU1hwUFJFVTFUa1JqZUU5RVdURk9WRWsxVFZSRk5FbHBkMmxPZWxsNVRYcHJNRTlVVFhsT2FsVjRUVlJKTWsxRVVYcE5RMGx6U1dwak1rMXFUVFZOYWxVeVRWUkplVTFFUlRCTmFtTXpUV3BWYVV4RFNUTk9ha2w2VDBSSmVVOUVhekpQUkVVelRtcFpORTlFYXpCSmFYZHBUbnBaZVU1RVJUVk5WR3Q2VG1wVk1VNXFSVEZPVkZrelQxTkpjMGxxWXpKTmFrMDBUV3BuTlU1NlZUSk9la2swVDBSWmQwNUVZMmxNUTBrelRtcEplazlFVFRWTlZGVjRUbnBCTUUxRVVUUk5lbXMwU1dsM2FVNTZXWGxOZW1jMFRYcGplazlFUlROUFJHTjNUVVJCTWsxNVNYTkphbU15VFdwUmVrNUVZekpQVkdkNlRVUnJlRTFxUVROUFZHZHBURU5KTTA1cVNUQk9la2swVFZSWk0wNVVaelJOYWxreVRucG5la2xwZDJsT2VsbDVUa1JWZUU1NlNYcE5lbEY1VGtSQk0wMTZWWGROZVVselNXcGpNazFxVFRSTmFrRXlUV3BGZDA1cVl6Uk9SRmt3VFhwRmFVeERTVE5PYWtsNlQwUlJOVTVVUVRKTlZHZDVUMVJCTWs1cVRUUkphWGRwVG5wWmVVMTZhekJOZWsxM1QxUkpORTU2VlRSUFJGbDZUMU5KYzBscVl6Sk5hazAwVFhwTk1rMTZRWGRPVkVGNFRrUkJOVTVFUldsTVEwa3pUbXBKZWs5VVFYbE9hbWN3VG5wWk5FNVVXVFJOUkdNMFNXbDNhVTU2V1hsTmVtZDVUbXBuZWs5VVFUVk5SRTAwVFZSVk5FMXBTWE5KYW1NeVRXcFJlazVxUVRCTmFsVXhUbFJGTWs1VWF6Uk5SR05wVEVOSk0wNXFTVEJOUkVGM1RYcEpNazU2V1hoTmVtczFUVVJqZUVscGQybE9lbGw1VGtSTmVVMUVVWGRPZW1zelRYcE5NazVFVVRWT1EwbHpTV3BqTWsxcVVYcFBSR3MxVFhwbk5FMVVVWGhPVkdNeFQxUnJhVXhEU1ROT2FrbDZUMFJOZDAxRVFURk5hbGt4VFhwWk0wOUVTWGhKYVhkcFRucFplVTE2WnpOUFJFa3pUa1JCZDA1NlFUUlBWR3N4VFVOSmMwbHFZekpOYWxWNlRtcG5lVTVVVVhsTmVsVTFUbFJGTlUxRVNXbE1RMGt6VG1wSmVrOVVaM2xPVkUwd1RtcGpORTU2U1RGT1JFRXpTV2wzYVU1NldYbE9SRUV3VFhwSk1VNVVWWGxQVkVVMVRrUkpNVTE1U1hOSmFtTXlUV3BOTkU1NlVYbE5WRWwzVDBSbmVVOUVUVFZOVkdOcFRFTkpNMDVxU1hwUFJFa3lUbFJOTVU1RVFYaE5WRVY1VFhwVmVFbHBkMmxPZWxsNVRYcG5NRTFFUVRWT1JGazBUbFJCTkU1cVVUTlBRMGx6U1dwak1rMXFUVFJPUkVsNVQxUlpOVTFFUVhoTlJHdDNUMFJqYVZoWU1DSjkiLCJlIjoidGlrdG9rL3Bvc3QvY29tbWVudHMiLCJwIjoiY3Vyc29yIn0",
    "has_more": true,
    "page_size": 49
  },
  "credits_remaining": 9999,
  "source": "captured",
  "captured_at": "2026-10-02T15:40:17.829Z",
  "redacted": true
}

Hand this job to your coding agent

Paste this prompt into Claude Code, Cursor or any agent that can make HTTP requests. It names every endpoint and parameter the job needs.

Prompt
Use the SocialCrawl API for this job: Get a creator's profile, their recent posts, and the comments on one of those posts.
Base URL: https://www.socialcrawl.dev. Send the API key in the x-api-key header (an Authorization: Bearer header also works). Values in braces are placeholders to fill.
1. GET /v1/tiktok/profile?handle=charlidamelio
2. GET /v1/tiktok/profile/videos?handle=charlidamelio (Each row's url feeds the comments call.)
3. GET /v1/tiktok/post/comments?url={url}
Every response is JSON with data, credits_used and request_id. The full endpoint reference is at https://www.socialcrawl.dev/llms.txt.
FAQ

Have a question? We got answers

Find answers to frequently asked questions about SocialCrawl's API, pricing, and capabilities.

Contact us
What does the profile call return?
It returns the display name, bio, verification, follower count, following, video count and likes, plus the user id and a business category when one is set. The follower count sits on author.followers.
What do I get for each video?
Each row has the caption, view, like, comment and share counts, a thumbnail and the video url. Rows also carry a computed block with an engagement rate and an estimated reach, which lets you compare videos from one account.
How do I get older videos?
Pass the next_cursor from the response into the next request. Videos come back in the source order, so sort_by does not reorder them, and the cursor is how you page back through the account's history.
How do the video and comment calls connect?
Each video row includes its url, and that url is the input to tiktok/post/comments. Copy it into the third call and you read the comment section for that exact post.
Do I need to run all three calls every time?
You do not. Each call stands on its own, so run only the profile call for a quick snapshot, or add the videos call when you want to see what the account posted. The comments call is the only one that needs a video url.
How much does one run cost?
One run of the example above costs 3 credits across 3 API calls. Every new account gets 100 free credits, credits for failed or empty calls are refunded automatically, and there is no subscription.

Ask AI about SocialCrawl