{
  "openapi": "3.0.1",
  "info": {
    "title": "TikTok Comments Scraper With Commenter Profile & Contacts",
    "description": "TikTok Comments Scraper: Extract comments with commenter profiles, usernames, bios, follower counts, timestamps, and available public contact details. Analyze audience engagement, identify potential leads, and build datasets for creator research, marketing, and social media intelligence.",
    "version": "0.1",
    "x-build-id": "aXdZPypdVd9sVt9k7"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/api-empire~tiktok-comments-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-api-empire-tiktok-comments-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/api-empire~tiktok-comments-scraper/runs": {
      "post": {
        "operationId": "runs-sync-api-empire-tiktok-comments-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/api-empire~tiktok-comments-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-api-empire-tiktok-comments-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "videoLinks": {
            "title": "🔗 TikTok video links",
            "type": "array",
            "description": "Full video URLs, or short vm.tiktok.com / vt.tiktok.com links. Example: https://www.tiktok.com/@mrbeast/video/7578547467189374239",
            "items": {
              "type": "string"
            }
          },
          "maxCommentsPerVideo": {
            "title": "💬 Comments to pull per video",
            "minimum": 1,
            "type": "integer",
            "description": "How many top-level comments to collect from each video. TikTok returns roughly 47 per page, so the real total can land slightly under a round request. Rows are deduplicated by comment ID, so you are never billed twice for the same comment. Default is 20.",
            "default": 20
          },
          "repliesPerComment": {
            "title": "↩️ Replies to pull per comment",
            "minimum": 0,
            "type": "integer",
            "description": "Replies are paginated properly here, so values above 20 genuinely work (threads page 20 at a time until your limit is met). Reply authors get enriched too. Set 0 to skip replies entirely. Default is 0.",
            "default": 0
          },
          "enrichCommenterProfiles": {
            "title": "👤 Look up each commenter's profile",
            "type": "boolean",
            "description": "Adds followerCount, followingCount, videoCount, heartCount, verified, region, nickname and bio to every comment row. Turn this off for a raw comments-only run. Default is on.",
            "default": true
          },
          "extractContactDetails": {
            "title": "📇 Pull emails, phones and links out of the bio",
            "type": "boolean",
            "description": "Parses the commenter's bio into authorEmail, authorPhones, authorLinks and hasContactInfo. Phone numbers are validated (9-15 digits, international prefix or 10+ digits) so bios full of stray numbers do not produce fake results. Requires profile lookup to be on. Default is on.",
            "default": true
          },
          "profileFetchConcurrency": {
            "title": "⚡ Parallel profile lookups",
            "minimum": 1,
            "maximum": 16,
            "type": "integer",
            "description": "How many commenter profiles to fetch at once. Lower this if you see blocked profile fetches in the log. Example: 6 is a safe default, 12 is faster on small runs. Default is 6.",
            "default": 6
          },
          "minFollowers": {
            "title": "📊 Minimum follower count",
            "minimum": 0,
            "type": "integer",
            "description": "Keep only commenters with at least this many followers — separates individual viewers from resellers and micro-creators. Example: 1000 keeps only commenters with a real audience. Set 0 to keep everyone. Default is 0.",
            "default": 0
          },
          "onlyCommentersWithContacts": {
            "title": "📧 Keep only commenters with a contact detail",
            "type": "boolean",
            "description": "Drops every row whose bio contained no email, phone or link. Only applies when profile lookup and contact extraction are both on. Default is off.",
            "default": false
          },
          "creatorUsernames": {
            "title": "🧑 Creator usernames",
            "type": "array",
            "description": "TikTok handles, with or without the @. Example: mrbeast",
            "items": {
              "type": "string"
            }
          },
          "videosPerCreator": {
            "title": "📺 Videos per creator",
            "minimum": 1,
            "maximum": 1000000,
            "type": "integer",
            "description": "How many videos to take from each creator before comment scraping starts. Default is 10.",
            "default": 10
          },
          "creatorTabs": {
            "title": "📂 Which creator tab to read",
            "minItems": 1,
            "uniqueItems": true,
            "type": "array",
            "description": "Videos is the creator's own uploads. Reposts is the videos they reshared, when that tab is public.",
            "items": {
              "type": "string",
              "enum": [
                "videos",
                "reposts"
              ],
              "enumTitles": [
                "Videos — the creator's own uploads",
                "Reposts — videos they reshared"
              ]
            },
            "default": [
              "videos"
            ]
          },
          "videoOrder": {
            "title": "🔀 Pick videos by",
            "enum": [
              "latest",
              "popular",
              "oldest"
            ],
            "type": "string",
            "description": "Newest first, oldest first, or most-liked. Date filters apply to Newest and Oldest only.",
            "default": "latest"
          },
          "videosPostedAfter": {
            "title": "📅 Only videos posted after",
            "pattern": "^(\\d{4})-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$|^(\\d+)\\s*(day|week|month|year)s?$",
            "type": "string",
            "description": "Absolute date (2026-01-31) or relative (5 days, 2 weeks, 1 month)."
          },
          "videosPostedBefore": {
            "title": "📅 Only videos posted before",
            "pattern": "^(\\d{4})-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$|^(\\d+)\\s*(day|week|month|year)s?$",
            "type": "string",
            "description": "Absolute date (2026-01-31) or relative (5 days, 2 weeks, 1 month)."
          },
          "skipPinnedVideos": {
            "title": "📌 Skip pinned videos",
            "type": "boolean",
            "description": "Pinned videos sit at the top of a creator's grid and are often old. Tick to leave them out.",
            "default": false
          },
          "proxyConfiguration": {
            "title": "🌐 Proxy configuration",
            "type": "object",
            "description": "Optional. Leave as-is unless you see blocked requests in the log."
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}