How-to guide

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.

RouteCostPublishes on its ownAccess it needsBest 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.

  1. 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.

  2. 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.

  3. 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:

post_bluesky.py
# 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
# crontab -e   (runs every Monday at 09:00 server time)
0 9 * * 1 /usr/bin/python3 /home/me/post_bluesky.py

Links, 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.

schedule.sh
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:

reschedule.sh
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.

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.