How to scheduleBluesky posts
How to schedule Bluesky posts when the app itself cannot: a scheduler that signs in with OAuth, a free script on a timer, or one API call. The free and paid ways, side by side.
Last updated: October 2026
7-day free trial. Cancel anytime.
Short answer
The official Bluesky app cannot schedule posts as of October 2026. It added drafts in February 2026. To schedule, use a tool that connects through Bluesky's OAuth sign-in, so you never share a password, or one that uses an App Password, or post from a script at a set time.Drafts are not scheduling
Bluesky has one of these built in. The other needs something running on your behalf.
Drafts, in the Bluesky app
- Shipped in February 2026
- Saves the text of a post you have not sent yet
- Waits until you open the app and press Post
- Not saved for replies
Scheduling, outside the app
- Publishes at the time you picked, with you offline
- Not in the official app as of October 2026
- Needs a scheduler, a script, or an API
- Lets you plan a week of posts in one sitting
Every way to schedule a Bluesky post
Bluesky charges nothing to post through its API, so the cost is only the tool or your own time.
| Route | Cost | Publishes on its own | Access it needs | Best for |
|---|---|---|---|---|
| Bluesky app drafts | Free | No. You press Post yourself | Your login | Saving an idea for later |
| Your own atproto script | Free | Yes, via cron or a CI schedule | App Password | Developers who will maintain it |
| OpenTweet | From $11.99/mo | Yes, any time | Bluesky OAuth | Scheduling and cross-posting without code |
| OpenTweet API | Included in every plan | Yes, scheduled_date | Bluesky OAuth, then an API key | Apps, scripts and AI agents |
Option 1. Schedule Bluesky posts with OpenTweet
Three steps, about five minutes, and the connection happens once.
Connect Bluesky with OAuth
Type your handle, yourname.bsky.social or your own domain. OpenTweet finds the server that holds your account and sends you there to sign in and approve. The grant it gets back can create posts and upload images, and nothing else. No App Password, no main password.
Write with the 300-character counter
Bluesky stops at 300 characters, counted as graphemes, so an emoji costs one. The composer counts against that limit as you type. Add up to 4 images, or split a long idea into a thread of up to 100 parts.
Pick a time and the networks
Choose the date and time, tick Bluesky in the platform picker, and schedule. Tick X or LinkedIn too and the same post goes to each network as a native post of its own. Until it publishes, you can still change anything.
Pro ($11.99/mo) connects 1 Bluesky account, Advanced ($29/mo) connects 3, and Agency ($49/mo) connects 10. Every plan schedules to X and LinkedIn from the same composer. The Bluesky scheduler page has the full feature list.
What a scheduled Bluesky post can carry
Plan inside these limits and the post goes out exactly as written.
Supported
- Text up to 300 characters
- Up to 4 images per post
- Threads of up to 100 parts
- Clickable links in the text
- The same post to X and LinkedIn
Not supported today
- Video
- Link preview cards
- Bluesky analytics, which OpenTweet does not read
Option 2. Schedule Bluesky posts for free with a script
The free route is code plus a timer. It works well if you are happy to maintain both.
The atproto SDK can create a post but has no field that delays it, so the delay comes from whatever runs the script. Create an App Password in Bluesky settings, keep it in an environment variable, and post:
# pip install atproto
import os
from atproto import Client
client = Client()
client.login(os.environ["BSKY_HANDLE"], os.environ["BSKY_APP_PASSWORD"])
client.send_post(text="Monday notes are up. What are you shipping this week?")Then let cron, or a scheduled CI job, run it at the time you want:
# crontab -e (runs every Monday at 09:00 server time)
0 9 * * 1 /usr/bin/python3 /home/me/post_bluesky.pyLinks, images and threads need extra work with the SDK, covered in how to post to Bluesky with Python or Node. For a queue of posts or an RSS feed, see how to build a Bluesky bot. If you would rather use a tool with a free tier, the Bluesky scheduler comparison lists them honestly, including where OpenTweet is not the best fit.
Option 3. Schedule Bluesky posts through the API
For apps, scripts and AI agents that should not hold an App Password.
Connect Bluesky once in OpenTweet, create an API key, and send the post with a platforms list and a scheduled_date. OpenTweet publishes it at that time.
curl -X POST https://opentweet.io/api/v1/posts \
-H "Authorization: Bearer $OPENTWEET_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"text": "Monday notes are up. What are you shipping this week?",
"platforms": ["bluesky"],
"scheduled_date": "2026-10-19T09:00:00Z"
}'To move or change it before it publishes, update the same post:
curl -X PUT https://opentweet.io/api/v1/posts/POST_ID \
-H "Authorization: Bearer $OPENTWEET_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "scheduled_date": "2026-10-19T14:00:00Z" }'Add "x" or "linkedin" to the list to cross-post. The fields and the per-network results are in the Bluesky API guide, the cross-posting API docs and the REST API reference.
OAuth or App Password
The one security choice in scheduling Bluesky posts.
An App Password is a second password for your account. Any tool holding one can do almost anything you can, and it keeps working until you revoke it. That is acceptable for a script you run yourself and riskier when it sits in someone else's database.
Bluesky OAuth works the other way round. You sign in on the server that hosts your account and approve a grant with a stated scope. OpenTweet asks for atproto repo:app.bsky.feed.post blob:*/*, which covers creating posts and uploading images. It cannot follow, like, change your profile or read your messages. More detail in OAuth with no App Password and should a scheduling tool ask for your Bluesky password.
Frequently asked questions
Can you schedule posts on Bluesky?
Not in the official Bluesky app, as of October 2026. The app added drafts in February 2026, but there is no option to pick a future time. Scheduling needs an outside tool or your own script.
How do I schedule Bluesky posts for free?
Write a short script with the atproto SDK, log in with an App Password, and run it at a set time from cron or a scheduled CI job. That costs nothing, because Bluesky charges nothing to post. The trade-off is that you maintain the script, the timer and the App Password yourself.
What is the difference between Bluesky drafts and scheduled posts?
A draft is saved text that waits for you to press Post. A scheduled post publishes itself at the time you picked, even when you are offline. The Bluesky app has the first and not the second.
Does scheduling a post hurt its reach on Bluesky?
There is no published evidence either way. A scheduled post is created through the same atproto write as a post made in the app, and Bluesky has not said it treats them differently. Timing and content matter far more than how the post was sent.
Can I edit a scheduled Bluesky post?
In OpenTweet, yes, any time before it publishes. Open it in the composer or calendar and change the text, images, time or networks, or send PUT /api/v1/posts/{id} from code. Once a post has published, OpenTweet will not edit it.
Do I have to give a scheduler my Bluesky password?
Never your main password. Some tools ask for an App Password, which is a second password with broad access to the account. OpenTweet uses Bluesky OAuth instead: you approve on the server that hosts your account and OpenTweet gets a grant limited to creating posts and uploading images.
Can I schedule a Bluesky thread?
Yes. OpenTweet publishes a thread as a real reply chain of up to 100 parts, each part up to 300 characters with up to 4 images. The same thread can go to X at the same time, where OpenTweet caps a thread at 25 parts.
Can I schedule video or link cards to Bluesky?
Not through OpenTweet today. Bluesky posts from OpenTweet carry text, links and up to 4 images. Video and link preview cards are not supported, and OpenTweet does not read Bluesky analytics back.
Related guides
The scheduler itself, the free routes in code, and how the Bluesky connection stays safe.
Bluesky scheduler
The product page: what the Bluesky connection can do, the limits, and the plans.
Best Bluesky schedulers
An honest comparison of the tools that schedule Bluesky posts, including free ones.
OAuth instead of an App Password
What an App Password can do to your account, and what an OAuth grant cannot.
Should a scheduler ask for your Bluesky password?
Main password, App Password, or OAuth, and which one to hand a third-party tool.
Post to Bluesky with Python or Node
The atproto SDK in full: link facets, image blobs, and threads.
Build a Bluesky bot
A scheduled auto poster and an RSS bot, with the bot label and rate limits.
Cross-post from X to Bluesky
One draft to both networks, and why a post gets skipped on one of them.
Bluesky character counter
Check a post against the 300-grapheme limit before you schedule it.
Cross-posting API docs
The platforms array, scheduled_date, and the per-network results.
Schedule your next week of Bluesky posts
Connect Bluesky over OAuth once, write within 300 characters, and pick the times. Plans from $11.99 a month, with X and LinkedIn in the same queue.