# 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:** 12 total users, 0 monthly users, 100.0% runs succeeded, 3 bookmarks
- **User rating**: 4.77 out of 5 stars

## Pricing

$17.99/month + usage

To use this Actor, you pay a monthly rental fee to the developer. The rent is subtracted from your prepaid usage every month after the free trial period.You also pay for the Apify platform usage, which gets cheaper the higher Apify subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#rental-actors

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# 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 keyword 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

## `keyword` (type: `string`):

The keyword you wish to search for on BlueSky (Posts) 🔍🌐
## `maxitems` (type: `integer`):

Maximum number of results you want to scrape 📊

## Actor input object example

```json
{
  "keyword": "john",
  "maxitems": 50
}
````

# 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 = {
    "keyword": "john",
    "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 = {
    "keyword": "john",
    "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("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

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

```

## CLI example

```bash
echo '{
  "keyword": "john",
  "maxitems": 50
}' |
apify call scrapestorm/bluesky-posts-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=scrapestorm/bluesky-posts-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Bluesky Posts Scraper 🌐📊",
        "description": "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! ⚡",
        "version": "0.0",
        "x-build-id": "afmNAFdNvlt9EX5ht"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/scrapestorm~bluesky-posts-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-scrapestorm-bluesky-posts-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/scrapestorm~bluesky-posts-scraper/runs": {
            "post": {
                "operationId": "runs-sync-scrapestorm-bluesky-posts-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/scrapestorm~bluesky-posts-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-scrapestorm-bluesky-posts-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "keyword"
                ],
                "properties": {
                    "keyword": {
                        "title": "The keyword you wish to search for on BlueSky (Posts) 🔍🌐",
                        "type": "string",
                        "description": "The keyword you wish to search for on BlueSky (Posts) 🔍🌐",
                        "default": "john"
                    },
                    "maxitems": {
                        "title": "Maximum number of results you want to scrape 📊",
                        "type": "integer",
                        "description": "Maximum number of results you want to scrape 📊",
                        "default": 50
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
