datagrit

datagrit › Data › Bluesky Community Finder: Starter Packs & Feeds

Data

Bluesky Community Finder: Starter Packs & Feeds

Find Bluesky starter packs, custom feeds and curated lists by topic, with join counts, feed likes and full member lists with follower counts.

Run it on Apify StoreUse the APIfrom $3.50 per 1,000 results + $10 per run · no code needed
from $3.50 per 1,000 results + $10 per runpay only for community or members you get
JSON · CSV · Excelexport or call via API
Scheduled runsdaily or weekly feeds with Apify schedules
v0.3updated 2026-10-04

Bluesky Community Finder builds a catalog of the communities on Bluesky: starter packs, custom feeds and curated lists. Search by topic or point it at specific accounts, and every starter pack, feed or list comes back as one clean row with its creator, dates, size and popularity. Starter packs carry all-time and weekly join counts and the member count. Feeds carry likes and, if you ask for it, a live check of whether the feed is still online and valid. Lists carry their purpose (curate, moderation or reference) and member count. Turn on members and every pack or list is followed by one row per account, with followers, follows, posts and verification status. It reads Bluesky's public API, needs no login or API key, and exports to JSON, CSV or Excel.

Who is it for?

Pricing

You pay per result row: each starter pack, feed, list or member returned is one result, and the price per result is set on the Actor page and shown before you run it. The free example with empty input is not charged. There are no charges for rows that were filtered out or skipped as already seen, and a search that finds nothing returns a single status row with found: false that is not billed. Set a maximum charge per run in the Apify console to cap spending; the Actor stops cleanly when it is reached.

How to use it

  1. Choose what to find: starter packs, custom feeds, or lists.
  2. Add search terms (for example journalists or science) or account handles such as bsky.app. Starter packs and feeds can be searched by topic. Lists cannot be searched by topic, so use handles for them.
  3. Narrow the results with the filters below, and switch on members if you want the accounts inside each pack or list.
  4. Set the maximum number of communities and run the Actor.

If you leave search terms and handles empty, the Actor runs a small free example (up to 10 results, not charged) so you can see the output before you configure anything; the status message says so.

Filters

A filter that does not apply to the chosen type is listed in the status message instead of failing silently.

Members

With Include members, each starter pack or list is followed by up to your chosen number of member rows. Add follower counts to members looks up followers, follows, posts and verification for every member. Member rows are separate results and are billed like any other row; the limit on communities does not cap them, so set the maximum members per community to match your budget.

Good to know

Output fields

Every result is one flat record, so it drops straight into a spreadsheet, a database or a CRM.

FieldTypeDescriptionExample
typestringWhat the row is: starterPack, feed, list or member. On the status row it is the type you searched for.starterPack
querystringThe search term or handle this row came from. Member rows carry the query of their starter pack or list.journalists
uristringPermanent AT Protocol address of the starter pack, feed or list. Null on member rows and the status row.at://did:plc:ab12cd34ef56/app.bsky.graph.starterpack/3kabcdefgh2
urlstringLink to the starter pack, feed, list or member profile on bsky.app. Null on the status row.https://bsky.app/starter-pack/example.bsky.social/3kabcdefgh2
namestringName of the starter pack, feed or list. Null on member rows and the status row.Bluesky for Journalists
descriptionstringDescription written by the creator, or for a member the profile bio. Null when empty.Journalists worth following on Bluesky.
creatorHandlestringHandle of the account that created the community. Null on member rows and the status row.example.bsky.social
creatorDisplayNamestringDisplay name of the creator. Null when the creator has none.Example Creator
creatorDidstringPermanent identifier of the creator account. Null on member rows and the status row.did:plc:ab12cd34ef56
createdAtstringStarter packs only: when the creator made the pack (ISO 8601). Null for feeds, lists and members.2024-06-25T05:30:27.442Z
updatedAtstringStarter packs only: last edit by the creator (ISO 8601). Null when never edited.2024-07-01T10:00:00.000Z
indexedAtstringWhen Bluesky indexed the community (ISO 8601). Null for members.2024-06-25T05:30:28.000Z
joinedAllTimeCountintegerStarter packs only: how many people joined through the pack, all time. Null for feeds and lists.37
joinedWeekCountintegerStarter packs only: joins in the last 7 days. Null for feeds and lists.2
memberCountintegerStarter packs and lists: number of accounts in it. Null for feeds and members.150
feedCountintegerStarter packs only: how many custom feeds the pack recommends. Null for feeds, lists and members.3
feedUrisarrayStarter packs only: AT URIs of the feeds the pack recommends. Null for feeds, lists and members.["at://did:plc:ab12cd34ef56/app.bsky.feed.generator/news"]
likeCountintegerFeeds only: number of likes. Null for starter packs and lists.23983
acceptsInteractionsbooleanFeeds only: whether the feed takes like and reply signals from users. Null for starter packs and lists.true
contentModestringFeeds only: unspecified (posts) or video. Null when Bluesky does not say.unspecified
serviceDidstringFeeds only: identifier of the server that generates the feed. Null for other types.did:web:feed.example.com
isOnlinebooleanFeeds only, when Check feed health is on: whether the feed server answers. Null when health was not checked.true
isValidbooleanFeeds only, when Check feed health is on: whether the feed returns valid posts. Null when health was not checked.true
purposestringLists only: curate, mod or reference. Null for other types.curate
communityTypestringMembers only: starterPack or list the member belongs to. Null on community rows.starterPack
communityUristringMembers only: AT URI of the starter pack or list. Null on community rows.at://did:plc:ab12cd34ef56/app.bsky.graph.starterpack/3kabcdefgh2
communityNamestringMembers only: name of the starter pack or list. Null on community rows.Bluesky for Journalists
didstringMembers only: permanent identifier of the account. Null on community rows.did:plc:zz99yy88xx77
handlestringMembers only: handle of the account. Null on community rows.reporter.bsky.social
displayNamestringMembers only: display name. Null when the account has none.Example Reporter
accountCreatedAtstringMembers only: when the account was created (ISO 8601). Null when unknown.2023-05-01T12:00:00.000Z
followersCountintegerMembers only: follower count. Null when Add follower counts is off or the account was deactivated.1200
followsCountintegerMembers only: how many accounts the member follows. Null when stats are off or unavailable.340
postsCountintegerMembers only: number of posts. Null when stats are off or unavailable.5600
isVerifiedbooleanMembers only: whether Bluesky verified the account. Null when stats are off or unavailable.false
avatarstringMembers only: profile picture URL. Null when the account has none.https://cdn.bsky.app/img/avatar/plain/did:plc:zz99yy88xx77/abc@jpeg
scrapedAtstringISO 8601 timestamp of extraction.2026-10-01T08:00:00.000Z
foundbooleanFalse only on the single status row emitted when a search term or handle returns nothing.true

Sample record

{
  "type": "starterPack",
  "query": "journalists",
  "uri": "at://did:plc:ab12cd34ef56/app.bsky.graph.starterpack/3kabcdefgh2",
  "url": "https://bsky.app/starter-pack/example.bsky.social/3kabcdefgh2",
  "name": "Bluesky for Journalists",
  "description": "Journalists worth following on Bluesky.",
  "creatorHandle": "example.bsky.social",
  "creatorDisplayName": "Example Creator",
  "creatorDid": "did:plc:ab12cd34ef56",
  "createdAt": "2024-06-25T05:30:27.442Z",
  "updatedAt": "2024-07-01T10:00:00.000Z",
  "indexedAt": "2024-06-25T05:30:28.000Z",
  "joinedAllTimeCount": 37,
  "joinedWeekCount": 2,
  "memberCount": 150,
  "feedCount": 3,
  "feedUris": [
    "at://did:plc:ab12cd34ef56/app.bsky.feed.generator/news"
  ],
  "likeCount": 23983,
  "acceptsInteractions": true,
  "contentMode": "unspecified",
  "serviceDid": "did:web:feed.example.com",
  "isOnline": true,
  "isValid": true,
  "purpose": "curate",
  "communityType": "starterPack",
  "communityUri": "at://did:plc:ab12cd34ef56/app.bsky.graph.starterpack/3kabcdefgh2",
  "communityName": "Bluesky for Journalists",
  "did": "did:plc:zz99yy88xx77",
  "handle": "reporter.bsky.social",
  "displayName": "Example Reporter",
  "accountCreatedAt": "2023-05-01T12:00:00.000Z",
  "followersCount": 1200,
  "followsCount": 340,
  "postsCount": 5600,
  "isVerified": false,
  "avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:zz99yy88xx77/abc@jpeg",
  "scrapedAt": "2026-10-01T08:00:00.000Z",
  "found": true
}

Input

FieldNameTypeWhat it does
modeWhat to findstringStarter packs: curated follow-packs you can search by topic. Feeds: custom feed generators you can search by topic. Lists: curated, moderation or reference lists published by the accounts in Handles.
queriesSearch termsarrayTopics to search, for example journalists, science or birds. Each term is searched separately. Works for starter packs and feeds. Lists cannot be searched by topic: use Handles. Leave Search terms and Handles empty to get a free example of up to 10 results.
handlesAccount handlesarrayBluesky handles, for example bsky.app, or profile URLs such as https://bsky.app/profile/bsky.app. Returns the starter packs, feeds or lists that these accounts created, depending on the mode.
maxItemsMaximum communitiesintegerStop after this many starter packs, feeds or lists in total across all search terms and handles. Member rows are not counted here; they come on top when Include members is on.
textContainsName or description containsarrayKeep only results whose name or description contains at least one of these words (case-insensitive).
minJoinedAllTimeMinimum joins (starter packs only)integerStarter packs only: keep packs that at least this many people joined through, all time. Ignored for feeds and lists.
minMembersMinimum members (starter packs and lists)integerStarter packs and lists only: keep communities with at least this many accounts. Ignored for feeds.
minLikesMinimum likes (feeds only)integerFeeds only: keep feeds with at least this many likes. Ignored for starter packs and lists.
publishedAfterCreated afterstringKeep communities created or first indexed on or after this date, for example 2025-06-01. Starter packs use their creation date; feeds and lists use the date Bluesky indexed them.
listPurposeList type (lists only)stringLists only: curate lists group accounts worth following, mod lists are moderation lists, reference lists are general collections. Ignored for starter packs and feeds.
checkFeedHealthCheck feed health (feeds only)booleanFeeds only: ask Bluesky whether each feed is online and valid, one extra request per feed. Without it, isOnline and isValid stay null.
onlyOnlineFeedsOnly feeds that are online (feeds only)booleanFeeds only: drop feeds that are offline or invalid. Turns on the health check automatically.
includeMembersInclude membersbooleanStarter packs and lists only: add one row per member account after each community. Each member row is a separate billed result.
maxMembersPerCommunityMaximum members per communityintegerCap on member rows per starter pack or list when Include members is on.
includeMemberStatsAdd follower counts to membersbooleanWhen Include members is on, look up followers, follows, posts and verification for every member (one request per 25 members).
onlyNewSinceLastRunOnly communities not seen beforebooleanSkip starter packs, feeds and lists already returned by an earlier run with the same search terms, handles and filters. Only delivered results are remembered.
proxyConfigurationProxy configurationobjectOptional proxy. Bluesky's public API needs none; leave disabled unless you have a reason.

Call it from your code

Run the Actor and get the results in one request. Replace YOUR_APIFY_TOKEN with the token from your Apify account settings.

curl -X POST "https://api.apify.com/v2/acts/datagrit~bluesky-community-finder/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"mode":"starterPacks","queries":["journalists","science"],"maxItems":30}'
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('datagrit/bluesky-community-finder').call({
  "mode": "starterPacks",
  "queries": [
    "journalists",
    "science"
  ],
  "maxItems": 30
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.length, items[0]);

Install with npm i apify-client.

from apify_client import ApifyClient
import os

client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("datagrit/bluesky-community-finder").call(run_input={
  "mode": "starterPacks",
  "queries": [
    "journalists",
    "science"
  ],
  "maxItems": 30
})
items = client.dataset(run["defaultDatasetId"]).list_items().items
print(len(items), items[0] if items else None)

Install with pip install apify-client.

Frequently asked questions

Does it need a Bluesky account?

No. It uses the public API without login.

Can I search lists by topic?

Bluesky has no search for lists. Give the handles of the accounts whose lists you want.

How do I get only new packs each day?

Schedule the Actor with the same input and switch on "Only communities not seen before".

Something looks wrong in the data.

Open an issue on the Actor page with the input you used and the run link.

Try Bluesky Community Finder: Starter Packs & Feeds on Apify

Related Actors

Company data

French Company Finder - Sirene Financials

French company lead lists from Sirene screened by net result and revenue, with net margin, size, matching establishment and optional directors.

from $5.60 / 1,000 results