{"name":"bluesky-scraper","id":"sfoln/bluesky-scraper","title":"Bluesky Scraper – Posts, Profiles & Search","description":"Bluesky posts and profiles without login: keyword search (latest or top, date and language filters), the posts of any account, full reply threads, and profiles with follower, following and post counts. Text, links, images, likes, reposts, replies. $0.80 per 1,000 posts, $2 per 1,000 profiles.","version":"0.1","status":"ready","family":{"id":"social-media-data","name":"Social media data","description":"Profiles, posts, comments, followers and account audits from X, Instagram, TikTok, YouTube, Reddit, Threads, LinkedIn, Facebook, Bluesky, Telegram, Hacker News and Substack.","actors":31},"categories":["SOCIAL_MEDIA","LEAD_GENERATION","NEWS"],"availability":"on_request","seoTitle":"Bluesky Scraper – Search Posts, Profiles & Threads API","seoDescription":"Scrape Bluesky without login: search posts by keyword, get any account's posts, reply threads and profiles with follower counts. $0.80 per 1,000 posts.","summary":"Scrape Bluesky posts and profiles without logging in: keyword search (latest or top, with date and language filters), the posts of any account, full reply threads, and profiles with follower, following and post counts. One clean record per post or profile, for social listening, brand and competitor monitoring, research datasets, lead lists and AI agents. $0.80 per 1,000 posts, $2 per 1,000 profiles, no start fee; unknown accounts, deleted posts and errors are free.","pricing":{"model":"pay-per-event","currency":"USD","billedBy":"Apify","freePlanMaxItemsPerRun":10,"events":[{"name":"post","title":"Bluesky post","description":"One post row (search result, post of an account, or post of a thread) with its text, author, links, media and engagement counts.","priceUsd":0.0008},{"name":"profile","title":"Bluesky profile","description":"One profile record (handle, DID, name, bio, avatar, follower, following and post counts, creation date).","priceUsd":0.002}]},"input":{"description":"Pick a mode and fill its list: search queries, account handles (for their posts or their profiles) or post URLs (for reply threads). Each query, account or post is one item with its own summary in the dataset.","required":[],"fields":[{"name":"mode","title":"Mode","type":"string","required":false,"description":"search: posts matching keywords. author-feed: the posts of accounts. profiles: one profile record per account. threads: a post with its parents and replies.","default":"search","enum":["search","author-feed","profiles","threads"],"editor":"select"},{"name":"searchQueries","title":"Search queries","type":"array","required":false,"description":"For the search mode: keywords, phrases or hashtags, one per line. Bluesky's search syntax works too (\"exact phrase\", from:handle, domain:example.com). Accounts on the Apify free plan can process up to 10 items per run (an item is one query, account or post).","prefill":["bluesky"],"editor":"stringList"},{"name":"handles","title":"Accounts","type":"array","required":false,"description":"For the author-feed and profiles modes: handles (jay.bsky.team, @bsky.app), DIDs (did:plc:…) or profile URLs, one per line. A bare name means name.bsky.social.","editor":"stringList"},{"name":"postUrls","title":"Post URLs","type":"array","required":false,"description":"For the threads mode: post URLs (https://bsky.app/profile/bsky.app/post/3l6oveex3ii2l) or at:// URIs, one per line.","editor":"stringList"},{"name":"maxPostsPerInput","title":"Max posts per item","type":"integer","required":false,"description":"Posts returned per query, account or thread (1–10,000).","default":100,"prefill":10,"minimum":1,"maximum":10000},{"name":"sort","title":"Search order","type":"string","required":false,"description":"Search mode: latest (newest first, pages back in time) or top (Bluesky's ranking; first 100 results only).","default":"latest","enum":["latest","top"],"editor":"select"},{"name":"since","title":"Since","type":"string","required":false,"description":"Search mode: only posts from this date or date-time on (2026-01-31 or 2026-01-31T12:00:00Z).","editor":"textfield"},{"name":"until","title":"Until","type":"string","required":false,"description":"Search mode: only posts before this date or date-time.","editor":"textfield"},{"name":"lang","title":"Language","type":"string","required":false,"description":"Search mode: only posts in this language (en, de, ja, pt-BR…).","editor":"textfield"},{"name":"feedFilter","title":"Posts of accounts: filter","type":"string","required":false,"description":"author-feed mode: posts (no replies), replies (posts and replies), media (posts with images or video), threads (posts and the account's own threads) or videos.","default":"posts","enum":["posts","replies","media","threads","videos"],"editor":"select"},{"name":"includeReposts","title":"Include reposts","type":"boolean","required":false,"description":"author-feed mode: also return the posts the account reposted (marked isRepost).","default":false},{"name":"threadDepth","title":"Reply depth","type":"integer","required":false,"description":"threads mode: levels of replies to follow (0 = the post only).","default":6,"minimum":0,"maximum":1000},{"name":"includeParents","title":"Include parent posts","type":"boolean","required":false,"description":"threads mode: also return the posts above the given one, up to the thread's root.","default":true},{"name":"maxItems","title":"Max items","type":"integer","required":false,"description":"Safety cap on queries, accounts or posts processed in this run; the rest is reported as dropped.","default":1000,"minimum":1,"maximum":10000},{"name":"concurrency","title":"Concurrency","type":"integer","required":false,"description":"Items processed in parallel (1–10). Default: 2 for search, 3 for posts and threads, 10 for profiles (fetched 25 per call).","minimum":1,"maximum":10},{"name":"includeRaw","title":"Include raw upstream response","type":"boolean","required":false,"description":"Attach Bluesky's unmodified JSON to each record under raw (larger output).","default":false}]},"exampleInput":{"searchQueries":["bluesky"],"maxPostsPerInput":10},"outputFields":[{"name":"input","type":"string | object","title":"Input","description":"The input item this record belongs to (the app, keyword, chart, account or post, with its country or mode)."},{"name":"status","type":"string","title":"Status","description":"ok | not_found | error | skipped_invalid | skipped_budget | skipped_free_plan | skipped_unmetered","example":"ok"},{"name":"charged","type":"boolean","title":"Charged","description":"Whether this record incurred a pay-per-event charge."},{"name":"chargedEvent","type":"string","title":"Charged event","description":"Pay-per-event event charged for this record (present only when charged)."},{"name":"chargedCount","type":"integer","title":"Events charged","description":"Events actually charged when the charge came back short of the requested count (present only then; a warning explains it)."},{"name":"source","type":"string","title":"Source","description":"Upstream data source."},{"name":"fetchedAt","type":"string","title":"Fetched at","description":"ISO timestamp."},{"name":"error","type":"object","title":"Error","description":"{ code, message, provider?, status? } when status is not ok. Codes set by the runtime: budget_exhausted, free_plan_limit, unmetered, aborted, charge_failed, record_too_large, invalid_record, dataset_push_failed; upstream codes: auth, insufficient_credits, rate_limit, timeout, network, server, client, invalid_response, not_found."},{"name":"warnings","type":"array","title":"Warnings","description":"Notes about this record, e.g. a charge that came back short."},{"name":"raw","type":"object","title":"Raw","description":"Bluesky's unmodified post or profile view (only with includeRaw)."},{"name":"recordType","type":"string","title":"Record type","description":"post, profile, or summary (one per query, account or thread: what was delivered and why it stopped)."},{"name":"position","type":"integer","title":"Position","description":"Order of this row among the rows of its input (1-based)."},{"name":"uri","type":"string","title":"Post URI","description":"at:// URI of the post."},{"name":"cid","type":"string | null","title":"CID","description":"Content ID of the post version."},{"name":"url","type":"string | null","title":"URL","description":"bsky.app link of the post or profile."},{"name":"postId","type":"string | null","title":"Post ID","description":"Record key of the post (last part of its URL)."},{"name":"authorDid","type":"string | null","title":"Author DID","description":"Permanent ID of the author."},{"name":"authorHandle","type":"string | null","title":"Author handle","description":"Handle of the author, e.g. bsky.app."},{"name":"authorDisplayName","type":"string | null","title":"Author name","description":"Display name of the author."},{"name":"authorAvatar","type":"string | null","title":"Author avatar","description":"Avatar image URL of the author."},{"name":"text","type":"string","title":"Text","description":"Post text."},{"name":"createdAt","type":"string | null","title":"Created","description":"Posts: when the post was written (ISO). Profiles: when the account was created."},{"name":"indexedAt","type":"string | null","title":"Indexed","description":"When Bluesky indexed the post or profile (ISO)."},{"name":"langs","type":"array","title":"Languages","description":"Language codes the author set on the post."},{"name":"replyCount","type":"integer","title":"Replies","description":"Replies at fetch time."},{"name":"repostCount","type":"integer","title":"Reposts","description":"Reposts at fetch time."},{"name":"likeCount","type":"integer","title":"Likes","description":"Likes at fetch time."},{"name":"quoteCount","type":"integer","title":"Quotes","description":"Quote posts at fetch time."},{"name":"isReply","type":"boolean","title":"Is reply","description":"True when the post replies to another post."},{"name":"replyParentUri","type":"string | null","title":"Reply to","description":"URI of the post this one replies to."},{"name":"replyRootUri","type":"string | null","title":"Thread root","description":"URI of the first post of the thread."},{"name":"isQuote","type":"boolean","title":"Is quote","description":"True when the post quotes another post."},{"name":"quotedPostUri","type":"string | null","title":"Quoted post","description":"URI of the quoted post."},{"name":"embedType","type":"string | null","title":"Embed","description":"images, gallery, video, external (link card), record (quote) or recordWithMedia."},{"name":"links","type":"array","title":"Links","description":"URLs linked in the text and the link card."},{"name":"mentions","type":"array","title":"Mentions","description":"Handles (or DIDs) mentioned in the text."},{"name":"hashtags","type":"array","title":"Hashtags","description":"Hashtags of the post, without #."},{"name":"images","type":"array","title":"Images","description":"Attached images: { url, thumbUrl, alt }."},{"name":"videoUrl","type":"string | null","title":"Video","description":"HLS playlist URL of an attached video."},{"name":"videoThumbnailUrl","type":"string | null","title":"Video thumbnail","description":"Thumbnail URL of an attached video."},{"name":"externalLink","type":"object | null","title":"Link card","description":"Link card of the post: { url, title, description, thumbUrl }."},{"name":"labels","type":"array","title":"Labels","description":"Moderation and self labels on the post or profile."},{"name":"isRepost","type":"boolean","title":"Is repost","description":"author-feed mode: true when the account reposted this post (includeReposts)."},{"name":"repostedByHandle","type":"string | null","title":"Reposted by","description":"author-feed mode: the account that reposted it."},{"name":"repostedAt","type":"string | null","title":"Reposted at","description":"author-feed mode: when it was reposted."},{"name":"threadRole","type":"string","title":"Thread role","description":"threads mode: parent, anchor (the requested post) or reply."},{"name":"threadDepth","type":"integer","title":"Thread depth","description":"threads mode: -n for parents, 0 for the requested post, 1… for replies."},{"name":"did","type":"string","title":"DID","description":"Profiles: permanent account ID."},{"name":"handle","type":"string | null","title":"Handle","description":"Profiles and author-feed summaries: the account handle."},{"name":"displayName","type":"string | null","title":"Name","description":"Profiles: display name."},{"name":"description","type":"string | null","title":"Bio","description":"Profiles: profile description."},{"name":"avatar","type":"string | null","title":"Avatar","description":"Profiles: avatar image URL."},{"name":"banner","type":"string | null","title":"Banner","description":"Profiles: banner image URL."},{"name":"followersCount","type":"integer | null","title":"Followers","description":"Profiles: followers."},{"name":"followingCount","type":"integer | null","title":"Following","description":"Profiles: accounts followed."},{"name":"postsCount","type":"integer | null","title":"Posts","description":"Profiles: posts written."},{"name":"pinnedPostUri","type":"string | null","title":"Pinned post","description":"Profiles: URI of the pinned post."},{"name":"listsCount","type":"integer | null","title":"Lists","description":"Profiles: lists created."},{"name":"feedsCount","type":"integer | null","title":"Feeds","description":"Profiles: custom feeds created."},{"name":"starterPacksCount","type":"integer | null","title":"Starter packs","description":"Profiles: starter packs created."},{"name":"isLabeler","type":"boolean","title":"Labeler","description":"Profiles: true for a moderation (labeler) service."},{"name":"verified","type":"boolean","title":"Verified","description":"Profiles: true when Bluesky shows the account as verified."},{"name":"query","type":"string","title":"Query","description":"Summary rows (search mode): the query."},{"name":"sort","type":"string","title":"Search order","description":"Summary rows (search mode): latest or top."},{"name":"hitsTotal","type":"integer","title":"Matches","description":"Summary rows (search mode): matches Bluesky reported for the query."},{"name":"feedFilter","type":"string","title":"Feed filter","description":"Summary rows (author-feed mode): posts, replies, media, threads or videos."},{"name":"postUri","type":"string | null","title":"Thread post","description":"Summary rows (threads mode): URI of the requested post."},{"name":"postsInThread","type":"integer","title":"Posts in thread","description":"Summary rows (threads mode): posts Bluesky returned for the thread."},{"name":"duplicatesSkipped","type":"integer","title":"Duplicates skipped","description":"Summary rows: posts already delivered for an earlier input of the run (not charged again)."},{"name":"resultsDelivered","type":"integer","title":"Rows delivered","description":"Summary rows: posts delivered (and charged) for this item."},{"name":"stopReason","type":"string","title":"Stop reason","description":"Summary rows: limit, end, free_plan, budget, aborted, deadline, empty_pages, max_pages or error."}],"outputExample":{"input":{"mode":"search","query":"launch"},"recordType":"post","position":1,"uri":"at://did:plc:synthetic1aaaaaaaaaaaaaa/app.bsky.feed.post/3mxulfla27c2e","cid":"bafyrei3mxulfla27c2ecid","url":"https://bsky.app/profile/alex-example.bsky.social/post/3mxulfla27c2e","postId":"3mxulfla27c2e","authorDid":"did:plc:synthetic1aaaaaaaaaaaaaa","authorHandle":"alex-example.bsky.social","authorDisplayName":"Alex Example","authorAvatar":"https://cdn.bsky.app/img/avatar/plain/did:plc:synthetic1aaaaaaaaaaaaaa/bafkreiavatar1@jpeg","text":"Launch day 🚀 Notes at example.com/launch, thanks @sam-example.bsky.social #webdev","createdAt":"2026-10-14T21:56:03.120Z","indexedAt":"2026-10-14T21:56:03.120Z","langs":["en"],"replyCount":2,"repostCount":3,"likeCount":10,"quoteCount":1,"isReply":false,"replyParentUri":null,"replyRootUri":null,"isQuote":false,"quotedPostUri":null,"embedType":"external","links":["https://example.com/launch"],"mentions":["sam-example.bsky.social"],"hashtags":["webdev"],"images":[],"videoUrl":null,"videoThumbnailUrl":null,"externalLink":{"url":"https://example.com/launch","title":"Launch notes","description":"What shipped today.","thumbUrl":"https://cdn.bsky.app/img/feed_thumbnail/plain/did:plc:synthetic1aaaaaaaaaaaaaa/bafkreithumb1@jpeg"},"labels":[],"status":"ok","charged":true,"chargedEvent":"post","source":"bluesky","fetchedAt":"2026-10-14T22:00:00.000Z"},"faq":[{"question":"Do I need a Bluesky account or an app password?","answer":"No. The Actor reads Bluesky's public API, the same data the Bluesky web app shows to logged-out visitors."},{"question":"How far back does keyword search go?","answer":"With sort \"latest\", the Actor pages back in time until it has maxPostsPerInput posts or reaches since. Bluesky serves only the first page (up to 100 posts) of a \"top\" search to logged-out clients."},{"question":"Why does a post appear only once when two of my queries match it?","answer":"Within one run a post is delivered and charged once, under the first input that found it; the summary record of the other input counts it in duplicatesSkipped."}],"mcpExamplePrompt":"Find the 50 latest Bluesky posts that mention \"apify\" and summarise what people say about it.","related":["brand-mentions-monitor","reddit-subreddit-posts","threads-profile-lookup","instagram-hashtag-posts","facebook-page-posts"],"urls":{"site":"https://www.sfoln.com/actors/bluesky-scraper/","siteJson":"https://www.sfoln.com/actors/bluesky-scraper.json","siteMarkdown":"https://www.sfoln.com/actors/bluesky-scraper.md","runSync":"https://api.apify.com/v2/actors/sfoln~bluesky-scraper/run-sync-get-dataset-items","runAsync":"https://api.apify.com/v2/actors/sfoln~bluesky-scraper/runs","mcp":"https://mcp.apify.com?tools=sfoln/bluesky-scraper","requestAccess":"mailto:contact@sfoln.com?subject=Access%20request%3A%20Bluesky%20Scraper%20%E2%80%93%20Posts%2C%20Profiles%20%26%20Search%20(sfoln%2Fbluesky-scraper)&body=Please%20publish%20bluesky-scraper.%20What%20we%20plan%20to%20use%20it%20for%3A"},"publisher":{"name":"SFOLN LLC","apifyUsername":"sfoln","url":"https://www.sfoln.com","apifyProfile":"https://apify.com/sfoln","email":"contact@sfoln.com"},"generatedAt":"2026-10-22T04:28:58.477Z"}