x-twitter-scraper
Xquik - X (Twitter) Data Platform
Xquik provides a REST API, MCP server, and HMAC webhooks for X (Twitter) data. It covers tweet search, user profiles, bulk extraction (19 tools), giveaway draws, account monitoring, and trending topics.
Docs: docs.xquik.com
Quick Reference
| Base URL | https://xquik.com/api/v1 |
| Auth | x-api-key: xq_... header |
| MCP endpoint | https://xquik.com/mcp (StreamableHTTP) |
| Rate limits | 10 req/s sustained, 20 burst |
| Pricing | $20/month (1 monitor included), $5/month per extra monitor |
Prerequisites
- Xquik account with active subscription
- API key generated from the Xquik dashboard
- For MCP: configure the endpoint in your client (Claude Desktop, Claude Code, Cursor, VS Code, etc.)
Setup
MCP Server (Claude Code)
Add to your MCP configuration:
{
"mcpServers": {
"xquik": {
"type": "streamable-http",
"url": "https://xquik.com/mcp",
"headers": {
"x-api-key": "xq_YOUR_KEY_HERE"
}
}
}
}
REST API
const API_KEY = "xq_YOUR_KEY_HERE";
const BASE = "https://xquik.com/api/v1";
const headers = { "x-api-key": API_KEY, "Content-Type": "application/json" };
Core Workflows
1. Search Tweets
When to use: Find tweets by keyword, hashtag, or user.
Endpoint: GET /x/tweets/search?q=...
MCP tool: search-tweets
const results = await fetch(`${BASE}/x/tweets/search?q=from:elonmusk AI`, { headers });
Pitfalls:
- Basic results only (id, text, author, date). Use
lookup-tweetfor engagement metrics - Searches recent tweets, not full archive
2. Look Up a Tweet
When to use: Get full metrics (likes, retweets, views, bookmarks) for a specific tweet.
Endpoint: GET /x/tweets/{id}
MCP tool: lookup-tweet
3. Look Up a User Profile
When to use: Get name, bio, follower/following counts, profile picture, join date.
Endpoint: GET /x/users/{username}
MCP tool: get-user-info
Pitfalls:
- MCP returns a subset (no verified, location, createdAt, statusesCount). Use REST API for the full profile
4. Check Follow Relationship
When to use: Check if account A follows account B (both directions).
Endpoint: GET /x/followers/check?source=A&target=B
MCP tool: check-follow
5. Bulk Data Extraction (19 Tools)
When to use: Extract followers, replies, retweets, quotes, community members, list data, and more.
Workflow: Always estimate cost first, then create the job, then retrieve results.
Tool types:
| Tool Type | Target | Description |
|---|---|---|
reply_extractor |
Tweet ID | Users who replied |
repost_extractor |
Tweet ID | Users who retweeted |
quote_extractor |
Tweet ID | Users who quote-tweeted |
thread_extractor |
Tweet ID | All tweets in a thread |
article_extractor |
Tweet ID | Article content from a tweet |
follower_explorer |
Username | Followers of an account |
following_explorer |
Username | Accounts followed by a user |
verified_follower_explorer |
Username | Verified followers |
mention_extractor |
Username | Tweets mentioning an account |
post_extractor |
Username | Posts from an account |
community_extractor |
Community ID | Community members |
community_moderator_explorer |
Community ID | Community moderators |
community_post_extractor |
Community ID | Community posts |
community_search |
Community ID + query | Search within a community |
list_member_extractor |
List ID | List members |
list_post_extractor |
List ID | List posts |
list_follower_explorer |
List ID | List followers |
space_explorer |
Space ID | Space participants |
people_search |
Search query | Search for users |
MCP tools: estimate-extraction -> run-extraction -> get-extraction
// 1. Estimate cost
const estimate = await fetch(`${BASE}/extractions/estimate`, {
method: "POST", headers,
body: JSON.stringify({ toolType: "follower_explorer", targetUsername: "elonmusk" }),
}).then(r => r.json());
if (!estimate.allowed) return; // Would exceed monthly quota
// 2. Create job
const job = await fetch(`${BASE}/extractions`, {
method: "POST", headers,
body: JSON.stringify({ toolType: "follower_explorer", targetUsername: "elonmusk" }),
}).then(r => r.json());
// 3. Retrieve results (paginated)
const results = await fetch(`${BASE}/extractions/${job.id}`, { headers }).then(r => r.json());
Pitfalls:
- Always call estimate first.
402means quota exhausted - Large jobs return
status: "running"and need polling - Export (CSV/XLSX/MD) capped at 50,000 rows
6. Giveaway Draws
When to use: Pick random winners from tweet replies with configurable filters.
Endpoint: POST /draws
MCP tool: run-draw
Available filters: mustRetweet, mustFollowUsername, filterMinFollowers, filterAccountAgeDays, filterLanguage, requiredKeywords, requiredHashtags, requiredMentions, uniqueAuthorsOnly.
const draw = await fetch(`${BASE}/draws`, {
method: "POST", headers,
body: JSON.stringify({
tweetUrl: "https://x.com/user/status/123456789",
winnerCount: 3,
uniqueAuthorsOnly: true,
mustRetweet: true,
}),
}).then(r => r.json());
7. Real-Time Monitoring
When to use: Track when an account tweets, gets replies, gains/loses followers.
Workflow: Create a monitor, optionally register a webhook for push notifications.
Event types: tweet.new, tweet.reply, tweet.quote, tweet.retweet, follower.gained, follower.lost
MCP tools: add-monitor -> add-webhook -> test-webhook
// Create monitor
await fetch(`${BASE}/monitors`, {
method: "POST", headers,
body: JSON.stringify({
username: "elonmusk",
eventTypes: ["tweet.new", "follower.gained"],
}),
});
// Register webhook (save the secret!)
const webhook = await fetch(`${BASE}/webhooks`, {
method: "POST", headers,
body: JSON.stringify({
url: "https://your-server.com/webhook",
eventTypes: ["tweet.new"],
}),
}).then(r => r.json());
Pitfalls:
- Webhook secret is shown only once at creation
- Verify HMAC signature (
X-Xquik-Signatureheader) before processing - Respond within 10 seconds; queue slow processing for async
8. Trending Topics
When to use: Get current trending topics for a region.
Endpoint: GET /trends?woeid=1
MCP tool: get-trends
Free, no quota consumed.
Error Handling
Retry only 429 and 5xx. Never retry other 4xx.
| Status | Meaning | Action |
|---|---|---|
| 400 | Invalid request | Fix parameters |
| 401 | Bad API key | Check key |
| 402 | No subscription or quota exhausted | Subscribe or wait for reset |
| 404 | Not found | Resource doesn't exist |
| 429 | Rate limited | Retry with backoff, respect Retry-After |
| 500+ | Server error | Retry with exponential backoff (max 3) |
Conventions
- IDs are strings (bigints). Never parse as numbers
- Timestamps: ISO 8601 UTC
- Cursors are opaque. Pass
nextCursoras theafterquery parameter - Pagination:
hasMore+nextCursorpattern across events, draws, extractions
MCP Tool Reference
22 tools available through the MCP server:
| Tool | Purpose |
|---|---|
search-tweets |
Search tweets by keyword/hashtag |
lookup-tweet |
Get tweet by ID with full metrics |
get-user-info |
User profile lookup |
check-follow |
Check follow relationship |
get-trends |
Trending topics by region |
add-monitor |
Start monitoring an account |
remove-monitor |
Stop monitoring |
list-monitors |
List active monitors |
get-events |
Poll for monitor events |
get-event |
Get single event details |
add-webhook |
Register webhook endpoint |
remove-webhook |
Delete webhook |
list-webhooks |
List webhooks |
test-webhook |
Send test payload |
run-draw |
Run giveaway draw |
list-draws |
List past draws |
get-draw |
Get draw results with winners |
estimate-extraction |
Preview extraction cost |
run-extraction |
Start bulk extraction |
list-extractions |
List extraction jobs |
get-extraction |
Get extraction results |
get-account |
Check subscription and usage |
More from davepoon/buildwithclaude
file-organizer
Intelligently organizes your files and folders across your computer by understanding context, finding duplicates, suggesting better structures, and automating cleanup tasks. Reduces cognitive load and keeps your digital workspace tidy without manual effort.
212xlsx
Comprehensive spreadsheet creation, editing, and analysis with support for formulas, formatting, data analysis, and visualization. When Claude needs to work with spreadsheets (.xlsx, .xlsm, .csv, .tsv, etc) for: (1) Creating new spreadsheets with formulas and formatting, (2) Reading or analyzing data, (3) Modify existing spreadsheets while preserving formulas, (4) Data analysis and visualization in spreadsheets, or (5) Recalculating formulas
187content-research-writer
Assists in writing high-quality content by conducting research, adding citations, improving hooks, iterating on outlines, and providing real-time feedback on each section. Transforms your writing process from solo effort to collaborative partnership.
141docx
Comprehensive document creation, editing, and analysis with support for tracked changes, comments, formatting preservation, and text extraction. When Claude needs to work with professional documents (.docx files) for: (1) Creating new documents, (2) Modifying or editing content, (3) Working with tracked changes, (4) Adding comments, or any other document tasks
122auth-patterns
This skill should be used when the user asks about "authentication in Next.js", "NextAuth", "Auth.js", "middleware auth", "protected routes", "session management", "JWT", "login flow", or needs guidance on implementing authentication and authorization in Next.js applications.
104server-actions
This skill should be used when the user asks about "Server Actions", "form handling in Next.js", "mutations", "useFormState", "useFormStatus", "revalidatePath", "revalidateTag", or needs guidance on data mutations and form submissions in Next.js App Router.
100