Skip to content

Commit c559e52

Browse files
simonbalfeclaude
andcommitted
v0.2.0: full 1:1 parity with API (58 commands)
Tracks @creatorcrawl/sdk v0.2.0. Adds all missing platform subcommands to reach 1:1 parity with the API: TikTok (+13): creator-transcripts, followers, following, live, song, song-videos, top, hashtag, popular-creators, popular-hashtags, popular-songs, popular-videos, trending Instagram (+5): basic-profile, highlights, highlight, search-reels, embed YouTube (+2): search-hashtag, trending-shorts LinkedIn ads: command takes <keyword> not <query> to match SDK params. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent 7b5d017 commit c559e52

6 files changed

Lines changed: 129 additions & 29 deletions

File tree

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "creatorcrawl",
3-
"version": "0.1.0",
3+
"version": "0.2.0",
44
"description": "Official CLI for CreatorCrawl. Scrape TikTok, Instagram, YouTube, LinkedIn, Twitter/X, and Reddit profiles, posts, comments, transcripts, ads, and trending data from your terminal or shell scripts.",
55
"license": "MIT",
66
"author": "CreatorCrawl <support@creatorcrawl.com>",
@@ -45,7 +45,7 @@
4545
"node": ">=18"
4646
},
4747
"dependencies": {
48-
"@creatorcrawl/sdk": "^0.1.0",
48+
"@creatorcrawl/sdk": "^0.2.0",
4949
"commander": "^12.1.0"
5050
},
5151
"devDependencies": {

pnpm-lock.yaml

Lines changed: 5 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/commands/instagram.ts

Lines changed: 31 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,24 +7,29 @@ export function registerInstagram(program: Command, getClient: () => CreatorCraw
77

88
instagram
99
.command('profile <handle>')
10-
.description('Get Instagram profile by handle')
10+
.description('Get an Instagram profile by handle')
1111
.action((handle: string) => run(() => getClient().instagram.profile({ handle })))
1212

13+
instagram
14+
.command('basic-profile <userId>')
15+
.description('Get a basic Instagram profile by numeric user ID')
16+
.action((userId: string) => run(() => getClient().instagram.basicProfile({ userId })))
17+
1318
instagram
1419
.command('posts <handle>')
1520
.description("Get an Instagram user's recent posts")
1621
.action((handle: string) => run(() => getClient().instagram.posts({ handle })))
1722

18-
instagram
19-
.command('post <url>')
20-
.description('Get info for a single Instagram post')
21-
.action((url: string) => run(() => getClient().instagram.postInfo({ url })))
22-
2323
instagram
2424
.command('reels <handle>')
2525
.description("Get an Instagram user's recent reels")
2626
.action((handle: string) => run(() => getClient().instagram.reels({ handle })))
2727

28+
instagram
29+
.command('post <url>')
30+
.description('Get info for a single Instagram post')
31+
.action((url: string) => run(() => getClient().instagram.postInfo({ url })))
32+
2833
instagram
2934
.command('comments <url>')
3035
.description('Get comments on an Instagram post')
@@ -34,4 +39,24 @@ export function registerInstagram(program: Command, getClient: () => CreatorCraw
3439
.command('transcript <url>')
3540
.description('Get the transcript of an Instagram reel')
3641
.action((url: string) => run(() => getClient().instagram.transcript({ url })))
42+
43+
instagram
44+
.command('highlights <handle>')
45+
.description("List an Instagram user's story highlights")
46+
.action((handle: string) => run(() => getClient().instagram.storyHighlights({ handle })))
47+
48+
instagram
49+
.command('highlight <id>')
50+
.description('Get the contents of one Instagram highlight by ID')
51+
.action((id: string) => run(() => getClient().instagram.highlightsDetails({ id })))
52+
53+
instagram
54+
.command('search-reels <query>')
55+
.description('Search Instagram reels by keyword')
56+
.action((query: string) => run(() => getClient().instagram.searchReels({ query })))
57+
58+
instagram
59+
.command('embed <handle>')
60+
.description('Get embeddable Instagram profile HTML')
61+
.action((handle: string) => run(() => getClient().instagram.embed({ handle })))
3762
}

src/commands/linkedin.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,9 @@ export function registerLinkedIn(program: Command, getClient: () => CreatorCrawl
2626
.action((url: string) => run(() => getClient().linkedin.post({ url })))
2727

2828
linkedin
29-
.command('ads <query>')
30-
.description('Search the LinkedIn Ad Library')
31-
.action((query: string) => run(() => getClient().linkedin.adsSearch({ query })))
29+
.command('ads <keyword>')
30+
.description('Search the LinkedIn Ad Library by keyword (or pass a company name)')
31+
.action((keyword: string) => run(() => getClient().linkedin.adsSearch({ keyword })))
3232

3333
linkedin
3434
.command('ad <url>')

src/commands/tiktok.ts

Lines changed: 69 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ export function registerTiktok(program: Command, getClient: () => CreatorCrawl):
77

88
tiktok
99
.command('profile <handle>')
10-
.description('Get TikTok profile by handle')
10+
.description('Get a TikTok profile by handle')
1111
.action((handle: string) => run(() => getClient().tiktok.profile({ handle })))
1212

1313
tiktok
@@ -25,6 +25,41 @@ export function registerTiktok(program: Command, getClient: () => CreatorCrawl):
2525
.description('Get the transcript of a TikTok video')
2626
.action((url: string) => run(() => getClient().tiktok.transcript({ url })))
2727

28+
tiktok
29+
.command('comments <url>')
30+
.description('Get comments on a TikTok video')
31+
.action((url: string) => run(() => getClient().tiktok.comments({ url })))
32+
33+
tiktok
34+
.command('creator-transcripts <handle>')
35+
.description("Bulk transcripts of a creator's recent videos")
36+
.action((handle: string) => run(() => getClient().tiktok.creatorTranscripts({ handle })))
37+
38+
tiktok
39+
.command('followers <handle>')
40+
.description("Get a user's followers")
41+
.action((handle: string) => run(() => getClient().tiktok.followers({ handle })))
42+
43+
tiktok
44+
.command('following <handle>')
45+
.description("Get accounts a user follows")
46+
.action((handle: string) => run(() => getClient().tiktok.following({ handle })))
47+
48+
tiktok
49+
.command('live <handle>')
50+
.description("Get a user's live stream info")
51+
.action((handle: string) => run(() => getClient().tiktok.live({ handle })))
52+
53+
tiktok
54+
.command('song <clipId>')
55+
.description('Get details for a TikTok song / sound')
56+
.action((clipId: string) => run(() => getClient().tiktok.songDetails({ clipId })))
57+
58+
tiktok
59+
.command('song-videos <clipId>')
60+
.description('Get videos that use a TikTok song / sound')
61+
.action((clipId: string) => run(() => getClient().tiktok.songVideos({ clipId })))
62+
2863
tiktok
2964
.command('search <query>')
3065
.description('Search TikTok by keyword')
@@ -36,7 +71,37 @@ export function registerTiktok(program: Command, getClient: () => CreatorCrawl):
3671
.action((query: string) => run(() => getClient().tiktok.searchUsers({ query })))
3772

3873
tiktok
39-
.command('comments <url>')
40-
.description('Get comments on a TikTok video')
41-
.action((url: string) => run(() => getClient().tiktok.comments({ url })))
74+
.command('top <query>')
75+
.description('TikTok top search results (users + videos + sounds)')
76+
.action((query: string) => run(() => getClient().tiktok.searchTop({ query })))
77+
78+
tiktok
79+
.command('hashtag <hashtag>')
80+
.description('Get videos under a TikTok hashtag')
81+
.action((hashtag: string) => run(() => getClient().tiktok.searchHashtag({ hashtag })))
82+
83+
tiktok
84+
.command('popular-creators')
85+
.description('Popular TikTok creators (trending)')
86+
.action(() => run(() => getClient().tiktok.popularCreators()))
87+
88+
tiktok
89+
.command('popular-hashtags')
90+
.description('Popular TikTok hashtags (trending)')
91+
.action(() => run(() => getClient().tiktok.popularHashtags()))
92+
93+
tiktok
94+
.command('popular-songs')
95+
.description('Popular TikTok songs (trending)')
96+
.action(() => run(() => getClient().tiktok.popularSongs()))
97+
98+
tiktok
99+
.command('popular-videos')
100+
.description('Popular TikTok videos (trending)')
101+
.action(() => run(() => getClient().tiktok.popularVideos()))
102+
103+
tiktok
104+
.command('trending [region]')
105+
.description('Current TikTok trending feed for a region (e.g. US)')
106+
.action((region?: string) => run(() => getClient().tiktok.trendingFeed({ region })))
42107
}

src/commands/youtube.ts

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ export function registerYoutube(program: Command, getClient: () => CreatorCrawl)
77

88
youtube
99
.command('channel <handle>')
10-
.description('Get YouTube channel by handle')
10+
.description('Get a YouTube channel by handle (or pass an @handle or channelId)')
1111
.action((handle: string) => run(() => getClient().youtube.channel({ handle })))
1212

1313
youtube
@@ -25,11 +25,6 @@ export function registerYoutube(program: Command, getClient: () => CreatorCrawl)
2525
.description('Get info for a single YouTube video')
2626
.action((url: string) => run(() => getClient().youtube.video({ url })))
2727

28-
youtube
29-
.command('search <query>')
30-
.description('Search YouTube by keyword')
31-
.action((query: string) => run(() => getClient().youtube.search({ query })))
32-
3328
youtube
3429
.command('transcript <url>')
3530
.description('Get the transcript of a YouTube video')
@@ -41,7 +36,22 @@ export function registerYoutube(program: Command, getClient: () => CreatorCrawl)
4136
.action((url: string) => run(() => getClient().youtube.comments({ url })))
4237

4338
youtube
44-
.command('playlist <url>')
45-
.description('Get YouTube playlist contents')
46-
.action((url: string) => run(() => getClient().youtube.playlist({ url })))
39+
.command('search <query>')
40+
.description('Search YouTube by keyword')
41+
.action((query: string) => run(() => getClient().youtube.search({ query })))
42+
43+
youtube
44+
.command('search-hashtag <hashtag>')
45+
.description('Search YouTube by hashtag')
46+
.action((hashtag: string) => run(() => getClient().youtube.searchHashtag({ hashtag })))
47+
48+
youtube
49+
.command('playlist <playlist_id>')
50+
.description('Get YouTube playlist contents by playlist ID')
51+
.action((playlist_id: string) => run(() => getClient().youtube.playlist({ playlist_id })))
52+
53+
youtube
54+
.command('trending-shorts')
55+
.description('Currently trending YouTube shorts')
56+
.action(() => run(() => getClient().youtube.trendingShorts()))
4757
}

0 commit comments

Comments
 (0)