# Bluesky Posts Search Scraper (`easyapi/bluesky-posts-search-scraper`) Actor

🚀 Effortlessly scrape Bluesky posts with our advanced Actor! 🔍 Discover trending topics, track brand mentions, and analyze social media discussions. Collect post content, author info, and engagement metrics based on keyword searches. Perfect for researchers, marketers, and analysts. 📊🌐

- **URL**: https://apify.com/easyapi/bluesky-posts-search-scraper.md
- **Developed by:** [EasyApi](https://apify.com/easyapi) (community)
- **Categories:** Social media, Lead generation
- **Stats:** 76 total users, 7 monthly users, 90.0% runs succeeded, 3 bookmarks
- **User rating**: 1.00 out of 5 stars

## Pricing

from $2.99 / 1,000 results

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?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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 Post Scraper

This Actor scrapes posts from Bluesky (bsky.app) based on a given keyword search. It utilizes Puppeteer with stealth mode to navigate through search results and extract detailed information about Bluesky posts.

### ✨ Features

- 🔎 Search for Bluesky posts using keywords
- 📝 Extract post content including text, images, and links
- 👤 Collect author information such as name, handle, and avatar
- 📊 Gather engagement metrics (likes, reposts, replies)
- 🌐 Support for multiple languages
- 🔢 Configurable maximum number of results
- 🕵️‍♂️ Uses stealth mode to avoid detection

### 📥 Input

The Actor accepts the following input parameters:

- `keyword` (required): The search term to find posts on Bluesky
- `maxResults` (optional): The maximum number of posts to scrape (default: 100)

### 📤 Output

The Actor outputs a dataset containing the following information for each post:

- 🆔 Post ID
- 👤 Author details (ID, name, username, avatar)
- 📝 Post text content
- 🖼️ Images (if any)
- 🔗 Links (if any)
- 📅 Creation date
- 🌍 Language(s)
- 💬 Reply count
- 🔁 Repost count
- ❤️ Like count
- 🔗 Post URL

### 🚀 Usage

To use this Actor, simply provide a search keyword and optionally set the maximum number of results you want to scrape. The Actor will then navigate through Bluesky's search results, collecting post information until it reaches the specified limit or exhausts all results.

This Actor is perfect for researchers, marketers, or anyone looking to gather information about Bluesky posts based on specific keywords or topics.

### 💡 Use Cases

- 📊 Social Media Analysis: Track discussions and trends on Bluesky
- 🎯 Market Research: Gather insights on product or brand mentions
- 📰 News Monitoring: Keep track of breaking news or specific topics
- 🔬 Academic Research: Collect data for studies on social media behavior

### 🆘 Support

If you encounter any issues or have questions about using this Actor, please don't hesitate to reach out through Apify's support channels.

#### Input Example

A full explanation of an input example in JSON.

```
{
  "maxResults": 100,
  "keyword": "blue"
}
```

#### Output sample

The results will be wrapped into a dataset which you can always find in the **Storage** tab. Here's an excerpt from the data you'd get if you apply the input parameters above:

And here is the same data but in JSON. You can choose in which format to download your data: JSON, JSONL, Excel spreadsheet, HTML table, CSV, or XML.

```
[
	{
		"id": "bafyreihiv5bg76l6djjkvry5mclpm6jjcfjf3fr7its7oilovdy2bv46i4",
		"authorId": "did:plc:rje4snbb7obj6twr4gji7ssm",
		"authorName": "Foxes In Love",
		"authorUsername": "foxes-in-love.bsky.social",
		"authorAvatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:rje4snbb7obj6twr4gji7ssm/bafkreidlydspwj24b7auarfxxgqcatdfw3ke2d2eocl47v62eve2w7jo2e@jpeg",
		"text": "",
		"images": [
			{
				"thumb": "https://cdn.bsky.app/img/feed_thumbnail/plain/did:plc:rje4snbb7obj6twr4gji7ssm/bafkreia5tw3p5fk3qmnv6avgyza2xeqzcnyaj2552lyyuntfiv6b6ato74@jpeg",
				"fullsize": "https://cdn.bsky.app/img/feed_fullsize/plain/did:plc:rje4snbb7obj6twr4gji7ssm/bafkreia5tw3p5fk3qmnv6avgyza2xeqzcnyaj2552lyyuntfiv6b6ato74@jpeg",
				"alt": "A comic of two foxes, one of whom is blue, the other is green. In this one, Blue turns around to look at Green, who is halting with his tail raised in alarm.\nGreen: Your phone is ringing!\nBlue: No it's not?\n\nBlue pulls back, incredulous, as Green leans in towards him insistently.\nGreen: Yes it is, I can hear it.\nBlue: I don't hear anything.\n\nStill arguing, Blue takes out his phone and looks at it in surprose.\nGreen: Just check anyway, just to be sure.\nBlue: I told you, it isn't - oh, mom is calling!\n\nGreen frowns, sarcastically mimicking Blue's voice as Blue answers the phone.\nGreen: \"Sorry mom, I was too busy telling Green that my phoen isn't ringing.\"\nBlue: Hi mom?",
				"aspectRatio": {
					"height": 1600,
					"width": 1600
				}
			}
		],
		"primaryImage": "https://cdn.bsky.app/img/feed_fullsize/plain/did:plc:rje4snbb7obj6twr4gji7ssm/bafkreia5tw3p5fk3qmnv6avgyza2xeqzcnyaj2552lyyuntfiv6b6ato74@jpeg",
		"createdAt": "2024-10-10T12:22:26.061Z",
		"langs": [
			"en"
		],
		"replyCount": 4,
		"repostCount": 173,
		"likeCount": 1118,
		"url": "https://bsky.app/profile/foxes-in-love.bsky.social/post/3l65tkko77b2i"
	},
	{
		"id": "bafyreifzhk3m3bhb4zpjt6jhzwrfiwnbe5eamtzodxf6t4z36hgp3zmsoy",
		"authorId": "did:plc:5krm4pb5gecb5uawvgr7uxuu",
		"authorName": "90’s anime",
		"authorUsername": "90sanimepics.bsky.social",
		"authorAvatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:5krm4pb5gecb5uawvgr7uxuu/bafkreie6vz5gykxxdf777yiirarw3eyvycbg46to6dknynbxwqrcsl5mfu@jpeg",
		"text": "Anime : Perfect Blue (1997)",
		"images": [
			{
				"thumb": "https://cdn.bsky.app/img/feed_thumbnail/plain/did:plc:5krm4pb5gecb5uawvgr7uxuu/bafkreigd4tnpmoypedhglrvbudgwvsew3rkwqn6b532qxpr67ztgmhqs5m@jpeg",
				"fullsize": "https://cdn.bsky.app/img/feed_fullsize/plain/did:plc:5krm4pb5gecb5uawvgr7uxuu/bafkreigd4tnpmoypedhglrvbudgwvsew3rkwqn6b532qxpr67ztgmhqs5m@jpeg",
				"alt": "",
				"aspectRatio": {
					"height": 640,
					"width": 640
				}
			}
		],
		"primaryImage": "https://cdn.bsky.app/img/feed_fullsize/plain/did:plc:5krm4pb5gecb5uawvgr7uxuu/bafkreigd4tnpmoypedhglrvbudgwvsew3rkwqn6b532qxpr67ztgmhqs5m@jpeg",
		"createdAt": "2024-10-09T07:43:30.824Z",
		"langs": [
			"en"
		],
		"replyCount": 7,
		"repostCount": 41,
		"likeCount": 377,
		"url": "https://bsky.app/profile/90sanimepics.bsky.social/post/3l62toq773b2g"
	},
    ...
]
```

### Related Actors

- 🔍 [Bluesky Posts Search Scraper](https://apify.com/easyapi/bluesky-posts-search-scraper) - Discover trending topics and analyze social media discussions on Bluesky with comprehensive post data extraction.
- 📱 [Twitter/X Video Downloader](https://apify.com/easyapi/twitter-x-video-downloader) - Download high-quality videos from Twitter/X with batch processing capabilities.
- 🔍 [Twitter Lists Search Scraper](https://apify.com/easyapi/twitter-lists-search-scraper) - Find curated Twitter lists by keywords with detailed list information.
- 🔍 [Twitter Top Hashtags Scraper](https://apify.com/easyapi/twitter-top-hashtags-scraper) - Track trending hashtags from 60+ countries worldwide on Twitter.
- 📧 [Twitter Email Scraper](https://apify.com/easyapi/twitter-email-scraper) - Extract email addresses from Twitter profiles matching specific keywords and domains.
- 📱 [Truth Social Scraper](https://apify.com/easyapi/truth-social-scraper) - Extract posts, profiles, and engagement metrics from Truth Social accounts.
- 📱 [Tumblr Posts Scraper](https://apify.com/easyapi/tumblr-posts-scraper) - Scrape blog posts with media content and engagement metrics from Tumblr.
- 🔍 [Tumblr Tags Scraper](https://apify.com/easyapi/tumblr-tags-scraper) - Extract comprehensive tag data and trending posts from Tumblr.
- 🔍 [Reddit Posts Search Scraper](https://apify.com/easyapi/reddit-posts-search-scraper) - Extract Reddit posts with rich metadata and community information.
- 🔍 [Reddit Media Search Scraper](https://apify.com/easyapi/reddit-media-search-scraper) - Extract media posts from Reddit's search results with comprehensive metadata.
- 🔍 [Gab Posts Scraper](https://apify.com/easyapi/gab-posts-scraper) - Extract and analyze posts from Gab.com with comprehensive engagement metrics.
- 📱 [Facebook Post Comments Scraper](https://apify.com/easyapi/facebook-post-comments-scraper) - Extract comments from public Facebook posts with detailed information.
- 📱 [Facebook Group Posts Scraper](https://apify.com/easyapi/facebook-group-posts-scraper) - Scrape posts from public or private Facebook groups with login support.
- 📱 [Instagram Posts Scraper](https://apify.com/easyapi/instagram-posts-scraper) - Extract comprehensive post data from multiple Instagram users.
- 📚 [Medium Posts Search Scraper](https://apify.com/easyapi/medium-posts-search-scraper) - Get detailed article data from Medium's search results with engagement metrics.

# Actor input Schema

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

Enter the keyword to search for posts on Bluesky (bsky.app)

## `maxResults` (type: `integer`):

Set the maximum number of posts to scrape. The actor will stop when this limit is reached.

## `proxyConfiguration` (type: `object`):

Optionally, use Apify Proxy or custom HTTP proxy to avoid IP address-based blocking.

## Actor input object example

```json
{
  "keyword": "blue",
  "maxResults": 100,
  "proxyConfiguration": {}
}
```

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("easyapi/bluesky-posts-search-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 = {}

# Run the Actor and wait for it to finish
run = client.actor("easyapi/bluesky-posts-search-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 '{}' |
apify call easyapi/bluesky-posts-search-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,easyapi/bluesky-posts-search-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/W5bhKJ30wNqhWnCo3/builds/tqwpN1sFdUPCNN366/openapi.json
