Bluesky Starter Pack Scraper
Pricing
from $1.00 / 1,000 results
Bluesky Starter Pack Scraper
Search Bluesky starter packs, extract pack details or collect their public members. Export one pack or member per row with creator, list and feed context.
Pricing
from $1.00 / 1,000 results
Rating
0.0
(0)
Developer
ScrapingMonkey
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Find public Bluesky starter packs, inspect a selected pack or export its members. Bluesky Starter Pack Scraper collects creator-curated account collections with pack descriptions, creator and list context, feed references and individual member profiles.
A starter pack is a user-created collection of recommended accounts and feeds around a topic. Search for a topic first, then use a returned pack URL in details or members mode when you want to inspect the collection.
| At a glance | Details |
|---|---|
| 📥 Input | In search mode, add keyword queries. In details or members mode, add canonical https://bsky.app/starter-pack/handle/key URLs or matching at:// starter-pack URIs. |
| 📤 Output | One starter pack in search/details mode, or one member in members mode |
| 📄 Pagination | Up to 25 packs per search page or 30 members per member page |
| 🔐 Login required | No |
| ⚡ Processing | Up to 5 HTTP requests concurrently; up to 5 attempts for temporary failures |
| 💾 Delivery | One Apify dataset view with individual result rows, flattened object columns and complete nested JSON |
What the Bluesky starter pack scraper collects 📚
Search and details modes save one starter pack per row. Members mode saves one public member per row and repeats the pack context so each exported profile retains its collection source. All modes use the same single Results table.
Data can include:
- Pack URI, content identifier, public URL, name and description
- Creator profile, creation, update and indexing dates when exposed
- Joined-user counters, associated list URI, URL, name, purpose and available member count
- Referenced feeds and their metadata where the source includes them
- Individual member profiles and list-item references in members mode
| Mode | Input | Result | Best for |
|---|---|---|---|
search | Keywords such as art | One matching pack per row | Discover curated collections |
details | A starter-pack URL or URI | One selected pack per row | Inspect collection metadata |
members | A starter-pack URL or URI | One public member per row | Export recommended account profiles |
How to collect starter packs and members from Bluesky 🚀
- Enter one or more supported inputs.
- Choose a mode if available and set the page count for each input.
- Start the Actor.
- Open the Results dataset view and review individual result rows.
- Export the dataset or retrieve it from your application.
{"inputList": ["art"],"mode": "search","pagesPerSearch": 1}
pagesPerSearch applies only to search mode, with up to 25 packs requested per page. pagesPerPack applies only to members mode, with up to 30 member entries per page. Both default to 1. Details mode retrieves one pack per input and ignores both page settings.
Bluesky starter packs and members output fields 📦
| Field | Type | Meaning |
|---|---|---|
input | string | Original submitted input, retained on success and failure. |
status | string | success or failed. |
starter_pack_uri | string or null | Stable starter-pack record URI. |
starter_pack_cid | string or null | Content identifier of the pack record. |
starter_pack_url | string or null | Canonical starter-pack URL. |
name | string or null | Starter-pack name. |
description | string or null | Public biography or collection description, according to row type. |
created_at | string or null | Creation or publication time returned by the source. |
updated_at | string or null | Collection update time when exposed. |
indexed_at | string or null | Time the source indexed the record. |
creator | object or null | Starter-pack creator profile. |
joined_all_time_count | integer or null | All-time joined-user counter reported for the pack. |
joined_week_count | integer or null | Weekly joined-user counter reported for the pack. |
list_uri | string or null | Associated list record URI. |
list_url | string or null | Associated list URL. |
list_name | string or null | Associated list name when exposed. |
list_purpose | string or null | Source-defined purpose of the associated list. |
list_member_count | integer or null | Reported list-member count when available. |
feeds | array or null | Referenced feed records and available metadata; no feed posts are fetched. |
labels | array or null | Source label values. |
mode | string or null | Selected collection mode. |
query | string or null | Normalized search query; null outside a search mode. |
member_list_item_uri | string or null | List membership record URI in members mode. |
member | object or null | One member profile in members mode; null for whole-pack rows. |
Nested objects keep the following fields. They appear as flattened columns in the single Store view; arrays stay together in their parent row:
creator:did,handle,display_name,profile_url,description,avatar_url,banner_url,pronouns,created_at,indexed_at,followers_count,following_count,posts_count,verified_status,trusted_verifier_status,labels.feeds[]:uri,url,name,description,avatar_url,like_count,creator.feeds[].creator:did,handle,display_name,profile_url,description,avatar_url,banner_url,pronouns,created_at,indexed_at,followers_count,following_count,posts_count,verified_status,trusted_verifier_status,labels.member:did,handle,display_name,profile_url,description,avatar_url,banner_url,pronouns,created_at,indexed_at,followers_count,following_count,posts_count,verified_status,trusted_verifier_status,labels.
The successful examples below use normalized public response data. Values are snapshots rather than promises of current content or counts; every top-level output key is included.
Complete search mode result:
{"input": "art","status": "success","starter_pack_uri": "at://did:plc:qrllvid7s54k4hnwtqxwetrf/app.bsky.graph.starterpack/3l4poszxde32k","starter_pack_cid": "bafyreifcipkbjor4klnvuubasxvn7s4c4hgevvvabx3fbtovqez4xt6bvm","starter_pack_url": "https://bsky.app/starter-pack/did:plc:qrllvid7s54k4hnwtqxwetrf/3l4poszxde32k","name": "Bluesky for Art History","description": "Art historians, art reporters, and art critics","created_at": "2024-09-22T03:52:03.686Z","updated_at": "2025-03-23T15:09:29.395Z","indexed_at": "2025-03-23T15:09:29.647Z","creator": {"did": "did:plc:qrllvid7s54k4hnwtqxwetrf","handle": "joshuajfriedman.com","profile_url": "https://bsky.app/profile/did:plc:qrllvid7s54k4hnwtqxwetrf","labels": [],"verified_status": "valid","trusted_verifier_status": "none","display_name": "Joshua J. Friedman","description": null,"avatar_url": "https://cdn.bsky.app/img/avatar/plain/did:plc:qrllvid7s54k4hnwtqxwetrf/bafkreihknkschqffbspk4lk7qtf2y2bgx36sirxw3ygztyqe3te2vlhjla","banner_url": null,"pronouns": null,"created_at": "2023-04-27T14:31:59.735Z","indexed_at": null,"followers_count": null,"following_count": null,"posts_count": null},"joined_all_time_count": 2,"joined_week_count": 0,"list_uri": "at://did:plc:qrllvid7s54k4hnwtqxwetrf/app.bsky.graph.list/3l4posztwzy2e","list_url": "https://bsky.app/profile/did:plc:qrllvid7s54k4hnwtqxwetrf/lists/3l4posztwzy2e","list_name": "Bluesky for Art History","list_purpose": "app.bsky.graph.defs#referencelist","list_member_count": 38,"feeds": [],"labels": [],"mode": "search","query": "art","member_list_item_uri": null,"member": null}
Complete details mode result:
{"input": "https://bsky.app/starter-pack/darrin.bsky.team/3lcm47pa6gw2t","status": "success","starter_pack_uri": "at://did:plc:2dzyut5lxna5ljiaasgeuffz/app.bsky.graph.starterpack/3lcm47pa6gw2t","starter_pack_cid": "bafyreifwgrr2aq7qsmcy4n4mj6wjvijp6md6emx3clse4uzns3v62oaxzq","starter_pack_url": "https://bsky.app/starter-pack/did:plc:2dzyut5lxna5ljiaasgeuffz/3lcm47pa6gw2t","name": "Design and Art Folk","description": "Product designers, illustrators, creative coders, graphic designers and more!","created_at": "2024-12-06T02:12:18.681Z","updated_at": "2025-06-11T00:06:29.193Z","indexed_at": "2025-06-11T00:06:27.845Z","creator": {"did": "did:plc:2dzyut5lxna5ljiaasgeuffz","handle": "darrin.bsky.team","profile_url": "https://bsky.app/profile/did:plc:2dzyut5lxna5ljiaasgeuffz","labels": [],"verified_status": null,"trusted_verifier_status": null,"display_name": "Darrin Loeliger","description": null,"avatar_url": "https://cdn.bsky.app/img/avatar/plain/did:plc:2dzyut5lxna5ljiaasgeuffz/bafkreidzk63pesj6w5nvakxt7qelhv6hwfwjyb47drt7nawdhdijfcuzwu","banner_url": null,"pronouns": null,"created_at": "2024-11-19T19:24:54.465Z","indexed_at": null,"followers_count": null,"following_count": null,"posts_count": null},"joined_all_time_count": 0,"joined_week_count": 0,"list_uri": "at://did:plc:2dzyut5lxna5ljiaasgeuffz/app.bsky.graph.list/3lcm47oy6i722","list_url": "https://bsky.app/profile/did:plc:2dzyut5lxna5ljiaasgeuffz/lists/3lcm47oy6i722","list_name": "Design and Art","list_purpose": "app.bsky.graph.defs#referencelist","list_member_count": 133,"feeds": [{"uri": "at://did:plc:umha67tlutgdjrttenhkr5nt/app.bsky.feed.generator/aaakev5axf46m","url": "https://bsky.app/profile/did:plc:umha67tlutgdjrttenhkr5nt/feed/aaakev5axf46m","name": "Designsky","description": "Posts about design: UX / UI / product / graphics / motion / AI / computation / prototyping / 3D / tooling / or any other cool creative things. It's a big tent.\n\nTag #designsky for your post to show up in this feed.","avatar_url": "https://cdn.bsky.app/img/avatar/plain/did:plc:umha67tlutgdjrttenhkr5nt/bafkreih5zfxtx5liwiclu4hyt573setpmlwcqzjmlzjkr6zpm2azwrq2ga","like_count": 245,"creator": {"did": "did:plc:umha67tlutgdjrttenhkr5nt","handle": "jonas.do","profile_url": "https://bsky.app/profile/did:plc:umha67tlutgdjrttenhkr5nt","labels": [],"verified_status": null,"trusted_verifier_status": null,"display_name": "Jonas Downey","description": "Design Director @ Superhuman // Co-creator of Hello Weather. Ex-Figma, Twitter, and some other stuff. Puns always intended. he/him\n\n🌐 https://jonas.do\n🌞 @helloweather.com","avatar_url": "https://cdn.bsky.app/img/avatar/plain/did:plc:umha67tlutgdjrttenhkr5nt/bafkreidbxvl6hbzdtvo2hkqbk66pk7n3yiyag2patfzmpv5to7b44ikojy","banner_url": null,"pronouns": null,"created_at": "2023-04-25T13:30:45.788Z","indexed_at": "2026-02-01T00:26:50.845Z","followers_count": null,"following_count": null,"posts_count": null}}],"labels": [],"mode": "details","query": null,"member_list_item_uri": null,"member": null}
Complete members mode result:
{"input": "https://bsky.app/starter-pack/darrin.bsky.team/3lcm47pa6gw2t","status": "success","starter_pack_uri": "at://did:plc:2dzyut5lxna5ljiaasgeuffz/app.bsky.graph.starterpack/3lcm47pa6gw2t","starter_pack_cid": "bafyreifwgrr2aq7qsmcy4n4mj6wjvijp6md6emx3clse4uzns3v62oaxzq","starter_pack_url": "https://bsky.app/starter-pack/did:plc:2dzyut5lxna5ljiaasgeuffz/3lcm47pa6gw2t","name": "Design and Art Folk","description": "Product designers, illustrators, creative coders, graphic designers and more!","created_at": "2024-12-06T02:12:18.681Z","updated_at": "2025-06-11T00:06:29.193Z","indexed_at": "2025-06-11T00:06:27.845Z","creator": {"did": "did:plc:2dzyut5lxna5ljiaasgeuffz","handle": "darrin.bsky.team","profile_url": "https://bsky.app/profile/did:plc:2dzyut5lxna5ljiaasgeuffz","labels": [],"verified_status": null,"trusted_verifier_status": null,"display_name": "Darrin Loeliger","description": null,"avatar_url": "https://cdn.bsky.app/img/avatar/plain/did:plc:2dzyut5lxna5ljiaasgeuffz/bafkreidzk63pesj6w5nvakxt7qelhv6hwfwjyb47drt7nawdhdijfcuzwu","banner_url": null,"pronouns": null,"created_at": "2024-11-19T19:24:54.465Z","indexed_at": null,"followers_count": null,"following_count": null,"posts_count": null},"joined_all_time_count": 0,"joined_week_count": 0,"list_uri": "at://did:plc:2dzyut5lxna5ljiaasgeuffz/app.bsky.graph.list/3lcm47oy6i722","list_url": "https://bsky.app/profile/did:plc:2dzyut5lxna5ljiaasgeuffz/lists/3lcm47oy6i722","list_name": "Design and Art","list_purpose": "app.bsky.graph.defs#referencelist","list_member_count": 133,"feeds": [{"uri": "at://did:plc:umha67tlutgdjrttenhkr5nt/app.bsky.feed.generator/aaakev5axf46m","url": "https://bsky.app/profile/did:plc:umha67tlutgdjrttenhkr5nt/feed/aaakev5axf46m","name": "Designsky","description": "Posts about design: UX / UI / product / graphics / motion / AI / computation / prototyping / 3D / tooling / or any other cool creative things. It's a big tent.\n\nTag #designsky for your post to show up in this feed.","avatar_url": "https://cdn.bsky.app/img/avatar/plain/did:plc:umha67tlutgdjrttenhkr5nt/bafkreih5zfxtx5liwiclu4hyt573setpmlwcqzjmlzjkr6zpm2azwrq2ga","like_count": 245,"creator": {"did": "did:plc:umha67tlutgdjrttenhkr5nt","handle": "jonas.do","profile_url": "https://bsky.app/profile/did:plc:umha67tlutgdjrttenhkr5nt","labels": [],"verified_status": null,"trusted_verifier_status": null,"display_name": "Jonas Downey","description": "Design Director @ Superhuman // Co-creator of Hello Weather. Ex-Figma, Twitter, and some other stuff. Puns always intended. he/him\n\n🌐 https://jonas.do\n🌞 @helloweather.com","avatar_url": "https://cdn.bsky.app/img/avatar/plain/did:plc:umha67tlutgdjrttenhkr5nt/bafkreidbxvl6hbzdtvo2hkqbk66pk7n3yiyag2patfzmpv5to7b44ikojy","banner_url": null,"pronouns": null,"created_at": "2023-04-25T13:30:45.788Z","indexed_at": "2026-02-01T00:26:50.845Z","followers_count": null,"following_count": null,"posts_count": null}}],"labels": [],"mode": "members","query": null,"member_list_item_uri": "at://did:plc:2dzyut5lxna5ljiaasgeuffz/app.bsky.graph.listitem/3mtwrerhsjk2z","member": {"did": "did:plc:ra4wtcsoewm6irlopfrxzxs4","handle": "oddfellows.bsky.social","profile_url": "https://bsky.app/profile/did:plc:ra4wtcsoewm6irlopfrxzxs4","labels": [],"verified_status": null,"trusted_verifier_status": null,"display_name": "Oddfellows","description": "Builders of moving experiences.","avatar_url": "https://cdn.bsky.app/img/avatar/plain/did:plc:ra4wtcsoewm6irlopfrxzxs4/bafkreieplneajlxtya7auib5nuidzqeq22japn5mk323lq6yrx3mecdety","banner_url": null,"pronouns": null,"created_at": "2025-01-27T16:45:30.944Z","indexed_at": "2025-01-27T16:46:39.944Z","followers_count": null,"following_count": null,"posts_count": null}}
Complete failed dataset item:
{"input": " ","status": "failed","starter_pack_uri": null,"starter_pack_cid": null,"starter_pack_url": null,"name": null,"description": null,"created_at": null,"updated_at": null,"indexed_at": null,"creator": null,"joined_all_time_count": null,"joined_week_count": null,"list_uri": null,"list_url": null,"list_name": null,"list_purpose": null,"list_member_count": null,"feeds": null,"labels": null,"mode": null,"query": null,"member_list_item_uri": null,"member": null}
Each failed row preserves input, uses status: failed, and sets every other top-level field to null. The reason is written to the run log. Successful rows may contain null optional fields or empty arrays when the source does not supply a value. The dataset is not split into separate tables for media, authors, modes or failures.
Input and pagination settings ⚙️
| Parameter | Type | Required | Default | Rules |
|---|---|---|---|---|
inputList | array of strings | Yes | None | In search mode, add keyword queries. In details or members mode, add canonical https://bsky.app/starter-pack/handle/key URLs or matching at:// starter-pack URIs. |
mode | string | No | search | Choose the source results to collect. Each mode uses the same single dataset view. Allowed: search, details, members. |
pagesPerSearch | integer | No | 1 | Number of search result pages per query in search mode, up to 25 packs per page. Ignored in details and members modes. Minimum 1. |
pagesPerPack | integer | No | 1 | Number of member pages per starter pack in members mode. Each page requests up to 30 items. Ignored in search and details modes. Minimum 1. |
In search mode, use nonblank keywords of at most 1,000 characters. In details or members mode, use https://bsky.app/starter-pack/ACCOUNT/KEY or an at://ACCOUNT/app.bsky.graph.starterpack/KEY URI. The mode is shared by all inputs in one run, so do not mix keywords and pack URLs.
For supported website URLs, use the exact https://bsky.app host and canonical path without a query string or fragment. URLs from other hosts and unsupported record types are rejected. Handles are normalized; duplicate normalized inputs in the same mode are processed once. Different source inputs retain their own results, while repeated record identifiers within one input’s pagination are removed.
The first result request counts as page 1; resolving a handle or validating source metadata does not consume a result page. Pagination stops at the requested page count, a missing cursor or a repeated cursor. A short, empty or fully filtered page can still continue when it includes a usable next cursor. No exact result total is guaranteed.
Bluesky starter packs and members use cases 🎯
Topic-based account discovery
Search for public packs around a topic and inspect their names, descriptions and creators. Choose suitable collections before expanding their members.
Curated member exports
Run members mode for selected pack URLs and review the recommended accounts individually. Keep pack context when combining several collections in your research dataset.
Collection catalogues
Use details mode to maintain a source-linked catalogue of pack descriptions, creators and feed references. Refresh the same inputs later when you need an updated snapshot.
Pricing and saved-result behavior 💰
See the Actor’s Pricing tab for the active charging model and current rate. Store settings are separate from this local implementation, so this README does not state an unverified fixed price or runtime.
Under dataset-item pricing:
- A pack row in search/details mode or a member row in members mode counts as one saved result. Referenced feeds and member profile fields remain inside that row.
- An invalid or unavailable input, an exhausted temporary failure, or an input with no publicly available results within its page budget can save one
failedrow. - Automatic retry attempts do not create extra dataset rows by themselves.
- A normal empty continuation after earlier successes creates no extra result row.
- More requested pages can produce more saved rows. Check the active listing for how saved failed rows are billed; they are not assumed to be free.
The final total depends on source availability, duplicate removal and the chosen page budget. Start with a small run and check its actual usage before selecting a larger budget.
Bluesky starter packs and members API 🔌
Replace $ACTOR_ID with the identifier from this Actor’s API tab and $APIFY_TOKEN with your Apify token.
curl -X POST "https://api.apify.com/v2/acts/$ACTOR_ID/runs?token=$APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"inputList":["art"],"mode":"search","pagesPerSearch":1}'
Retrieve the default dataset through the Apify API or download JSON, CSV, Excel, XML and other formats available in the Console. Schedules, completion webhooks and Apify integrations can connect results to Google Sheets, Make, Zapier, n8n, cloud storage or your own backend. These are platform connection options, not integrations preconfigured by this Actor.
Reliability, retries, and public-data limits ⚠️
The Actor uses pure HTTP collection with up to five requests concurrently. It does not launch a browser. Invalid syntax and confirmed missing, removed or inaccessible targets stop without unnecessary retries. Temporary network and proxy failures, timeouts, blocks, malformed responses, throttling and server errors are retried up to five total attempts.
Earlier successful pages remain saved if a later page fails. If no publicly available rows are found before the source ends or the selected page budget is reached, one failed row records that input; this does not mean the underlying account or collection necessarily does not exist. A later empty page after successes is normal exhaustion. A later request that exhausts retries can append a failed row while preserving earlier results.
Bluesky controls public availability and returned fields. Objects restricted from unauthenticated viewing are excluded; a restricted target produces a failed row. Deleted, suspended, unavailable or otherwise restricted records may be missing. Optional counts are not inferred from an incomplete sample, and media links may change or expire.
Search mode returns collection metadata and does not automatically expand every matching pack into members. Run members mode with selected pack URLs for that step. Referenced feeds remain array values in a pack row and are not scraped for posts. A pack’s preview or reported member count does not prove that every member is publicly available.
Three consecutive result pages were verified for every paginated mode in HTTP runs of the packaged Actor on September 11, 2026. Details mode was checked separately as a single-record operation. These checks demonstrate working continuation on the tested sources and do not guarantee future source availability.
One invalid string inside an otherwise valid input list does not stop other inputs. A configuration that fails the input schema logs an input warning and exits without starting requests: for example, a list containing a number instead of a string, an unsupported mode or an invalid page-count type. Infrastructure failures such as startup errors, unavailable dataset storage or an unrecoverable result-save error can still stop the whole run. Result-save failures are not retried as fresh scraping requests.
Frequently asked questions ❓
What is a starter pack?
It is a user-curated collection of recommended accounts and feeds, often organized around a topic or community. Pack membership is a recommendation, not a follower relationship.
Does search automatically collect every member?
No. Search returns one row per matching pack. Submit chosen pack URLs in members mode to paginate their associated member lists.
Why is member null in search and details rows?
Those rows represent whole packs. Members mode uses the same schema but fills member and member_list_item_uri for each returned account.
Does it require Bluesky login or cookies?
No Bluesky login, password, session cookie or account token is accepted or required. The Actor uses HTTP requests used by the public website and respects restrictions on unauthenticated access.
What happens to invalid or unavailable inputs?
Invalid individual inputs are saved as failed rows without an HTTP request. Confirmed missing, removed or restricted targets also become failed rows without unnecessary retries. Temporary failures are retried up to five total attempts. Other inputs and already saved pages remain available.
Can I export results or automate collection?
Yes. Use the Apify dataset to download JSON, CSV, Excel, XML or other supported formats, or retrieve records through its API. Apify schedules and webhooks can connect repeated runs to your own workflow.
Support, responsible use, and related actors 🛟
For a reproducible problem, open an issue in the Actor’s Issues tab. Include the run ID, approximate time, mode if relevant, page count, safe public input, expected result and actual result. Do not share access tokens, proxy credentials or other secrets.
Use public data responsibly and follow applicable privacy, copyright, contractual and platform requirements before storing, combining or redistributing collected information.