ParseForge Scrapers

Bluesky Profile & Posts Scraper

parseforge/bluesky-profile-posts-scraper

Social mediaNews & mediaOther

Scrapes Bluesky profiles by handle and returns each profile with its recent posts attached. Includes full post text, engagement metrics, and profile details. Export to CSV, JSON, Excel, or XML.

Run this scraper See the API call
Total users
2
Monthly active
1
Total runs
94
Bookmarked
0
Rating
Not rated yet
Last modified
12 days ago

Overview

ParseForge

Bluesky Profile & Posts Scraper

Scrape Bluesky profiles and their recent posts by handle, up to a million posts per run. Each profile comes with its display name, bio, follower counts, and the latest posts with full text, likes, reposts, and replies. No login or API key. Export to CSV, JSON, Excel, or XML.

Bluesky's official API requires an app password and rate-limits you. This reads the public profile feeds directly, given one or more handles, and returns each profile with its recent posts attached in one fixed schema. Filter by handle and cap the number of posts per profile so only the data you need reaches your dataset.

Who uses it What they scrape Bluesky for
Market researchers Track what a set of influential accounts is posting this week
Brand managers Monitor competitor profiles and their latest announcements
Journalists Archive the public posts of public figures for a story
Data analysts Build a dataset of profiles and posts for trend analysis

What it does

This Actor collects Bluesky profiles by handle and returns each profile as a flat record with its recent posts attached.

  • ๐Ÿ‘ฅ Profile records: one row per handle with display name, bio, avatar, and follower counts.
  • ๐Ÿ“ Recent posts attached: each profile row includes up to 100 of its latest posts with full text and engagement metrics.
  • ๐Ÿ”ข Flexible limits: set a global maximum posts per run and a per-handle post cap.
  • ๐Ÿ“ค Multiple export formats: CSV, JSON, Excel, XML, and more via Apify's dataset tools.

Results export to CSV, JSON, Excel, or XML, or straight from the API.

What you can do with Bluesky data

๐Ÿ“ˆ Track competitor activity.

A brand manager runs the Actor on a list of competitor handles each morning to see their latest posts and engagement, then adjusts the day's content plan.

๐Ÿ—ž๏ธ Archive public figures.

A journalist scrapes the profiles of politicians and celebrities before a big story, keeping a timestamped dataset of their public statements.

๐Ÿงช Build a research corpus.

A data analyst collects posts from hundreds of accounts in a niche, then runs sentiment or topic modeling on the full text.

๐Ÿ” Monitor brand mentions.

A social media manager scrapes the profiles of known brand advocates and detractors to catch new posts that mention the product.

Why choose this scraper

What you get
No API key Reads public profile feeds directly, no app password or OAuth
One fixed schema Every profile and post comes back in the same flat structure
Batch handles Pass dozens or hundreds of handles in a single run
Export anywhere CSV, JSON, Excel, XML, or push to any Apify integration

How it compares

This Actor focuses on scraping profiles and their recent posts by handle, while the competitors below offer broader search or thread capabilities.

Feature ParseForge Bluesky Scraper | Enterprise Grade Bluesky Posts Search Scraper
Scrape by handle Yes Yes Not listed
Scrape by keyword search Not listed Yes Yes
Full comment threads Not listed Yes Not listed
Profile details (bio, followers) Yes Not listed Not listed
Recent posts per profile Yes Not listed Not listed
No API key required Yes Not listed Not listed

Configure the run

Drive the Actor from a list of Bluesky handles, and set two limits: the total number of posts to collect per run and how many recent posts to attach per profile. The Input tab lists every parameter.

A first run with the defaults:

{
  "maxItems": 10,
  "handles": [
    "bsky.app"
  ],
  "postsPerHandle": 10
}

A larger pull:

{
  "maxItems": 200,
  "handles": [
    "bsky.app"
  ],
  "postsPerHandle": 10
}

Pricing

Pay-per-result: $0.021 per result collected. You pay only for the results written to your dataset.

Results collected Approximate cost
100 results $2.10
1,000 results $21.00
10,000 results $210.00

New Apify accounts start with $5 in free credit.

Free users

Free-plan runs return up to 10 results as a preview. Upgrade your Apify plan to collect up to 1,000,000 results per run.

Run it

  1. Create a free Apify account with $5 in credit.
  2. Open the Bluesky Profile & Posts Scraper.
  3. Set your inputs and any filters, then click Start.
  4. Export the results as CSV, Excel, JSON, or XML from the Dataset tab.

Run it programmatically through the Apify API (run-sync-get-dataset-items) or the ApifyClient for JavaScript and Python.

Use with AI agents (MCP)

Give an AI agent live access to Bluesky through the Model Context Protocol. Add the Actor to Claude, Cursor, or any MCP client:

claude mcp add --transport http apify "https://mcp.apify.com?tools=parseforge/bluesky-profile-posts-scraper"

Then prompt it in plain language to run the scraper and read back the results.

Troubleshooting

Why am I getting no results?

Check that the handles are spelled correctly and do not include the @ symbol or a URL. The Actor expects plain handles like bsky.app or jack.bsky.social.

Why are some profiles missing posts?

The profile may have fewer posts than your postsPerHandle setting, or the account may be private or deleted. Try lowering postsPerHandle or checking the handle directly on Bluesky.

Why did the run stop before reaching maxItems?

The Actor stops when it has read all available posts from the given handles. If the total posts across all profiles is less than maxItems, the run ends early.

Can I scrape a handle that contains special characters?

Bluesky handles can contain dots and hyphens. Pass them exactly as they appear, for example my-handle.bsky.social. Avoid adding @ or https://.

Why do I get an error about invalid input?

Make sure the handles field is a list of strings and that maxItems and postsPerHandle are integers within the allowed ranges. The input schema shows the exact limits.

FAQ

Question Answer
Do I need a Bluesky account or API key? No. The Actor reads public profile feeds directly, so no login, app password, or API key is required.
How many handles can I scrape in one run? You can pass as many handles as you like in the handles array. Each handle produces one profile record with its recent posts attached.
What is the difference between maxItems and postsPerHandle? maxItems is the total number of posts to collect across the whole run. postsPerHandle is how many recent posts to attach to each individual profile, up to 100.
Can I get more than 100 posts per profile? No, the Actor attaches up to 100 of the most recent posts per profile. For deeper history, run the Actor more frequently or use a search-based scraper.
What data comes back for each post? Each post includes its text, author handle, like count, repost count, reply count, and timestamp, among other fields. The exact schema is shown in the sample output.
Can I scrape posts by keyword or hashtag? This Actor scrapes by handle only. For keyword or hashtag search, use a Bluesky search scraper.
Does it scrape replies and comments? It returns the recent posts made by the profile, not the replies to those posts. Full comment threads are not included.
What export formats are supported? You can export the dataset as CSV, JSON, Excel, XML, or push it to any Apify integration like Google Sheets or a webhook.
Is this legal? The Actor only reads publicly available data. You are responsible for complying with Bluesky's terms of service and any applicable laws in your jurisdiction.
How often should I run it? You can schedule it daily, hourly, or on any cron schedule. Most users run it daily to keep a rolling archive of recent posts.

Related actors

Browse the full ParseForge collection for more scrapers.

๐Ÿ†˜ Need help? Email parseforge@protonmail.com with your run ID, your input, and what you expected.

โš ๏ธ Disclaimer. This Actor is unofficial and is not affiliated with, endorsed by, or sponsored by Bluesky Social, PBC. It collects only publicly available data. You are responsible for using the collected data in compliance with the source's terms of service and applicable data-protection laws, including GDPR, CCPA, and PIPL. Do not use it to collect personal data unlawfully.

Input

FieldTypeWhat it doesDefault
maxItems integer How many posts to collect per run. 10
handles required array List of Bluesky handles (e.g. bsky.app, jack.bsky.social) to scrape. Each handle yields one profile record with recent posts attached. ["bsky.app"]
postsPerHandle integer How many recent posts to attach per profile. 10

Pricing

from $19.00 per 1,000 results

Charged forWhat it isPrice each
result Single result item pushed to the default dataset. $0.019 to $0.021

Tiered: the lower figure is the price on a higher Apify plan. Billing and the free credit live on Apify.

API

One POST returns the dataset directly. Same shape for every scraper in the library, so swapping the slug is the only change.

POST ยท run and get results
curl -X POST "https://api.apify.com/v2/acts/parseforge~bluesky-profile-posts-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "helloWorld": 123
  }'

Examples

Input that runs as-is.

input.json
{
  "helloWorld": 123
}

Reviews

No reviews yet. Be the first.

Issues

We build and maintain this scraper, so a problem with it comes to us. Report it on the Apify listing and the thread stays attached to the scraper where the next person can find it: open an issue.

Broken and urgent, or you would rather not post in public? Write to parseforge@protonmail.com and it reaches the people who wrote it.

Related scrapers

Run Bluesky Profile & Posts Scraper on Apify All scrapers