How to Cross-Post From Mastodon to Bluesky Automatically
🔍 WiseChecker

How to Cross-Post From Mastodon to Bluesky Automatically

You want your Mastodon posts to appear on Bluesky without manually copying and pasting each update. Mastodon and Bluesky use different federation protocols, so no direct bridge exists between the two networks. This article explains how to set up an automated cross-posting workflow using a third-party service called Moa. You will learn the exact steps to connect your accounts, configure filters, and avoid common mistakes.

Key Takeaways: Automating Mastodon to Bluesky Cross-Posts

  • Moa (mastodon-to-bluesky bridge): A free open-source service that forwards public Mastodon posts to a Bluesky account in near real time.
  • Mastodon settings > Preferences > Authorized apps: Where you generate an access token that Moa uses to read your posts.
  • Bluesky App Password (not your main password): A single-use credential that Moa uses to post on your behalf without exposing your account.

Why Mastodon and Bluesky Do Not Cross-Post Natively

Mastodon runs on the ActivityPub protocol, which allows any ActivityPub-compatible server to communicate with others. Bluesky uses the AT Protocol, which is not compatible with ActivityPub. No built-in sharing feature exists between the two platforms. A third-party service must act as a relay, reading your Mastodon posts and creating duplicate posts on Bluesky.

Moa is an open-source bot written in Python that performs this relay function. You run Moa on your own computer or a cloud server, or you use a hosted instance. The bot monitors your Mastodon account for new public posts and then posts the same text to your Bluesky account. Moa supports filters so you can exclude certain post types, such as replies or posts with specific hashtags.

What You Need Before Starting

Before setting up Moa, gather the following items:

  • A Mastodon account on any instance. The account must be set to public for Moa to read it.
  • A Bluesky account with a handle (for example, @user.bsky.social).
  • Access to a computer or server where you can run Python scripts. Windows, macOS, or Linux all work.
  • Python 3.8 or newer installed on that computer.

Steps to Set Up Automated Cross-Posting With Moa

Follow these steps to install Moa, connect your accounts, and start cross-posting. Each step includes the exact menu name or command you need.

  1. Generate a Mastodon access token
    Log in to your Mastodon account in a web browser. Go to Preferences > Account > Authorized apps. Click Add new app. Give the app any name, such as “Moa cross-poster.” Leave the default scopes checked. Click Submit. Copy the access token that appears. Save this token in a secure text file.
  2. Create a Bluesky App Password
    Log in to Bluesky in a web browser. Go to Settings > App Passwords. Click Add App Password. Enter a name like “Moa cross-poster.” Click Create. Copy the generated password. This password is not your main Bluesky password. Save it alongside the Mastodon token.
  3. Install Moa on your computer
    Open a terminal (Command Prompt on Windows, Terminal on macOS or Linux). Run the command pip install moa-activitypub. Wait for the installation to complete. If you do not have pip installed, install Python first from python.org.
  4. Create a configuration file
    In any text editor, create a new file named config.toml. Paste the following template and replace the placeholder values with your real credentials:
    [mastodon]
    access_token = "your-mastodon-access-token"
    api_base_url = "https://your-instance.example.com"
    
    [bluesky]
    handle = "your-handle.bsky.social"
    app_password = "your-bluesky-app-password"
    
    [filters]
    skip_replies = true
    skip_reblogs = true
    skip_hashtags = ["crosspost", "nobluesky"]
    

    Save the file in the same folder where you will run Moa.

  5. Run Moa for the first time
    In the terminal, navigate to the folder containing config.toml. Run the command moa. Moa will start and show a log of each post it forwards. Test it by posting something public on Mastodon. Within a minute, the same post should appear on Bluesky.
  6. Keep Moa running continuously
    Moa must stay running to forward future posts. On a desktop computer, you can leave the terminal window open. For a more reliable setup, run Moa on a low-cost cloud server or a Raspberry Pi. Use a process manager like systemd on Linux or pm2 on macOS to restart Moa automatically if it stops.

Common Mistakes and Things to Avoid

Moa Does Not Forward Old Posts

Moa only forwards posts created after the bot starts running. It does not backfill your Bluesky account with past Mastodon posts. Do not expect historical content to appear automatically.

Private or Unlisted Posts Are Not Forwarded

Moa reads only public posts from your Mastodon timeline. Posts set to followers-only or unlisted are ignored. If you want to cross-post private content, you must do it manually.

Bluesky Post Length Limits

Bluesky limits posts to 300 characters. Mastodon allows up to 500 characters on most instances. Moa trims long posts to 300 characters. Check your Mastodon posts for length before publishing if the full text must appear on Bluesky.

Media Attachments Are Not Forwarded

Moa forwards only the text of your post. Images, videos, and polls attached to your Mastodon post do not appear on Bluesky. You must upload media separately on Bluesky if needed.

Bluesky App Password Expiration

Bluesky App Passwords do not expire on their own. If you change your Bluesky main password, the app password continues to work. If you revoke the app password in Bluesky settings, Moa will stop posting. Generate a new app password and update config.toml if this happens.

Moa vs Manual Cross-Posting: Comparison of Methods

Item Moa Automated Cross-Posting Manual Copy-Paste
Setup time 15 to 30 minutes once Zero setup
Time per post None after setup 30 to 60 seconds per post
Media forwarding Text only Full control
Post length handling Truncates to 300 characters You edit manually
Filtering options Skip replies, reblogs, hashtags You decide each time
Reliability Depends on uptime of your server Always available

Moa saves time for users who post frequently on Mastodon and want a presence on Bluesky without extra effort. Manual cross-posting gives you full control over formatting and media but requires consistent manual action. Choose the method that matches your posting volume and quality preferences.

You can now automatically cross-post from Mastodon to Bluesky using Moa. Test the setup with a single public post, then verify the post appears on Bluesky within one minute. For advanced control, add custom filters in the config.toml file to skip posts containing specific words or hashtags. Use the skip_hashtags filter to prevent certain content from reaching Bluesky.