Selling account names in the blue, blue skies
Since Bluesky allows the use of one's own domain name as one's handle, this form of handle squatting is rather pointless, but people are doing it anyway
Bluesky continues to grow in popularity, and with that growth comes attempts to recreate spammy scams that have been effective on other social media platforms. One such deceptive practice is handle squatting, wherein a user registers multiple handles that they do not plan on using, with the goal of eventually selling the handles (or simply making them unavailable to the general public). Although Bluesky’s domain-based handles make this tactic somewhat less effective than on other platforms, that hasn’t prevented people from attempting it here and there. In at least one case, someone appears to have taken the bait.
from atproto import Client
import pandas as pd
import time
def retry (method, params):
retries = 5
delay = 1
while retries > 0:
try:
r = method (params)
return r
except:
print (" error, sleeping " + str (delay) + "s")
time.sleep (delay)
delay = delay * 2
retries = retries - 1
return None
# function used to retrieve followers; not called directly
# from example code, but included for the sake of completeness
def get_followers (handle, client, batch=100, limit=100000):
print ("retrieving accounts that follow " + handle + "...")
try:
r = retry (client.app.bsky.graph.get_followers,
{"actor" : handle, "limit" : batch})
cursor = r["cursor"]
rows = []
rows.extend (r.followers)
while cursor is not None and len (rows) < limit:
r = retry (client.app.bsky.graph.get_followers,
{"actor" : handle, "limit" : batch,
"cursor" : cursor})
cursor = r["cursor"]
rows.extend (r.followers)
print (len (rows))
except:
print ("ERROR!!!!!")
return rows
bsky_files = [
"bsky.app_followers1.csv",
"bsky.app_followers2.csv",
"bsky.app_followers3.csv",
"bsky.app_followers4.csv",
"bsky.app_followers5.csv",
]
frames = [pd.read_csv (f) for f in bsky_files]
df = pd.concat (frames).drop_duplicates ("did")
df = df[df["description"].str.len () >= 20]
df = df[df["description"].str.contains ("@") | \
df["description"].str.contains ("contact me")]
g = df.groupby ("description")
df_counts = pd.DataFrame ({"count" : g.size ()}).reset_index ()
df_counts = df_counts.sort_values ("count", ascending=False)
df_counts = df_counts[df_counts["count"] >= 6]
print (df_counts)
keep = set (df_counts["description"])
df = df[df["description"].isin (keep)]
df.to_csv ("potential_handle_squatters.csv", index=False)
To find potential examples of handle squatting on Bluesky, lists of recent followers of the official @bsky.app account were downloaded on multiple occasions. Using the above Python code, these lists were then checked for cases where multiple accounts had identical non-trivial biographies containing either an “@” sign or the text “contact me”. All data used in this analysis was downloaded via the atproto Python module; similar libraries are available for a variety of popular programming languages.

After removing false positives, this process yielded 123 Bluesky accounts with 7 distinct repeated biographies, each of which contains either an email address or a Telegram channel to contact regarding the account. Many of the handles sound like business names, and some are references to existing businesses that are vanishingly unlikely to be associated with the account creator. The largest group of accounts consists of 72 accounts with the biography “Please contact to ➡️ bsky@dzdsoft.com”; the associated handles are in a mix of English and Turkish. Five of the repeated biographies are in English, one is in Russian, and one in Portuguese.
All of these accounts are recent creations, with join dates between November 21st and November 24th, 2024. Most were created in batches, with upwards of 20 accounts with the biography “Please contact to ➡️ bsky@dzdsoft.com” created per hour at points. Thus far, most of them have not received much in the way of attention; at the time of this writing, none has accumulated more than a handful of followers, and most have no followers or posts at all. There is, however, one exception…
One of the accounts, @newsnationtv.bsky.social, has been given a makeover in the time since the data was originally downloaded. The account’s biography has been changed from “Your Handle • Your Brand • Ready When You Are @ByeYourBrand for inquiries” to “📰 One Stop Stop for everything News”, and the account has begun quote-posting various Canadian news accounts with hashtags such as #Cdnnews and #bskynews. The account also now has a banner image, in the form of an AI-generated image of a newspaper masthead. These changes suggest a successful sale on the part of the original account creator; other explanations are also possible.