SKILL.md
---
name: discovering-tiktok-shop-sellers-by-niche
description: >
Discovers TikTok Shop sellers and product listings in a specific niche using apidojo's TikTok
scraper on Apify. Triggers when the user asks to: find TikTok Shop sellers in a product category,
discover what products are selling on TikTok Shop, identify top-selling items in a niche on TikTok,
find competitors selling on TikTok Shop, research TikTok Shop product opportunities, discover
trending products with affiliate links on TikTok, or build a database of TikTok Shop merchants.
Returns seller handle, product name, price, estimated sales signals, and niche category.
Ideal for e-commerce sellers, product researchers, affiliate marketers, and TikTok Shop entrants.
license: Apache-2.0
metadata:
author: apidojo
version: "1.0"
apify-actor: apidojo/tiktok-scraper
---
# Discovering TikTok Shop Sellers by Niche
Maps the TikTok Shop seller landscape in a product category. Identifies which products are being heavily promoted, which creators drive the most sales content, and where product gaps exist.
## Prerequisites
- `APIFY_TOKEN` environment variable set
- Optional: Apify MCP server installed
## Inputs
| Parameter | Type | Required | Default | Notes |
|-----------|------|----------|---------|-------|
| `startUrls` | array | Optional | `[]` | TikTok URLs — user profiles, hashtags, music pages, search, locations |
| `keywords` | array | Optional | `[]` | Search keywords/terms to find posts |
| `sortType` | string | Optional | `RELEVANCE` | Sort order for keyword results: `RELEVANCE`, `MOST_LIKED`, `DATE_POSTED` |
| `location` | string | Optional | — | ISO 3166-1 alpha-2 country code for regional filtering (e.g. `US`, `GB`) |
| `maxItems` | number | Optional | Unlimited | Maximum posts to return across the run |
| `includeSearchKeywords` | boolean | Optional | `false` | Add the matched search keyword field to each post |
| `customMapFunction` | string | Optional | — | JavaScript function to transform each output object |
## Workflow
```
Progress:
- [ ] Step 1: Search niche hashtags with TikTok Shop signals
- [ ] Step 2: Filter posts with shop product links
- [ ] Step 3: Extract seller profiles and products
- [ ] Step 4: Rank by sales signal strength
- [ ] Step 5: Deliver seller/product map
```
### Step 1: Search Hashtags
```
TikTok Shop hashtags: #tiktokshop[niche], #[niche]shop, #[niche]deals, #tiktokmademebuyit,
#[niche]affiliate, #[niche]haul
```
**Recommended — run_actor.js (handles waiting, output, and file saving automatically):**
```bash
# Quick answer (prints table to chat)
node scripts/run_actor.js \
--actor "apidojo~tiktok-scraper" \
--input '{"param": "value"}'
# Save as CSV
node scripts/run_actor.js \
--actor "apidojo~tiktok-scraper" \
--input '{"param": "value"}' \
--output YYYY-MM-DD_results.csv --format csv
# Save as JSON
node scripts/run_actor.js \
--actor "apidojo~tiktok-scraper" \
--input '{"param": "value"}' \
--output YYYY-MM-DD_results.json --format json
```
> `APIFY_TOKEN` must be set in environment or `.env` file.
**If Apify MCP is available:**
```
Tool: apify:run-actor
Actor: "apidojo~tiktok-scraper"
Input:
{
"keywords": ["#tiktokshop", "#[niche]shop", "#tiktokmademebuyit"],
"maxItems": 300
}
```
**REST API fallback:**
```bash
curl -X POST "https://api.apify.com/v2/acts/apidojo~tiktok-scraper/runs?token=$APIFY_TOKEN" -H "Content-Type: application/json" -d '{
"keywords": ["#tiktokshop", "#kitchentools", "#tiktokmademebuyit"],
"maxItems": 300
}'
```
### Step 2: Score Seller Strength
```
sales_signal = (playCount / 10000) * 0.35
+ (diggCount / 1000) * 0.25
+ (commentCount / 100) * 0.15
+ (shareCount / 500) * 0.15
+ (hasShopLink ? 1 : 0) * 0.10
```
Normalize to [0, 1]. Sellers with multiple high-signal posts get `multi_post_bonus = 0.15`.
### Step 3: Classify Seller Type
```
seller_type:
BRAND = account.verified OR followerCount > 50K AND bio contains brand name
CREATOR_AFFILIATE = individual account, earns commission per sale
DROPSHIPPER = posts multiple unrelated products with generic descriptions
```
### Step 4: Edge Cases
- **Non-Shop posts in results**: Drop posts where caption has no shop signal AND no product link
- **Same product from many creators**: De-duplicate by product name; count unique promoters as a "sales momentum" signal
- **Saturated niche** (> 50 active sellers): Flag as HIGH_COMPETITION; present gap analysis (underserved sub-niches)
- **Views inflated by one viral post**: Use median views across seller's last 10 posts as the signal, not max
## Output Format
```
# TikTok Shop Seller Map: [NICHE]
Posts scanned: [N] | Unique sellers: [N] | Brands: [N] | Creator-affiliates: [N] | Date: [DATE]
## Top Sellers by Sales Signal
| Seller | Type | Product(s) | Avg Views/Post | Shop Posts | Signal Score |
|--------|------|-----------|----------------|-----------|-------------|
| @[handle] | Creator | [product] | [N] | [N] | [0.XX] |
## Top Products (by Promotion Frequency)
| Product Name | # Sellers Promoting | Avg Post Views | Price Range |
|-------------|--------------------|--------------------|-------------|
| [product] | [N] | [N] | $[X]-$[X] |
## Market Saturation
Competition level: [LOW / MEDIUM / HIGH] ([N] active sellers)
Potential gap: [sub-niche or product type with < 3 sellers]
```
## Troubleshooting
**Hashtag returns non-shop content**: Combine niche hashtag with `#tiktokshop` in the same search to anchor on shop-linked posts.
**Can't determine product price**: TikTok Shop prices aren't always in the video — note URL pattern includes product ID which can be cross-referenced manually.
**All results from one mega-creator**: Add `max_posts_per_creator = 5` to surface diverse sellers.