One news bot for Bluesky and X, and why X gets only five posts a day
Description and use
A Python bot running every 30 minutes on GitHub Actions posts industry news to Bluesky for free and only the best stories (OpenPageRank ≥6) to X, saving $174 per month.
Problem
Build an unattended news bot that posts to Bluesky for free and only the best stories to X, which charges per URL post.
Outcome
In one day of Renewable Energy news, 270 articles were filtered down to 5 that met the OpenPageRank threshold, saving $174 per month on X.
Workflow
- Ask APITube API for last 24h industry news with share image
- Deduplicate by normalized title and URL against posted.json
- Post up to three new stories to Bluesky with link card and thumbnail under 1,000,000 bytes
- Send stories whose source OpenPageRank >=6 to X
- Write posted story IDs to posted.json and commit to repo
Evidence
X charges $0.200 for every post that contains a URL. Bluesky charges nothing.
One day of Renewable Energy news came to 270 articles; after the filters the bot actually wants, 5 of them were worth $0.200 each.
The bot filters on industry.id. Industry ids come from GET /v1/suggest/industries?prefix=renew
The one rule that matters: a story goes to X only if its source has an OpenPageRank of 6 or more (X_MIN_OPR = 6).
- Record date: 2026-10-02T06:40:47.046Z