{
  "openapi": "3.0.1",
  "info": {
    "title": "TikTok Scraper: Shop, Emails & Influencer Leads",
    "description": "The most advanced TikTok Scraper on Apify. Bypass captchas to instantly extract TikTok videos, hashtags, profiles, and trending TikTok Shop products. Features a built-in B2B engine to automatically scrape verified influencer emails, Instagram handles, and calculate Virality & Engagement metrics.",
    "version": "2.0",
    "x-build-id": "eGR5yGLoY0cbZsKRe"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/intelscrape~tiktok-scraper-shop-emails-influencer-leads/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-intelscrape-tiktok-scraper-shop-emails-influencer-leads",
        "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/intelscrape~tiktok-scraper-shop-emails-influencer-leads/runs": {
      "post": {
        "operationId": "runs-sync-intelscrape-tiktok-scraper-shop-emails-influencer-leads",
        "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/intelscrape~tiktok-scraper-shop-emails-influencer-leads/run-sync": {
      "post": {
        "operationId": "run-sync-intelscrape-tiktok-scraper-shop-emails-influencer-leads",
        "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": {
          "hashtags": {
            "title": "Videos with this hashtag",
            "type": "array",
            "description": "💡 TIP: For product research, use tags like 'tiktokmademebuyit', 'amazonfinds', or 'viralproducts'. The scraper will extract TikTok Shop anchors automatically.\nJust add one or more TikTok hashtags and the scraper will collect data about videos containing this hashtag.",
            "items": {
              "type": "string"
            }
          },
          "resultsPerPage": {
            "title": "💯 Number of videos per hashtag, profile or search",
            "minimum": 1,
            "maximum": 100000,
            "type": "integer",
            "description": "Add the number of TikToks you want to scrape per hashtag, profile, or search query. This field is applicable to #️⃣ Hashtags, 😎 Profiles, and 🔍 Search.",
            "default": 100
          },
          "profiles": {
            "title": "Usernames",
            "type": "array",
            "description": "Add one or multiple TikTok usernames or user IDs you want to scrape. You can enter the usernames one by one, or use the Bulk edit section to add a prepared list.",
            "items": {
              "type": "string"
            }
          },
          "scrapeReposts": {
            "title": "Scrape reposts",
            "type": "boolean",
            "description": "Tick to scrape reposted videos from user profiles in addition to their own videos. (Note: May require specific API conditions)",
            "default": false
          },
          "profileSorting": {
            "title": "Profile video sorting",
            "enum": [
              "latest",
              "oldest",
              "popular"
            ],
            "type": "string",
            "description": "Select Latest to scrape the most recent videos first, Oldest — the oldest videos first, Popular — the most popular videos first. Date filters only work with Latest and Oldest.",
            "default": "latest"
          },
          "excludePinnedPosts": {
            "title": "Exclude pinned posts",
            "type": "boolean",
            "description": "Tick to exclude pinned posts from profiles. Pinned posts are usually the first videos on a profile's page.",
            "default": false
          },
          "searchQueries": {
            "title": "Search queries",
            "type": "array",
            "description": "Your keyword will apply to both videos and profiles. Use the Search sorting field below to specify whether you want your search to apply to top content, videos or users.\nAs for your query's format, you can use any query that works on TikTok.",
            "items": {
              "type": "string"
            }
          },
          "searchSection": {
            "title": "Search sorting",
            "enum": [
              "",
              "video",
              "user"
            ],
            "type": "string",
            "description": "By default, this scraper will sort the search results by whatever shows up in the Top section of TikTok search. But you can narrow it down: if you want to apply your search query to just videos, use Video, just profiles — Profile.",
            "default": ""
          },
          "maxProfilesPerQuery": {
            "title": "Max profiles per search query",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "Only applies to profile searches. In this case ignore the 💯 Number of videos section and choose the number of profiles you want to scrape here.",
            "default": 10
          },
          "videoSearchSorting": {
            "title": "Video search sorting",
            "enum": [
              "MOST_RELEVANT",
              "MOST_LIKED",
              "NEWEST"
            ],
            "type": "string",
            "description": "Select how you want the search results to be sorted when searching for videos. Only valid with Video search section.",
            "default": "MOST_RELEVANT"
          },
          "videoSearchDateFilter": {
            "title": "Video search date filter",
            "enum": [
              "ALL_TIME",
              "LAST_DAY",
              "THIS_WEEK",
              "THIS_MONTH",
              "LAST_THREE_MONTHS",
              "LAST_SIX_MONTHS"
            ],
            "type": "string",
            "description": "Select a date range in which to search for videos. Only valid with Video search section.",
            "default": "ALL_TIME"
          },
          "postURLs": {
            "title": "Video URLs",
            "type": "array",
            "description": "Add the URLs of TikTok videos you want to scrape. You can paste video URLs one by one, or use the Bulk edit section to add a prepared list.",
            "items": {
              "type": "string"
            }
          },
          "scrapeRelatedVideos": {
            "title": "Scrape related videos",
            "type": "boolean",
            "description": "Tick to scrape related videos for the post URLs you provide. The maximum number of scraped related videos is set by the resultsPerPage count. Note that this only works for direct video URLs from the postURLs field.",
            "default": false
          },
          "shouldDownloadVideos": {
            "title": "Download TikTok videos",
            "type": "boolean",
            "description": "This is a charged add-on. Tick to download TikTok videos to the key-value store.",
            "default": false
          },
          "shouldDownloadCovers": {
            "title": "Download cover images (thumbnails)",
            "type": "boolean",
            "description": "Tick to download TikTok video cover images (thumbnails).",
            "default": false
          },
          "shouldDownloadSlideshowImages": {
            "title": "Download slideshow images",
            "type": "boolean",
            "description": "Tick to download TikTok slideshow images.",
            "default": false
          },
          "shouldDownloadAvatars": {
            "title": "Download profile avatars",
            "type": "boolean",
            "description": "Tick to download authors' profile pictures.",
            "default": false
          },
          "shouldDownloadMusicCovers": {
            "title": "Download music covers",
            "type": "boolean",
            "description": "Tick to download cover images of sounds used in posts.",
            "default": false
          },
          "shouldDownloadSubtitles": {
            "title": "Download subtitles",
            "type": "boolean",
            "description": "Download subtitles provided by TikTok for videos that have them.",
            "default": false
          },
          "commentsPerPost": {
            "title": "Comments per post",
            "minimum": 0,
            "maximum": 1000,
            "type": "integer",
            "description": "The number of comments extracted from every result. Due to TikTok API limitations, the actual number of scraped comments may differ, especially for posts with thousands of comments. The link to the dataset will be under a field commentsDatasetURL in the output.",
            "default": 0
          },
          "oldestPostDate": {
            "title": "Oldest post date",
            "type": "string",
            "description": "Only videos uploaded after or on this date will be scraped. Format: YYYY-MM-DD. Alternatively, specify how old the scraped videos should be in days. Putting 1 will get you only today's posts, 2 — yesterday's and today's, and so on."
          },
          "newestPostDate": {
            "title": "Newest post date",
            "type": "string",
            "description": "Only videos uploaded before or on this date will be scraped. Format: YYYY-MM-DD."
          },
          "minLikes": {
            "title": "Minimum likes (hearts)",
            "minimum": 0,
            "type": "integer",
            "description": "Only scrape videos with no less hearts than the number you add. Doesn't work with date filters."
          },
          "maxLikes": {
            "title": "Maximum likes (hearts)",
            "minimum": 0,
            "type": "integer",
            "description": "Only scrape videos with less hearts than the number you add. Doesn't work with date filters."
          },
          "proxyCountryCode": {
            "title": "Proxy country",
            "enum": [
              "None",
              "US",
              "GB",
              "DE",
              "FR",
              "ES",
              "IT",
              "NL",
              "PL",
              "JP",
              "KR",
              "BR",
              "MX",
              "IN",
              "AU",
              "CA",
              "TH",
              "VN",
              "ID",
              "PH",
              "MY",
              "SG",
              "AE",
              "SA",
              "TR",
              "ZA",
              "NG",
              "EG"
            ],
            "type": "string",
            "description": "This is an additional charged filter. By selecting a proxy country, the Actor will use residential proxy group to get country-specific data. Note that using proxies might slow down your runs.",
            "default": "None"
          },
          "extractContactInfo": {
            "title": "Extract Emails & Socials",
            "type": "boolean",
            "description": "💡 TIP: Use this to build influencer outreach lists. Automatically parses user bios to extract verified emails and Instagram handles.",
            "default": true
          },
          "extractShopAnchors": {
            "title": "Extract TikTok Shop Links",
            "type": "boolean",
            "description": "💡 TIP: This is your money-maker. Extracts attached TikTok Shop products, app links, and other external anchors to find winning products.",
            "default": true
          },
          "calculateAnalytics": {
            "title": "Calculate AI-Ready Metrics",
            "type": "boolean",
            "description": "Automatically calculate Engagement Rate and Virality Score for every video so you don't have to use Excel.",
            "default": true
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}