Boris Mann Tech Blog

Bluesky's Find Friends Contact Import

Screenshot step-by-step on iOS

December 16, 2025

The Bluesky team added a privacy preserving, opt in "find friends" feature that imports your contacts.

There was an initial "Request for Comments" (RFC) on the technical, privacy preserving options of this design.

Request For Comments: A secure contact import scheme for social networks | Bluesky
This article outlines plans for a future Bluesky feature \- it doesn’t exist yet\! By sharing our ideas early, we hope to solicit feedback from the community.
https://docs.bsky.app/blog/contact-import-rfc

The feature is available in the native mobile apps only, I believe, because of how this has to be done securely.

I've pasted in screenshots of the flow below on iOS. If anyone has Android screenshots, please share.

You may see this "new feature pop-up" advertising it when you get the updated app:

This leads you to first verify your phone number.

Screenshot

We need to verify your number before we can look for your friends. A verification code will be sent to this number.

(Phone number input)

How we use your number:
• Sent to our phone number verification provider Plivo
• Deleted by Plivo after verification
• Held by Bluesky for 7 days to prevent abuse, then deleted
• Stored as part of a secure code for matching with others
By continuing, you consent to this use. You may change your mind any time by visiting settings. (link: Learn more)

You'll get a text message you need to paste into a verification screen, and then it will move on with some more information.

Screenshot: Share your contacts to find friends.

See next text block for rest of text.

I'll include the text from the screenshot here, Bluesky is trying hard to explain this technical, privacy preserving technique.

Bluesky helps friends find each other by creating an encoded digital fingerprint, called a "hash", and then looking for matching hashes.

  • We never keep plain phone numbers

  • We delete hashes after matches are made

  • We only suggest follows if both people consent

  • You can always opt out and delete your data

We apply the highest privacy standards, and never share or sell your contact information.

(the next text is at the bottom of the screen above a button that says "Find my friends" or "Cancel")

I consent to Bluesky using my contacts for mutual friend discovery and to retain hashed data for matching until l opt out.


This next part is the iOS contact picker. It prompts to either share some contacts or all. I've cropped this screen to just the bottom messaging.

Once imported, it shows a scrollable list of all the contacts, with an invite button next to them.

Oh look, I found myself! OK great, I can test this.

Hitting invite opens a new text message:

It says: "I'm on Bluesky as bmann.ca - come find me! https://bsky.app/download"

I did send it, and found that this probably needs some improvement.

You can see that bmann.ca is now highlighted, and iOS Messages turns it into a clickable http link.... which doesn't go to my bsky profile, but instead to my out of date landing page:

@bmann.ca • Boris Mann
A profile page and links to other places online of Boris Mann
https://bmann.ca

I shared this with Alex, suggesting that bsky.app/profile/bmann.ca would be a better link to include.

Boris's avatar
Boris
2mo

It is unexpected what happens with custom handles (see alt text) Solution: put a full profile url bsky .app/profile/bmann.ca Still begging for user docs…

Screenshot of new contact imports - there’s an invite button next to each contact. I’m listed as one of the avatar pictures. I hit the invite button and sent myself an invite - it shows my custom handle bmann.caOn receiving my message — you can see that iOS auto links the custom handle. Clicking on it takes to my web page, not my profile

Along with another request for Bluesky app user docs so I don't have to do screenshot essays 😜

This is a technically sound implementation, I'll re-link the Dev Blog RFC for those that want to dive into the details.

I have had several other discussions around private set intersection like this for related use cases today. Ping if you have some other thoughts on this.

Subscribe to Boris Mann Tech Blog
to get updates in Reader, RSS, or via Bluesky Feed
Case is Waiting for the Future to Load
MacBook Air Fresh Install

atproto
Bluesky
private set intersection