{
  "openapi": "3.0.1",
  "info": {
    "title": "Tiktok Trending Hashtags Analytics Scraper With Trend Creators",
    "description": "TikTok Trending Hashtags Analytics Scraper tracks rising TikTok hashtags and extracts metrics like popularity, usage volume, top videos, creators, sounds, and engagement trends. Perfect for discovering viral topics, planning content, analyzing trends, and automating TikTok hashtag insights",
    "version": "0.1",
    "x-build-id": "GDfa1gB3Uow7zZdol"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/simpleapi~tiktok-trending-hashtags-analytics-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-simpleapi-tiktok-trending-hashtags-analytics-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/simpleapi~tiktok-trending-hashtags-analytics-scraper/runs": {
      "post": {
        "operationId": "runs-sync-simpleapi-tiktok-trending-hashtags-analytics-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/simpleapi~tiktok-trending-hashtags-analytics-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-simpleapi-tiktok-trending-hashtags-analytics-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": {
          "result_type": {
            "title": "🎛️ Result type",
            "enum": [
              "top100",
              "top100_with_analytics",
              "analytics"
            ],
            "type": "string",
            "description": "top100 = the ranked board only. top100_with_analytics = the board plus the per-hashtag analytics blob (period views, posts, daily popularity curve, the creators TikTok credits). analytics = the same analytics restricted to the hashtag names you list in 'Custom hashtag list'.",
            "default": "top100_with_analytics"
          },
          "country": {
            "title": "🌍 Country / region",
            "enum": [
              "ALL",
              "AL",
              "AR",
              "AT",
              "AU",
              "BD",
              "BE",
              "BG",
              "BH",
              "BR",
              "BY",
              "CA",
              "CH",
              "CL",
              "CN",
              "CO",
              "CZ",
              "DE",
              "DK",
              "EE",
              "EG",
              "ES",
              "FI",
              "FR",
              "GB",
              "GR",
              "HK",
              "HR",
              "HU",
              "ID",
              "IE",
              "IL",
              "IN",
              "IQ",
              "IS",
              "IT",
              "JO",
              "JP",
              "KH",
              "KR",
              "KW",
              "KZ",
              "LB",
              "LT",
              "LU",
              "LV",
              "MA",
              "MN",
              "MO",
              "MX",
              "MY",
              "NG",
              "NL",
              "NO",
              "NZ",
              "OM",
              "PE",
              "PH",
              "PK",
              "PL",
              "PT",
              "QA",
              "RO",
              "SA",
              "SE",
              "SG",
              "SK",
              "TH",
              "TR",
              "TW",
              "UA",
              "AE",
              "US",
              "UZ",
              "VN",
              "ZA"
            ],
            "type": "string",
            "description": "The country board to read. TikTok publishes a real board for 27 countries: US, FR, DE, IT, ES, GB, AR, AU, BR, CA, CO, EG, ID, IL, JP, KR, MY, MX, PH, SA, SG, ZA, TW, TH, TR, AE, VN. Any other value (including ALL) is accepted, silently served the US board by TikTok, and flagged on every row with countrySupported=false and countryFallbackApplied=true — this actor never relabels US data with another flag.",
            "default": "US"
          },
          "top100_period": {
            "title": "🏆 Ranking window (days)",
            "enum": [
              "7",
              "30",
              "90",
              "120"
            ],
            "type": "string",
            "description": "TikTok's real ranking windows are 7, 30 and 90 days — 90 is new here and returns a genuinely different set of hashtags and creators. 120 is still accepted for compatibility, but TikTok silently serves the 7-day board for it, so rows carry periodAliasApplied=true instead of pretending.",
            "default": "7"
          },
          "analytics_period": {
            "title": "📊 Analytics period (accepted, not used upstream)",
            "enum": [
              "7",
              "30",
              "120",
              "365",
              "1095"
            ],
            "type": "string",
            "description": "Kept so existing run configurations keep working. TikTok's trends surface has no separate analytics window — the ranking window above is the only one that exists. Whatever you pick is echoed on every row as analyticsPeriodRequested with analyticsPeriodIgnored=true.",
            "default": "30"
          },
          "top100_industry": {
            "title": "🏷️ Industry filter (applied client-side)",
            "enum": [
              "",
              "Apparel & Accessories",
              "Baby, Kids & Maternity",
              "Beauty & Personal Care",
              "Business Services",
              "Education",
              "Financial Services",
              "Food & Beverage",
              "Games",
              "Healthcare",
              "Home Improvement",
              "Household Products",
              "Life Services",
              "News & Entertainment",
              "Pets",
              "Real Estate",
              "Software & Apps",
              "Sports & Outdoor",
              "Tech & Electronics",
              "Travel",
              "Vehicle & Transportation"
            ],
            "type": "string",
            "description": "TikTok has no working server-side industry filter, so this actor filters the returned rows on TikTok's own industry IDs. Nine labels are ID-mapped (Education, Beauty & Personal Care, Travel, Pets, Apparel & Accessories, News & Entertainment, Games, Food & Beverage, Sports & Outdoor). Any other label warns and keeps every row rather than returning an empty run.",
            "default": ""
          },
          "top100_new_on_board": {
            "title": "✨ New to the board only (accepted, ignored upstream)",
            "type": "boolean",
            "description": "Kept for compatibility. TikTok ignores this filter on the public trends surface and publishes no rank-change marker at all, so nothing can be computed from it. Rows carry newOnBoardIgnored=true rather than a fabricated 'new' flag.",
            "default": false
          },
          "hashtag_list": {
            "title": "📝 Custom hashtag list",
            "type": "array",
            "description": "Hashtag names without the # sign, used by the 'Custom list' result type. Only hashtags on today's live board for your country and window carry trending analytics and named creators, so anything else is reported as unresolved instead of silently dropped.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "total_hashtags": {
            "title": "🔢 Max hashtags",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "Upper bound on hashtag rows. TikTok's public board hard-caps at 3 hashtags per country + window (it answers totalCount:3, hasMore:false and ignores every paging parameter), so anything above 3 is capped by TikTok, not by this actor. Breadth comes from running more country + window combinations.",
            "default": 10
          },
          "include_creator_profiles": {
            "title": "👤 Open the named creators into full profiles",
            "type": "boolean",
            "description": "ON adds one request per creator to TikTok's public profile embed and fills in verified, private, following count, total likes, bio, avatar and the creator's recent clips. OFF keeps only what the trending board itself publishes: handle, nickname, rank, avatar and the board's exact follower number.",
            "default": true
          },
          "creators_per_hashtag": {
            "title": "🔢 Creators per hashtag",
            "minimum": 1,
            "maximum": 12,
            "type": "integer",
            "description": "How many creators to return per hashtag. The trending board itself names exactly 3, so 3 is the ceiling unless you also turn on the expansion below.",
            "default": 3
          },
          "expand_creators_from_tag_videos": {
            "title": "➕ Expand the roster from the tag's top videos",
            "type": "boolean",
            "description": "Adds the authors of the hashtag's top public videos to the roster once TikTok's 3 named creators are used up, so you can ask for more than 3. Measured yield: 4-8 additional unique authors per hashtag (mean 6.6 over 12 hashtags). These carry source='tag_video_author' and no board rank, so they are never confused with TikTok's own picks.",
            "default": false
          },
          "include_creator_recent_videos": {
            "title": "🎬 Include each creator's recent clips",
            "type": "boolean",
            "description": "Attaches the clips TikTok shows on the creator's public embed, each with id, URL, caption, play count and cover. Measured 0-13 clips per creator (mean 10.7 over 59 creators) — TikTok caps the list and it cannot be paged.",
            "default": true
          },
          "fetch_creator_video_count": {
            "title": "📼 Resolve each creator's lifetime video count",
            "type": "boolean",
            "description": "TikTok's profile embed does not carry a video count at all (0 of 36 profiles had the key). The only public source is the author block on one of the creator's own clips, so this costs one extra request per creator. OFF leaves videoCount null rather than estimating it.",
            "default": true
          },
          "min_creator_followers": {
            "title": "📏 Minimum creator followers",
            "minimum": 0,
            "type": "integer",
            "description": "Post-fetch filter — TikTok offers no server-side follower filter. Creators below this follower count are dropped from the hashtag's roster; the hashtag row itself is still emitted. 0 disables it.",
            "default": 0
          },
          "max_creator_followers": {
            "title": "📐 Maximum creator followers",
            "minimum": 0,
            "type": "integer",
            "description": "Post-fetch upper bound, useful for finding reachable nano and micro creators rather than celebrities. 0 disables it. The measured board range is 51 to 86,453,450 followers with a median of 61,443.",
            "default": 0
          },
          "verified_only": {
            "title": "✅ Verified creators only",
            "type": "boolean",
            "description": "Keeps only creators with TikTok's blue verification badge. Requires the profile call, because the trending board does not publish verification. Measured rate: 10 of 59 board creators are verified, so this filter is aggressive by nature.",
            "default": false
          },
          "creator_tier_in": {
            "title": "🪜 Creator size tiers",
            "type": "array",
            "description": "Keep only creators in the selected size bands: nano (under 10K followers), micro (10K-100K), mid (100K-1M), mega (1M+). Leave empty for every tier. Measured board mix over 729 creators: 178 nano, 229 micro, 174 mid, 148 mega.",
            "items": {
              "type": "string",
              "enum": [
                "nano",
                "micro",
                "mid",
                "mega"
              ],
              "enumTitles": [
                "🌱 nano — under 10K",
                "🌿 micro — 10K to 100K",
                "🌳 mid — 100K to 1M",
                "🏔️ mega — 1M and above"
              ]
            },
            "default": []
          },
          "creator_concurrency": {
            "title": "⚡ Creator request concurrency",
            "minimum": 1,
            "maximum": 16,
            "type": "integer",
            "description": "Parallel profile and clip requests. 8 completed 50 profiles plus 49 clip lookups without a single block or rate-limit in testing.",
            "default": 8
          },
          "creator_child_dataset": {
            "title": "🗂️ Also write a flat creator dataset",
            "type": "boolean",
            "description": "Writes one flat, CSV-ready row per creator to a named dataset called 'trend-creators', alongside the nested creators array on each hashtag row.",
            "default": true
          },
          "proxyConfiguration": {
            "title": "🛡️ Proxy configuration",
            "type": "object",
            "description": "Optional. Leave the default on and the actor will still try a direct connection first. Residential groups are the useful escalation if a datacenter range is ever refused.",
            "default": {
              "useApifyProxy": 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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}