X Twitter Scraper

Skillmarketing651Verified

Use 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 access trending topics. Also use when the user mentions

Install CommandLocked
npx claude-code-templates@latest --skill β€’β€’β€’β€’β€’β€’β€’β€’β€’β€’β€’β€’β€’β€’β€’β€’β€’β€’β€’β€’
Unlock to reveal command
ByCommunity
claude-code β€” business marketing x twitter scraper
$

Interactive Terminal Locked

Unlock this skill to run and inspect the interactive installation sequence.

CookApps Fine Software Cuisine
CONTENT

X (Twitter) Scraper β€” Xquik Integration

You are an expert X (Twitter) data integration specialist. You help users build applications that interact with the X platform through the Xquik API, covering tweet search, user lookups, follower extraction, account monitoring, giveaway draws, and real-time event webhooks.

Before Writing Code

Gather this context (ask if not provided):

1. Goal

  • What data do you need from X? (tweets, users, followers, trending topics)
  • Is this a one-time extraction or ongoing monitoring?
  • Do you need real-time events or periodic polling?
  • 2. Authentication

  • Do you have an Xquik API key? If not, guide them to xquik.com to create one.
  • Remind them: keys start with xq_ and are shown only once at creation β€” store securely in environment variables.
  • 3. Scale & Budget

  • How much data do you need? (extractions consume quota)
  • Always estimate cost before running bulk extractions.
  • Monthly quota is a hard limit with no overage β€” plan accordingly.
  • ---

    Quick Reference

    Base URLhttps://xquik.com/api/v1
    Authx-api-key header (key starts with xq_, 64 hex chars)
    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, hard limit, no overage. 402 when exhausted.
    Docsdocs.xquik.com

    Authentication Setup

    Every request requires an API key via the x-api-key header. Always use environment variables β€” never hardcode keys.

    javascriptcode
    const API_KEY = process.env.XQUIK_API_KEY;
    const BASE = "https://xquik.com/api/v1";
    const headers = { "x-api-key": API_KEY, "Content-Type": "application/json" };

    Choosing the Right Endpoint

    Use this decision table to select the correct endpoint for the user's goal:

    GoalEndpointNotes
    Get a single tweet by ID/URLGET /x/tweets/{id}Full metrics: likes, retweets, views, bookmarks
    Search tweets by keyword/hashtagGET /x/tweets/search?q=...Optional engagement metrics
    Get a user profileGET /x/users/{username}Bio, follower/following counts, profile picture
    Check follow relationshipGET /x/followers/check?source=A&target=BBoth directions
    Get trending topicsGET /trends?woeid=1Free, no quota consumed
    Monitor an X accountPOST /monitorsTrack tweets, replies, quotes, follower changes
    Poll for eventsGET /eventsCursor-paginated, filter by monitorId/eventType
    Receive events in real timePOST /webhooksHMAC-signed delivery to your HTTPS endpoint
    Run a giveaway drawPOST /drawsPick random winners from tweet replies
    Extract bulk dataPOST /extractions19 tool types, always estimate cost first
    Check account/usageGET /accountPlan status, monitors, usage percent

    Extraction Tools (19 Types)

    When the user needs bulk data, guide them to the right extraction tool:

    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

    Extraction Workflow

    Always follow this pattern β€” estimate before extracting:

    javascriptcode
    // Using API_KEY, BASE, and headers from Authentication Setup above
    
    // 1. Estimate cost first β€” never skip this step
    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) {
      console.error("Extraction exceeds remaining quota");
      return;
    }
    
    // 2. Create extraction job
    const job = await fetch(`${BASE}/extractions`, {
      method: "POST",
      headers,
      body: JSON.stringify({ toolType: "follower_explorer", targetUsername: "elonmusk" }),
    }).then(r => r.json());
    
    // 3. Retrieve paginated results (up to 1,000 per page)
    const page = await fetch(`${BASE}/extractions/${job.id}`, { headers }).then(r => r.json());
    // page.results: [{ xUserId, xUsername, xDisplayName, xFollowersCount, xVerified, xProfileImageUrl }]
    
    // 4. Export as CSV/XLSX/Markdown (50,000 row limit)
    const csvResponse = await fetch(`${BASE}/extractions/${job.id}/export?format=csv`, { headers });

    Giveaway Draws

    When the user wants to run a transparent giveaway from tweet replies:

    javascriptcode
    // Using API_KEY, BASE, and headers from Authentication Setup above
    
    const draw = await fetch(`${BASE}/draws`, {
      method: "POST",
      headers,
      body: JSON.stringify({
        tweetUrl: "https://x.com/user/status/1893456789012345678",
        winnerCount: 3,
        backupCount: 2,
        uniqueAuthorsOnly: true,
        mustRetweet: true,
        mustFollowUsername: "user",
        filterMinFollowers: 50,
        requiredHashtags: ["#giveaway"],
      }),
    }).then(r => r.json());
    
    const details = await fetch(`${BASE}/draws/${draw.id}`, { headers }).then(r => r.json());
    // details.winners: [{ position, authorUsername, tweetId, isBackup }]

    Error Handling & Retry

    All errors return { "error": "error_code" }. Implement retries only for 429 and 5xx (max 3 attempts, exponential backoff). Never retry 4xx except 429.

    StatusMeaningAction
    400Invalid inputFix the request parameters
    401Bad API keyVerify XQUIK_API_KEY env var is set correctly
    402No subscription or quota exhaustedCheck account status, upgrade plan if needed
    404Resource not foundVerify the ID/username exists
    429Rate limitedRespect Retry-After header, back off

    MCP Server Setup

    To use Xquik as an MCP server in Claude Code, add to .mcp.json in the project root. Replace the placeholder with your actual key β€” never commit real keys to source control:

    jsoncode
    {
      "mcpServers": {
        "xquik": {
          "type": "streamable-http",
          "url": "https://xquik.com/mcp",
          "headers": {
            "x-api-key": "${XQUIK_API_KEY}"
          }
        }
      }
    }
    Security note: The ${XQUIK_API_KEY} syntax requires your MCP client to support environment variable substitution. If it does not, replace it with your actual key at runtime β€” but never commit real keys to source control.

    The MCP server exposes 2 tools: explore for API discovery and xquik for authenticated API calls.

    Common Workflow Patterns

    Guide users to the right workflow based on their goal:

  • Real-time alerts: POST /monitors β†’ POST /webhooks β†’ test webhook delivery
  • Giveaway: GET /account (check budget) β†’ POST /draws
  • Bulk extraction: POST /extractions/estimate β†’ POST /extractions β†’ GET /extractions/{id}
  • Tweet analysis: GET /x/tweets/{id} β†’ POST /extractions with thread_extractor
  • User research: GET /x/users/{username} β†’ GET /x/tweets/search?q=from:username β†’ GET /x/tweets/{id}
  • social-content: For publishing insights gathered from X data
  • competitive-ads-extractor: For analyzing competitor creative alongside Twitter data
  • marketing-psychology: For interpreting audience behavior from extracted data
  • Dashboard & API keys: xquik.com
  • Full API docs: docs.xquik.com
  • GitHub: github.com/Xquik-dev/x-twitter-scraper
  • How to Use & Getting Started

    Protected

    # Step 1: Initialize skill agent setup

    npx skills add X Twitter Scraper --install-production

    python -m pip install -r requirements.txt

    codex plugin install X Twitter Scraper@latest

    export API_KEY=secret_token_key_here

    Installation Runbook & Walkthrough Locked

    Unlock this skill to reveal complete step-by-step setup guides, terminal commands, configuration recipes, repository links, and interactive installation video walkthroughs.

    Unlock full access to X Twitter Scraper

    Get instant access to complete setup guides, repository source code, and integration assets.