@scrapecreators/cli 1.0.27 → 1.0.29
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +43 -5
- package/api-config/apis.js +1115 -327
- package/api-config/instagram-apis.js +341 -31
- package/api-config/telegram-apis.js +132 -0
- package/api-config/tiktok-apis.js +212 -6
- package/api-config/tiktok-shop-apis.js +11 -9
- package/package.json +2 -2
- package/src/cli.js +7 -2
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
const sampleTelegramPost = {
|
|
2
|
+
id: "543",
|
|
3
|
+
channel_handle: "durov",
|
|
4
|
+
url: "https://t.me/durov/543",
|
|
5
|
+
author_name: "Pavel Durov",
|
|
6
|
+
author_url: "https://t.me/durov",
|
|
7
|
+
text: "Telegram has applied for the .gram domain zone. If approved, Telegram users could get their own second-level domains.",
|
|
8
|
+
published_at: "2026-08-18T17:37:31+00:00",
|
|
9
|
+
view_count: 1210000,
|
|
10
|
+
view_count_text: "1.21M",
|
|
11
|
+
reactions: [
|
|
12
|
+
{
|
|
13
|
+
emoji: "⭐",
|
|
14
|
+
emoji_id: null,
|
|
15
|
+
count: 16300,
|
|
16
|
+
count_text: "16.3K",
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
emoji: null,
|
|
20
|
+
emoji_id: "5373223594484587136",
|
|
21
|
+
count: 44700,
|
|
22
|
+
count_text: "44.7K",
|
|
23
|
+
},
|
|
24
|
+
],
|
|
25
|
+
reaction_count: 89300,
|
|
26
|
+
forwarded_from: null,
|
|
27
|
+
media: [],
|
|
28
|
+
link_preview: null,
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
const sampleTelegramChannel = {
|
|
32
|
+
handle: "telegram",
|
|
33
|
+
name: "Telegram News",
|
|
34
|
+
description: "The official Telegram on Telegram. Much recursion. Very Telegram. Wow.",
|
|
35
|
+
url: "https://t.me/telegram",
|
|
36
|
+
avatar_url: "https://cdn1.telesco.pe/file/...",
|
|
37
|
+
is_verified: true,
|
|
38
|
+
subscriber_count: 9780000,
|
|
39
|
+
subscriber_count_text: "9.78M",
|
|
40
|
+
member_count: null,
|
|
41
|
+
member_count_text: null,
|
|
42
|
+
photo_count: 14,
|
|
43
|
+
video_count: 225,
|
|
44
|
+
file_count: null,
|
|
45
|
+
link_count: 372,
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
export const telegramApis = {
|
|
49
|
+
id: "telegram",
|
|
50
|
+
name: "Telegram",
|
|
51
|
+
description: "Scrape public Telegram channels, groups, and posts",
|
|
52
|
+
endpoints: [
|
|
53
|
+
{
|
|
54
|
+
name: "Channel Details",
|
|
55
|
+
method: "GET",
|
|
56
|
+
description: "Get public Telegram channel or group details from its web preview.",
|
|
57
|
+
fullDescription:
|
|
58
|
+
"Retrieves public Telegram channel or group metadata including its name, description, avatar, verification status, subscriber or member count, and public media counters. This endpoint uses Telegram's public web preview and does not use a logged-in Telegram account. Private channels, invite-only groups, numeric IDs, and channels with no public web preview are not supported.",
|
|
59
|
+
path: "/v1/telegram/channel",
|
|
60
|
+
sampleResponse: sampleTelegramChannel,
|
|
61
|
+
params: [
|
|
62
|
+
{
|
|
63
|
+
name: "handle",
|
|
64
|
+
type: "string",
|
|
65
|
+
required: true,
|
|
66
|
+
placeholder: "telegram",
|
|
67
|
+
description:
|
|
68
|
+
"Public Telegram handle, @handle, or t.me channel URL.",
|
|
69
|
+
},
|
|
70
|
+
],
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
name: "Channel Posts",
|
|
74
|
+
method: "GET",
|
|
75
|
+
description: "Get one page of recent public posts from a Telegram channel or group.",
|
|
76
|
+
fullDescription:
|
|
77
|
+
"Retrieves one public web-preview page of Telegram posts with text, publish date, views, reactions when exposed, forwards, media previews, and link previews. Pass the returned cursor to fetch the previous page. Empty and terminal pages are not charged. Telegram does not expose every field on every public post, so reactions and downloadable media URLs can be absent. This endpoint does not support private or invite-only channels and groups.",
|
|
78
|
+
path: "/v1/telegram/channel/posts",
|
|
79
|
+
paginationField: "cursor",
|
|
80
|
+
sampleResponse: {
|
|
81
|
+
channel: {
|
|
82
|
+
...sampleTelegramChannel,
|
|
83
|
+
handle: "durov",
|
|
84
|
+
name: "Pavel Durov",
|
|
85
|
+
description: "Founder of Telegram.",
|
|
86
|
+
url: "https://t.me/durov",
|
|
87
|
+
subscriber_count: 11100000,
|
|
88
|
+
subscriber_count_text: "11.1M",
|
|
89
|
+
},
|
|
90
|
+
posts: [sampleTelegramPost],
|
|
91
|
+
cursor: "523",
|
|
92
|
+
has_more: true,
|
|
93
|
+
},
|
|
94
|
+
params: [
|
|
95
|
+
{
|
|
96
|
+
name: "handle",
|
|
97
|
+
type: "string",
|
|
98
|
+
required: true,
|
|
99
|
+
placeholder: "durov",
|
|
100
|
+
description:
|
|
101
|
+
"Public Telegram handle, @handle, or t.me channel URL.",
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
name: "cursor",
|
|
105
|
+
type: "string",
|
|
106
|
+
required: false,
|
|
107
|
+
placeholder: "523",
|
|
108
|
+
description:
|
|
109
|
+
"Numeric cursor returned by the previous page. Omit it for the latest posts.",
|
|
110
|
+
},
|
|
111
|
+
],
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
name: "Post Details",
|
|
115
|
+
method: "GET",
|
|
116
|
+
description: "Get one public Telegram post by URL.",
|
|
117
|
+
fullDescription:
|
|
118
|
+
"Retrieves one public Telegram post with its text, publish date, views, reactions when exposed, forward source, media previews, and link preview. This endpoint uses Telegram's public post widget without a logged-in account. Private and invite-only posts are not supported.",
|
|
119
|
+
path: "/v1/telegram/post",
|
|
120
|
+
sampleResponse: sampleTelegramPost,
|
|
121
|
+
params: [
|
|
122
|
+
{
|
|
123
|
+
name: "url",
|
|
124
|
+
type: "string",
|
|
125
|
+
required: true,
|
|
126
|
+
placeholder: "https://t.me/durov/543",
|
|
127
|
+
description: "Public Telegram post URL.",
|
|
128
|
+
},
|
|
129
|
+
],
|
|
130
|
+
},
|
|
131
|
+
],
|
|
132
|
+
};
|
|
@@ -180,12 +180,85 @@ export const tiktokBaseApis = {
|
|
|
180
180
|
],
|
|
181
181
|
},
|
|
182
182
|
},
|
|
183
|
+
{
|
|
184
|
+
name: "Collection Videos",
|
|
185
|
+
method: "GET",
|
|
186
|
+
description:
|
|
187
|
+
"Scrapes the videos in a public TikTok collection. Pass cursor to get more videos.",
|
|
188
|
+
fullDescription:
|
|
189
|
+
"Fetches the videos saved in a public TikTok collection, which TikTok also calls a playlist. Pass the collection URL. Returns `videos` using TikTok's native web video object format, including `id`, `desc`, `author`, `stats`, and `video`. To fetch the next page, pass the previous response's `max_cursor` as `cursor` when `has_more` is true.",
|
|
190
|
+
path: "/v1/tiktok/collection/videos",
|
|
191
|
+
paginationField: "max_cursor",
|
|
192
|
+
params: [
|
|
193
|
+
{
|
|
194
|
+
name: "url",
|
|
195
|
+
type: "string",
|
|
196
|
+
required: true,
|
|
197
|
+
description: "Public TikTok collection URL",
|
|
198
|
+
placeholder:
|
|
199
|
+
"https://www.tiktok.com/@kibblemaster808/collection/Want-to-go-7665668414573546258",
|
|
200
|
+
},
|
|
201
|
+
{
|
|
202
|
+
name: "cursor",
|
|
203
|
+
type: "string",
|
|
204
|
+
required: false,
|
|
205
|
+
description:
|
|
206
|
+
"Cursor to get more videos. Use max_cursor from the previous response.",
|
|
207
|
+
placeholder: "4",
|
|
208
|
+
},
|
|
209
|
+
],
|
|
210
|
+
sampleResponse: {
|
|
211
|
+
success: true,
|
|
212
|
+
credits_remaining: 100,
|
|
213
|
+
collection_id: "7665668414573546258",
|
|
214
|
+
has_more: false,
|
|
215
|
+
max_cursor: "5",
|
|
216
|
+
status_code: 0,
|
|
217
|
+
status_msg: "",
|
|
218
|
+
videos: [
|
|
219
|
+
{
|
|
220
|
+
AIGCDescription: "",
|
|
221
|
+
CategoryType: 116,
|
|
222
|
+
IsHDBitrate: false,
|
|
223
|
+
ShowAIGC: true,
|
|
224
|
+
anchors: [
|
|
225
|
+
{
|
|
226
|
+
description: "CapCut · Video Editor",
|
|
227
|
+
type: 54,
|
|
228
|
+
},
|
|
229
|
+
],
|
|
230
|
+
author: {
|
|
231
|
+
id: "7506421330087576593",
|
|
232
|
+
uniqueId: "miotravelapp",
|
|
233
|
+
nickname: "miotravelapp",
|
|
234
|
+
},
|
|
235
|
+
createTime: 1784185607,
|
|
236
|
+
desc: "How often do you reckon they think about the Roman Empire? 🐈⬛",
|
|
237
|
+
id: "7663018809392909588",
|
|
238
|
+
stats: {
|
|
239
|
+
collectCount: 18900,
|
|
240
|
+
commentCount: 359,
|
|
241
|
+
diggCount: 113000,
|
|
242
|
+
playCount: 865200,
|
|
243
|
+
shareCount: 15700,
|
|
244
|
+
},
|
|
245
|
+
video: {
|
|
246
|
+
duration: 68,
|
|
247
|
+
height: 1024,
|
|
248
|
+
width: 576,
|
|
249
|
+
cover:
|
|
250
|
+
"https://p19-common-sign.tiktokcdn-us.com/tos-alisg-p-0037/oUYM7iBIKB1BL5CGgwAtAiwJEfLCFXAiX9IAEA~tplv-tiktokx-origin.image",
|
|
251
|
+
},
|
|
252
|
+
},
|
|
253
|
+
],
|
|
254
|
+
},
|
|
255
|
+
},
|
|
183
256
|
{
|
|
184
257
|
name: "Profile Videos",
|
|
185
258
|
method: "GET",
|
|
186
259
|
description:
|
|
187
|
-
"Scrapes videos from a TikTok profile. Pass cursor to get more videos.",
|
|
188
|
-
fullDescription: "Fetches videos posted by a TikTok user, sortable by latest or most popular — use this to get a creator's video feed or TikToks. Returns `aweme_list`, an array of video objects each containing `aweme_id`, `desc` (caption), `statistics` (play_count, digg_count/likes, comment_count, share_count, collect_count/saves), and `video` (download URLs, duration, cover image). Paginate with `max_cursor` from the previous response.",
|
|
260
|
+
"Scrapes videos from a TikTok profile. Pass cursor to get more videos. If a profile should have videos but returns none, try `region=US` or another relevant region.",
|
|
261
|
+
fullDescription: "Fetches videos posted by a TikTok user, sortable by latest or most popular — use this to get a creator's video feed or TikToks. Returns `aweme_list`, an array of video objects each containing `aweme_id`, `desc` (caption), `statistics` (play_count, digg_count/likes, comment_count, share_count, collect_count/saves), and `video` (download URLs, duration, cover image). Paginate with `max_cursor` from the previous response. If a profile should have videos but returns none, try `region=US` or another relevant two-letter country code.",
|
|
189
262
|
path: "/v3/tiktok/profile/videos",
|
|
190
263
|
paginationField: "max_cursor",
|
|
191
264
|
params: [
|
|
@@ -223,8 +296,9 @@ export const tiktokBaseApis = {
|
|
|
223
296
|
name: "region",
|
|
224
297
|
type: "string",
|
|
225
298
|
required: false,
|
|
226
|
-
placeholder: "
|
|
227
|
-
description:
|
|
299
|
+
placeholder: "GB",
|
|
300
|
+
description:
|
|
301
|
+
"Region (country) for the proxy. Defaults to GB. If a profile should have videos but returns none, try US or another relevant two-letter country code.",
|
|
228
302
|
},
|
|
229
303
|
{
|
|
230
304
|
name: "trim",
|
|
@@ -5543,10 +5617,10 @@ export const tiktokBaseApis = {
|
|
|
5543
5617
|
},
|
|
5544
5618
|
},
|
|
5545
5619
|
{
|
|
5546
|
-
name: "
|
|
5620
|
+
name: "Live",
|
|
5547
5621
|
method: "GET",
|
|
5548
5622
|
description: "Scrapes a TikTok user's live stream",
|
|
5549
|
-
fullDescription: "Checks if a TikTok user is currently live streaming and retrieves their live room details.
|
|
5623
|
+
fullDescription: "Checks if a TikTok user is currently live streaming and retrieves their live room details. Use the top-level `is_live` boolean instead of checking TikTok's numeric status values yourself. Also returns `liveRoomUserInfo` (nickname, avatar, followerCount, roomId) and `liveRoom` (title, startTime, status, `liveRoomStats` with enterCount and userCount, plus `streamData` with playback URLs in multiple qualities).",
|
|
5550
5624
|
path: "/v1/tiktok/user/live",
|
|
5551
5625
|
params: [
|
|
5552
5626
|
{
|
|
@@ -5559,6 +5633,7 @@ export const tiktokBaseApis = {
|
|
|
5559
5633
|
],
|
|
5560
5634
|
sampleResponse: {
|
|
5561
5635
|
success: true,
|
|
5636
|
+
is_live: true,
|
|
5562
5637
|
liveRoomUserInfo: {
|
|
5563
5638
|
avatarLarger:
|
|
5564
5639
|
"https://p19-pu-sign-useast8.tiktokcdn-us.com/tos-useast5-avt-0068-tx/b169e9223700dc8d20d327510eb47f94~tplv-tiktokx-cropcenter:1080:1080.webp?dr=9640&refresh_token=c39a7259&x-expires=1751918400&x-signature=2Q%2F13wVO%2F%2F5OFBDinwMuULyBINc%3D&t=4d5b0474&ps=13740610&shp=a5d48078&shcp=fdd36af4&idc=useast5",
|
|
@@ -5661,6 +5736,45 @@ export const tiktokBaseApis = {
|
|
|
5661
5736
|
},
|
|
5662
5737
|
},
|
|
5663
5738
|
},
|
|
5739
|
+
{
|
|
5740
|
+
name: "Live Info",
|
|
5741
|
+
method: "GET",
|
|
5742
|
+
description: "Gets info for a TikTok live room, including like count.",
|
|
5743
|
+
fullDescription:
|
|
5744
|
+
"Gets curated room-level info for a TikTok live using TokAPI's live info endpoint. Use `/v1/tiktok/user/live` first to find the `room_id`. If you only have a TikTok handle and need the user's numeric id, use `/v1/tiktok/profile` first to get `user.id`. This endpoint is separate from `/v1/tiktok/user/live` because it uses a different upstream call and returns a smaller response with the most relevant fields: `room_id`, `like_count`, `viewer_count`, `status`, `title`, `cover_url`, and `owner`.",
|
|
5745
|
+
path: "/v1/tiktok/live",
|
|
5746
|
+
params: [
|
|
5747
|
+
{
|
|
5748
|
+
name: "room_id",
|
|
5749
|
+
type: "string",
|
|
5750
|
+
required: true,
|
|
5751
|
+
description:
|
|
5752
|
+
"TikTok live room id. Get this from `/v1/tiktok/user/live` in `liveRoomUserInfo.roomId` or `liveRoom.id` when the user is live.",
|
|
5753
|
+
placeholder: "7523685855395842871",
|
|
5754
|
+
},
|
|
5755
|
+
{
|
|
5756
|
+
name: "user_id",
|
|
5757
|
+
type: "string",
|
|
5758
|
+
required: true,
|
|
5759
|
+
description:
|
|
5760
|
+
"TikTok numeric user id for the live owner. Get this from `/v1/tiktok/profile` in `user.id`.",
|
|
5761
|
+
placeholder: "6742945285876515845",
|
|
5762
|
+
},
|
|
5763
|
+
],
|
|
5764
|
+
sampleResponse: {
|
|
5765
|
+
room_id: "7523685855395842871",
|
|
5766
|
+
like_count: 4317,
|
|
5767
|
+
viewer_count: 268,
|
|
5768
|
+
status: "live",
|
|
5769
|
+
title: "6'13 Grateful Streamer",
|
|
5770
|
+
cover_url: "https://p16-webcast.tiktokcdn-us.com/webcast/cover.jpeg",
|
|
5771
|
+
owner: {
|
|
5772
|
+
id: "6742945285876515845",
|
|
5773
|
+
username: "thejustalex",
|
|
5774
|
+
display_name: "JustAlex",
|
|
5775
|
+
},
|
|
5776
|
+
},
|
|
5777
|
+
},
|
|
5664
5778
|
{
|
|
5665
5779
|
name: "Comments",
|
|
5666
5780
|
method: "GET",
|
|
@@ -10721,6 +10835,96 @@ export const tiktokBaseApis = {
|
|
|
10721
10835
|
},
|
|
10722
10836
|
],
|
|
10723
10837
|
},
|
|
10838
|
+
{
|
|
10839
|
+
name: "Search Suggestions",
|
|
10840
|
+
method: "GET",
|
|
10841
|
+
description: "Gets TikTok autocomplete search suggestions for a query.",
|
|
10842
|
+
fullDescription:
|
|
10843
|
+
"Gets the autocomplete suggestions TikTok shows while someone is typing in search. Returns `suggestions`, a clean array of suggested search terms and the most useful metadata for each suggestion.",
|
|
10844
|
+
path: "/v1/tiktok/search/suggestions",
|
|
10845
|
+
sampleResponse: {
|
|
10846
|
+
success: true,
|
|
10847
|
+
credits_remaining: 49995926120,
|
|
10848
|
+
suggestions: [
|
|
10849
|
+
{
|
|
10850
|
+
text: "dogs cute",
|
|
10851
|
+
position: 0,
|
|
10852
|
+
language: "en",
|
|
10853
|
+
score: 0.011535803,
|
|
10854
|
+
},
|
|
10855
|
+
{
|
|
10856
|
+
text: "Dogs In Snow",
|
|
10857
|
+
position: 1,
|
|
10858
|
+
language: "en",
|
|
10859
|
+
score: 0.0013200018,
|
|
10860
|
+
},
|
|
10861
|
+
{
|
|
10862
|
+
text: "dogs season",
|
|
10863
|
+
position: 2,
|
|
10864
|
+
language: "en",
|
|
10865
|
+
score: 0.0013042383,
|
|
10866
|
+
},
|
|
10867
|
+
{
|
|
10868
|
+
text: "dogs with kids",
|
|
10869
|
+
position: 3,
|
|
10870
|
+
language: "en",
|
|
10871
|
+
score: 0.0012028236,
|
|
10872
|
+
},
|
|
10873
|
+
{
|
|
10874
|
+
text: "dogs protecting owners",
|
|
10875
|
+
position: 4,
|
|
10876
|
+
language: "en",
|
|
10877
|
+
score: 0.0008062465,
|
|
10878
|
+
},
|
|
10879
|
+
{
|
|
10880
|
+
text: "dogseven",
|
|
10881
|
+
position: 5,
|
|
10882
|
+
language: "en",
|
|
10883
|
+
score: 0.0011085697,
|
|
10884
|
+
},
|
|
10885
|
+
{
|
|
10886
|
+
text: "Dogs Video",
|
|
10887
|
+
position: 6,
|
|
10888
|
+
language: "en",
|
|
10889
|
+
score: 0.003553978,
|
|
10890
|
+
},
|
|
10891
|
+
{
|
|
10892
|
+
text: "dogs edit",
|
|
10893
|
+
position: 7,
|
|
10894
|
+
language: "en",
|
|
10895
|
+
score: 0.0014429367,
|
|
10896
|
+
},
|
|
10897
|
+
{
|
|
10898
|
+
text: "dogs funny videos",
|
|
10899
|
+
position: 8,
|
|
10900
|
+
language: "en",
|
|
10901
|
+
score: 0.0039043615,
|
|
10902
|
+
},
|
|
10903
|
+
{
|
|
10904
|
+
text: "dogs eating foods",
|
|
10905
|
+
position: 9,
|
|
10906
|
+
language: "en",
|
|
10907
|
+
score: 0.001083838,
|
|
10908
|
+
},
|
|
10909
|
+
],
|
|
10910
|
+
},
|
|
10911
|
+
params: [
|
|
10912
|
+
{
|
|
10913
|
+
name: "query",
|
|
10914
|
+
type: "string",
|
|
10915
|
+
required: true,
|
|
10916
|
+
description: "Search query to get suggestions for",
|
|
10917
|
+
placeholder: "dogs",
|
|
10918
|
+
},
|
|
10919
|
+
{
|
|
10920
|
+
name: "region",
|
|
10921
|
+
type: "string",
|
|
10922
|
+
required: false,
|
|
10923
|
+
description: "Region code for suggestions",
|
|
10924
|
+
placeholder: "US",
|
|
10925
|
+
},
|
|
10926
|
+
],
|
|
10927
|
+
},
|
|
10724
10928
|
{
|
|
10725
10929
|
name: "Search by Hashtag",
|
|
10726
10930
|
method: "GET",
|
|
@@ -15876,6 +16080,7 @@ export const tiktokBaseApis = {
|
|
|
15876
16080
|
// ],
|
|
15877
16081
|
// },
|
|
15878
16082
|
// },
|
|
16083
|
+
/* Retired July 16, 2026: TikTok no longer makes this data available.
|
|
15879
16084
|
{
|
|
15880
16085
|
name: "Get popular hashtags",
|
|
15881
16086
|
method: "GET",
|
|
@@ -16047,6 +16252,7 @@ export const tiktokBaseApis = {
|
|
|
16047
16252
|
},
|
|
16048
16253
|
},
|
|
16049
16254
|
},
|
|
16255
|
+
*/
|
|
16050
16256
|
{
|
|
16051
16257
|
name: "Get Song Details",
|
|
16052
16258
|
method: "GET",
|
|
@@ -47,7 +47,7 @@ export const tiktokShopApis = {
|
|
|
47
47
|
],
|
|
48
48
|
placeholder: "US",
|
|
49
49
|
description:
|
|
50
|
-
"Region to search shop products in.",
|
|
50
|
+
"Region to search shop products in. Non-US TikTok Shop regions are not reliable right now and may return limited or inconsistent results. Sorry for the inconvenience.",
|
|
51
51
|
},
|
|
52
52
|
],
|
|
53
53
|
sampleResponse: {
|
|
@@ -185,8 +185,8 @@ export const tiktokShopApis = {
|
|
|
185
185
|
name: "Shop Products",
|
|
186
186
|
method: "GET",
|
|
187
187
|
description:
|
|
188
|
-
"Get the products from a TikTok Shop. This endpoint costs 1 credit per request. Use the cursor from the response to paginate through results.",
|
|
189
|
-
fullDescription: "Lists all products from a specific TikTok Shop store by its URL. Returns an array of product objects each with `title`, `cover` images, `url`, `price` info, `sold_count`, `review_count`, and `rating`. Paginate with `cursor` from the previous response; filter by region; use `sort_by=top` for best-selling products or `sort_by=new_releases` for newest products.",
|
|
188
|
+
"Get the products from a TikTok Shop. This endpoint costs 1 credit per request. Use the cursor from the response to paginate through results. Non-US shop catalog coverage depends on TikTok exposing that shop in the selected region.",
|
|
189
|
+
fullDescription: "Lists all products from a specific TikTok Shop store by its URL. Returns an array of product objects each with `title`, `cover` images, `url`, `price` info, `sold_count`, `review_count`, and `rating`. Paginate with `cursor` from the previous response; filter by region; use `sort_by=top` for best-selling products or `sort_by=new_releases` for newest products. Non-US shop catalog coverage depends on TikTok exposing that shop in the selected region, so some shops can return `not_found` outside the US even when they appear in shop search.",
|
|
190
190
|
path: "/v1/tiktok/shop/products",
|
|
191
191
|
params: [
|
|
192
192
|
{
|
|
@@ -237,7 +237,7 @@ export const tiktokShopApis = {
|
|
|
237
237
|
],
|
|
238
238
|
placeholder: "US",
|
|
239
239
|
description:
|
|
240
|
-
"Region to get shop products from. Defaults to US if not provided.",
|
|
240
|
+
"Region to get shop products from. Defaults to US if not provided. Non-US regions are not reliable right now and may return `not_found` or limited catalog data even when the shop appears in search. Sorry for the inconvenience.",
|
|
241
241
|
},
|
|
242
242
|
],
|
|
243
243
|
sampleResponse: {
|
|
@@ -375,8 +375,8 @@ export const tiktokShopApis = {
|
|
|
375
375
|
name: "Product Details",
|
|
376
376
|
method: "GET",
|
|
377
377
|
description:
|
|
378
|
-
"Get the details of a TikTok Shop Product
|
|
379
|
-
fullDescription: "Fetches full details for a specific TikTok Shop product by its URL, including stock levels and affiliate videos. Returns `product_info` with `product_base` (title, images, sold_count, price), `skus` (variants with exact `stock` counts), and `product_detail_review` (product_rating, review_count, sample reviews); also returns `shop_info` (shop_name, shop_rating, followers_count) and `related_videos` (affiliate TikToks promoting the product).
|
|
378
|
+
"Get the details of a TikTok Shop Product. This endpoint currently supports US TikTok Shop products only.",
|
|
379
|
+
fullDescription: "Fetches full details for a specific US TikTok Shop product by its URL, including stock levels and affiliate videos. Returns `product_info` with `product_base` (title, images, sold_count, price), `skus` (variants with exact `stock` counts), and `product_detail_review` (product_rating, review_count, sample reviews); also returns `shop_info` (shop_name, shop_rating, followers_count) and `related_videos` (affiliate TikToks promoting the product). This endpoint currently supports the US region only.",
|
|
380
380
|
path: "/v1/tiktok/product",
|
|
381
381
|
params: [
|
|
382
382
|
{
|
|
@@ -392,7 +392,7 @@ export const tiktokShopApis = {
|
|
|
392
392
|
required: false,
|
|
393
393
|
type: "string",
|
|
394
394
|
description:
|
|
395
|
-
"Region the
|
|
395
|
+
"Region for the product details request. US is the reliable region right now; non-US regions should not be considered reliable and may return `bad_request` or missing product data. Sorry for the inconvenience.",
|
|
396
396
|
placeholder: "US",
|
|
397
397
|
},
|
|
398
398
|
],
|
|
@@ -770,7 +770,8 @@ export const tiktokShopApis = {
|
|
|
770
770
|
},
|
|
771
771
|
{
|
|
772
772
|
name: "region",
|
|
773
|
-
description:
|
|
773
|
+
description:
|
|
774
|
+
"The region of the product. US is the reliable region right now; non-US regions should not be considered reliable and may return limited or inconsistent review data. Sorry for the inconvenience.",
|
|
774
775
|
type: "string",
|
|
775
776
|
required: false,
|
|
776
777
|
placeholder: "US",
|
|
@@ -931,7 +932,8 @@ export const tiktokShopApis = {
|
|
|
931
932
|
{
|
|
932
933
|
name: "region",
|
|
933
934
|
type: "string",
|
|
934
|
-
description:
|
|
935
|
+
description:
|
|
936
|
+
"Region to put the proxy in. Non-US TikTok Shop regions are not reliable right now and may return limited or inconsistent showcase data. Sorry for the inconvenience.",
|
|
935
937
|
required: false,
|
|
936
938
|
placeholder: "US",
|
|
937
939
|
},
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@scrapecreators/cli",
|
|
3
|
-
"version": "1.0.
|
|
4
|
-
"description": "CLI for the ScrapeCreators API —
|
|
3
|
+
"version": "1.0.29",
|
|
4
|
+
"description": "CLI for the ScrapeCreators API — use 180+ endpoints across 30+ platforms from the terminal",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
7
7
|
"scrapecreators": "bin/scrapecreators.js"
|
package/src/cli.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Command } from "commander";
|
|
2
|
+
import { readFileSync } from "node:fs";
|
|
2
3
|
import { registerApiCommands } from "./command-registry.js";
|
|
3
4
|
import { authLogin, authStatus, authLogout } from "./commands/auth.js";
|
|
4
5
|
import { configSet, configGet, configList } from "./commands/config.js";
|
|
@@ -7,13 +8,17 @@ import { listCommand } from "./commands/list.js";
|
|
|
7
8
|
import { agentAddCommand } from "./commands/agent.js";
|
|
8
9
|
import { runInteractive } from "./interactive.js";
|
|
9
10
|
|
|
11
|
+
const { version } = JSON.parse(
|
|
12
|
+
readFileSync(new URL("../package.json", import.meta.url), "utf8"),
|
|
13
|
+
);
|
|
14
|
+
|
|
10
15
|
export function run(argv) {
|
|
11
16
|
const program = new Command();
|
|
12
17
|
|
|
13
18
|
program
|
|
14
19
|
.name("scrapecreators")
|
|
15
|
-
.description("CLI for the ScrapeCreators API —
|
|
16
|
-
.version(
|
|
20
|
+
.description("CLI for the ScrapeCreators API — use 180+ endpoints across 30+ platforms")
|
|
21
|
+
.version(version)
|
|
17
22
|
.option("--api-key <key>", "API key (overrides env and config)")
|
|
18
23
|
.option("--format <format>", "output format: json, table, csv, markdown", "auto")
|
|
19
24
|
.option("--json", "shorthand for compact JSON (default)")
|