Install any skill in seconds. Free to start, no credit card required.
Get Started Free →X (Twitter) data extraction and monitoring via Xquik: tweet search, user lookup, follower extraction, giveaway draws, trending topics, account monitoring with webhooks, reply/retweet/quote extraction, community and Space data, follow checks. 22 MCP tools + REST API.
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 120% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 150% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 74% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 172% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 104% | 0% |
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
| | | |---|---| | 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 |
Add to your MCP configuration:
json{ "mcpServers": { "xquik": { "type": "streamable-http", "url": "https://xquik.com/mcp", "headers": { "x-api-key": "xq_YOUR_KEY_HERE" } } } }
javascriptconst API_KEY = "xq_YOUR_KEY_HERE"; const BASE = "https://xquik.com/api/v1"; const headers = { "x-api-key": API_KEY, "Content-Type": "application/json" };
When to use: Find tweets by keyword, hashtag, or user.
Endpoint: GET /x/tweets/search?q=...
MCP tool: search-tweets
javascriptconst results = await fetch(`${BASE}/x/tweets/search?q=from:elonmusk AI`, { headers });
Pitfalls:
lookup-tweet for engagement metricsWhen to use: Get full metrics (likes, retweets, views, bookmarks) for a specific tweet.
Endpoint: GET /x/tweets/{id}
MCP tool: lookup-tweet
When to use: Get name, bio, follower/following counts, profile picture, join date.
Endpoint: GET /x/users/{username}
MCP tool: get-user-info
Pitfalls:
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
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
javascript// 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:
402 means quota exhaustedstatus: "running" and need pollingWhen 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.
javascriptconst 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());
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
javascript// 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:
X-Xquik-Signature header) before processingWhen to use: Get current trending topics for a region.
Endpoint: GET /trends?woeid=1
MCP tool: get-trends
Free, no quota consumed.
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) |
nextCursor as the after query parameterhasMore + nextCursor pattern across events, draws, extractions22 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 |
Other measured skills in the registry, with their headline benchmark lift.