Build a sports stats bot for X
scores, stats, trivia, recap threads
A sports stats account is a script, a data feed, and a posting key. Your script reads the MLB, NFL, NBA or football data you already have, and one POST to OpenTweet tweets the final score, the milestone, or the full recap thread. No X developer account, flat fee.
7-day trial. Card required, cancel any time.
The short answer
To auto-post sports stats to X: poll a sports data API on a schedule, keep the IDs of games you already posted, and when a game goes final or a stat crosses a threshold, send the sentence to POST https://opentweet.io/api/v1/posts with publish_now: true. Schedule trivia and previews for the hours between games. OpenTweet posts through your own X account, so you never apply for the X API.
Six post types that grow a sports account
The accounts that grow mix fast, event-driven posts with scheduled ones. Event posts win the moment, scheduled posts keep the feed alive on off days.
Final scores
Event-drivenThe moment a game goes final, post the score and one line of context. Speed is the whole game for this format.
Stat milestones
Event-drivenA player reaches 500 home runs, a team hits a 10-game streak. Your script compares the new number against a threshold.
Recap threads
After each gameScore, top performers, turning point, standings. Three to five tweets, often with a box score image.
Trivia and "on this day"
ScheduledEvergreen posts from historical data. They keep the account alive on off days and in the off-season.
Previews and lines
ScheduledProbable starters, injuries, head-to-head records, posted a few hours before first pitch or kickoff.
Standings and leaders
ScheduledA weekly leaderboard image or a daily "playoff picture" post from the standings endpoint.
Post a final score the moment it happens
Posting is one call. Everything else, which games to watch and what counts as news, lives in your script.
The curl call
# A game just went final. Tweet it. (example payload)
curl -X POST https://opentweet.io/api/v1/posts \
-H "Authorization: Bearer ot_your_key" \
-H "Content-Type: application/json" \
-d '{
"text": "FINAL: Brewers 5, Rays 3\nLeadoff hitter 2-for-4, HR, 3 RBI.\nMilwaukee leads the series 2-1.",
"publish_now": true
}'A working MLB finals bot in Python
This uses the open-source MLB-StatsAPI wrapper. Run it every few minutes with cron during game hours. The posted set stops a final from going out twice.
import requests, statsapi # pip install MLB-StatsAPI requests
KEY = "ot_your_key"
posted = set() # store this in a file or DB in production
for g in statsapi.schedule(): # today's games
if g["status"] != "Final" or g["game_id"] in posted:
continue
text = (f"FINAL: {g['away_name']} {g['away_score']}, "
f"{g['home_name']} {g['home_score']}")
requests.post(
"https://opentweet.io/api/v1/posts",
headers={"Authorization": f"Bearer {KEY}"},
json={"text": text, "publish_now": True},
)
posted.add(g["game_id"])A recap thread with a box score image
{
"text": "Game 3 recap: Brewers 5, Rays 3 🧵",
"is_thread": true,
"thread_tweets": [
"Top performer: the leadoff hitter, 2-for-4 with a 2-run HR in the 6th.",
"Turning point: bases-loaded escape in the 7th, 0 runs.",
"Series: Milwaukee leads 2-1. Game 4 is tomorrow."
],
"media_urls": ["https://your-cdn.example.com/box-score-game3.png"],
"publish_now": true
}Fill the off days in one request
Send up to 50 scheduled posts per request to the same endpoint. Generate a week of trivia and "on this day" posts from historical data on Sunday night.
{
"posts": [
{ "text": "1982 was Milwaukee's only World Series trip. They won Game 1 10-0.", "scheduled_date": "2026-10-21T13:00:00Z" },
{ "text": "Trivia: which team has the most World Series titles? Answer at 6pm.", "scheduled_date": "2026-10-21T16:00:00Z" },
{ "text": "Answer: the Yankees, with 27.", "scheduled_date": "2026-10-21T22:00:00Z" }
]
}Let an AI agent write the takes
Numbers are easy to template. Takes are not. If you want commentary, connect Claude, ChatGPT or Cursor to the OpenTweet MCP server, hand it the box score, and let it draft and schedule the post. Read the full API reference for every field.
Which plan fits your account
Flat monthly price, no per-post billing. Sports accounts rarely need links, so most stay on the cheaper plans.
| Account type | Typical volume | Plan |
|---|---|---|
| Trivia, records, "on this day" | 3-10 posts a day | Pro, $19.99/mo, 20 posts a day |
| One team, finals plus recaps | 5-20 posts a day | Pro, $19.99/mo |
| Full league, every final and milestone | 20-100 posts a day | Advanced, $29/mo, 100 posts a day |
| Several leagues or several accounts | 100+ posts a day | Agency, $49/mo, 300 posts a day |
Posts with a link count as link posts: Pro includes 1 a day, Advanced 10. Images in media_urls are not links. See pricing.
Keep the account safe. Turn on the "Automated" label in your X settings. Write your own sentences from the data instead of copying headlines. Skip auto-replies, mass mentions and trending-hashtag stuffing.
Respect the data terms. Check the license of your stats feed before you monetize the account, and do not use league logos or official marks in your name or images without permission.
More on the rules in X automation rules.
Frequently asked questions
How do I make a sports Twitter bot?
Write a small script that reads a sports data API (the MLB Stats API, an NFL or NBA data feed, or a football API), turns each event you care about into a sentence, and sends it to https://opentweet.io/api/v1/posts with publish_now set to true. Run the script on a schedule during game windows. OpenTweet handles the X connection, so you skip the developer account and OAuth.
Do I need the X API to auto-post sports scores?
No. You connect your X account to OpenTweet once with a normal login and get one bearer key. Your script posts through that key. On the official X API, you would need a developer account and pay per post, and twice as much setup before the first tweet.
Where do I get sports data for the bot?
Common sources are the MLB Stats API for baseball, open NFL data such as nflverse for play-by-play and season stats, NBA data APIs, and paid football (soccer) APIs for fixtures and live events. Check each provider's terms: some free feeds are for personal use only, and live data for commercial accounts is often licensed.
How many posts a day can a sports account make?
Pro ($19.99/month) publishes up to 20 posts a day, Advanced ($29) 100, and Agency ($49) 300. A trivia or stat-of-the-day account fits Pro. A live score account covering a full slate of games needs Advanced or Agency.
Can the bot post a game recap as a thread?
Yes. Send the first tweet as text, set is_thread to true, and put the follow-up tweets in thread_tweets. A typical recap is the final score, then the top performers, then the turning point, then the standings impact.
Can I add images like box scores or charts?
Yes. Render the image in your script, host it at a public URL, and pass it in media_urls. OpenTweet downloads it and attaches it to the post. Image posts do not count as link posts.
Will X suspend an automated sports account?
X allows automated accounts that post original content to their own timeline. Turn on the "Automated" label in your X account settings, post your own sentences rather than copied headlines, and avoid auto-replies, mass mentions and hashtag stuffing. Those are the patterns that get bots limited, not the posting itself.
Building a different kind of automated account? See the alert bot, the stock market bot, or the automated news account.
Everything you can build on X with OpenTweet
Post to X from your code, a watcher, or an AI agent. Start anywhere in the cluster.
OpenTweet vs the X API
Post, schedule, and automate X without a developer account or the $200/mo minimum.
X DM outreach, human-approved
Find and qualify leads, AI-draft DMs, approve each one, and drip-send from your own account via API or MCP.
Post to X without an API
The clean, account-safe way to post to X from your code or an AI agent.
Twitter MCP Server
Give Claude, Cursor, and OpenClaw the ability to post to X. 43 tools included.
Developer docs
Quickstart, API keys, MCP setup, and the REST reference for posting to X from code or an agent.
Cross-posting reference
One call posts to X, Bluesky and LinkedIn. The platforms field, per-network results, and why a network gets skipped.
Social media API for AI agents
Three ways an agent can post to X, Bluesky and LinkedIn, and the trade-offs of each.
LinkedIn MCP server
Post and schedule to a LinkedIn profile from Claude or Cursor through the official LinkedIn API.
XMCP vs OpenTweet
X's official MCP server bills per API call and cannot schedule. Compare it with the flat-fee hosted MCP.
MCP for AI agents
Connect your AI client to X in under two minutes, no X developer account.
Developer API and keys
REST endpoints, one bearer key, and usage tracking. Build on OpenTweet.
OpenTweet for AI agents
The posting layer for autonomous agents and automations that live on X.
Build an AI Twitter persona
Give your AI agent its own X account. Setup, cadence, and the rules that keep it safe.
Best MCP servers for social media
The 2026 ranked list. How the hosted OpenTweet MCP compares with the official X MCP and others.
Cheapest way to post to X via code
Flat fee vs pay-per-use. Why the $0.20 per-link fee flips the math past ~145 link posts a month.
X API pricing 2026
Every pay-per-use X API endpoint price from docs.x.com in one searchable table.
Bluesky posting API
Post and schedule to Bluesky with one REST call and OAuth, and cross-post to X and LinkedIn in the same request.
Automate LinkedIn posts
Post to LinkedIn from an AI agent, n8n or a script through the official Posts API, with one REST or MCP call.
Post tonight's finals automatically
Connect X, create a key, and point your script at it. Your first final score can go out before the next game ends.