Find Mastodon/Fediverse accounts from Bluesky follows and generate import CSV files
Project description
bsky2masto
Find followable Mastodon/Fediverse accounts from the people you follow on Bluesky, then generate a Mastodon import CSV.
What it does
Given a Bluesky account, bsky2masto:
- Fetches followed accounts via the public Bluesky API
- Extracts possible Fediverse handles from bios/display names
- Optionally checks Bridgy Fed opt-in (
@handle@bsky.brid.gy) - Optionally verifies discovered handles with WebFinger
- Writes:
mastodon-import.csv(Mastodon "Following list" import format)matches.csv(detailed match diagnostics)
Installation
Recommended (end users): pipx
pipx install bsky2masto
If the first PyPI release is not live yet, use the "From source" section below.
One-shot usage: uvx
uvx bsky2masto --actor your-handle.bsky.social --include-bridgy
Standard pip
python -m pip install bsky2masto
From source (development)
uv sync --group dev
uv run bsky2masto --actor your-handle.bsky.social --include-bridgy
Quickstart
bsky2masto \
--actor your-handle.bsky.social \
--output mastodon-import.csv \
--matches-output matches.csv \
--include-bridgy
Useful flags:
--verify→ verify discovered handles via WebFinger--max-follows N→ scan only firstNfollows (faster testing)--scan-workers N→ worker count for verify/bridgy checks (default:8)--bridgy-pause-ms N→ per-check Bridgy pause (default:150)--quiet→ suppress progress logs--version→ print CLI version
Import into Mastodon
- Open your Mastodon instance
- Go to Preferences → Import and export → Import
- Data type: Following list
- Upload
mastodon-import.csv
Exit codes
0success1network/HTTP/unexpected runtime error2CLI usage error (argparse)
Limitations and expectations
- Best-effort parsing: false positives are possible.
- Always inspect
matches.csvbefore importing. --verifyand Bridgy checks perform additional network requests and may be slower.- Some profile strings (emails, non-Mastodon
@patterns) can still look handle-like.
Development
uv sync --group dev
uv run ruff check .
uv run pytest -q
uv build
Supported Python versions: 3.10+
Security
For vulnerability reports, see SECURITY.md.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file bsky2masto-0.1.0.tar.gz.
File metadata
- Download URL: bsky2masto-0.1.0.tar.gz
- Upload date:
- Size: 9.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0756036b5e5a65f098f739b939abec9e8014211e30d0a77433f407f79857f935
|
|
| MD5 |
0f0d121240739f561774c6e8b8e8b0b2
|
|
| BLAKE2b-256 |
4a7a8863f4692191feb9760008261313cd59ad3d90e72c5d1f029e281d3833d2
|
Provenance
The following attestation bundles were made for bsky2masto-0.1.0.tar.gz:
Publisher:
publish.yml on walterra/bsky2masto
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
bsky2masto-0.1.0.tar.gz -
Subject digest:
0756036b5e5a65f098f739b939abec9e8014211e30d0a77433f407f79857f935 - Sigstore transparency entry: 929117136
- Sigstore integration time:
-
Permalink:
walterra/bsky2masto@68237e9cca1e9196ce260e481e3fa5889db36553 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/walterra
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@68237e9cca1e9196ce260e481e3fa5889db36553 -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file bsky2masto-0.1.0-py3-none-any.whl.
File metadata
- Download URL: bsky2masto-0.1.0-py3-none-any.whl
- Upload date:
- Size: 8.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7cbcde51b67642c3a75c9a2208029c4507f02e420d77774872555047683bcbc5
|
|
| MD5 |
22d4252ef598e149b581d3597896fd04
|
|
| BLAKE2b-256 |
239fec6dec0a789217c383863991e0f335b0fa4662e4a25c404a0a7ff44b46d8
|
Provenance
The following attestation bundles were made for bsky2masto-0.1.0-py3-none-any.whl:
Publisher:
publish.yml on walterra/bsky2masto
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
bsky2masto-0.1.0-py3-none-any.whl -
Subject digest:
7cbcde51b67642c3a75c9a2208029c4507f02e420d77774872555047683bcbc5 - Sigstore transparency entry: 929117139
- Sigstore integration time:
-
Permalink:
walterra/bsky2masto@68237e9cca1e9196ce260e481e3fa5889db36553 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/walterra
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@68237e9cca1e9196ce260e481e3fa5889db36553 -
Trigger Event:
workflow_dispatch
-
Statement type: