How to cross-post to multiple social media platforms without it looking copy-pasted
The same text everywhere gets refused on short networks, tags the wrong people and loses its link preview. What to change on X, LinkedIn, Bluesky, Mastodon and Pinterest, with one launch post adapted for all five and measured.
TL;DR
- To cross-post without looking copy-pasted, keep one message and change the wrapper per network: length, links, mentions, hashtags and image. Write a short version for X and Bluesky, a fuller one for LinkedIn and Mastodon, and a keyword description with a 2:3 image for Pinterest.
- Mentions do not carry over. A bare @name copied from X to Mastodon points at a user with that name on your own server, if one exists, and a Bluesky mention needs a full handle such as name.bsky.social.
- Link previews come from different places. Mastodon builds a card from the first link only when the post has no image or video, and Bluesky shows a card only when the posting app attaches one.
- In a worked example counted on October 10, 2026, a 570-character LinkedIn post sent unchanged was over the limit on X, Bluesky and Mastodon. The rewritten versions came to 188, 218 and 311 by each network's own count.
- X's automation rules ban duplicative or substantially similar posts on one X account or across X accounts you run. LinkedIn says it may limit the visibility of posts when it detects excessive posting or an automation tool.
Is posting the same thing on every network a problem?
Posting the same message on several networks is not the problem: none of the platform documents cited in this guide forbids it. Posting the same text is where problems start, and the rules that exist apply inside one network. X's automation rules forbid duplicative or substantially similar posts on one account or over multiple accounts you operate. LinkedIn's help page on posting says it may show posts to fewer people when it detects posting at a volume that suggests inauthentic activity, or detects an automation tool.
The practical problems come from the text itself. A post written for one network can be too long for another, can tag the wrong person, can lose its link preview and can carry hashtags that do nothing. The rest of this guide covers each of those, then adapts one post for all five networks.
What to change for each network
Cross-posting well means changing five things per network: the length, how links appear, how mentions are written, which hashtags go in and which image goes with the post. The table sets out what each network's own documentation or source code says about the first four, as read on October 10, 2026. Full character-counting rules are in the guide to social media character limits.
| Network | Text limit | A link counts as | Link preview | Mention format | Hashtags |
|---|---|---|---|---|---|
| X | 280, weighted | 23 characters | Not covered by the X sources checked | @handle | X recommends no more than 2 per post |
| 3,000 | Not documented | Built from the page's Open Graph tags | Not covered by the LinkedIn sources checked | No guidance in the LinkedIn sources checked | |
| Bluesky | 300 graphemes | Its full length | Only if the posting app attaches a card | Full handle, such as @name.bsky.social | Tags up to 64 graphemes, turned into links |
| Mastodon | 500 by default; each server sets its own | 23 characters | Built from the first link, only when the post has no media | @user@server; a bare @user means your own server | Make a post findable by tag search; full-text search is opt-in |
| Title 100, description 800 | The destination link is its own field, up to 2,048 | The Pin itself links out | Not applicable | The description is read for relevance, not shown in feeds |
The X cells come from X's counting documentation and its hashtag help page. The Bluesky limit is in the post record's schema, and the tag length in the rich text facet schema. Mastodon's rules are in its posting documentation, and Pinterest's field limits in its Create Pin API reference.
How links and link previews differ by network
A link costs a different amount of space on each network and gets a preview card from a different source. X and Mastodon both count every link as 23 characters, whatever its real length, so a long tracking link costs nothing extra there. Bluesky counts the link as written, so the same tracking link can take a large share of a 300-grapheme post.
Mastodon's preview card is built by the server. Mastodon's link card service takes the first eligible link in the post and reads the page's oEmbed or Open Graph data. The same code returns early when the post has media attached, so a Mastodon post with an image shows the image and no link card. Choose one: the image or the card.
Bluesky leaves the card to the app that posts. Bluesky's guide to creating a post says each client fetches the card data and embeds it in the post record, which it notes takes extra work by the client. A post sent by a tool that skips that step shows a plain link with no card.
LinkedIn builds its preview from the page's own tags. Its shareable website guide lists og:title, og:image, og:description and og:url as required, and asks for an image of at least 1,200 by 627 pixels, with 1.91:1 the recommended ratio. Check those tags on the page you link before you post anywhere.
Give each network its own UTM tag. A separate utm_source per network, such as x, linkedin and mastodon, is what lets your analytics tell the visits apart afterwards.
How mentions and hashtags differ across networks
A mention written for one network rarely works on another, because each network names accounts differently. On X a mention is @handle. On Bluesky a handle is a domain name, such as name.bsky.social, and Bluesky's rich text documentation says a mention is a marked range of text tied to the account's permanent identifier, which is what sends the notification.
Mastodon reads a bare mention as local. Its posting documentation says @word is interpreted as the user named word on your own server, if that user exists. An @acme copied from X can therefore tag a stranger on your Mastodon server, or nobody. Write the full address, such as @acme@example.social, or drop the mention.
Hashtags do a different job on each network. X recommends no more than 2 hashtags per post as best practice. On Mastodon, a hashtag makes a post discoverable to anyone searching for that tag, and the posting documentation treats full-text search as something an account opts into, so a post without hashtags is harder to find by search. On Pinterest, the ad specs page says the description is not shown in the home or search feed but is used to judge relevance, so plain descriptive keywords matter more there than hashtags.
Which images and video work on each network
Image rules differ in count and in shape. Mastodon's posting documentation allows up to 4 images or one video per post. Bluesky's image embed schema also caps a post at 4 images. A standard Pinterest image Pin carries one image, and Pinterest's ad specs page recommends a 2:3 image, such as 1,000 by 1,500 pixels, warning that taller Pins may be cut off in feeds.
| Network | Images per post | Recommended shape | Source |
|---|---|---|---|
| X | Up to 4 | Not covered by the sources checked | overads X channel page |
| Up to 9 | 1.91:1 for link preview images | overads LinkedIn channel page; LinkedIn Help | |
| Bluesky | Up to 4 | Not specified | Bluesky image embed schema |
| Mastodon | Up to 4 | Not specified; images over 8.3 megapixels are downscaled | Mastodon posting documentation |
| 1 on a standard image Pin | 2:3, such as 1,000 by 1,500 pixels | Pinterest ad specs |
Add alt text wherever the network accepts it. Mastodon's posting documentation calls a media description optional but a good idea, and Pinterest's API takes alt text of up to 500 characters. The caps for X and LinkedIn come from the overads X channel page and the overads LinkedIn channel page.
A worked example: one launch post, five versions
The example below adapts one launch post for five networks. The brand, a coffee roaster launching a blend called Ridge Blend, is invented, and its links point at example.com. Each version was counted on October 10, 2026 in Node.js 24, with each network's published counting rule and with overads' own check. Nothing was posted to a live account.
The LinkedIn version came first, at 570 characters:
Our Ridge Blend goes on sale today, and it is the first coffee we have built around how cafés actually serve it.
What is different from last year's blend:
1. A lighter roast, so the fruit notes survive an oat-milk flat white.
2. Beans from two farms instead of a rotating mix, which keeps every batch consistent.
3. A bag that goes in household recycling.
If you run a café and want a sample box, comment below or message the page. Tasting notes and a brew guide: https://example.com/ridge-blend?utm_source=linkedin&utm_medium=social
#SpecialtyCoffee #CoffeeRoastingThe X version keeps one idea, one link and one hashtag:
The Ridge Blend is on sale today: a lighter roast that keeps its fruit notes in an oat flat white, from two farms for a steadier cup.
Brew guide: https://example.com/ridge-blend?utm_source=x&utm_medium=social
#SpecialtyCoffeeThe Bluesky version drops the tracking parameters, since Bluesky counts the link as written:
New today: the Ridge Blend. A lighter roast that keeps its fruit notes in an oat flat white, from two farms so every bag tastes the same.
Tasting notes and brew guide: https://example.com/ridge-blend
#SpecialtyCoffeeThe Mastodon version keeps more detail and more hashtags, because hashtags carry discovery there:
New today: the Ridge Blend, a lighter roast built for milk drinks.
It keeps its fruit notes in an oat flat white, the beans come from two farms instead of a rotating mix, and the bag goes in household recycling.
Tasting notes and a brew guide: https://example.com/ridge-blend?utm_source=mastodon&utm_medium=social
#SpecialtyCoffee #CoffeeRoasting #CoffeeThe Pinterest version is a 37-character title, so all of it fits in the first 40 characters that Pinterest may show in feeds, plus a keyword description:
Title: Ridge Blend: light roast for oat milk
Description: Ridge Blend is a light roast coffee for oat milk flat whites, lattes and filter coffee at home. Tasting notes: stone fruit and cocoa. Includes a brew guide for pour over and espresso, with grind size and ratios.| Network | Its own version | The LinkedIn text, unchanged | Limit |
|---|---|---|---|
| X (weighted count) | 188 | 524 | 280 |
| 570 | 570 | 3,000 | |
| Bluesky (graphemes) | 218 | 570 | 300 |
| Mastodon (links as 23) | 311 | 524 | 500 by default |
| Pinterest description | 211 | 570 | 800 |
Sent unchanged, the LinkedIn text was over the limit on three of the five networks: X, Bluesky and Mastodon. It fit Pinterest's 800 characters, but as a Pin description it would carry line breaks and hashtags that Pinterest does not show in feeds. The adapted versions keep the same three facts, the same link and the same launch, so the message stays one message.
How to post to all five networks at once
Posting to all five networks at once takes one shared text plus an override for each network that needs one. In order:
- Write the longest version first, usually LinkedIn's, and use it as the shared text.
- Write a version for each network whose limit or habits differ: X, Bluesky, Mastodon and the Pinterest description.
- Rewrite every mention in the target network's format, or remove it.
- Give each network's link its own
utm_source. - Choose the image: a 2:3 image for Pinterest, and on Mastodon either an image or a link card, not both.
- Check each version against its network's count before scheduling, not after.
In overads, the per-network text goes in the variants field of one request, as the cross-platform posting guide documents. Each target gets its override when one is set and the shared text otherwise, and each version is checked against its own network's limits when the post is created. The worked example as one request body, with placeholders for the texts and ids:
{
"content": "LINKEDIN_TEXT",
"connectionIds": ["LINKEDIN_ID", "X_ID", "BLUESKY_ID", "MASTODON_ID", "PINTEREST_ID"],
"mediaUrls": ["https://example.com/ridge-blend-2x3.jpg"],
"variants": {
"twitter": { "content": "X_TEXT" },
"bluesky": { "content": "BLUESKY_TEXT" },
"mastodon": { "content": "MASTODON_TEXT" },
"pinterest": { "content": "PINTEREST_DESCRIPTION" }
},
"platformSettings": {
"pinterest": {
"boardId": "BOARD_ID",
"title": "Ridge Blend: light roast for oat milk",
"link": "https://example.com/ridge-blend?utm_source=pinterest",
"altText": "A bag of Ridge Blend coffee beside an oat milk flat white"
},
"mastodon": { "language": "en" }
},
"scheduledAt": "2026-10-13T15:00:00Z",
"requireApproval": true
}X's key is twitter in the overads API. A Pinterest variant becomes the Pin's description. One media list goes to every target, so if Pinterest should get a 2:3 image and the other networks a landscape one, send Pinterest as a second post, as the guide advises. With requireApproval set, the post waits until a member approves it in the app.
Where overads fits
overads is AI marketing automation built only for marketing. Its workflows draft posts, reports and recommendations, and every workflow starts out asking for approval before it posts. Its Publish composer posts to X, LinkedIn, Bluesky, Mastodon and Pinterest. With two or more networks selected, "Customize per network" copies the shared text into one field per network for you to edit, and the composer refuses any version over its network's limit. Four AI rewrite tools (Shorter, Add emojis, More professional and Suggest hashtags) change only the field in view, and only when you ask.
What overads does not do today:
- It does not rewrite a post for each network on its own. The per-network versions are written by a person, with the rewrite tools on request.
- It does not publish to Instagram, Facebook, Threads, YouTube or TikTok for customers. Those channels are built but wait on each platform's review, and TikTok cannot be connected yet.
- It does not attach a link card to Bluesky posts. Links in a Bluesky post are clickable, with no preview.
- It does not convert mentions between networks. An @name is sent as written, so mentions need rewriting per network by hand.
- It sends alt text only to Pinterest. Images posted to X, LinkedIn, Bluesky and Mastodon go without alt text.
- It counts a Mastodon link at its full length rather than 23, so a Mastodon post with long links can be refused though the server would accept it. The worked example's Mastodon version counts 357 in overads and 311 on Mastodon, both under 500.
A team that needs alt text on every network, or link cards on Bluesky, is better served by each network's own app for those posts. Plans are on the pricing page.
Frequently asked questions
Should I use a link shortener when cross-posting?
Not for X or Mastodon, which count every link as 23 characters, and Mastodon's documentation actively discourages shorteners. On Bluesky a link counts at its full length, so a short path on your own domain saves space without hiding where the link goes.
Can I post the same text to two X accounts I manage?
Not under X's automation rules, which forbid duplicative or substantially similar posts across multiple accounts you operate. Accounts with related but different jobs may each be automated, as long as their posts are not duplicates.
Can each network's version go out at a different time?
In overads, one post has one scheduled time for all its targets. To stagger the networks, create a separate post for each time slot.
Sources
- Automation rules. X Help Center. Accessed Oct 10, 2026.
- Counting characters. X. Accessed Oct 10, 2026.
- How to use hashtags. X Help Center. Accessed Oct 10, 2026.
- Post and share updates. LinkedIn Help. Accessed Oct 10, 2026.
- Make your website shareable on LinkedIn. LinkedIn Help. Accessed Oct 10, 2026.
- Links, mentions, and rich text. Bluesky documentation. Accessed Oct 10, 2026.
- Creating a post. Bluesky documentation. Accessed Oct 10, 2026.
- app.bsky.feed.post lexicon. Bluesky (atproto on GitHub). Accessed Oct 10, 2026.
- app.bsky.richtext.facet lexicon. Bluesky (atproto on GitHub). Accessed Oct 10, 2026.
- app.bsky.embed.images lexicon. Bluesky (atproto on GitHub). Accessed Oct 10, 2026.
- Posting to your profile. Mastodon documentation. Accessed Oct 10, 2026.
- FetchLinkCardService. Mastodon (source on GitHub). Accessed Oct 10, 2026.
- Review ad specs. Pinterest Business help. Accessed Oct 10, 2026.
- Create Pin. Pinterest Developers. Accessed Oct 10, 2026.
- Cross-platform posting. overads. Accessed Oct 10, 2026.
Drafted with AI assistance, then checked against primary sources and the product itself by the overads team.
Keep reading
Social publishing · 8 min read
Social media character limits in 2026, and how each platform counts
Post limits for X, LinkedIn, Bluesky, Mastodon, Threads, Instagram, Pinterest and YouTube, from each platform's own docs, and how each counts links, emoji and non-Latin text.
Social publishing · 10 min read
How to schedule social media posts with Claude, ChatGPT, Cursor or Codex
Connect an AI assistant to overads over MCP and it can draft and schedule posts for X, LinkedIn, Bluesky, Mastodon and Pinterest. Which apps sign in and which need a key, what each request becomes, and how to fix a refused post.
Paid media · 13 min read
Pinterest Visual Search Ads: how the new format works and who should test it
Pinterest's new format sits in search results and Pin closeups, with a beta opening across its ad markets. How it compares with keyword and Top of Search ads, what is still unpublished, and what the footnotes behind Pinterest's numbers say.
One message, a version for each network
overads Publish posts to X, LinkedIn, Bluesky, Mastodon and Pinterest from one composer, with a separate text per network when one version does not fit them all, a limit check per network, and an optional approval step before a scheduled post goes out.
See how Publish works