Bluesky Posts & Profile Scraper avatar

Bluesky Posts & Profile Scraper

Pricing

from $6.00 / 1,000 results

Go to Apify Store
Bluesky Posts & Profile Scraper

Bluesky Posts & Profile Scraper

Scrape Bluesky profiles and posts: followers, bios, full post text, likes, reposts, replies, images and links, from any profile or keyword search.

Pricing

from $6.00 / 1,000 results

Rating

0.0

(0)

Developer

Maged

Maged

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Categories

Share

Bluesky Posts & Profile Scraper extracts profiles and posts from Bluesky: bios, follower counts, join dates and verification, plus every post's full text, likes, reposts, replies, quotes, images, videos, links and hashtags. Scrape any profile's timeline or search all of Bluesky by keyword or #hashtag, and get clean, export-ready data.

What does Bluesky Posts & Profile Scraper do?

  • Profiles: give it handles or profile links and get one profile row each (name, bio, followers, following, post count, join date, verification, avatar) plus that profile's most recent posts.
  • Keyword & hashtag search: find posts across the whole network mentioning a keyword or hashtag, newest first or most engaging first.

Every post comes with engagement counts, media, links, hashtags, mentions and a direct link, and is marked as original, reply or repost.

On the Apify platform you also get API access, scheduling, integrations (Google Sheets, Slack, Zapier, Make, webhooks) and run monitoring, so you can track accounts or keywords on autopilot.

Why scrape Bluesky?

  • Brand & keyword monitoring: catch every mention of your brand, product or competitors as it happens.
  • Influencer research: compare accounts by followers, posting frequency and engagement.
  • Social listening & research: collect posts on a topic or hashtag for sentiment analysis, AI training data or academic research.
  • Content strategy: find which posts get the most likes, reposts and quotes.
  • Archiving: keep a timestamped copy of an account's public posts.

How to scrape Bluesky

  1. Open the Actor and go to the Input tab.
  2. Add handles to Profiles (e.g. bsky.app, @jay.bsky.team, or a profile link), and/or keywords to Search keywords.
  3. Set how many posts you want per profile and per keyword.
  4. Click Start.
  5. Open the Output tab and switch between the Posts and Profiles views, or download as JSON, CSV, Excel or HTML.

Input

FieldTypeDescription
profilesarrayHandles (bsky.app, name.bsky.social, @name) or profile links.
maxPostsPerProfileintegerMost recent posts per profile. 0 = profile info only. Default 50.
includeRepliesbooleanAlso collect the profile's replies. Default false.
includeRepostsbooleanAlso collect reposts. Default true.
includeProfileInfobooleanAdd a profile row. Default true.
searchQueriesarrayKeywords or #hashtags to search across Bluesky.
maxPostsPerSearchintegerPosts per keyword. Default 100.
searchSortstringlatest or top. Top returns up to 100 posts per keyword.
{
"profiles": ["bsky.app", "https://bsky.app/profile/jay.bsky.team"],
"maxPostsPerProfile": 100,
"searchQueries": ["web scraping", "#python"],
"maxPostsPerSearch": 300,
"searchSort": "latest"
}

Output

Two kinds of rows, marked by entityType. You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.

Profile

{
"entityType": "profile",
"handle": "jay.bsky.team",
"did": "did:plc:oky5czdrnfjpqslsw2a5iclo",
"profileUrl": "https://bsky.app/profile/jay.bsky.team",
"displayName": "Jay 🦋",
"description": "Founder & Chief Innovation Officer @ Bluesky\n\nWorking on @attie.ai\n\n🌱 🪴 🌳",
"followersCount": 594638,
"followsCount": 3985,
"postsCount": 4165,
"createdAt": "2022-11-17T06:31:40.296Z",
"isVerified": true,
"avatarUrl": "https://cdn.bsky.app/img/avatar/plain/did:plc:oky5czdrnfjpqslsw2a5iclo/...",
"pinnedPostUrl": null
}

Post

{
"entityType": "post",
"postUrl": "https://bsky.app/profile/jay.bsky.team/post/3mvvdpby3x22t",
"text": "good dogs",
"createdAt": "2026-09-19T18:45:07.963Z",
"languages": ["en"],
"authorHandle": "jay.bsky.team",
"authorName": "Jay 🦋",
"likeCount": 662,
"repostCount": 23,
"replyCount": 20,
"quoteCount": 2,
"isReply": false,
"isRepost": false,
"imageUrls": ["https://cdn.bsky.app/img/feed_fullsize/plain/did:plc:oky5czdrnfjpqslsw2a5iclo/..."],
"videoUrl": null,
"externalLink": null,
"quotedPostUrl": null,
"hashtags": [],
"mentions": [],
"links": [],
"source": "profile",
"searchQuery": null
}

Output data fields

FieldDescription
followersCount / followsCount / postsCountProfile audience and activity.
createdAt (profile)When the account joined Bluesky.
isVerifiedWhether the account has a valid verification.
text / createdAt / languagesPost content and time.
likeCount / repostCount / replyCount / quoteCountEngagement.
isReply / replyToUrl / isRepost / repostedByPost type and context.
imageUrls / videoUrl / externalLink / quotedPostUrlAttached media, link card and quoted post.
hashtags / mentions / linksTags, mentioned accounts and links in the text.
source / searchQueryWhether the post came from a profile or a keyword search.

How many results will I get?

One row per post, plus one row per profile. 3 profiles × 100 posts + 2 keywords × 300 posts is up to 903 rows. Use the per-profile and per-keyword limits to control volume.

Tips

  • Monitor a keyword daily: schedule the Actor with searchSort: latest and send new posts to Slack or Google Sheets.
  • Hashtags: search #yourtag to get posts tagged with it.
  • Profile snapshot only: set Max posts per profile to 0 to collect just profile stats for a list of accounts.

FAQ

Can I scrape followers lists? Not at the moment. Open an issue if you need it.

Is scraping Bluesky legal? The Actor only collects publicly available posts and profiles. You're responsible for using the data lawfully, especially personal data under GDPR.

Found a bug or need a custom feature? Open an issue in the Issues tab. Custom solutions are available on request.