Search TikTok Shop products by keyword
apify.tiktok-shop.search.productsScrape TikTok Shop products for a keyword across 10 storefronts (US, GB, VN, TH, PH, MY, SG, JP, MX, ID) — title, price, original_price, discount_percent, seller_name, rating, sold_count and full category_path per product
- Price
- $0.008/resultZum Anbieterpreis
- Success rate
- 85 %Last 30 days · 40 calls
- Latency p50
- 34 sp95 80 s
- Last verified
- 26.09.2026Verified working
POSThttps://toolswitch.dev/v1/tools/apify.tiktok-shop.search.products?memory=2048&timeout=90&maxItems=1&maxTotalChargeUsd=0.08Preview- Uses platform quota
- Synchronous response
- Reads public data
Parameter
the response is the dataset items array directly — no run envelope, no polling. Each row carries product_id, title, price, original_price, discount_percent, currency, seller_name, seller_id, rating, review_count, sold_count, category_path, product_url and image URLs. Cap every call with maxTotalChargeUsd, the spend limit Apify enforces; the body row limit sets how many rows run. The same actor also takes product_urls (per-product detail, billed product-detail) and category_urls (category browse); this entry is the keyword-search capability
| Parameter | Typ | Erforderlich | Beschreibung | Beispiel |
|---|---|---|---|---|
| Abfrageparameter | ||||
memory | Ganzzahl | Optional | MB of run memory. treg's key requires 2048, which fixes the actor-start charge; your own key may set any size | 2048 |
timeout | Ganzzahl | Optional | run timeout in seconds. treg's key requires 90 so the run and its rows arrive before any wait gives up; a larger pull should use your own key and the async web.scrape.job.* pair above | 90 |
maxItems | Ganzzahl | Optional | optional row cap; pay-per-event actors that take the row count from their own input ignore it, so maxTotalChargeUsd is the spend limit | 100 |
maxTotalChargeUsd | Zahl | Optional | the spend cap Apify enforces on every event this run bills, in dollars. treg's key requires it, above 0 and at most 1, and holds it for the call | 0.5 |
- Abfrageparameter
memoryGanzzahlOptionalMB of run memory. treg's key requires 2048, which fixes the actor-start charge; your own key may set any size
Beispiel:
2048timeoutGanzzahlOptionalrun timeout in seconds. treg's key requires 90 so the run and its rows arrive before any wait gives up; a larger pull should use your own key and the async web.scrape.job.* pair above
Beispiel:
90maxItemsGanzzahlOptionaloptional row cap; pay-per-event actors that take the row count from their own input ignore it, so maxTotalChargeUsd is the spend limit
Beispiel:
100maxTotalChargeUsdZahlOptionalthe spend cap Apify enforces on every event this run bills, in dollars. treg's key requires it, above 0 and at most 1, and holds it for the call
Beispiel:
0.5
Codebeispiele
Ersetze $TOOLSWITCH_KEY durch den in der Konsole erstellten Schlüssel.
curl -X POST 'https://toolswitch.dev/v1/tools/apify.tiktok-shop.search.products?memory=2048&timeout=90&maxItems=1&maxTotalChargeUsd=0.08' \
-H "X-Toolswitch-Key: $TOOLSWITCH_KEY" \
-H "Content-Type: application/json" \
--data-raw '{"region":"US","max_results":1,"search_terms":["phone case"],"scrape_product_details":false}'import os
import json
import requests
response = requests.request(
"POST",
"https://toolswitch.dev/v1/tools/apify.tiktok-shop.search.products?memory=2048&timeout=90&maxItems=1&maxTotalChargeUsd=0.08",
headers={"X-Toolswitch-Key": os.environ["TOOLSWITCH_KEY"]},
json=json.loads("{\"region\":\"US\",\"max_results\":1,\"search_terms\":[\"phone case\"],\"scrape_product_details\":false}"),
)
response.raise_for_status()
print(response.text)const response = await fetch("https://toolswitch.dev/v1/tools/apify.tiktok-shop.search.products?memory=2048&timeout=90&maxItems=1&maxTotalChargeUsd=0.08", {
method: "POST",
headers: {
"X-Toolswitch-Key": process.env.TOOLSWITCH_KEY ?? "",
"Content-Type": "application/json",
},
body: JSON.stringify(JSON.parse("{\"region\":\"US\",\"max_results\":1,\"search_terms\":[\"phone case\"],\"scrape_product_details\":false}")),
});
if (!response.ok) throw new Error(`Request failed: ${response.status}`);
console.log(await response.text());Diese Gateway-API ist eine Vorschauversion; URL und Authentifizierung können sich ändern. Die Beispielparameter sind Musterdaten. Aufrufe werden mit $0.008/result einschließlich Servicegebühr abgerechnet.