AD
Boost Your Brand on BlueSky—Exclusive banner space to amplify your reach within the BlueSky community.
BSkyInfo LogoBskyInfo
All ToolsCategoriesCollectionsFeed DirectoryLabeler DirectoryArticlesGuidesGlossaryBluesky SDKsSponsor
Submit
All ToolsCategoriesCollectionsFeed DirectoryLabeler DirectoryGuidesGlossaryArticlesBluesky SDKsSponsorSubmit
  1. SDKs
  2. /Python
  3. /twitter-to-bsky
ianklatzco

twitter-to-bsky

A Python SDK for Bluesky and AT Protocol by ianklatzco

import a twitter archive into bsky

GitHub Stats

172stars
16forks
6contributors
13open issues

Dates

Created:April 8, 2023
Last updated:June 10, 2025

README

The following content is from twitter-to-bsky's GitHub repository. All rights reserved by the original author.

twitter-to-bsky importer

Import your Twitter archive into a Bluesky account.

! ! !

At this time, this will spam others timelines, so it is only recommended to run on new accounts with no followers. See Known problems below for details.

! ! !

Usage:

# Get an archive from https://twitter.com/settings/download_your_data
# Unzip a Twitter archive so the assets/ folder is in the same directory as main.py
git clone https://github.com/ianklatzco/twitter-to-bsky.git
cd twitter-to-bsky
# Create virtual environment for python
python3 -m venv ./venv
# Install requirements
./venv/bin/pip install -r Requirements.txt
# Copy your twitter archive to ./data/
cp -r _pathToArchive_/data ./
# Use a space in front of the PASSWORD export to prevent it from going to your bash history
export BSKY_USERNAME="yourname.bsky.social"
 export PASSWORD="yourpassword"
./venv/bin/python3 main.py

Known problems

Bluesky's UI currently renders timestamps based on the indexedAt field (i.e., when the bloot was blooted) rather than the createdAt field (when the bloot CLAIMS it was blooted).

The code here currently tries to post skoots with the old timestamps, but the Bluesky UI will not render them so. It used to, and then Paul probably patched the bug ^^

Does not preserve replies, so your threads will be decomposed into de-contextualized individual posts.

Does not convert links in the text of tweets. Now converts links, including those to your own tweets!

Supports blooting only a single image tweet (multiple image tweets will be skipped) (From @webash: the export I was testing with only had single image tweets))

Thanks to

  • Boris Mann
  • Shinya Kato
  • Heartade
  • WebAsh

See also

https://github.com/ianklatzco/atprototools -- underlying library

Related SDKs

dannguyendancow-bluesky-fun-api-tool

Just having fun with python and Bluesky's AT Protocol. Trying to build a simple CLI and enough of SDK to easily explore and collect my own Bluesky data

1•Python
TahomaSoftSaxeBlueskyPython

A small python library to post basic text and media to bsky.app via atproto's xrpc API.

1•Python
Gorcenskiskeeter-deleter

A script for auto-deleting Bluesky posts

72•Python
Zetaphorbsky-altometer

A site that measures the current percentage of Bluesky posts missing alt text

7•Python
snarfedbridgy-fed

🌉 A bridge between decentralized social networks

1035•Python
snarfedgranary

💬 The social web translator

489•Python

Resources

GitHub Repository

License

MIT

Author

ianklatzco
ianklatzco

Activity

Last commit: June 10, 2025
Commit frequency: Unknown

Our Sponsors

Your Brand Here!

50K+ engaged viewers every month

Limited spots available!

📧 Contact us via email🦋 Contact us on Bluesky
BSkyInfo LogoBskyInfo

The Most Comprehensive Bluesky Tools Directory

Stay updated with the latest Bluesky tools and ecosystem news 🦋

Bluesky butterfly logo
Quick LinksSubmit a ToolSponsorAboutLegal Information
ToolsFeed DirectoryLabeler DirectorySchedulingAnalyticsAll ToolsCategoriesCollectionsTags
ResourcesArticlesBluesky GuidesBluesky GlossaryBluesky SDKsBluesky ResourcesSkyRaffleMeida Coverage
Our ProductsRaffleBlueAiTeach ToolsLaiewAI affiliate listFirstoCoast Fire CalculatorAsphalt CalculatorDog Names World

This website may contain affiliate links

© 2025 BskyInfo. All rights reserved.