Agent skill

X Twitter Scraper

by LeoYeAI in LeoYeAI/openclaw-master-skills

X API & Twitter automation skill. An agent skill from LeoYeAI/openclaw-master-skills.

MITAuto-check passedBackend & APIs

Install X Twitter Scraper

skills CLI
$ npx skills add LeoYeAI/openclaw-master-skills --skill x-twitter-scraper -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install LeoYeAI/openclaw-master-skills x-twitter-scraper --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/LeoYeAI/openclaw-master-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/xquik-x-twitter .claude/skills/x-twitter-scraper && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
x-twitter-scraper
GitHub stars
2.2k
Token cost
~7.1k tokens
SKILL.md length
2,031 words
Files
10 (incl. references)
Skills in repo
1,235
Repo updated
First seen
Licence
MIT

At a glance

X API & Twitter automation skill. An agent skill from LeoYeAI/openclaw-master-skills.

  • Tasks that involve Social media posts
  • SKILL.md covers Quick Reference, Authentication, Choosing the Right Endpoint and Error Handling & Retry, plus 9 more sections
  • Reaches xquik.com and x.com; needs API_KEY and WEBHOOK_SECRET
  • Tasks that involve Web scraping

What it does

X Twitter Scraper is an agent skill from LeoYeAI/openclaw-master-skills. X API & Twitter automation skill. Build integrations with the Xquik REST API, MCP server & webhooks: tweet search, user lookup, follower extraction, engagement metrics, giveaway draws, trending topics, account monitoring, reply/retweet/quote extraction, community & Space data, write actions (tweet, like, retweet, follow, DM, profile, media upload), Telegram integrations.

Its SKILL.md is about 7.1k tokens, which your agent loads only when the skill is triggered. The skill folder holds 10 other files, including reference files (for example `_meta.json`, `metadata.json` and `references/api-endpoints.md`).

It sits in Backend & APIs, covering Social media posts, Web scraping and Webhooks. It works with X (Twitter), Model Context Protocol, Telegram and Python. The repository describes itself as: 🧠 Curated collection of 1209+ best OpenClaw skills — weekly updated by MyClaw.ai. The licence is MIT.

When your agent uses it

  • Tasks that involve Social media posts
  • Tasks that involve Web scraping
  • Tasks that involve Webhooks

Example prompts

  • “/x-twitter-scraper”

Requirements

  • Python 3
  • A credential in XQUIK_API_KEY
  • A credential in API_KEY

What it can do on your machine

Read from SKILL.md and the folder at commit e5199b5. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    No scripts in the folder and no shell commands in SKILL.md (its code samples are javascript).

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Hosts in commands or code, which the agent is likely to contact:

    • xquik.com
    • x.com

    Also links to:

    • docs.xquik.com

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names these keys or tokens, usually read from environment variables:

    • API_KEY
    • WEBHOOK_SECRET
    • XQUIK_WEBHOOK_SECRET

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

X Twitter Scraper loads about 7.1k tokens when it runs, and up to ~38k if it reads all its reference files. Until then it costs about 98 tokens; SKILL.md has 2,031 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~98
When it runs · the whole SKILL.md, loaded when a task matches
~7.1k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~38k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from LeoYeAI/openclaw-master-skills at commit e5199b5, republished under its MIT licence (© LeoYeAI). 2,031 words, ~7,104 tokens.

Download SKILL.mdSave it as .claude/skills/x-twitter-scraper/SKILL.md (or your agent's skills folder). This skill also uses 9 other files; get the full folder from GitHub.
name
x-twitter-scraper
description
X API & Twitter automation skill. Build integrations with the Xquik REST API, MCP server & webhooks: tweet search, user lookup, follower extraction, engagement metrics, giveaway draws, trending topics, account monitoring, reply/retweet/quote extraction, community & Space data, write actions (tweet, like, retweet, follow, DM, profile, media upload), Telegram integrations.
homepage
https://xquik.com
read_when
Building X/Twitter API integrations or automations, Searching tweets, looking up users, or checking follow relationships, Extracting bulk data from X/Twitter…

Xquik API Integration

Xquik is an X (Twitter) real-time data platform providing a REST API, HMAC webhooks, and an MCP server for AI agents. It covers account monitoring, bulk data extraction (20 tools), giveaway draws, tweet/user lookups, media downloads, follow checks, trending topics, write actions (tweet, like, retweet, follow, DM, profile, media upload, communities), and Telegram integrations.

Quick Reference

Base URLhttps://xquik.com/api/v1
Authx-api-key: xq_... header (64 hex chars after xq_ prefix)
MCP endpointhttps://xquik.com/mcp (StreamableHTTP, same API key)
Rate limits10 req/s sustained, 20 burst (API); 60 req/s sustained, 100 burst (general)
Pricing$20/month base (1 monitor included), $5/month per extra monitor
QuotaMonthly usage cap. 402 when exhausted. Enable extra usage from dashboard for overage (tiered spending limits: $5/$7/$10/$15/$25)
Docsdocs.xquik.com
HTTPS onlyPlain HTTP gets 301 redirect

Authentication

Every request requires an API key via the x-api-key header. Keys start with xq_ and are generated from the Xquik dashboard. The key is shown only once at creation; store it securely.

javascript
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" };

For Python examples, see references/python-examples.md.

Choosing the Right Endpoint

GoalEndpointNotes
Get a single tweet by ID/URLGET /x/tweets/{id}Full metrics: likes, retweets, views, bookmarks, author info
Search tweets by keyword/hashtagGET /x/tweets/search?q=...Tweet info with optional engagement metrics (likeCount, retweetCount, replyCount)
Get a user profileGET /x/users/{username}Name, bio, follower/following counts, profile picture, location, created date, statuses count
Check follow relationshipGET /x/followers/check?source=A&target=BBoth directions
Get trending topicsGET /trends?woeid=1Regional trends by WOEID. Metered
Get radar (trending news)GET /radar?source=hacker_newsFree, 7 sources: Google Trends, Hacker News, Polymarket, TrustMRR, Wikipedia, GitHub, Reddit
Monitor an X accountPOST /monitorsTrack tweets, replies, quotes, retweets, follower changes
Update monitor event typesPATCH /monitors/{id}Change subscribed events or pause/resume
Poll for eventsGET /eventsCursor-paginated, filter by monitorId/eventType
Receive events in real timePOST /webhooksHMAC-signed delivery to your HTTPS endpoint
Update webhookPATCH /webhooks/{id}Change URL, event types, or pause/resume
Run a giveaway drawPOST /drawsPick random winners from tweet replies
Download tweet mediaPOST /x/media/downloadSingle (tweetInput) or bulk (tweetIds[], up to 50). Returns gallery URL. First download metered, cached free
Extract bulk dataPOST /extractions20 tool types, always estimate cost first
Check account/usageGET /accountPlan status, monitors, usage percent
Link your X identityPUT /account/x-identityRequired for own-account detection in style analysis
Analyze tweet stylePOST /stylesCache recent tweets for style reference
Save custom stylePUT /styles/{username}Save custom style from tweet texts (free)
Get cached styleGET /styles/{username}Retrieve previously cached tweet style
Compare stylesGET /styles/compare?username1=A&username2=BSide-by-side comparison of two cached styles
Get tweet performanceGET /styles/{username}/performanceLive engagement metrics for cached tweets
Save a tweet draftPOST /draftsStore drafts for later
List/manage draftsGET /drafts, DELETE /drafts/{id}Retrieve and delete saved drafts
Compose a tweetPOST /compose3-step workflow (compose, refine, score). Free, algorithm-backed
Connect an X accountPOST /x/accountsCredentials encrypted at rest. Required for write actions
List connected accountsGET /x/accountsFree
Re-authenticate accountPOST /x/accounts/{id}/reauthWhen session expires
Post a tweetPOST /x/tweetsFrom a connected account. Supports replies, media, note tweets, communities
Delete a tweetDELETE /x/tweets/{id}Must own the tweet via connected account
Like / Unlike a tweetPOST / DELETE /x/tweets/{id}/likeMetered
RetweetPOST /x/tweets/{id}/retweetMetered
Follow / Unfollow a userPOST / DELETE /x/users/{id}/followMetered
Send a DMPOST /x/dm/{userId}Text, media, reply to message
Update profilePATCH /x/profileName, bio, location, URL
Update avatarPATCH /x/profile/avatarFormData with image file (max 700 KB)
Update bannerPATCH /x/profile/bannerFormData with image file (max 2 MB)
Upload mediaPOST /x/mediaFormData. Returns media ID for tweet attachment
Community actionsPOST /x/communities, POST /x/communities/{id}/joinCreate, delete, join, leave
Create Telegram integrationPOST /integrationsReceive monitor events in Telegram. Free
Manage integrationsGET /integrations, PATCH /integrations/{id}List, update, delete, test, deliveries. Free

See references/mcp-tools.md for tool selection rules, common mistakes, and unsupported operations.

Error Handling & Retry

All errors return { "error": "error_code" }. Key error codes:

StatusCodeAction
400invalid_input, invalid_id, invalid_params, invalid_tweet_url, invalid_tweet_id, invalid_username, invalid_tool_type, invalid_format, invalid_json, missing_query, missing_params, webhook_inactive, no_mediaFix the request, do not retry
401unauthenticatedCheck API key
402no_subscription, subscription_inactive, usage_limit_reached, no_addon, extra_usage_disabled, extra_usage_requires_v2, frozen, overage_limit_reachedSubscribe, enable extra usage, or wait for quota reset
403monitor_limit_reached, api_key_limit_reachedDelete a monitor/key or add capacity
404not_found, user_not_found, tweet_not_found, style_not_found, draft_not_foundResource doesn't exist or belongs to another account
409monitor_already_existsResource already exists, use the existing one
422login_failedX credential verification failed. Check credentials
429x_api_rate_limitedRate limited. Retry with exponential backoff, respect Retry-After header
500internal_errorRetry with backoff
502stream_registration_failed, x_api_unavailable, x_api_unauthorized, delivery_failedRetry with backoff

Retry only 429 and 5xx. Never retry 4xx (except 429). Max 3 retries with exponential backoff:

javascript
async function xquikFetch(path, options = {}) {
  const baseDelay = 1000;

  for (let attempt = 0; attempt <= 3; attempt++) {
    const response = await fetch(`${BASE}${path}`, {
      ...options,
      headers: { ...headers, ...options.headers },
    });

    if (response.ok) return response.json();

    const retryable = response.status === 429 || response.status >= 500;
    if (!retryable || attempt === 3) {
      const error = await response.json();
      throw new Error(`Xquik API ${response.status}: ${error.error}`);
    }

    const retryAfter = response.headers.get("Retry-After");
    const delay = retryAfter
      ? parseInt(retryAfter, 10) * 1000
      : baseDelay * Math.pow(2, attempt) + Math.random() * 1000;

    await new Promise((resolve) => setTimeout(resolve, delay));
  }
}

Cursor Pagination

Events, draws, extractions, and extraction results use cursor-based pagination. When more results exist, the response includes hasMore: true and a nextCursor string. Pass nextCursor as the after query parameter.

javascript
async function fetchAllPages(path, dataKey) {
  const results = [];
  let cursor;

  while (true) {
    const params = new URLSearchParams({ limit: "100" });
    if (cursor) params.set("after", cursor);

    const data = await xquikFetch(`${path}?${params}`);
    results.push(...data[dataKey]);

    if (!data.hasMore) break;
    cursor = data.nextCursor;
  }

  return results;
}

Cursors are opaque strings. Never decode or construct them manually.

Extraction Tools (20 Types)

Extractions run bulk data collection jobs. The complete workflow: estimate cost, create job, retrieve results, optionally export.

Tool Types and Required Parameters
Tool TypeRequired FieldDescription
reply_extractortargetTweetIdUsers who replied to a tweet
repost_extractortargetTweetIdUsers who retweeted a tweet
quote_extractortargetTweetIdUsers who quote-tweeted a tweet
thread_extractortargetTweetIdAll tweets in a thread
article_extractortargetTweetIdArticle content linked in a tweet
follower_explorertargetUsernameFollowers of an account
following_explorertargetUsernameAccounts followed by a user
verified_follower_explorertargetUsernameVerified followers of an account
mention_extractortargetUsernameTweets mentioning an account
post_extractortargetUsernamePosts from an account
community_extractortargetCommunityIdMembers of a community
community_moderator_explorertargetCommunityIdModerators of a community
community_post_extractortargetCommunityIdPosts from a community
community_searchtargetCommunityId + searchQuerySearch posts within a community
list_member_extractortargetListIdMembers of a list
list_post_extractortargetListIdPosts from a list
list_follower_explorertargetListIdFollowers of a list
space_explorertargetSpaceIdParticipants of a Space
people_searchsearchQuerySearch for users by keyword
tweet_search_extractorsearchQuerySearch and extract tweets by keyword or hashtag (bulk, up to 1,000)
Complete Extraction Workflow
javascript
// Step 1: Estimate cost before running (pass resultsLimit if you only need a sample)
const estimate = await xquikFetch("/extractions/estimate", {
  method: "POST",
  body: JSON.stringify({
    toolType: "follower_explorer",
    targetUsername: "elonmusk",
    resultsLimit: 1000, // optional: limit to 1,000 results instead of all
  }),
});
// Response: { allowed: true, estimatedResults: 195000000, usagePercent: 12, projectedPercent: 98 }

if (!estimate.allowed) {
  console.log("Extraction would exceed monthly quota");
  return;
}

// Step 2: Create extraction job (pass same resultsLimit to match estimate)
const job = await xquikFetch("/extractions", {
  method: "POST",
  body: JSON.stringify({
    toolType: "follower_explorer",
    targetUsername: "elonmusk",
    resultsLimit: 1000,
  }),
});
// Response: { id: "77777", toolType: "follower_explorer", status: "completed", totalResults: 195000 }

// Step 3: Poll until complete (large jobs may return status "running")
while (job.status === "pending" || job.status === "running") {
  await new Promise((r) => setTimeout(r, 2000));
  job = await xquikFetch(`/extractions/${job.id}`);
}

// Step 4: Retrieve paginated results (up to 1,000 per page)
let cursor;
const allResults = [];

while (true) {
  const path = `/extractions/${job.id}${cursor ? `?after=${cursor}` : ""}`;
  const page = await xquikFetch(path);
  allResults.push(...page.results);
  // Each result: { xUserId, xUsername, xDisplayName, xFollowersCount, xVerified, xProfileImageUrl }

  if (!page.hasMore) break;
  cursor = page.nextCursor;
}

// Step 5: Export as CSV/XLSX/Markdown (50,000 row limit)
const exportUrl = `${BASE}/extractions/${job.id}/export?format=csv`;
const csvResponse = await fetch(exportUrl, { headers });
const csvData = await csvResponse.text();
Orchestrating Multiple Extractions

When building applications that combine multiple extraction tools (e.g., market research), run them sequentially and respect rate limits:

javascript
async function marketResearchPipeline(username) {
  // 1. Get user profile
  const user = await xquikFetch(`/x/users/${username}`);

  // 2. Extract their recent posts
  const postsJob = await xquikFetch("/extractions", {
    method: "POST",
    body: JSON.stringify({ toolType: "post_extractor", targetUsername: username }),
  });

  // 3. Search for related conversations
  const tweets = await xquikFetch(`/x/tweets/search?q=from:${username}`);

  // 4. For top tweets, extract replies for sentiment analysis
  for (const tweet of tweets.tweets.slice(0, 5)) {
    const estimate = await xquikFetch("/extractions/estimate", {
      method: "POST",
      body: JSON.stringify({ toolType: "reply_extractor", targetTweetId: tweet.id }),
    });

    if (estimate.allowed) {
      const repliesJob = await xquikFetch("/extractions", {
        method: "POST",
        body: JSON.stringify({ toolType: "reply_extractor", targetTweetId: tweet.id }),
      });
      // Process replies...
    }
  }

  // 5. Get trending topics for context
  const trends = await xquikFetch("/trends?woeid=1");

  return { user, posts: postsJob, tweets, trends };
}

Giveaway Draws

Run transparent, auditable giveaway draws from tweet replies with configurable filters.

Create Draw Request

POST /draws with a tweetUrl (required) and optional filters:

FieldTypeDescription
tweetUrlstringRequired. Full tweet URL: https://x.com/user/status/ID
winnerCountnumberWinners to select (default 1)
backupCountnumberBackup winners to select
uniqueAuthorsOnlybooleanCount only one entry per author
mustRetweetbooleanRequire participants to have retweeted
mustFollowUsernamestringUsername participants must follow
filterMinFollowersnumberMinimum follower count
filterAccountAgeDaysnumberMinimum account age in days
filterLanguagestringLanguage code (e.g., "en")
requiredKeywordsstring[]Words that must appear in the reply
requiredHashtagsstring[]Hashtags that must appear (e.g., ["#giveaway"])
requiredMentionsstring[]Usernames that must be mentioned (e.g., ["@xquik"])
Complete Draw Workflow
javascript
// Step 1: Create draw with filters
const draw = await xquikFetch("/draws", {
  method: "POST",
  body: JSON.stringify({
    tweetUrl: "https://x.com/burakbayir/status/1893456789012345678",
    winnerCount: 3,
    backupCount: 2,
    uniqueAuthorsOnly: true,
    mustRetweet: true,
    mustFollowUsername: "burakbayir",
    filterMinFollowers: 50,
    filterAccountAgeDays: 30,
    filterLanguage: "en",
    requiredHashtags: ["#giveaway"],
  }),
});
// Response:
// {
//   id: "42",
//   tweetId: "1893456789012345678",
//   tweetUrl: "https://x.com/burakbayir/status/1893456789012345678",
//   tweetText: "Giveaway! RT + Follow to enter...",
//   tweetAuthorUsername: "burakbayir",
//   tweetLikeCount: 5200,
//   tweetRetweetCount: 3100,
//   tweetReplyCount: 890,
//   tweetQuoteCount: 45,
//   status: "completed",
//   totalEntries: 890,
//   validEntries: 312,
//   createdAt: "2026-02-24T10:00:00.000Z",
//   drawnAt: "2026-02-24T10:01:00.000Z"
// }

// Step 2: Get draw details with winners
const details = await xquikFetch(`/draws/${draw.id}`);
// details.winners: [
//   { position: 1, authorUsername: "winner1", tweetId: "...", isBackup: false },
//   { position: 2, authorUsername: "winner2", tweetId: "...", isBackup: false },
//   { position: 3, authorUsername: "winner3", tweetId: "...", isBackup: false },
//   { position: 4, authorUsername: "backup1", tweetId: "...", isBackup: true },
//   { position: 5, authorUsername: "backup2", tweetId: "...", isBackup: true },
// ]

// Step 3: Export results
const exportUrl = `${BASE}/draws/${draw.id}/export?format=csv`;

Webhook Event Handling

Webhooks deliver events to your HTTPS endpoint with HMAC-SHA256 signatures. Each delivery is a POST with X-Xquik-Signature header and JSON body containing eventType, username, and data.

Webhook Handler (Express)
javascript
import express from "express";
import { createHmac, timingSafeEqual, createHash } from "node:crypto";

const WEBHOOK_SECRET = process.env.XQUIK_WEBHOOK_SECRET;
const processedHashes = new Set(); // Use Redis/DB in production

function verifySignature(payload, signature, secret) {
  const expected = "sha256=" + createHmac("sha256", secret).update(payload).digest("hex");
  return timingSafeEqual(Buffer.from(expected), Buffer.from(signature));
}

const app = express();

app.post("/webhook", express.raw({ type: "application/json" }), (req, res) => {
  const signature = req.headers["x-xquik-signature"];
  const payload = req.body.toString();

  // 1. Verify HMAC signature (constant-time comparison)
  if (!signature || !verifySignature(payload, signature, WEBHOOK_SECRET)) {
    return res.status(401).send("Invalid signature");
  }

  // 2. Deduplicate (retries can deliver the same event twice)
  const payloadHash = createHash("sha256").update(payload).digest("hex");
  if (processedHashes.has(payloadHash)) {
    return res.status(200).send("Already processed");
  }
  processedHashes.add(payloadHash);

  // 3. Parse and route by event type
  const event = JSON.parse(payload);
  // event.eventType: "tweet.new" | "tweet.reply" | "tweet.quote" | "tweet.retweet" | "follower.gained" | "follower.lost"
  // event.username: monitored account username
  // event.data: tweet data ({ tweetId, text, metrics }) or follower data ({ followerId, followerUsername, followerName, followerFollowersCount, followerVerified })

  // 4. Respond within 10 seconds (process async if slow)
  res.status(200).send("OK");
});

app.listen(3000);

For Flask (Python) webhook handler, see references/python-examples.md.

Webhook security rules:

  • Always verify signature before processing (constant-time comparison)
  • Compute HMAC over raw body bytes, not re-serialized JSON
  • Respond 200 within 10 seconds; queue slow processing for async
  • Deduplicate by payload hash (retries can deliver same event twice)
  • Store webhook secret in environment variables, never hardcode
  • Retry policy: 5 attempts with exponential backoff on failure

Check delivery status via GET /webhooks/{id}/deliveries to monitor successful and failed attempts.

Show full SKILL.md (798 more words)Show less

Real-Time Monitoring Setup

Complete end-to-end: create monitor, register webhook, handle events.

javascript
// 1. Create monitor
const monitor = await xquikFetch("/monitors", {
  method: "POST",
  body: JSON.stringify({
    username: "elonmusk",
    eventTypes: ["tweet.new", "tweet.reply", "tweet.quote", "follower.gained"],
  }),
});
// Response: { id: "7", username: "elonmusk", xUserId: "44196397", eventTypes: [...], createdAt: "..." }

// 2. Register webhook
const webhook = await xquikFetch("/webhooks", {
  method: "POST",
  body: JSON.stringify({
    url: "https://your-server.com/webhook",
    eventTypes: ["tweet.new", "tweet.reply"],
  }),
});
// IMPORTANT: Save webhook.secret. It is shown only once!

// 3. Poll events (alternative to webhooks)
const events = await xquikFetch("/events?monitorId=7&limit=50");
// Response: { events: [...], hasMore: false }

Event types: tweet.new, tweet.quote, tweet.reply, tweet.retweet, follower.gained, follower.lost.

MCP Server (AI Agents)

The MCP server at https://xquik.com/mcp uses a code-execution sandbox model with 2 tools (explore + xquik). The agent writes async JavaScript arrow functions that run in a sandboxed environment with auth injected automatically. StreamableHTTP transport. API key auth (x-api-key header) for CLI/IDE clients; OAuth 2.1 for web clients (Claude.ai, ChatGPT Developer Mode). Supported platforms: Claude.ai, Claude Desktop, Claude Code, ChatGPT (Custom GPT, Agents SDK, Developer Mode), Codex CLI, Cursor, VS Code, Windsurf, OpenCode.

Legacy v1 server at https://xquik.com/mcp/v1 exposes 18 discrete tools with traditional input schemas. All new integrations should use the default v2 server at /mcp.

The server also registers 5 guided workflow prompts: compose-tweet, compose-trending-tweet, compose-radar-tweet, analyze-account, run-giveaway. Use prompts/list and prompts/get in compatible clients.

For setup configs per platform, read references/mcp-setup.md. For the complete v1 tool reference with input/output schemas, annotations, and selection rules, read references/mcp-tools.md.

MCP vs REST API
MCP Server (v2)REST API
Best forAI agents, IDE integrationsCustom apps, scripts, backend services
Model2 tools (explore + xquik) with code-execution sandbox76 individual endpoints
Categories9: account, composition, extraction, integrations, media, monitoring, twitter, x-accounts, x-writeSame
User profileFull (via xquik tool calling REST endpoints)Full profile
Search resultsFull (via xquik tool)Includes optional engagement metrics
Webhook/monitor updateFull PATCH via xquik toolPATCH endpoints
Write actionsFull via xquik tool (tweet, like, follow, DM, etc.)POST/DELETE endpoints
File exportNot availableCSV, XLSX, Markdown
Unique to REST-API key management, file export (CSV/XLSX/MD), account locale update

Use the REST API GET /x/users/{username} for the complete user profile with verified, location, createdAt, and statusesCount fields.

Workflow Patterns

Common multi-step tool sequences:

  • Set up real-time alerts: monitors (action=add) -> webhooks (action=add) -> webhooks (action=test)
  • Run a giveaway: get-account (check budget) -> draws (action=run)
  • Bulk extraction: get-account (check subscription) -> extractions (action=estimate) -> extractions (action=run) -> extractions (action=get, results)
  • Full tweet analysis: lookup-tweet (metrics) -> extractions (action=run) with thread_extractor (full thread)
  • Find and analyze user: get-user-info (profile) -> search-tweets from:username (recent tweets) -> lookup-tweet (metrics on specific tweet)
  • Compose algorithm-optimized tweet: compose-tweet (step=compose) -> AI asks follow-ups -> compose-tweet (step=refine) -> AI drafts tweet -> compose-tweet (step=score) -> iterate
  • Analyze tweet style: styles (action=analyze, fetch & cache tweets) -> styles (action=get, reference) -> compose-tweet with styleUsername
  • Compare styles: styles (action=analyze) for both accounts -> styles (action=compare)
  • Track tweet performance: styles (action=analyze, cache tweets) -> styles (action=analyze-performance, live metrics)
  • Save & manage drafts: compose-tweet -> drafts (action=save) -> drafts (action=list) -> drafts (action=get/delete)
  • Download & share media: download-media (returns permanent hosted URLs)
  • Get trending news: get-radar (7 sources, free) -> compose-tweet with trending topic
  • Subscribe or manage billing: subscribe (returns Stripe URL)
  • Post a tweet: connect X account -> POST /x/tweets with account + text (optionally attach media via POST /x/media first)
  • Engage with tweets: POST /x/tweets/{id}/like, POST /x/tweets/{id}/retweet, POST /x/users/{id}/follow
  • Set up Telegram alerts: POST /integrations (type=telegram, chatId, eventTypes) -> POST /integrations/{id}/test. Integration event types: tweet.new, tweet.quote, tweet.reply, tweet.retweet, draw.completed, extraction.completed, extraction.failed
  • Update avatar/banner: PATCH /x/profile/avatar or PATCH /x/profile/banner with FormData image file

Pricing & Quota

  • Base plan: $20/month (1 monitor, monthly usage quota)
  • Extra monitors: $5/month each
  • Per-operation costs: tweet search $0.003, user profile $0.0036, follower fetch $0.003, verified follower fetch $0.006, follow check $0.02, media download $0.003, article extraction $0.02
  • Free: account info, monitor/webhook management, radar, extraction history, cost estimates, tweet composition (compose, refine, score), style cache management (list, get, save, delete, compare), drafts, X account management (connect, list, disconnect, reauth), integration management (create, list, update, delete, test)
  • Metered: tweet search, user lookup, tweet lookup, follow check, media download (first download only, cached free), extractions, draws, style analysis, performance analysis, trends, write actions (tweet, like, retweet, follow, DM, profile, avatar, banner, media upload, communities)
  • Extra usage: enable from dashboard to continue metered calls beyond included allowance. Tiered spending limits: $5 -> $7 -> $10 -> $15 -> $25 (increases with each paid overage invoice)
  • Quota enforcement: 402 usage_limit_reached when included allowance exhausted (or 402 overage_limit_reached if extra usage is active and spending limit reached)
  • Check usage: GET /account returns usagePercent (0-100)

Conventions

  • IDs are strings. Bigint values; treat as opaque strings, never parse as numbers
  • Timestamps are ISO 8601 UTC. Example: 2026-02-24T10:30:00.000Z
  • Errors return JSON. Format: { "error": "error_code" }
  • Cursors are opaque. Pass nextCursor as the after query parameter, never decode
  • Export formats: csv, xlsx, md via GET /extractions/{id}/export?format=csv or GET /draws/{id}/export?format=csv&type=winners

Reference Files

For additional detail beyond this guide:

  • references/mcp-tools.md: All 18 legacy v1 MCP tools with input/output schemas, annotations, selection rules, workflow patterns, common mistakes, and unsupported operations
  • references/api-endpoints.md: All REST API endpoints with methods, paths, parameters, and response shapes
  • references/python-examples.md: Python equivalents of all JavaScript examples (retry, extraction, draw, webhook)
  • references/webhooks.md: Extended webhook examples, local testing with ngrok, delivery status monitoring
  • references/mcp-setup.md: MCP server configuration for 10 IDEs and AI agent platforms
  • references/extractions.md: Extraction tool details, export columns
  • references/types.md: TypeScript type definitions for all REST API and MCP output objects

© LeoYeAI, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 9 other files (references) in skills/xquik-x-twitter of LeoYeAI/openclaw-master-skills.

  • SKILL.md
  • _meta.json
  • metadata.json
  • references/api-endpoints.md
  • references/extractions.md
  • references/mcp-setup.md
  • references/mcp-tools.md
  • references/python-examples.md
  • references/types.md
  • references/webhooks.md

Open the folder on GitHubat commit e5199b5

Compare with similar skills

X Twitter Scraper next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

X Twitter Scraper compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
X Twitter Scraper this skillLeoYeAI/openclaw-master-skills2.2k—~7.1kAutomated safety check: PassMIT
X Twitter Scraperdavila7/claude-code-templates32k—~1.8kAutomated safety check: PassMIT
X Twitter Scrapersickn33/agentic-awesome-skills47k1 repos~2.1kAutomated safety check: PassMIT
X Twitter Scrapergithub/awesome-copilot40k—~2.2kAutomated safety check: PassMIT
X Twitter Scraperdavepoon/buildwithclaude3.6k—~2.2kAutomated safety check: PassMIT
X Twitter ScraperXquik-dev/x-twitter-scraper2101 repos~2.6kAutomated safety check: PassMIT

Similar skills

  • X Twitter Scraper

    davila7/claude-code-templates

    X API & Twitter scraper skill for AI coding agents. An agent skill from davila7/claude-code-templates.

    32k GitHub stars~1.8k tokensUpdated yesterday
    Backend & APIsAuto-check passed
  • X Twitter Scraper

    sickn33/agentic-awesome-skills

    Use Xquik for X data workflows: tweet search, user lookup, follower export, media downloads, monitors, webhooks, REST API, MCP, SDK setup, and approval-gated account actions.

    47k GitHub starsUsed in 1 repo~2.1k tokens
    Backend & APIsAuto-check passed
  • X Twitter Scraper

    github/awesome-copilot

    Official

    Build GitHub Copilot workflows with Xquik X API SDKs, REST endpoints, hosted Apify Actor runs, MCP tools, TweetClaw OpenClaw plugin installs, signed webhooks, tweet search, user lookup, follower…

    40k GitHub stars~2.2k tokensUpdated today
    Backend & APIsAuto-check passed
  • X Twitter Scraper

    davepoon/buildwithclaude

    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…

    3.6k GitHub stars~2.2k tokensUpdated today
    Backend & APIsAuto-check passed
  • X Twitter Scraper

    Xquik-dev/x-twitter-scraper

    Use Xquik to fetch X (Twitter) data or act through a connected account: search, profiles, followers, replies, threads, timelines, media downloads, bulk exports, trends, monitors, signed webhooks…

    210 GitHub starsUsed in 1 repo~2.6k tokens
    Backend & APIsAuto-check passed
  • X Twitter Scraper

    davila7/claude-code-templates

    A skill your agent uses when the user wants to integrate with the X (Twitter) API via Xquik to search tweets, look up user profiles, extract followers, run giveaway draws, monitor accounts, or…

    32k GitHub stars~2.3k tokensUpdated yesterday
    Backend & APIsAuto-check passed

More from LeoYeAI/openclaw-master-skills

All 1,235 skills in this repo
  • DevOps Pipeline Management

    LeoYeAI/openclaw-master-skills

    Manages pipelines on a DevOps quality and efficiency platform through its OpenAPI: list workspaces and templates, create, update, run and cancel pipelines, and read run records.

    2.2k GitHub stars~4.2k tokensUpdated 2 mo ago
    Auto-check: notes
  • Feishu Document Collaboration

    LeoYeAI/openclaw-master-skills

    Patches OpenClaw's Feishu extension so an edited document triggers an isolated agent session that reads the doc and replies inline, turning it into a live chat space.

    2.2k GitHub stars~2k tokensUpdated 2 mo ago
    Auto-check passed
  • Files Memory System

    LeoYeAI/openclaw-master-skills

    Multi-context memory management system for OpenClaw agents with group-isolated storage, global shared memory, workspace organization, and group-specific skills isolation.

    2.2k GitHub stars~3.8k tokensUpdated 2 mo ago
    Auto-check passed
  • GEO-Claw AI Visibility Agent

    LeoYeAI/openclaw-master-skills

    Runs a brand's AI-search visibility work end to end: diagnosing how AI platforms represent it, repositioning it, producing AI-optimized content and monitoring ongoing mentions.

    2.2k GitHub stars~4.7k tokensUpdated 2 mo ago
    Auto-check passed
  • Google Workspace CLI

    LeoYeAI/openclaw-master-skills

    Installs and authenticates the gws CLI, then automates Gmail, Drive, Sheets, Calendar, Docs, Chat and Tasks with ready-made recipes, persona bundles and security audits.

    2.2k GitHub stars~2.6k tokensUpdated 2 mo ago
    Auto-check: notes
  • HealthFit Health Advisors

    LeoYeAI/openclaw-master-skills

    Runs four advisor roles, a fitness coach, nutritionist, data analyst and TCM practitioner, to build a health profile and track workouts, diet and wellness over time.

    2.2k GitHub stars~4.4k tokensUpdated 2 mo ago
    Auto-check passed

Categories

Questions about X Twitter Scraper

What does X Twitter Scraper do?

X API & Twitter automation skill. An agent skill from LeoYeAI/openclaw-master-skills. X Twitter Scraper is an agent skill from LeoYeAI/openclaw-master-skills. X API & Twitter automation skill.

When should I use X Twitter Scraper?

X Twitter Scraper fits situations like: tasks that involve Social media posts; tasks that involve Web scraping; tasks that involve Webhooks.

How do I install X Twitter Scraper in Claude Code?

Run `npx skills add LeoYeAI/openclaw-master-skills --skill x-twitter-scraper -a claude-code`. Or copy the skill folder (skills/xquik-x-twitter in LeoYeAI/openclaw-master-skills) into .claude/skills/x-twitter-scraper in your project. Claude Code loads it when a task matches its description.

How do I install X Twitter Scraper in Codex?

Run `npx skills add LeoYeAI/openclaw-master-skills --skill x-twitter-scraper -a codex`. Or copy the skill folder (skills/xquik-x-twitter in LeoYeAI/openclaw-master-skills) into .agents/skills/x-twitter-scraper in your project. Codex loads it when a task matches its description.

Can I use X Twitter Scraper in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add LeoYeAI/openclaw-master-skills --skill x-twitter-scraper -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/x-twitter-scraper, .gemini/skills/x-twitter-scraper, .github/skills/x-twitter-scraper and .opencode/skills/x-twitter-scraper in your project.

What does X Twitter Scraper need to run?

Going by SKILL.md and its folder, X Twitter Scraper needs credentials named API_KEY, WEBHOOK_SECRET and XQUIK_WEBHOOK_SECRET. Our summary lists: Python 3; A credential in XQUIK_API_KEY; A credential in API_KEY.

Does X Twitter Scraper access the network?

SKILL.md names 3 domains. In commands or code: xquik.com and x.com; the agent is likely to contact these when it follows the instructions. As links in the text: docs.xquik.com. This is read from the text; nothing was executed.

Is X Twitter Scraper safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does X Twitter Scraper use?

X Twitter Scraper is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does X Twitter Scraper use?

About 7.1k tokens (SKILL.md is roughly 28k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 31k tokens, read only when the agent opens those files.

What are the alternatives to X Twitter Scraper?

Skills that share tags, products or a category with X Twitter Scraper: X Twitter Scraper (davila7/claude-code-templates, 32k stars), X Twitter Scraper (sickn33/agentic-awesome-skills, 47k stars), X Twitter Scraper (github/awesome-copilot, 40k stars) and X Twitter Scraper (davepoon/buildwithclaude, 3.6k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains X Twitter Scraper?

LeoYeAI (a GitHub user) maintains it in LeoYeAI/openclaw-master-skills, which has 2,160 GitHub stars. The repository holds 1,235 skills in this directory. The repository was last updated on July 20, 2026.

Source: LeoYeAI/openclaw-master-skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.