Skip to main content
← Back to blog
by Engineering
write-apiautomationtutorial

How to Automate Twitter Posts with API: Complete Guide

Why Automate Twitter Posts?

Manual posting is fine for personal accounts, but if you're running a crypto signal channel, managing a community bot, or publishing market updates — you need automation. The XCROP Write API lets you create tweets, reply to threads, quote-tweet, like, retweet, and follow/unfollow users, all through simple REST endpoints, at a flat 100 credits per operation — a fraction of official Twitter API write pricing.

Connect Your X Account First

Before any of the bots below will work, connect your X account to XCROP — a one-time setup. Full details on credentials vs. cookie auth, proxy requirements, and how your credentials are secured are covered in the [Write API Guide](/blog/write-api-guide); here's the minimal call to get connected:

PYTHON
import requests, os

requests.post(
    "https://xcrop.io/api/v2/account/connect",
    headers={"Authorization": "Bearer " + os.environ["XCROP_API_KEY"]},
    json={
        "email": "[email protected]",
        "password": "your-x-password",
        "proxy": "http://user:pass@residential-proxy:port"
    }
)

Once connected, every write endpoint (create, reply, quote, like, retweet, follow) works exactly as documented in the [Write API Guide](/blog/write-api-guide) — the rest of this post focuses on stringing those endpoints together into real, running bots.

Practical Automation Examples

Example 1: Scheduled Posting Bot

Post market updates at specific times using a simple scheduler:

PYTHON
import schedule
import time
import requests
import os

API_KEY = os.environ["XCROP_API_KEY"]
HEADERS = {
    "Authorization": "Bearer " + API_KEY,
    "Content-Type": "application/json"
}
BASE = "https://xcrop.io/api/v2"

def morning_update():
    # Fetch trending topics first
    trending = requests.get(
        BASE + "/trending",
        headers=HEADERS
    ).json()["data"]

    top_topics = [t["name"] for t in trending[:3]]
    text = (
        "GM! Here is what crypto Twitter is talking about today:\n\n"
        + "1. " + top_topics[0] + "\n"
        + "2. " + top_topics[1] + "\n"
        + "3. " + top_topics[2] + "\n\n"
        + "Stay sharp out there."
    )

    requests.post(BASE + "/tweets/create", headers=HEADERS, json={"text": text})

schedule.every().day.at("08:00").do(morning_update)

while True:
    schedule.run_pending()
    time.sleep(60)

Example 2: KOL Engagement Bot

Monitor key opinion leaders and auto-engage with high-impact tweets:

JAVASCRIPT
const API_KEY = process.env.XCROP_API_KEY;
const HEADERS = {
  "Authorization": "Bearer " + API_KEY,
  "Content-Type": "application/json"
};
const BASE = "https://xcrop.io/api/v2";

async function monitorAndEngage() {
  // Fetch each KOL's latest tweets and merge them
  const kols = ["CryptoHayes", "DefiIgnas", "Pentosh1"];
  const feeds = await Promise.all(
    kols.map(u => fetch(BASE + "/users/" + u + "/tweets?count=20", { headers: HEADERS }).then(r => r.json()))
  );
  const tweets = feeds.flatMap(f => f.data || []);

  for (const tweet of tweets) {
    const likes = tweet.metrics.likes;

    // Only engage with viral tweets (5k+ likes)
    if (likes > 5000) {
      // Like it
      await fetch(BASE + "/tweets/" + tweet.tweet_id + "/like", {
        method: "POST",
        headers: HEADERS
      });

      // Retweet it
      await fetch(BASE + "/tweets/" + tweet.tweet_id + "/retweet", {
        method: "POST",
        headers: HEADERS
      });

      console.log("Engaged with tweet by @" + tweet.author.username);

      // Rate limit: wait 30 seconds between actions
      await new Promise(r => setTimeout(r, 30000));
    }
  }
}

// Run every 10 minutes
setInterval(monitorAndEngage, 600000);

Example 3: Auto-Reply to Mentions

Search for mentions of your project and reply automatically:

PYTHON
import requests
import os
import time

API_KEY = os.environ["XCROP_API_KEY"]
HEADERS = {
    "Authorization": "Bearer " + API_KEY,
    "Content-Type": "application/json"
}
BASE = "https://xcrop.io/api/v2"

replied_ids = set()

def check_mentions():
    response = requests.post(
        BASE + "/search",
        headers=HEADERS,
        json={
            "query": "@yourproject",
            "sort": "latest",
            "count": 10
        }
    )

    tweets = response.json()["data"]

    for tweet in tweets:
        tid = tweet["tweet_id"]
        if tid not in replied_ids:
            requests.post(
                BASE + "/tweets/reply",
                headers=HEADERS,
                json={
                    "tweet_id": tid,
                    "text": "Thanks for the mention! Check out our docs at https://yourproject.io/docs"
                }
            )
            replied_ids.add(tid)
            time.sleep(15)  # Space out replies

while True:
    check_mentions()
    time.sleep(300)  # Check every 5 minutes

Responsible Automation

Automation is powerful, but misuse leads to account suspension. Follow these rules:

1. Respect rate limits — XCROP enforces plan-based rate limits (10-60 req/min). Space out write operations by at least 10-30 seconds
2. No spam — Every tweet should provide genuine value. Do not post repetitive or promotional content
3. Vary your content — Identical or near-identical tweets get flagged by X's spam detection
4. Use residential proxies — Required by XCROP and essential for avoiding detection
5. Monitor your account — Check /account/status regularly to ensure your session is healthy
6. Comply with X/Twitter ToS — Automated posting must follow platform rules

Credit Costs

Every write operation used above — create, reply, quote, like, retweet — costs a flat 100 credits. See the [Write API Guide](/blog/write-api-guide) for the full operation table and plan pricing.

What is Next?

Combine read + write — Use search and KOL timeline to find content, then engage automatically
Build dashboards — Track your bot's activity via the Dashboard API
Export data — Collect engagement metrics on your automated posts
Go deeper — The [Write API Guide](/blog/write-api-guide) covers the full endpoint reference, security model, and best practices behind everything used here