Social content archive

Bluesky Algorithmic Opt-Out 2026: Archive Implications

September 1, 2026 · ThreadGrab

On August 27, 2026, Bluesky shipped a setting that lets users ask apps to hide their posts from the Discover feed's algorithmic recommendations. The post by the official @bsky.app account reads verbatim: "Now you can opt out of having your posts shown to non-followers in the Discover feed. We know not everyone wants to go viral. Sometimes you're just posting for your followers." The toggle itself is labelled "Ask apps to hide my posts from algorithmic recommendations" and lives under Settings → Privacy and Security in the official Bluesky app (social-app v1.131.x).

For an X / Bluesky / LinkedIn archive tool like ThreadGrab, the launch is more than a privacy story. The setting is stored as a singleton record in the user's PDS repo at collection app.bsky.actor.contentVisibilityDeclaration with rkey literal:self and a boolean hideFromAlgorithmicRecommendations. Because the record lives at the account level and not in the app's local settings, the preference travels with the user across every AT Protocol client. TechCrunch's Sarah Perez phrased it directly: "the preference is recorded at the account level. That means the choice travels with the user, even if they're posting from another app that is powered by the same underlying protocol that Bluesky uses, AT Proto. However, while those other apps have access to this information, they still have to choose whether to respect it."

What the opt-out actually changes

The setting affects a single algorithmic surface: Bluesky's Discover feed for non-followers. Excluded accounts still appear in:

SurfaceOpted-out accounts visible?
Discover feed (non-followers)Excluded by AppView
Discover feed (existing followers)Still shown
Profile page (direct visit)Fully public
Search results (handle / display name)Visible
Following timelineVisible to followers
Mentions and quote-posts by othersVisible
Shared links / screenshotsVisible (out of Bluesky's scope)

Posts remain public. The account does not become private. The toggle is also opt-in by default: per the lexicon description, "Consumers must treat a missing record as false," so a user who has never opened the new privacy panel is still eligible for algorithmic recommendations. Caching invalidation is documented to take up to one hour, meaning a freshly-toggled opt-out may still appear in a Discover snapshot during that window.

Why this matters for social archive tools

Three concrete archive implications fall out of the launch.

1. The "Discover snapshot" is now time-stamped

Before August 27, 2026, archiving a public Bluesky profile and a Discover-page snapshot of that profile produced two lists that always agreed. After the launch, the same archive pull run twice — once at 14:55 UTC and again at 16:00 UTC — may surface a different set of "people you might like" recommendations for the same query, because opt-out signals started propagating partway through. An archive that wants to claim "this is what the Discover feed showed on date X" should now also record:

2. The cross-client flag breaks naive crawlers

Because the preference lives at the AT Protocol account level, a third-party client that does not read app.bsky.actor.contentVisibilityDeclaration will produce a snapshot that includes accounts whose creators explicitly asked apps to hide them. For an archive tool that crawls via a third-party AT Proto client, that means the right move is to read the preference directly from the user's PDS (via the standard com.atproto.repo.getRecord call against at://<did>/app.bsky.actor.contentVisibilityDeclaration/self) rather than rely on whatever filter the client applies. The example below fetches the preference and respects it.

// Resolve DID and check the opt-out preference
const did = await resolveHandle(handle);
const uri = `at://${did}/app.bsky.actor.contentVisibilityDeclaration/self`;

const record = await agent.com.atproto.repo.getRecord({
  repo: did,
  collection: 'app.bsky.actor.contentVisibilityDeclaration',
  rkey: 'self'
});

const optedOut = record?.value?.hideFromAlgorithmicRecommendations === true;
console.log(`${handle} opted-out: ${optedOut}`);

// Skip the post in any "Discover-shaped" archive:
if (optedOut) {
  console.log(`Skipping ${post.uri} from alg-recommendation archive`);
}

3. Historical re-fetch is a soft cutover

Lexicon app.bsky.actor.contentVisibilityDeclaration was added in atproto PR #5372 on August 12, 2026. social-app PR #11417 (APP-2774) merged August 16; the helper-text update merged August 26; v1.131.0 shipped August 18 with the toggle hidden behind a feature flag and went live to all users on August 27. A historical archive pull dated before August 12 will not show the preference for any user; a pull dated after August 27 will. For archive tools that already hold pre-cutover snapshots, the safest pattern is to back-fill the missing field with a sentinel value (e.g. null for "unknown") rather than infer false as the default — the lexicon says "treat missing as false" for app consumers, but an archive's job is to record what was observable, not what the app defaults to.

How ThreadGrab treats the new preference

The capture layer records the user's hideFromAlgorithmicRecommendations flag alongside each archived post and surfaces it in the public Markdown output as a small footnote:

---
archived_at: 2026-09-01T17:24:11Z
author: jay.bsky.team
opt_out_algorithmic: true
source_post: at://did:plc:abc.../app.bsky.feed.post/3lx...
---

That way, anyone reading the archive later can tell whether the post was visible in a Discover snapshot at capture time. The setting does not change whether a profile can be archived (it never made the post private), only whether that post would have been algorithmically surfaced on Discover. ThreadGrab's X and LinkedIn pipelines already record equivalent provenance signals (logged-out visibility, mention context) so the schema pattern fits.

For creators archiving someone else's Bluesky feed: the most common failure mode is grabbing the post and forgetting the preference. A Discover-shaped archive that lacks the opt-out metadata will silently misrepresent what Bluesky actually showed to non-followers on that day. ThreadGrab's capture layer now records the flag, but any hand-rolled archive should do the same.

What it does not change

Frequently asked questions

Where exactly is the Bluesky algorithmic opt-out toggle?

Settings → Privacy and Security → "Ask apps to hide my posts from algorithmic recommendations". On launch (August 27, 2026) the toggle was placed alongside the logged-out-visibility toggle inside the Privacy and Security screen, gated behind a feature flag that the Bluesky team rolled out to all users the same day. The Bluesky mobile and web apps share the same Settings tree.

Is the opt-out opt-in or opt-out?

Opt-in (default = eligible for algorithmic recommendations). The lexicon description for app.bsky.actor.contentVisibilityDeclaration explicitly states that consumers must treat a missing record as false, so users who never opened the toggle are still eligible. The PR that shipped it (social-app PR #11417) writes both true and false as explicit records, so re-enabling algorithmic recommendations still leaves the record present with hideFromAlgorithmicRecommendations: false.

Does the setting make my account private?

No. The setting hides your posts from the non-follower recommendation surface only. Your profile page, individual posts (with a direct link), search results, mentions and quote-posts by other users, and the Following timeline of any existing follower are unaffected. Bluesky is still rolling out true private-account support at the protocol level; this is not it.

How long does it take to take effect?

Up to one hour, per Bluesky's official communication and TechCrunch's reporting. The delay is cache invalidation on the AppView side, not propagation of the repo record (which is immediate). For archive tools, this means a snapshot pulled in the hour after the user toggles may still see the user in a non-follower recommendation list.

Do third-party Bluesky clients honor the flag?

They can read the flag (the record is in your public repo) but are not required to honor it. Bluesky's official app honors it; Skybridge, Skeets and other AT Proto clients are free to filter or not. The Bluesky team explicitly framed this as an opt-out that travels with the user, not an enforced protocol-wide rule.

What does this mean for archiving a Discover snapshot?

Three things: timestamp the snapshot to the minute, record the opt-out flag for every account in the snapshot, and back-fill the flag with null rather than infer false for any pre-August-27 historical data. Naive crawlers that ignore the flag will over-report Discover visibility, especially for quiet or niche accounts that turn it on.

Last verified: September 1, 2026. Bluesky toggle label, PR numbers and feature details verified via the official @bsky.app post (at://bsky.app/app.bsky.feed.post/3mu3jzayuys2k) and TechCrunch's same-day coverage. Toggle state changes propagate within ~1 hour.

Archive Bluesky posts with provenance metadata

ThreadGrab records the algorithmic-opt-out flag alongside every archived Bluesky post so the snapshot reflects what the Discover feed actually showed.

Try ThreadGrab →