# Bluesky Posts Scraper 🌐📊 (`scrapestorm/bluesky-posts-scraper`) Actor

Easily gather data about posts from Bluesky 🌐. Enter a keyword to retrieve key info like post content, author name, profile URL, avatar image, and engagement metrics 🔍. Seamlessly integrate with tools like Google Drive, Zapier, & more 🔗 to streamline your workflow & boost productivity! ⚡

- **URL**: https://apify.com/scrapestorm/bluesky-posts-scraper.md
- **Developed by:** [Storm_Scraper](https://apify.com/scrapestorm) (community)
- **Categories:** Social media, SEO tools
- **Stats:** 11 total users, 0 monthly users, 100.0% runs succeeded, 3 bookmarks
- **User rating**: 4.77 out of 5 stars

## Pricing

from $0.00005 / actor start

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

### Bluesky Posts Scraper - Extract Post Data from Bluesky 🔍

The Bluesky Posts Scraper is a powerful tool designed to extract detailed data from posts on Bluesky. By providing a keyword and specifying the maximum number of posts, you can retrieve the following information for each post:

```
Post URI 🔗: Unique identifier for the post
Post CID 📂: Content identifier for the post
Author DID 🧑‍💻: Decentralized Identifier of the post author
Author Handle 🏷️: Username or handle of the post author
Author Display Name 📛: Full display name of the post author
Author Avatar 🖼️: URL to the author's avatar image
Post Created Time ⏰: The time when the post was created
Post Text ✍️: The content of the post
Post Language 🌍: Languages used in the post
Post Images 🖼️: Thumbnails and full-size images attached to the post
Reply Count 💬: Number of replies to the post
Repost Count 🔄: Number of reposts of the post
Like Count 👍: Number of likes on the post
Quote Count 🗣️: Number of quotes or citations of the post
Post Indexing Time 🗓️: The time when the post was indexed in the system
Post Labels 🏷️: Any labels associated with the post
```

### 🛠️ How to Use the Bluesky Posts Scraper

Input Parameters

To use the Bluesky Posts Scraper, provide the following parameters:

```
{
"keyword": ["john"],
"maxitems": 60
}
```

- Steps

  Enter Data: Provide the Bukeyword and specify the maximum number of posts you want to retrieve.
  Start Scraping: Click the "Start" button to begin the scraping process. The tool will search for posts that match the keyword and retrieve the relevant data.
  Download Your Data: After extraction, you can download the results in various formats such as JSON, CSV, XML, RSS, or HTML Table.

### Why Scrape Bluesky Posts? ✨🚀

Scraping Bluesky posts is useful for:

```
Content Research 📚: Identifying popular topics, discussions, or influencers related to a specific keyword or hashtag.
Audience Insights 👥: Understanding the engagement patterns and interests of Bluesky users.
Competitive Analysis 🏁: Monitoring the engagement strategies of competitors or industry influencers.
Brand Monitoring 📢: Tracking mentions of your brand or relevant topics across Bluesky.
Trend Discovery 🔍: Discovering emerging trends or viral posts within the Bluesky network.
```

### 💸 Pricing

This scraper operates on a subscription basis at a cost of $17.99/month.

### Related Actors

If you're interested in other YouTube or Facebook scraping solutions, check out these related tools:

- [Facebook Followers & Following Scraper 📊👥](https://apify.com/scrapestorm/facebook-followers-following-scraper)
- [💬 YouTube Comments Scraper](https://apify.com/scrapestorm/youtube-comments-scraper---rental-fast-and-cheap)
- [🏎 YouTube Scraper (By Keyword) ](https://apify.com/scrapestorm/youtube)
- [🔴 Youtube Channel Scraper (Rental)](https://apify.com/scrapestorm/youtube-channel-scraper)
- [🌐 Youtube Shorts Scraper 📺 (Rental)](https://apify.com/scrapestorm/youtube-shorts-scraper-rental---fast-cheap)
- [Facebook Ads Library Scraper 🎯📈](https://apify.com/scrapestorm/facebook-ads-library-scraper)
- [Facebook Likes Scraper (Fast & Cheap) 👍 🌟](https://apify.com/scrapestorm/facebook-likes-scraper-fast-cheap)
- [Facebook Shares Scraper (Exclusive & Affordable) 🚀💡](https://apify.com/scrapestorm/facebook-shares-scraper-exclusive-affordable)
- [Facebook Comments Scraper (All-in-One) 💬](https://apify.com/scrapestorm/facebook-comments-scraper-all-in-one)
- [YouTube Transcript Video Scraper 📝 (⚡ Fast & 💸 Cheap)](https://apify.com/scrapestorm/youtube-transcript-videos)
- [Youtube Playlist Scraper 🎵 - Rental (Fast & cheap)](https://apify.com/scrapestorm/youtube-playlist-scraper---rental-fast-cheap)

***

### 🔑 Bluesky Posts Scraper Input Format

To use the Bluesky Posts Scraper, provide the following parameters:

```
{
    "keyword": "john",
    "maxitems": 60
}


```

### 📊 Bluesky Posts Scraper Data Output

The Bluesky Posts Scraper will extract the following information for each post and store it in the dataset:

Example output:

```
[
    {
        "uri": "at://did:plc:cnpe7qvcyjrhm6w7w7e4atur/app.bsky.feed.post/3lklpliaiwc25",
        "cid": "bafyreidqna6oqol642ws5bt4dbo7kkjy3utdc52qmkjwiey4fjiibsztc4",
        "author": {
            "did": "did:plc:cnpe7qvcyjrhm6w7w7e4atur",
            "handle": "kevinmkruse.bsky.social",
            "displayName": "Kevin M. Kruse",
            "avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:cnpe7qvcyjrhm6w7w7e4atur/bafkreid7tqojotcpkaoljdayyrm3ngygep5mkkolxakjaagwx3lolvycv4@jpeg",
            "createdAt": "2023-04-29T20:34:46.513Z"
        },
        "record": {
            "createdAt": "2025-03-17T17:47:47.832Z",
            "text": "CIA Director John Ratcliffe is the Archer",
            "langs": [
                "en"
            ]
        },
        "embed": {
            "$type": "app.bsky.embed.images#view",
            "images": [
                {
                    "thumb": "https://cdn.bsky.app/img/feed_thumbnail/plain/did:plc:cnpe7qvcyjrhm6w7w7e4atur/bafkreigkcqrveohg4ma7vxjmnnanswwhdu36qpixgxta75gphcjei7vf7q@jpeg",
                    "fullsize": "https://cdn.bsky.app/img/feed_fullsize/plain/did:plc:cnpe7qvcyjrhm6w7w7e4atur/bafkreigkcqrveohg4ma7vxjmnnanswwhdu36qpixgxta75gphcjei7vf7q@jpeg",
                    "alt": "",
                    "aspectRatio": {
                        "height": 450,
                        "width": 438
                    }
                },
                {
                    "thumb": "https://cdn.bsky.app/img/feed_thumbnail/plain/did:plc:cnpe7qvcyjrhm6w7w7e4atur/bafkreiavnv66bb4egdyq44wsoxjc75lttyf262myjruicmyehd7hp72ada@jpeg",
                    "fullsize": "https://cdn.bsky.app/img/feed_fullsize/plain/did:plc:cnpe7qvcyjrhm6w7w7e4atur/bafkreiavnv66bb4egdyq44wsoxjc75lttyf262myjruicmyehd7hp72ada@jpeg",
                    "alt": "",
                    "aspectRatio": {
                        "height": 570,
                        "width": 656
                    }
                }
            ]
        },
        "replyCount": 5,
        "repostCount": 5,
        "likeCount": 112,
        "quoteCount": 0,
        "indexedAt": "2025-03-17T17:47:49.454Z",
        "labels": []
    },
    {
        "uri": "at://did:plc:cnpe7qvcyjrhm6w7w7e4atur/app.bsky.feed.post/3lklpliaiwc26",
        "cid": "bafyreidqna6oqol642ws5bt4dbo7kkjy3utdc52qmkjwiey4fjiibsztc5",
        "author": {
            "did": "did:plc:cnpe7qvcyjrhm6w7w7e4atur",
            "handle": "johndoe.bsky.social",
            "displayName": "John Doe",
            "avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:cnpe7qvcyjrhm6w7w7e4atur/bafkreid7tqojotcpkaoljdayyrm3ngygep5mkkolxakjaagwx3lolvycv5@jpeg",
            "createdAt": "2023-05-10T20:34:46.513Z"
        },
        "record": {
            "createdAt": "2025-03-17T18:00:10.832Z",
            "text": "John Doe discusses new trends in AI.",
            "langs": [
                "en"
            ]
        },
        "embed": {
            "$type": "app.bsky.embed.images#view",
            "images": [
                {
                    "thumb": "https://cdn.bsky.app/img/feed_thumbnail/plain/did:plc:cnpe7qvcyjrhm6w7w7e4atur/bafkreigkcqrveohg4ma7vxjmnnanswwhdu36qpixgxta75gphcjei7vf8q@jpeg",
                    "fullsize": "https://cdn.bsky.app/img/feed_fullsize/plain/did:plc:cnpe7qvcyjrhm6w7w7e4atur/bafkreigkcqrveohg4ma7vxjmnnanswwhdu36qpixgxta75gphcjei7vf8q@jpeg",
                    "alt": "",
                    "aspectRatio": {
                        "height": 450,
                        "width": 438
                    }
                }
            ]
        },
        "replyCount": 3,
        "repostCount": 2,
        "likeCount": 75,
        "quoteCount": 1,
        "indexedAt": "2025-03-17T18:00:12.454Z",
        "labels": []
    }
]


```

### 📫 Support

🌟 Leave us a 5 star if you are satisfied with the product!
🌍 For any questions, specific needs, or issues, please reach out through Apify's platform or via email
[Storm_Scraper 🌪️🌩️](https://apify.com/scrapestorm)

# Actor input Schema

## `keywords` (type: `array`):

List of keywords to search for on BlueSky (Posts)

## `maxitems` (type: `integer`):

Maximum number of results to fetch for each keyword

## Actor input object example

```json
{
  "keywords": [
    "adam"
  ],
  "maxitems": 50
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "keywords": [
        "adam"
    ],
    "maxitems": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapestorm/bluesky-posts-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "keywords": ["adam"],
    "maxitems": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("scrapestorm/bluesky-posts-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "keywords": [
    "adam"
  ],
  "maxitems": 50
}' |
apify call scrapestorm/bluesky-posts-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scrapestorm/bluesky-posts-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/XVF1TlI7sEYsysN7c/builds/QrQxWUiNDy8jvPCGb/openapi.json
