BlueSky Auto Follow avatar

BlueSky Auto Follow

Pricing

from $0.60 / 1,000 follows

Go to Apify Store
BlueSky Auto Follow

BlueSky Auto Follow

Pricing

from $0.60 / 1,000 follows

Rating

0.0

(0)

Developer

Fabian Maume

Fabian Maume

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

17 hours ago

Last modified

Categories

Share

What does Bluesky Auto-Follow do?

Bluesky Auto-Follow grows your Bluesky followers automatically. You just need to schedule the Actor for daily runs. It signs in with your own App Password, follows a few accounts each day, detects follow-backs, and unfollows accounts that didn't reciprocate after a delay you set. It talks to Bluesky through the official AT Protocol API (@atproto/api SDK), and is compliant with Bluesky's terms and conditions.

Why use Bluesky Auto-Follow?

  • Grow a focused following around a topic by targeting handles from a Google Sheet, or the follower bases of accounts you choose.
  • Keep your follow/following ratio healthy automatically: reciprocators stay, non-reciprocators are unfollowed after N days.
  • Runs on the official Bluesky API, so it's fast, cheap, and stable.
  • Uses an App Password (not your main password); the App Password cannot change your account settings or delete your account.
  • Resumes from the last run's state via the key-value store. So you can easily schedule the Actor for daily runs.

If you want to automate multiple Bluesky accounts, set up an Account label under the Multi-account section. The Actor will append the label to the key-value store used to store the automation state between each run.

How to automate Bluesky follows

  1. Generate a Bluesky App Password: bsky.app β†’ Settings β†’ Privacy and security β†’ App passwords β†’ Add App Password β†’ copy the xxxx-xxxx-xxxx-xxxx string. Keep "Allow access to your direct messages" OFF; this Actor doesn't need it.
  2. Prepare a target list: either make a public Google Sheet with a column named blueskyHandle (set sharing to "Anyone with the link"), or list a few Bluesky handles whose followers you want to pull into your backlog.
  3. Configure the Actor: paste your handle (e.g. alice.bsky.social) and the App Password, set maxFollowsPerDay (start with 10), fill in your Google Sheet URL and/or follower-source handles.
  4. Run once manually to confirm login works, then create a daily schedule in the Schedules tab. One run per day is the sweet spot.

What activities does Bluesky Auto-Follow log?

Each run writes a short dataset so you can audit everything it did:

FieldTypeDescription
actionenumsummary, target_added, follow, follow_back, or unfollow
usernamestringBluesky handle (e.g. alice.bsky.social) involved in the row
didstringStable AT Protocol DID of the account
timestampISO dateWhen the event was recorded
sourceProfilestringFor target_added: google-sheet or the handle whose followers were scraped
followedAtISO dateFor follow_back / unfollow: when the original follow happened
followsPerformedintegerSummary row β€” follows this run
unfollowsPerformedintegerSummary row β€” unfollows this run
targetsAddedintegerSummary row β€” handles added to backlog
backlogSizeintegerSummary row β€” remaining backlog at end of run
followBacksDetectedintegerSummary row β€” new follow-backs this run
rateLimitedbooleanSummary row β€” true if the AT Protocol server returned HTTP 429 during the follow phase, in which case the unfollow phase was skipped and state was still saved for the next run
errorstringFor follow / unfollow / follow_back rows β€” a short reason when the action was attempted but failed (e.g. not_found, rate_limited, already_following (preexisting; excluded from unfollow)). null on successful rows

Cross-run state (backlog, everyone followed with their follow-record AT-URI, everyone who followed back, everyone unfollowed, and which profiles have already been scraped for followers) lives under the STATE key in a named key-value store called bluesky-auto-follow-state. The cached AT Protocol session lives under BSKY_SESSION in the same named store, so the App Password is only used when the refresh token also expires. The named store survives across scheduled runs; the Actor's per-run default key-value store does not, which is why state is kept in a named one.

How much will it cost?

Pricing is pay-per-event. The Actor charges three events:

  • target-list-expanded: once per new handle added to the backlog (cost $0.01 per 1k)
  • follow : once per successful follow
  • unfollow : once per successful unfollow

Follow and unfollow have the same price:

  • $0.9 per 1k actions on the free plan
  • $0.8 per 1k actions on the starter plan
  • $0.7 per 1k actions on the Scale plan
  • $0.6 per 1k actions on the business plan

Expanding the target list

Input

See the Input tab for the full form. The important ones:

  • handle: your Bluesky handle, e.g. alice.bsky.social (no leading @).
  • appPassword: the App Password you generated, stored encrypted.
  • maxFollowsPerDay: upper bound of follows per run (Max 200). Run the Actor once per day on a schedule.
  • followVariation: on by default; each run picks a random count between 50% and 100% of maxFollowsPerDay.
  • unfollowDelayDays: minimum age of a follow before it becomes a candidate for unfollow.
  • targetListGoogleSheet vs. targetAccountsForFollowerExtraction: provide one or both. The sheet is tried first; follower-scraping is used as a fallback.
  • service: PDS base URL, defaults to https://bsky.social. Only change this if your account lives on a self-hosted PDS.

Output

You can download the dataset in JSON, HTML, CSV, or Excel. Example rows:

[
{
"action": "target_added",
"username": "exampleuser.bsky.social",
"sourceProfile": "google-sheet",
"timestamp": "2026-01-15T09:00:00.000Z"
},
{
"action": "follow",
"username": "exampleuser.bsky.social",
"did": "did:plc:z72i7hdynmk6r22z27h6tvur",
"timestamp": "2026-01-15T09:04:12.350Z"
},
{
"action": "follow_back",
"username": "someotheruser.bsky.social",
"did": "did:plc:zz2zz2zz2zz2zz2zz2zz2zz2",
"followedAt": "2026-01-08T09:12:45.100Z",
"timestamp": "2026-01-15T09:05:30.900Z"
},
{
"action": "summary",
"username": "alice.bsky.social",
"did": "did:plc:aaaaaaaaaaaaaaaaaaaaaaaa",
"timestamp": "2026-01-15T09:06:00.000Z",
"followsPerformed": 7,
"unfollowsPerformed": 2,
"targetsAdded": 50,
"backlogSize": 43,
"followBacksDetected": 1,
"rateLimited": false
}
]

Tips

  • Start small: 10 follows/day on a fresh account for the first week. The AT Protocol server caps writes at roughly docs.bsky.app/docs/advanced-guides/rate-limits, and bulk patterns can draw moderation attention regardless of the server cap.
  • Keep scale reasonable: The Actor will prevent you from following more than 200 people per day. I recommend staying below 50.
  • If a run reports rateLimited: true, let the Actor rest a day and consider lowering maxFollowsPerDay.
  • To reset backlog state, delete the STATE record from the named key-value store bluesky-auto-follow-state (Apify Console β†’ Storage β†’ Key-value stores β†’ Named). The cached session (BSKY_SESSION) can also be deleted from the same store to force a fresh login.

FAQ, disclaimers, and support

Can my account be suspended? Bluesky's Community Guidelines don't ban automation but do prohibit spam-adjacent behavior. A conservative daily cap with a reciprocation-based unfollow is well within normal use. Running this Actor at hundreds of follows per day on a new account is the kind of pattern moderation may act on. Use it on your own account at a reasonable pace.

Is this against Bluesky's TOS? No β€” the AT Protocol is explicitly designed for third-party clients, and App Passwords exist precisely so you can log a programmatic client in. The app.bsky.graph.follow record is a first-class public lexicon.

What if my App Password stops working? The Actor's startup login check will fail fast with a clear error. Generate a new App Password in Bluesky Settings and re-run.

What are follow records? Every follow on Bluesky is a public, portable record under at://<yourDid>/app.bsky.graph.follow/<rkey>. This Actor stores each follow's AT-URI in the key-value store so it can later unfollow precisely. Anyone can inspect your public follow list.

Can I run two accounts in parallel? Yes. Give each schedule a distinct accountLabel. The two runs will use separate state stores (bluesky-auto-follow-state-

How does it detect follow-backs? The Actor check you recent followers on each run and map it to the list of people you followed.

Feedback and bugs go to the Issues tab on this Actor's Apify Store page. See the API tab for programmatic access to runs and outputs.