Shop Search
curl --request GET \
--url https://scrapebadger.com/v1/tiktok/shop/search \
--header 'x-api-key: <api-key>'import requests
url = "https://scrapebadger.com/v1/tiktok/shop/search"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://scrapebadger.com/v1/tiktok/shop/search', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://scrapebadger.com/v1/tiktok/shop/search",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://scrapebadger.com/v1/tiktok/shop/search"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://scrapebadger.com/v1/tiktok/shop/search")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://scrapebadger.com/v1/tiktok/shop/search")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"products": [
{
"product_id": "1729470894545670276",
"title": "【2026 New Production】CMF Buds 2a Wireless Bluetooth Earbuds, 12.4 mm Custom Dynamic Driver, 42 dB Active Noise Cancellation, 4 HD Mics with Clear Voice Technology,summerwins tiktokshopbacktoschool,back to school,back to school haul",
"url": "https://shop.tiktok.com/us/pdp/cmf-buds-wireless-bluetooth-earbuds-with-42db-noise-cancelling-35-5h-playtime/1729470894545670276",
"image": "https://p16-oec-general-useast5.ttcdn-us.com/tos-useast5-i-omjb5zjo8w-tx/b736159635ac4933b...",
"price": {
"amount": 49,
"original": null,
"discount": null,
"currency": "USD",
"symbol": "$"
},
"rating": 4.7,
"review_count": 3383,
"sold_count": 26801,
"seller": {
"id": "7495669706651568260",
"name": "CMF by Nothing",
"logo": "https://p19-oec-general-useast5.ttcdn-us.com/tos-useast5-i-o..."
},
"brand": "CMF by Nothing",
"labels": [
"Limited time deal"
],
"promo": null,
"video": {
"id": "7639063434667101470",
"title": "Replying to @Goldfishing24 Jlab vs CMF @Nothing #music #headphones #tiktokshop #tiktokmarketplace #tiktokmademebuyit ",
"author_name": "Isaac",
"play_count": 10168636,
"like_count": 112959,
"cover_url": "https://p16-common-sign.tiktokcdn-us.com/tos-useast8-p-0068-...",
"video_url": "https://v16m-default.tiktokcdn-us.com/3931ad4a6475e6c6240056..."
},
"rank": null
}
],
"shops": [
{
"id": "7495669706651568260",
"name": "CMF by Nothing",
"logo": "https://p19-oec-general-useast5.ttcdn-us.com/tos-useast5-i-omjb5zjo8w-tx/d83d7b129a314d90b95e583429db51cf~tplv-fhlh96nyum-resize-png:300:300.png?dr=12184&t=555f072d&ps=933b5bde&shp=905da467&shcp=d9d491bf&idc=useast5&from=2422056039"
},
{
"id": "7494161853719414088",
"name": "JBL",
"logo": "https://p16-oec-general-useast5.ttcdn-us.com/tos-useast5-i-omjb5zjo8w-tx/2eae32bc80744404a8809b3fdc7e5a50~tplv-fhlh96nyum-resize-png:300:300.png?dr=12184&t=555f072d&ps=933b5bde&shp=905da467&shcp=d9d491bf&idc=useast5&from=2422056039"
}
],
"related_searches": [
"WirelessEarbuds",
"Affordable Wireless Earbuds",
"Wireless esrbuds",
"earbuds wireless",
"Earbuds",
"Wireless gaming earbuds",
"Earphone wireless earbuds",
"earbuds wireless Airbuds",
"Wireless earbud adaptor"
],
"related_categories": [
{
"id": "601990",
"name": "Headphones, Earphones & Accessories",
"slug": "headphones-earphones-accessories",
"level": null,
"is_leaf": null,
"parent_id": null,
"image": null,
"url": "https://shop.tiktok.com/us/c/headphones-earphones-accessories/601990"
},
{
"id": "602083",
"name": "Smart Watches",
"slug": "smart-watches",
"level": null,
"is_leaf": null,
"parent_id": null,
"image": null,
"url": "https://shop.tiktok.com/us/c/smart-watches/602083"
}
],
"query": "wireless earbuds",
"region": "US"
}Shop
Shop Search
Keyword search over TikTok Shop products, with the TikTok video each listing is bound to, matching shops and related searches.
GET
/
v1
/
tiktok
/
shop
/
search
Shop Search
curl --request GET \
--url https://scrapebadger.com/v1/tiktok/shop/search \
--header 'x-api-key: <api-key>'import requests
url = "https://scrapebadger.com/v1/tiktok/shop/search"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://scrapebadger.com/v1/tiktok/shop/search', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://scrapebadger.com/v1/tiktok/shop/search",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://scrapebadger.com/v1/tiktok/shop/search"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://scrapebadger.com/v1/tiktok/shop/search")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://scrapebadger.com/v1/tiktok/shop/search")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"products": [
{
"product_id": "1729470894545670276",
"title": "【2026 New Production】CMF Buds 2a Wireless Bluetooth Earbuds, 12.4 mm Custom Dynamic Driver, 42 dB Active Noise Cancellation, 4 HD Mics with Clear Voice Technology,summerwins tiktokshopbacktoschool,back to school,back to school haul",
"url": "https://shop.tiktok.com/us/pdp/cmf-buds-wireless-bluetooth-earbuds-with-42db-noise-cancelling-35-5h-playtime/1729470894545670276",
"image": "https://p16-oec-general-useast5.ttcdn-us.com/tos-useast5-i-omjb5zjo8w-tx/b736159635ac4933b...",
"price": {
"amount": 49,
"original": null,
"discount": null,
"currency": "USD",
"symbol": "$"
},
"rating": 4.7,
"review_count": 3383,
"sold_count": 26801,
"seller": {
"id": "7495669706651568260",
"name": "CMF by Nothing",
"logo": "https://p19-oec-general-useast5.ttcdn-us.com/tos-useast5-i-o..."
},
"brand": "CMF by Nothing",
"labels": [
"Limited time deal"
],
"promo": null,
"video": {
"id": "7639063434667101470",
"title": "Replying to @Goldfishing24 Jlab vs CMF @Nothing #music #headphones #tiktokshop #tiktokmarketplace #tiktokmademebuyit ",
"author_name": "Isaac",
"play_count": 10168636,
"like_count": 112959,
"cover_url": "https://p16-common-sign.tiktokcdn-us.com/tos-useast8-p-0068-...",
"video_url": "https://v16m-default.tiktokcdn-us.com/3931ad4a6475e6c6240056..."
},
"rank": null
}
],
"shops": [
{
"id": "7495669706651568260",
"name": "CMF by Nothing",
"logo": "https://p19-oec-general-useast5.ttcdn-us.com/tos-useast5-i-omjb5zjo8w-tx/d83d7b129a314d90b95e583429db51cf~tplv-fhlh96nyum-resize-png:300:300.png?dr=12184&t=555f072d&ps=933b5bde&shp=905da467&shcp=d9d491bf&idc=useast5&from=2422056039"
},
{
"id": "7494161853719414088",
"name": "JBL",
"logo": "https://p16-oec-general-useast5.ttcdn-us.com/tos-useast5-i-omjb5zjo8w-tx/2eae32bc80744404a8809b3fdc7e5a50~tplv-fhlh96nyum-resize-png:300:300.png?dr=12184&t=555f072d&ps=933b5bde&shp=905da467&shcp=d9d491bf&idc=useast5&from=2422056039"
}
],
"related_searches": [
"WirelessEarbuds",
"Affordable Wireless Earbuds",
"Wireless esrbuds",
"earbuds wireless",
"Earbuds",
"Wireless gaming earbuds",
"Earphone wireless earbuds",
"earbuds wireless Airbuds",
"Wireless earbud adaptor"
],
"related_categories": [
{
"id": "601990",
"name": "Headphones, Earphones & Accessories",
"slug": "headphones-earphones-accessories",
"level": null,
"is_leaf": null,
"parent_id": null,
"image": null,
"url": "https://shop.tiktok.com/us/c/headphones-earphones-accessories/601990"
},
{
"id": "602083",
"name": "Smart Watches",
"slug": "smart-watches",
"level": null,
"is_leaf": null,
"parent_id": null,
"image": null,
"url": "https://shop.tiktok.com/us/c/smart-watches/602083"
}
],
"query": "wireless earbuds",
"region": "US"
}Search results carry
video — the TikTok video driving the listing (play_count, like_count, author_name) — plus brand, matching shops, related_searches and related_categories.US market only — TikTok Shop resolves the market from the visitor’s location and these endpoints read the US storefront (prices in USD). Lists return what the storefront page renders; there is no further pagination.
Each request costs 5 credits. Failed requests are not charged.
Authorizations
Query Parameters
Keyword, e.g. wireless earbuds.

