x-twitter-scraper 0.12.2 → 0.12.4

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.
Files changed (41) hide show
  1. package/CHANGELOG.md +15 -5
  2. package/README.md +50 -64
  3. package/package.json +1 -1
  4. package/skills/x-twitter-scraper/SKILL.md +64 -72
  5. package/skills/x-twitter-scraper/metadata.json +2 -8
  6. package/skills/x-twitter-scraper/references/draws.md +24 -24
  7. package/skills/x-twitter-scraper/references/extractions.md +71 -62
  8. package/skills/x-twitter-scraper/references/mcp-setup.md +29 -29
  9. package/skills/x-twitter-scraper/references/mcp-tools.md +137 -121
  10. package/skills/x-twitter-scraper/references/python-examples.md +5 -5
  11. package/skills/x-twitter-scraper/references/security.md +8 -8
  12. package/skills/x-twitter-scraper/references/types-mcp-output-schemas.md +10 -19
  13. package/skills/x-twitter-scraper/references/types.md +29 -46
  14. package/skills/x-twitter-scraper/references/usage.md +5 -5
  15. package/skills/x-twitter-scraper/references/webhooks.md +28 -31
  16. package/skills/x-twitter-scraper/references/workflows.md +70 -71
  17. package/skills/x-twitter-scraper/skill-card.md +10 -10
  18. package/skills/x-twitter-scraper/skillspector-report.md +4 -4
  19. package/skills/xquik-social-research/SKILL.md +15 -15
  20. package/src/version.ts +1 -1
  21. package/version.d.mts +1 -1
  22. package/version.d.ts +1 -1
  23. package/version.js +1 -1
  24. package/version.mjs +1 -1
  25. package/skills/x-twitter-scraper/references/types-mcp-add-webhook.md +0 -14
  26. package/skills/x-twitter-scraper/references/types-mcp-check-follow.md +0 -10
  27. package/skills/x-twitter-scraper/references/types-mcp-compose-tweet.md +0 -31
  28. package/skills/x-twitter-scraper/references/types-mcp-estimate-extraction.md +0 -15
  29. package/skills/x-twitter-scraper/references/types-mcp-get-account.md +0 -26
  30. package/skills/x-twitter-scraper/references/types-mcp-get-draw.md +0 -30
  31. package/skills/x-twitter-scraper/references/types-mcp-get-events.md +0 -19
  32. package/skills/x-twitter-scraper/references/types-mcp-get-trends.md +0 -16
  33. package/skills/x-twitter-scraper/references/types-mcp-get-user-info.md +0 -16
  34. package/skills/x-twitter-scraper/references/types-mcp-list-monitors.md +0 -15
  35. package/skills/x-twitter-scraper/references/types-mcp-lookup-tweet.md +0 -25
  36. package/skills/x-twitter-scraper/references/types-mcp-refine-tweet.md +0 -13
  37. package/skills/x-twitter-scraper/references/types-mcp-run-draw.md +0 -18
  38. package/skills/x-twitter-scraper/references/types-mcp-run-extraction.md +0 -12
  39. package/skills/x-twitter-scraper/references/types-mcp-score-tweet.md +0 -16
  40. package/skills/x-twitter-scraper/references/types-mcp-search-tweets.md +0 -17
  41. package/skills/x-twitter-scraper/references/types-mcp-test-webhook.md +0 -11
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "2.6.0",
2
+ "version": "2.6.1",
3
3
  "organization": "Xquik",
4
4
  "homepage": "https://docs.xquik.com",
5
5
  "repository": "https://github.com/Xquik-dev/x-twitter-scraper",
@@ -8,13 +8,7 @@
8
8
  "security": {
9
9
  "defaultMode": "read-only-public-data",
10
10
  "credentialsHandled": ["xquik-api-key"],
11
- "credentialsNeverHandled": [
12
- "x-passwords",
13
- "2fa-codes",
14
- "cookies",
15
- "session-tokens",
16
- "recovery-codes"
17
- ],
11
+ "credentialsNeverHandled": ["x-passwords", "2fa-codes", "cookies", "session-tokens", "recovery-codes"],
18
12
  "approvalRequiredFor": [
19
13
  "private-reads",
20
14
  "write-actions",
@@ -1,43 +1,43 @@
1
- # Xquik Giveaway Draws
1
+ # Xquik giveaway draws
2
2
 
3
3
  Run transparent, auditable giveaway draws from tweet replies with configurable filters.
4
4
 
5
- ## Create Draw
5
+ ## Create a draw
6
6
 
7
7
  `POST /draws` with a `tweetUrl` (required) and optional filters:
8
8
 
9
- | Field | Type | Description |
10
- |-------|------|-------------|
11
- | `tweetUrl` | string | **Required.** Full tweet URL: `https://x.com/user/status/ID` |
12
- | `winnerCount` | number | Winners to select (default 1) |
13
- | `backupCount` | number | Backup winners to select |
14
- | `uniqueAuthorsOnly` | boolean | Count only one entry per author |
15
- | `mustRetweet` | boolean | Require participants to have retweeted |
16
- | `mustFollowUsername` | string | Username participants must follow |
17
- | `filterMinFollowers` | number | Minimum follower count |
18
- | `filterAccountAgeDays` | number | Minimum account age in days |
19
- | `filterLanguage` | string | Language code (e.g., `"en"`) |
20
- | `requiredKeywords` | string[] | Words that must appear in the reply |
21
- | `requiredHashtags` | string[] | Hashtags that must appear (e.g., `["#giveaway"]`) |
22
- | `requiredMentions` | string[] | Usernames that must be mentioned (e.g., `["@xquik"]`) |
23
-
24
- ## Complete Workflow
9
+ | Field | Type | Description |
10
+ | ---------------------- | -------- | ------------------------------------------------------------ |
11
+ | `tweetUrl` | string | **Required.** Full tweet URL: `https://x.com/user/status/ID` |
12
+ | `winnerCount` | number | Winners to select (default 1) |
13
+ | `backupCount` | number | Backup winners to select |
14
+ | `uniqueAuthorsOnly` | boolean | Count only one entry per author |
15
+ | `mustRetweet` | boolean | Require participants to have retweeted |
16
+ | `mustFollowUsername` | string | Username participants must follow |
17
+ | `filterMinFollowers` | number | Minimum follower count |
18
+ | `filterAccountAgeDays` | number | Minimum account age in days |
19
+ | `filterLanguage` | string | Language code (e.g., `"en"`) |
20
+ | `requiredKeywords` | string[] | Words that must appear in the reply |
21
+ | `requiredHashtags` | string[] | Hashtags that must appear (e.g., `["#giveaway"]`) |
22
+ | `requiredMentions` | string[] | Usernames that must be mentioned (e.g., `["@xquik"]`) |
23
+
24
+ ## Complete workflow
25
25
 
26
26
  ```javascript
27
27
  // Step 1: Create draw with filters
28
- const draw = await xquikFetch("/draws", {
29
- method: "POST",
28
+ const draw = await xquikFetch('/draws', {
29
+ method: 'POST',
30
30
  body: JSON.stringify({
31
- tweetUrl: "https://x.com/burakbayir/status/1893456789012345678",
31
+ tweetUrl: 'https://x.com/burakbayir/status/1893456789012345678',
32
32
  winnerCount: 3,
33
33
  backupCount: 2,
34
34
  uniqueAuthorsOnly: true,
35
35
  mustRetweet: true,
36
- mustFollowUsername: "burakbayir",
36
+ mustFollowUsername: 'burakbayir',
37
37
  filterMinFollowers: 50,
38
38
  filterAccountAgeDays: 30,
39
- filterLanguage: "en",
40
- requiredHashtags: ["#giveaway"],
39
+ filterLanguage: 'en',
40
+ requiredHashtags: ['#giveaway'],
41
41
  }),
42
42
  });
43
43
 
@@ -1,4 +1,4 @@
1
- # Xquik Extraction Tools
1
+ # Xquik extraction tools
2
2
 
3
3
  23 bulk data extraction tools. Each requires a specific target parameter.
4
4
 
@@ -14,20 +14,21 @@
14
14
  - [Exporting Results](#exporting-results)
15
15
  - [Estimating Usage](#estimating-usage)
16
16
 
17
- ## Tool Types
17
+ ## Tool types
18
18
 
19
- ### Tweet-Based (require `targetTweetId`)
19
+ ### Tweet-based (require `targetTweetId`)
20
20
 
21
- | Tool Type | Description |
22
- |-----------|-------------|
23
- | `reply_extractor` | Extract users who replied to a tweet |
24
- | `repost_extractor` | Extract users who retweeted a tweet |
25
- | `quote_extractor` | Extract users who quote-tweeted a tweet |
26
- | `thread_extractor` | Extract all tweets in a thread |
21
+ | Tool Type | Description |
22
+ | ------------------- | ----------------------------------------- |
23
+ | `reply_extractor` | Extract users who replied to a tweet |
24
+ | `repost_extractor` | Extract users who retweeted a tweet |
25
+ | `quote_extractor` | Extract users who quote-tweeted a tweet |
26
+ | `thread_extractor` | Extract all tweets in a thread |
27
27
  | `article_extractor` | Extract article content linked in a tweet |
28
- | `favoriters` | Extract users who favorited a tweet |
28
+ | `favoriters` | Extract users who favorited a tweet |
29
29
 
30
30
  **Example:**
31
+
31
32
  ```json
32
33
  {
33
34
  "toolType": "reply_extractor",
@@ -35,17 +36,18 @@
35
36
  }
36
37
  ```
37
38
 
38
- ### User-Based (require `targetUsername`)
39
+ ### User-based (require `targetUsername`)
39
40
 
40
- | Tool Type | Description |
41
- |-----------|-------------|
42
- | `follower_explorer` | Extract followers of an account |
43
- | `following_explorer` | Extract accounts followed by a user |
41
+ | Tool Type | Description |
42
+ | ---------------------------- | ---------------------------------------- |
43
+ | `follower_explorer` | Extract followers of an account |
44
+ | `following_explorer` | Extract accounts followed by a user |
44
45
  | `verified_follower_explorer` | Extract verified followers of an account |
45
- | `mention_extractor` | Extract tweets mentioning an account |
46
- | `post_extractor` | Extract posts from an account |
46
+ | `mention_extractor` | Extract tweets mentioning an account |
47
+ | `post_extractor` | Extract posts from an account |
47
48
 
48
49
  **Example:**
50
+
49
51
  ```json
50
52
  {
51
53
  "toolType": "follower_explorer",
@@ -55,14 +57,15 @@
55
57
 
56
58
  The `@` prefix is automatically stripped if included.
57
59
 
58
- ### User-Based by ID (require `targetUserId`)
60
+ ### User-based by ID (require `targetUserId`)
59
61
 
60
- | Tool Type | Description |
61
- |-----------|-------------|
62
- | `user_likes` | Extract tweets liked by a user |
62
+ | Tool Type | Description |
63
+ | ------------ | -------------------------------- |
64
+ | `user_likes` | Extract tweets liked by a user |
63
65
  | `user_media` | Extract media tweets from a user |
64
66
 
65
67
  **Example:**
68
+
66
69
  ```json
67
70
  {
68
71
  "toolType": "user_likes",
@@ -70,16 +73,17 @@ The `@` prefix is automatically stripped if included.
70
73
  }
71
74
  ```
72
75
 
73
- ### Community-Based (require `targetCommunityId`)
76
+ ### Community-based (require `targetCommunityId`)
74
77
 
75
- | Tool Type | Description |
76
- |-----------|-------------|
77
- | `community_extractor` | Extract members of a community |
78
- | `community_moderator_explorer` | Extract moderators of a community |
79
- | `community_post_extractor` | Extract posts from a community |
80
- | `community_search` | Search posts within a community (also requires `searchQuery`) |
78
+ | Tool Type | Description |
79
+ | ------------------------------ | ------------------------------------------------------------- |
80
+ | `community_extractor` | Extract members of a community |
81
+ | `community_moderator_explorer` | Extract moderators of a community |
82
+ | `community_post_extractor` | Extract posts from a community |
83
+ | `community_search` | Search posts within a community (also requires `searchQuery`) |
81
84
 
82
85
  **Example:**
86
+
83
87
  ```json
84
88
  {
85
89
  "toolType": "community_extractor",
@@ -87,15 +91,16 @@ The `@` prefix is automatically stripped if included.
87
91
  }
88
92
  ```
89
93
 
90
- ### List-Based (require `targetListId`)
94
+ ### List-based (require `targetListId`)
91
95
 
92
- | Tool Type | Description |
93
- |-----------|-------------|
94
- | `list_member_extractor` | Extract members of a list |
95
- | `list_post_extractor` | Extract posts from a list |
96
+ | Tool Type | Description |
97
+ | ------------------------ | --------------------------- |
98
+ | `list_member_extractor` | Extract members of a list |
99
+ | `list_post_extractor` | Extract posts from a list |
96
100
  | `list_follower_explorer` | Extract followers of a list |
97
101
 
98
102
  **Example:**
103
+
99
104
  ```json
100
105
  {
101
106
  "toolType": "list_member_extractor",
@@ -103,13 +108,14 @@ The `@` prefix is automatically stripped if included.
103
108
  }
104
109
  ```
105
110
 
106
- ### Space-Based (require `targetSpaceId`)
111
+ ### Space-based (require `targetSpaceId`)
107
112
 
108
- | Tool Type | Description |
109
- |-----------|-------------|
113
+ | Tool Type | Description |
114
+ | ---------------- | ------------------------------- |
110
115
  | `space_explorer` | Extract participants of a Space |
111
116
 
112
117
  **Example:**
118
+
113
119
  ```json
114
120
  {
115
121
  "toolType": "space_explorer",
@@ -117,14 +123,15 @@ The `@` prefix is automatically stripped if included.
117
123
  }
118
124
  ```
119
125
 
120
- ### Search-Based (require `searchQuery`)
126
+ ### Search-based (require `searchQuery`)
121
127
 
122
- | Tool Type | Description |
123
- |-----------|-------------|
124
- | `people_search` | Search for users by keyword |
128
+ | Tool Type | Description |
129
+ | ------------------------ | ------------------------------------------------------------------- |
130
+ | `people_search` | Search for users by keyword |
125
131
  | `tweet_search_extractor` | Search and extract tweets by keyword or hashtag (bulk, up to 1,000) |
126
132
 
127
133
  **Example (people search):**
134
+
128
135
  ```json
129
136
  {
130
137
  "toolType": "people_search",
@@ -133,6 +140,7 @@ The `@` prefix is automatically stripped if included.
133
140
  ```
134
141
 
135
142
  **Example (tweet search):**
143
+
136
144
  ```json
137
145
  {
138
146
  "toolType": "tweet_search_extractor",
@@ -141,30 +149,31 @@ The `@` prefix is automatically stripped if included.
141
149
  }
142
150
  ```
143
151
 
144
- ### Tweet Search Filters
152
+ ### Tweet search filters
145
153
 
146
154
  The `tweet_search_extractor` tool type supports 16 additional filter fields that are converted to X search operators and combined with `searchQuery`:
147
155
 
148
- | Field | Type | Description |
149
- |-------|------|-------------|
150
- | `fromUser` | string | Author username |
151
- | `toUser` | string | Directed to user |
152
- | `mentioning` | string | Mentions user |
153
- | `language` | string | Language code (e.g., `en`) |
154
- | `sinceDate` | string | Start date (YYYY-MM-DD) |
155
- | `untilDate` | string | End date (YYYY-MM-DD) |
156
- | `mediaType` | string | `images`, `videos`, `gifs`, or `media` |
157
- | `minFaves` | number | Minimum likes |
158
- | `minRetweets` | number | Minimum retweets |
159
- | `minReplies` | number | Minimum replies |
160
- | `verifiedOnly` | boolean | Verified authors only |
161
- | `replies` | string | `include`, `exclude`, or `only` |
162
- | `retweets` | string | `include`, `exclude`, or `only` |
163
- | `exactPhrase` | string | Exact match text |
164
- | `excludeWords` | string | Comma-separated words to exclude |
165
- | `advancedQuery` | string | Raw X search operators appended to query |
156
+ | Field | Type | Description |
157
+ | --------------- | ------- | ---------------------------------------- |
158
+ | `fromUser` | string | Author username |
159
+ | `toUser` | string | Directed to user |
160
+ | `mentioning` | string | Mentions user |
161
+ | `language` | string | Language code (e.g., `en`) |
162
+ | `sinceDate` | string | Start date (YYYY-MM-DD) |
163
+ | `untilDate` | string | End date (YYYY-MM-DD) |
164
+ | `mediaType` | string | `images`, `videos`, `gifs`, or `media` |
165
+ | `minFaves` | number | Minimum likes |
166
+ | `minRetweets` | number | Minimum retweets |
167
+ | `minReplies` | number | Minimum replies |
168
+ | `verifiedOnly` | boolean | Verified authors only |
169
+ | `replies` | string | `include`, `exclude`, or `only` |
170
+ | `retweets` | string | `include`, `exclude`, or `only` |
171
+ | `exactPhrase` | string | Exact match text |
172
+ | `excludeWords` | string | Comma-separated words to exclude |
173
+ | `advancedQuery` | string | Raw X search operators appended to query |
166
174
 
167
175
  **Example with filters:**
176
+
168
177
  ```json
169
178
  {
170
179
  "toolType": "tweet_search_extractor",
@@ -192,7 +201,7 @@ The `tweet_search_extractor` tool type supports 16 additional filter fields that
192
201
 
193
202
  Statuses: `pending`, `running`, `completed`, `failed`.
194
203
 
195
- ## Retrieving Results
204
+ ## Retrieve results
196
205
 
197
206
  ```
198
207
  GET /extractions/{id}
@@ -204,7 +213,7 @@ Returns paginated results (up to 1,000 per page). Each result includes:
204
213
  - `xFollowersCount`, `xVerified`, `xProfileImageUrl`
205
214
  - `tweetId`, `tweetText`, `tweetCreatedAt` (for tweet-based extractions)
206
215
 
207
- ## Exporting Results
216
+ ## Export results
208
217
 
209
218
  ```
210
219
  GET /extractions/{id}/export?format=csv
@@ -214,7 +223,7 @@ Formats: `csv`, `json`, `md`, `md-document`, `pdf`, `txt`, `xlsx`. 100,000 row l
214
223
 
215
224
  Exports include enrichment columns not present in the API response.
216
225
 
217
- ## Estimating Usage
226
+ ## Estimate usage
218
227
 
219
228
  ```
220
229
  POST /extractions/estimate
@@ -1,17 +1,17 @@
1
- # Xquik MCP Server Setup
1
+ # Xquik MCP server setup
2
2
 
3
3
  Connect AI agents and IDEs to Xquik through Model Context Protocol. Add the
4
4
  remote URL and complete OAuth 2.1 in the browser. API-key fallback is
5
5
  client-specific. ChatGPT custom apps require OAuth and cannot present custom
6
6
  API keys.
7
7
 
8
- | Setting | Value |
9
- |---------|-------|
10
- | Protocol | Streamable HTTP |
11
- | Endpoint | `https://xquik.com/mcp` |
12
- | Authentication | OAuth 2.1 discovery; API key fallback |
13
- Let the client negotiate the current protocol. Use its returned discovery metadata.
14
- Never share privately cached catalogs across users or credentials.
8
+ | Setting | Value |
9
+ | ----------------------------------------------------------------------------------- | ------------------------------------- |
10
+ | Protocol | Streamable HTTP |
11
+ | Endpoint | `https://xquik.com/mcp` |
12
+ | Authentication | OAuth 2.1 discovery; API key fallback |
13
+ | Let the client negotiate the current protocol. Use its returned discovery metadata. |
14
+ | Never share privately cached catalogs across users or credentials. |
15
15
 
16
16
  Xquik publishes these discovery documents:
17
17
 
@@ -103,7 +103,7 @@ async def run_xquik(api_key: str) -> str:
103
103
  return str(result.final_output)
104
104
  ```
105
105
 
106
- ## Editors and Terminals
106
+ ## Editors & terminals
107
107
 
108
108
  ### Cursor
109
109
 
@@ -192,12 +192,12 @@ Or add it to `~/.gemini/settings.json` for user scope or
192
192
 
193
193
  ```json
194
194
  {
195
- "mcpServers": {
196
- "xquik": {
197
- "type": "http",
198
- "url": "https://xquik.com/mcp"
199
- }
200
- }
195
+ "mcpServers": {
196
+ "xquik": {
197
+ "type": "http",
198
+ "url": "https://xquik.com/mcp"
199
+ }
200
+ }
201
201
  }
202
202
  ```
203
203
 
@@ -218,20 +218,20 @@ save. This interactive path works across Copilot CLI command variants.
218
218
  In an interactive Copilot CLI session, run `/mcp auth xquik`. Enterprise policy
219
219
  may block servers that are not on the organization allowlist.
220
220
 
221
- ## API-Key Fallback
221
+ ## API-key fallback
222
222
 
223
223
  Use this only when the client documents secure secret input.
224
224
  Client schemas differ. Never copy generic headers or store literal keys.
225
225
 
226
- ## MCP Server Architecture
226
+ ## MCP server architecture
227
227
 
228
228
  Use live discovery to inspect the credential-scoped catalog and tools.
229
229
  Use REST for binary support downloads.
230
230
 
231
- | Tool | Description | Usage |
232
- |------|-------------|------|
233
- | `explore` | Search the API endpoint catalog (read-only, no network calls) | Included |
234
- | `xquik` | Send confirmed Xquik API requests | Varies by endpoint |
231
+ | Tool | Description | Usage |
232
+ | --------- | ------------------------------------------------------------- | ------------------ |
233
+ | `explore` | Search the API endpoint catalog (read-only, no network calls) | Included |
234
+ | `xquik` | Send confirmed Xquik API requests | Varies by endpoint |
235
235
 
236
236
  `explore` searches the credential-scoped catalog. `xquik` executes authenticated
237
237
  operations with normalized snake_case responses. Authentication is injected, so
@@ -248,18 +248,18 @@ Private reads, writes, monitors, webhooks, persistent resources, and metered bul
248
248
  jobs require the user's explicit approval. Plan and credit changes stay
249
249
  dashboard-only.
250
250
 
251
- ## After Setup
251
+ ## After setup
252
252
 
253
253
  Use `explore` before unfamiliar operations. Use `xquik` only for the narrowest
254
254
  confirmed request.
255
255
 
256
- | Workflow | Steps |
257
- |----------|-------|
258
- | Search public posts | `explore` for the search route, then `xquik` with a bounded limit |
259
- | Set up alerts | Confirm target and ongoing usage, then create a monitor and webhook |
260
- | Run a giveaway | Confirm the source post, rules, and winner count, then create the draw |
261
- | Bulk extraction | Estimate, confirm the bound, create the job, then poll its status |
262
- | Publish a post | Confirm exact text and account, then execute the write |
256
+ | Workflow | Steps |
257
+ | ------------------- | ---------------------------------------------------------------------- |
258
+ | Search public posts | `explore` for the search route, then `xquik` with a bounded limit |
259
+ | Set up alerts | Confirm target and ongoing usage, then create a monitor and webhook |
260
+ | Run a giveaway | Confirm the source post, rules, and winner count, then create the draw |
261
+ | Bulk extraction | Estimate, confirm the bound, create the job, then poll its status |
262
+ | Publish a post | Confirm exact text and account, then execute the write |
263
263
 
264
264
  Handle failures from structured error fields:
265
265