How to cross-post to X, Threads and Bluesky from one post
Each network counts text, links and emoji differently. Write one post with a version for X, Threads and Bluesky, and know what to do when one refuses it.

To cross-post to X, Threads and Bluesky, write the idea once, give each network its own version, and schedule all three from the same post. Pasting identical text into three apps is where cross-posts go wrong. The three networks count text in different units, treat links differently, take different media, and only two of them accept threads. A post that fits X can be refused by Bluesky, and the reverse.
How each network counts your text
| X | Threads | Bluesky | |
|---|---|---|---|
| Text per post | 280 weighted characters | 500 characters | 300 graphemes |
| A link counts as | 23, whatever its length | Its full length | Its full length |
| An emoji counts as | 2 | Its code points | 1 |
| Media per post | Up to 4 images, or one video | Up to 10, as a carousel | Up to 4 images |
| Longest video | 2 minutes 20 seconds | 5 minutes | No video through Publedia |
| Image alt text | Yes | Not sent through Publedia | Yes |
| Threads of several posts | Yes | Yes, as a reply chain | No |
X counts weighted characters. Latin letters, digits and common punctuation count as one. Chinese, Japanese and Korean characters count as two, and so does every emoji, however many parts it is built from. Every link counts as 23, because X wraps it in its own short link.
Threads counts plain characters, up to 500. A link costs its full length. Publedia counts a Threads version character by character, so an emoji made of several parts, like a flag, can take more than one.
Bluesky counts graphemes: one per character as you see it on screen. A family emoji built from four people and three joiners is one grapheme. A link costs its full length. The Bluesky post lexicon also sets a second ceiling of 3,000 bytes. Ordinary writing never comes near it: 300 graphemes of English is about that many bytes, and of Japanese under a third of the cap. A post made mostly of multi-part emoji is the exception, because a family emoji alone is 25 bytes. Publedia's counter checks graphemes, not bytes, so an emoji-heavy Bluesky version is the one case where the counter can pass a post that Bluesky refuses.
One post, three counts
Take 250 characters of English plus a space and a 70-character link:
- On X it counts 274: 251 for the text and 23 for the link. It fits within 280.
- On Threads it counts 321. It fits within 500.
- On Bluesky it counts 321 graphemes and is over 300, almost entirely because of the link.
Now take 140 characters of Japanese with no link. Bluesky and Threads count 140. X counts 280, right at its limit. The network that is tightest for English links is the loosest for Japanese, which is why no single version works everywhere.
The free character counter shows all three counts for a draft at once, without an account. The character limits guide has the same rules for all eight networks.
Links, images, video and alt text
Links. On X a long link is free beyond its 23. On Bluesky and Threads it eats into the limit, so shorten it or cut words around it. Publedia makes a link in a Bluesky post clickable, but it does not attach a link preview card, so the words around the link have to do the selling.
Images. X takes up to 4 images and Bluesky up to 4. Threads takes up to 10 as a carousel. File types differ: through Publedia, X takes JPEG, PNG, WebP and GIF; Bluesky takes JPEG, PNG and WebP; Threads takes JPEG and PNG. A GIF that works on X needs a still image for Bluesky.
Video. X takes one video per post, up to 2 minutes 20 seconds, and it has to be the only attachment. Threads takes video up to 5 minutes, alone or inside a carousel. Bluesky takes no video through Publedia, so the Bluesky version needs images or text only.
Alt text. Write it on every image. It reaches X and Bluesky. It is not sent to Threads through Publedia, so if an image carries words that matter, repeat them in the Threads text.
Threads and reply chains
X and Threads both publish threads. Bluesky does not through Publedia: a Bluesky version is one post, and a version over 300 graphemes is refused, not split.
That changes how you plan a long idea. Write the thread for X (each post up to 280) and the reply chain for Threads (each part up to 500, so usually fewer parts). For Bluesky, publish the strongest single post. If you need one more beat on Bluesky, add a First comment to its version. Publedia posts it as your reply right after the post goes live, with its own 300 graphemes.
On X, every post in a thread counts toward the X allowance (see below), so a six-post thread uses six.
Write one post with a version per channel
- Select Create post, then Choose channels, and pick your X, Threads and Bluesky channels.
- Write the shared text. With several channels selected, the counter measures against the tightest limit among them, which for these three is X's 280, counted the way X counts.
- Select the X avatar and choose Write version. A band above the editor confirms that changes apply to that channel only. Edit the text, and select Continue as thread if X gets a thread. Select Done when you are finished.
- Do the same for Threads: Write version, then lengthen the text, swap the media for a carousel, or select Continue as thread for a reply chain.
- Do the same for Bluesky: shorten the text to fit 300 graphemes, cut or shorten long links, and replace any video with images.
- Check each preview. A channel that cannot publish what it has gets a warning sign on its avatar, and its menu says what to change.
- Select Pick a time, choose when it should go out, and select Schedule.
To undo a version, select Reset to shared in the band. Once a channel has its own version, its menu offers Edit version instead of Write version. A thread or a poll exists only inside a channel's version, so an X thread needs step 3 even when X is the only channel.
When one channel fails
Publedia sends a post to each channel separately. If Bluesky refuses the post, X and Threads still publish, and the post shows something like "Published on 2 of 3 channels. 1 needs you."
Open the post to see one row per channel, each with the reason it failed and one next step:
- Text too long or a file the network does not accept: Edit this version, fix it, and save.
- The account's access ran out: Reconnect Bluesky (or X, or Threads), then retry.
- The X allowance ran out: Upgrade plan, or wait for the reset.
- A temporary problem on the network's side: Publedia retries on its own, and the row says when. Retry now sends it sooner.
A retry sends only to the channels that failed. Channels that already published are not posted to again, so fixing Bluesky never doubles your post on X.
The full list of failure reasons and fixes is in fixing a failed post.
The X allowance and your own X app
Posts sent through Publedia's own X app count against a monthly allowance: 5 on Basic, 15 on Pro and 60 on Ultra. Only X uses it. Your Threads and Bluesky posts never count, and every post in an X thread counts as one. The composer shows how many are left this month beside the X version, and the pricing page lists each plan.
The allowance is checked again when a post is sent. If it runs out before a scheduled post's time, only the X channel fails with Plan limit reached. Threads and Bluesky still publish.
To post to X without the allowance, an admin can register the workspace's own X app under Settings, Developers. X then bills your posts to your X developer account. X prices a post that contains a link much higher than one without, so check X's pricing if most of your cross-posts carry a link. The steps are in use your own X app.
When to post natively instead
Cross-posting from one composer saves time when the idea is the same everywhere. Post in the network's own app when:
- The Bluesky post needs video, or needs to be a thread. Neither is available through Publedia.
- The image on Threads needs alt text. Publedia does not send it to Threads.
- You are replying in a live conversation. Replies are where Bluesky and Threads reward you, and a schedule cannot do that part. Comments on your X and Threads posts reach Publedia's Inbox (beta); Bluesky replies do not yet.
- The post only makes sense on one network, such as a reply to a trend on X. A version per channel helps, but some posts should not travel.
For the network-specific steps, see the guides to scheduling X posts and threads, scheduling Threads posts and reply chains and scheduling Bluesky posts.
Sources
Topics
- X
- Threads
- Bluesky
- Cross-posting


