Cross-Posting to Bluesky and Mastodon Without Annoying Anyone
August 31, 2026
·
8 min read
Running Bluesky and Mastodon side by side sounds like it should be trivial. Both are open, both are text-first, and both absorbed roughly the same crowd leaving roughly the same place at roughly the same time. In practice they are two different cultures with two different sets of rules, and the fastest way to lose ground on both at once is to pipe identical text into each and walk away.
There is a way to do this that saves real time and does not get you muted. It requires knowing what genuinely differs between the networks, and taking Fediverse crossposting norms more seriously than most tools will encourage you to.
Why this is more awkward than it looks
Neither network gives you a clean native path. Bluesky has no built-in scheduler at all, so posts publish the instant you submit them. Mastodon is stranger: a fully functional scheduler exists inside its code, and its API has accepted a scheduled publish time for years with a minimum lead time of five minutes, but the official web interface and official apps still give you no way to reach it. On one network the feature does not exist; on the other it exists and is not exposed.
Then there is the shape of Mastodon itself. There is no single Mastodon. There are thousands of independently operated servers with their own rules, their own moderators and their own tolerance for automated posting. Behaviour that passes without comment on one instance will earn you a warning on another, and neither server is wrong.
What actually differs between the two
Character limits
Bluesky caps posts at 300 characters, counted as graphemes, so a multi-part emoji counts as one. Mastodon defaults to 500, but that number is set by whoever runs your server. Admins can raise it and plenty do, with some instances running to a thousand characters or well beyond. Never assume 500 without checking your own instance.
Links behave differently too. On Bluesky the URL sits in your post text and counts against your 300. On Mastodon every link counts as a flat 23 characters no matter how long it is, which is why link shorteners are pointless there and mildly suspicious looking.
The practical rule: write to 300 and the same text works in both places. Write to 500 and you will be hacking it apart at the last minute. If a thought genuinely needs the extra room, write the Mastodon version properly and write a tighter Bluesky version. It takes ninety seconds and both read better for it.
Alt text
Both networks care about image descriptions, and the Fediverse in particular treats alt text as a baseline courtesy rather than a nice extra. There is an established convention where people who cannot write their own descriptions post asking for help with a dedicated hashtag, and strangers reply with one written for them. That tells you how normalised the expectation is.
This matters specifically for crossposting, because a lot of automated pipelines drop alt text on the floor. If an image carries meaning rather than decoration, and you are not certain your tool passes descriptions through, publish that one natively and keep the queue for text.
Content warnings
This is the difference people get wrong most often. Mastodon has a free-text content warning field: you write a short label, the post collapses behind it, and the reader chooses to expand. There is a strong tradition that those who are able to should use one for emotive subjects such as politics or religion, on top of the more obvious cases like distressing news, spoilers and anything not safe for work.
Bluesky has self-labelling, but it is a fixed set of adult content categories rather than an arbitrary warning you can write yourself. So content warnings do not translate between the two networks. If your material regularly touches subjects your instance expects a warning on, add the warning to the Mastodon version by hand, or keep that category out of the queue entirely.
The framing worth adopting is that a content warning is an accessibility feature, not a penalty. It makes a post readable by people who would otherwise have to scroll straight past it, in the same way alt text makes an image readable by someone using a screen reader.
Hashtags
Most Mastodon instances do not index full-text search by default, so hashtags are the actual discovery mechanism rather than decoration. Two or three relevant ones, written in CamelCase so screen readers can pronounce them. Bluesky does have search, and a stack of hashtags there reads as imported marketing. Same symbol, different job.
One post, two different audiences
The time saved by cross-posting comes from batching the writing and the scheduling, not from making the two posts identical. A tool like PostSpoke can queue both from one calendar. Deciding what each network should actually see is still your call, and it is the part that determines whether this works.
How to cross-post without sounding like a bot
Be present on both
This is the rule that matters more than every other rule combined. The Fediverse guidance on crossposting is blunt about it: the practice becomes controversial when you are posting to Mastodon without interacting on Mastodon at all, and some servers specifically ban accounts that behave that way. Your followers will reply to you, and a feed that never replies back is precisely the behaviour people object to. Ten minutes a day of genuine conversation buys you an enormous amount of latitude on everything else.
Label automation if you cannot be present
Mastodon lets you mark an account as automated in its profile settings. If you truly cannot monitor replies, the recommended practice is to set that flag so people know you are posting in one direction only. It costs nothing, it is honest, and it defuses most of the irritation before it starts.
Adapt rather than duplicate
Rewrite the opening line for each network, even if the rest stays the same. That alone removes most of the copy-paste smell.
Strip references that only make sense elsewhere. A post inviting people to reply with their handle from another platform reads as a mistake on both.
Trim hashtags right down for Bluesky and keep two or three meaningful ones for Mastodon.
Do not cross-post replies or conversational asides. Cross-post the things that read well cold, to someone who has no idea what came before.
Stagger the two by a few minutes rather than firing them simultaneously. People who follow you in both places do notice identical timestamps.
Read your instance rules before automating anything
Instance rules are not boilerplate. Some servers ban crossposting outright, some ban unattended accounts, some require content warnings on specific topics. Read the rules page of your home server before you queue a month of content. If your posting style genuinely conflicts with your instance, the right move is to find a server whose culture fits, not to argue with volunteer moderators about it.
A setup that works
1.
Connect Bluesky with your full handle and an App Password generated under Settings, then Privacy and Security, then App Passwords. Never hand over your main password.
2.
Connect Mastodon by entering your instance domain, whether that is a large public server or something you run yourself, since every instance is its own application and authorises separately.
3.
Set 300 characters as your default writing target and expand for Mastodon only when the post earns the extra room.
4.
Queue the posts a stranger could read with no context, and keep the reactive and conversational ones manual.
5.
Block ten minutes a day for replies on both networks. If you skip this step, nothing else on the list will save you.
PostSpoke handles the first four in one place. Bluesky connects with a handle and App Password, Mastodon connects by instance domain with the app registering itself against your server dynamically so there is no developer account to set up, and both sit in the same composer and calendar. Credentials are stored encrypted, and both networks are live today rather than sitting on a roadmap.
What not to automate
Anything time-sensitive. A queued post about a developing story will publish on schedule regardless of what has happened since you wrote it.
Replies and quote posts. That is conversation, and automating conversation is how accounts get muted.
Apologies, corrections and anything sensitive. Write those live, separately, on each network.
Image-led posts where the description carries the meaning, unless you have confirmed that your tool passes alt text through.
Your entire presence. A queue is scaffolding for showing up, not a substitute for it.
Cross-posting Bluesky and Mastodon is a scheduling problem with a manners problem attached, and the manners problem is the harder of the two. Solve it and the scheduling is fifteen minutes of setup. Skip it and no tool will help you, because the Fediverse has a long memory for accounts that broadcast and never listen.
Frequently asked questions
Can you post to Bluesky and Mastodon at the same time?
Yes, with a scheduler connected to both accounts, since neither network can publish to the other on its own. PostSpoke connects Bluesky with a handle and App Password and Mastodon with your instance domain, then publishes to both from a single composer.
What is the character limit on Bluesky compared to Mastodon?
Bluesky caps posts at 300 characters, counted as graphemes. Mastodon defaults to 500, but each server sets its own limit and administrators often raise it, so check your instance rather than assuming. On Mastodon every link counts as a flat 23 characters regardless of its actual length.
Is cross-posting allowed on Mastodon?
It depends entirely on your server. Many instances permit it, some ban it outright, and some prohibit accounts that post without ever replying. Read your instance rules first, and mark the account as automated in Mastodon settings if you cannot monitor replies.
Does Mastodon have built-in post scheduling?
Mastodon has supported scheduled posts in its API for years, with a minimum lead time of five minutes, but the official web interface and official apps do not expose the feature. In practice you need a third-party client or scheduler to reach it.
Schedule it all from one editor
PostSpoke publishes to Bluesky, Mastodon, Substack, Ghost, Medium, Dev.to and Telegram from a single compose screen. Free while we are in public beta.