To schedule Threads, Bluesky and Mastodon posts together, write one base text of 300 characters or fewer, give each network its own version where the rules differ, and queue all three in a scheduler that holds the post until the minute. Bluesky's 300 is the tightest limit, Mastodon counts every link as 23 characters, and Threads refuses a post with more than 5 links. The rest of this page is the detail behind those three sentences, with every number linked to the platform's own documentation.
What are the limits when you schedule Threads, Bluesky and Mastodon posts?
Threads allows 500 characters, Bluesky 300, and Mastodon 500 by default, with each Mastodon server free to set its own number. The three networks also count differently: Threads counts an emoji by its bytes, Bluesky counts what a reader sees as one character, and Mastodon charges a flat 23 characters for any link.
| Threads | Bluesky | Mastodon | |
|---|---|---|---|
| Text | 500 characters | 300 graphemes, 3,000 bytes | 500 by default, set per server |
| How it counts | An emoji counts as its UTF-8 byte length | One visible character is one, whatever its bytes | A link is 23; of a mention, only the username |
| Links | 5 or fewer per post | Clickable only if the posting app marks them up | Must start with http:// or https:// |
| Images | 2 to 20 in a carousel, JPEG or PNG, 8 MB each | Up to 4, with alt text per image, 2,000,000 bytes each | Up to 4, 16 MB each |
| Video | MP4 or MOV, up to 5 minutes and 1 GB | Verified email required, daily limit on video posts | One per post, up to 99 MB |
| Tags | One topic tag, 1 to 50 characters | Marked up by the posting app | Hashtags make a post findable |
| Posting ceiling | 250 posts and 1,000 replies per 24 hours | 1,666 records an hour, 11,666 a day | Set by your server |
Two notes on that table. The Threads link limit has been enforced since 22 December 2025: a sixth link fails the post before it is created. And a Threads carousel counts as one post against the 250.

The four differences that break a copy-pasted post: text length, link counting, image count and who holds the post until it publishes.
Can you schedule on each network without a tool?
Only partly. Meta announced a built-in scheduler for Threads, Mastodon servers accept a publish time through their API, and Bluesky's API creates a post the moment it receives one. None of the three will schedule the other two, so a shared calendar needs a scheduler on top.
| Network | Built in | What that means for you |
|---|---|---|
| Threads | Meta announced scheduling in August 2024, on the web first and with testing still to come, alongside up to 100 drafts | Check whether the schedule option shows in your account; it covers Threads alone. The API has no publish-time field, so a third-party scheduler holds your post and sends it at the minute. |
| Mastodon | The API takes a scheduled_at time that must be at least 5 minutes in the future |
The server itself can hold the post. Whether you see a schedule button depends on the app you use. |
| Bluesky | The post documentation describes creating a record, with no publish time | Something else has to wait and send it: a scheduler. |
This matters when something goes wrong. If your scheduler holds the post, the scheduler is where you edit, cancel and see a failure. If a Mastodon server holds it, the post lives in that server's scheduled statuses list, where its time can be moved (again at least 5 minutes ahead) or the post cancelled.
How does one draft count on all three?
The same text gets three different counts, and it can pass two networks and fail the third. Here is a made-up launch post from an illustrative account. It is 346 characters long, with one emoji and a 79-character link carrying two tracking parameters.
Our overcast preset pack is out 🎬 Twelve looks for flat, grey footage, tested on three cameras and free until Sunday. Grab it here: https://example.com/presets/overcast-pack?utm_source=social&utm_campaign=launch Tell me which look you would grade with first, and I will post a before and after of the top pick on Friday. #colorgrading #filmmaking
| Network | Rule applied | Count | Limit | Result |
|---|---|---|---|---|
| Threads | The emoji counts as 4 bytes instead of 1 | 349 | 500 | Fits |
| Bluesky | Every character and the whole link count | 346 | 300 | 46 over |
| Mastodon | The 79-character link counts as 23 | 290 | 500 | Fits |

One draft, three counts: the link that costs Mastodon 23 characters costs Bluesky all 79.
The cheapest fix is the link. Drop the tracking parameters and tighten two sentences, and the Bluesky version comes to 217 characters:
Overcast preset pack is out 🎬 Twelve looks for flat, grey footage, tested on three cameras, free until Sunday: https://example.com/presets/overcast-pack Which look would you grade with first? #colorgrading #filmmaking
The promise of a Friday follow-up moved out of the post. On Bluesky it becomes a reply under the post instead, which costs nothing against the 300.
How do you adapt one post for each network?
Write the Bluesky version first, because anything that fits 300 fits everywhere. Then add to it for Threads and Mastodon instead of cutting down from a long draft. Adding is faster than trimming, and the short version is usually the better post.
Copy this template into your notes and fill it per post:
BASE (max 300 characters, counts for Bluesky as written)
Hook, one sentence:
Detail, one sentence:
Link (short, no tracking parameters):
Question or next step:
THREADS (max 500)
= BASE
+ one topic tag (1 to 50 characters):
+ optional second detail sentence:
Check: 5 links or fewer, emoji count extra
MASTODON (your server's limit, 500 by default)
= BASE
+ 2 or 3 hashtags written in CamelCase:
+ alt text for every image:
+ content warning, if the topic calls for one:
+ visibility: public / quiet public / followers
Check: each link costs 23 characters
BLUESKY (max 300)
= BASE
+ alt text for every image:
Check: link is clickable in the preview, card attached
FOLLOW-UP (reply under the post, all three)
The sentence that did not fit:
Three habits make the template work:
- Keep links short. A tracking parameter is free on Mastodon and expensive on Bluesky. If you need attribution, use a short link on Bluesky and the long one elsewhere.
- Write alt text once. Bluesky and Mastodon both store a description per image. Write it with the base text and reuse it.
- Treat tags per network. Threads takes one topic tag per post. Mastodon relies on hashtags for discovery, so that is where two or three of them earn their place.
In a scheduler with a caption per channel, this is one post with three text fields. In reelport.io's composer every channel can take its own caption in place of the shared one, the Mastodon counter uses the limit read from your own server, and a caption that is too long for a channel is flagged before you schedule.
What goes wrong, and how do you fix it?
Most failures on these three networks come from five causes: length, links, timing, media and duplicates. Each has a recognisable symptom. Check the table before you rewrite the post.
| Symptom | Cause | Fix |
|---|---|---|
| Bluesky refuses a post that fits elsewhere | Over 300 graphemes, or over 3,000 bytes with many emoji | Cut the link's parameters first, then a sentence |
| The Bluesky post shows a bare URL with no preview | On Bluesky the posting app fetches and embeds the card; the network does not add one | Use a tool that attaches link cards, and check its preview |
| A link or mention on Bluesky is plain text | Links and mentions are annotations the posting app adds to the text | Same: the tool has to mark them up |
| Threads fails with a link error | More than 5 links counted across the text and the attachment | Remove links, or move them to a reply |
| Threads says the text is too long at 495 characters | Emoji count by byte length, so one can cost 4 or more | Remove an emoji or a few words |
| Mastodon rejects the scheduled time | It is less than 5 minutes ahead | Move it out, or post now |
| Mastodon refuses a post your tool allowed | Your server's limit differs from the default 500 | Check the server's limit; use a tool that reads it |
| The same Mastodon post appears twice after a retry | The request was sent again without an idempotency key, which servers keep for up to 1 hour | Delete one; this is the tool's job to prevent |
| A Bluesky video will not upload | The account's email is not verified, or the daily video limit is reached | Verify the email in Bluesky, try again the next day |
| Threads posts stop going out late in the day | 250 posts in a rolling 24 hours | Spread the queue; a carousel counts once |
A short outage on the network's side is a different case. A scheduler should retry on its own. reelport.io retries network errors, outages and rate limits after 1, 5 and 15 minutes, then shows the reason on the queue if the post still has not gone out.
What should a weekly routine look like?
Batch the writing once a week, schedule everything in one sitting, and keep ten minutes a day for replies. Text networks reward conversation, so the scheduled post is the start of the work. A routine that fits in about an hour a week:
- Pick 5 to 7 ideas from your content calendar
- Write each as a BASE of 300 characters or fewer
- Add the Threads topic tag and the Mastodon hashtags
- Write alt text for every image
- Check each link opens, and shorten it for Bluesky
- Give each channel its slot; avoid sending all three in the same minute if your audiences overlap
- Park the sentence that did not fit as a follow-up reply
- Block ten minutes each day to answer replies
- On Friday, note which post drew the most replies on each network
If you already send the same clip or photo to Instagram and TikTok, the same idea applies there at a larger scale. Cross-posting to multiple platforms covers the media side; this page is the text side.
Where reelport.io fits
reelport.io publishes to Threads and Mastodon from the same composer as your other channels, on a posting schedule with time slots per channel (scheduling). Bluesky cannot be connected in reelport.io yet, so the Bluesky version of a post still has to go out from Bluesky itself or from another tool.
What it does on these two, as documented:
- Threads: text, photos, videos, carousels of up to 20 and link cards, with a topic, reply controls, follow-up posts and a first reply.
- Mastodon: any server. You enter its address and sign in there. Text, up to 4 photos with alt text or one video, visibility, a content warning, the language, follow-up posts and a first reply.
Comments from Threads and Mastodon land in the Community inbox next to your other networks. Posts are sent from servers in the EU at the scheduled minute, with your computer off. New teams start on the Free plan; what each plan includes is on the pricing page.