{
  "openapi": "3.0.1",
  "info": {
    "title": "TikTok Viral Videos & Explore Scraper",
    "description": "Viral TikTok videos from the Explore page in any country and 21 categories: plays, likes, comments, shares, saves, engagement, plays per hour, hashtags, sound, creator with bio email. Filter fresh or big videos. New-video alerts. No login.",
    "version": "0.1",
    "x-build-id": "TJMkiP2pNGkh0ayHQ"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/s_actors~tiktok-explore-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-s_actors-tiktok-explore-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/s_actors~tiktok-explore-scraper/runs": {
      "post": {
        "operationId": "runs-sync-s_actors-tiktok-explore-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/s_actors~tiktok-explore-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-s_actors-tiktok-explore-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": {
          "countries": {
            "title": "🌍 Countries",
            "type": "array",
            "description": "Two-letter country codes, one per line (US, GB, DE, BR, IN, NG, KE...). Any country: TikTok shows each country its own Explore feed, and the Actor loads it through a residential IP in that country.",
            "default": [
              "US"
            ],
            "items": {
              "type": "string"
            }
          },
          "categories": {
            "title": "🧭 Categories",
            "type": "array",
            "description": "Explore page categories. All = the main Explore feed. A video found in several categories is returned once (alsoInCategories lists the others).",
            "items": {
              "type": "string",
              "enum": [
                "All",
                "Singing & Dancing",
                "Comedy",
                "Sports",
                "Anime & Comics",
                "Relationship",
                "Shows",
                "Lipsync",
                "Daily Life",
                "Beauty Care",
                "Games",
                "Society",
                "Outfit",
                "Cars",
                "Food",
                "Animals",
                "Family",
                "Drama",
                "Fitness & Health",
                "Education",
                "Technology"
              ]
            },
            "default": [
              "All"
            ]
          },
          "maxVideos": {
            "title": "🎬 Videos per category",
            "minimum": 1,
            "maximum": 2000,
            "type": "integer",
            "description": "Different videos to collect per category and country. TikTok gives new videos on every load of the feed (a test got 987 different US Comedy videos out of 1,000).",
            "default": 100
          },
          "postedWithinDays": {
            "title": "🆕 Posted within (days)",
            "minimum": 0,
            "maximum": 365,
            "type": "integer",
            "description": "Only videos posted in the last N days (e.g. 3 = viral right now). Empty or 0 = any age. Most Explore videos are 1-4 weeks old, so a short window returns fewer videos than asked (US and UK, 3 days: about 35 per country)."
          },
          "minPlays": {
            "title": "▶️ Minimum plays",
            "minimum": 0,
            "type": "integer",
            "description": "Only videos with at least this many plays (e.g. 1000000). Empty or 0 = no minimum."
          },
          "onlyNew": {
            "title": "🔔 Only new videos",
            "type": "boolean",
            "description": "For scheduled runs (save the input as a task and add a schedule). The first run returns the feed and remembers it; every later run returns only videos that were not in it before. Without it, every row still has isNew.",
            "default": false
          },
          "monitorName": {
            "title": "🏷️ Monitor name",
            "type": "string",
            "description": "Name of the memory used by isNew and Only new videos. Use a different name for each task.",
            "default": "default"
          },
          "findLeads": {
            "title": "📇 Creator contacts (leads)",
            "type": "boolean",
            "description": "Open the TikTok profile of each of the creators of the videos and the website or link-in-bio page (Linktree, Taplink, Beacons...) linked in it, and add to every row exact followers, bio, business category, email, website, Telegram, Instagram, YouTube, X, Facebook, LinkedIn, WhatsApp, Twitch. See the Leads tab of the results; one row per account: Output tab → Authors (CSV). Charged per account with contacts (more with an email, see Pricing); accounts without any contact are listed for free. Contacts are not repeated on every row.",
            "default": false
          },
          "maxLeads": {
            "title": "📇 Max accounts for contacts",
            "minimum": 0,
            "type": "integer",
            "description": "At most this many accounts get contacts, the most frequent creators first. 0 = all accounts of the run.",
            "default": 500
          },
          "maxConcurrency": {
            "title": "⚡ Parallel categories",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "How many categories and countries are read at the same time.",
            "default": 5
          },
          "proxyConfiguration": {
            "title": "🛡️ Proxy",
            "type": "object",
            "description": "Explore always goes through Apify residential proxies in the chosen country (TikTok gives cloud IPs an empty Explore feed); this setting is only a fallback. The default works.",
            "default": {
              "useApifyProxy": true
            }
          },
          "debugLog": {
            "title": "🐞 Debug log",
            "type": "boolean",
            "description": "Log every refused request (for troubleshooting).",
            "default": false
          }
        }
      },
      "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}