# Bluesky Scraper (`red.cars/bluesky-scraper`) Actor

Scrape Bluesky profiles, posts, and threads without authentication. Extract user data, posts with engagement metrics, search results, and full conversation threads from the decentralized social network.

- **URL**: https://apify.com/red.cars/bluesky-scraper.md
- **Developed by:** [AutomateLab](https://apify.com/red.cars) (community)
- **Categories:** Social media, Developer tools
- **Stats:** 11 total users, 0 monthly users, 57.1% runs succeeded, 1 bookmarks
- **User rating**: 1.00 out of 5 stars

## Pricing

from $2.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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 Scraper

[![Apify Actor](https://img.shields.io/badge/Apify-Actor-blue?logo=apify)](https://apify.com/red.cars/bluesky-scraper)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)

> Scrape Bluesky profiles, posts, and threads without authentication

### Quick answer

**Bluesky Scraper** pulls public Bluesky profiles, posts, search results and full threads into clean JSON, CSV or Excel. No Bluesky login or API key needed. Pricing is pay per result: **$0.002 per item (about $2 per 1,000)** plus $0.005 per run.

**Try it in 30 seconds:** press **Start** with the prefilled handle (`bsky.app`), or paste any `@handle`, plain username or profile link.

### Description

Scrape Bluesky profiles, posts, and threads without authentication. Extract user data, posts with engagement metrics, search results, and full conversation threads from the decentralized social network.

### Features

📌 Status
🧠 Context
\[2026-03-12] — outputSchema description added (spec-005)

### How It Works

This actor uses intelligent extraction with Apify's proxy infrastructure to gather public data from Bluesky Scraper. It handles authentication, pagination, and error recovery automatically.

### Quick Start

```bash
## Run via Apify API
apify run -a red.cars/bluesky-scraper

## Or configure input and click Run on:
## https://apify.com/red.cars/bluesky-scraper
```

#### Using as an MCP Tool

#### Running on Apify Platform

Set `APIFY_API_KEY` in your Apify Console secrets, configure input via the Actor input schema UI, and click **Run**.

### Input Schema

| Parameter | Type | Description | Default |
|-----------|------|-------------|---------|
| `mode` | string | Type of Bluesky content to extract<br>Options: `profile`, `posts`, `search`, `thread` | profile |
| `handles` | array | List of Bluesky handles to scrape (e.g., 'bsky.app', 'username.bsky.social') | bsky.app |
| `maxItems` | integer | Maximum number of posts/items to extract per handle or search | 20 |
| `maxResults` | integer | Maximum total number of items to extract across all targets | 50 |
| `proxyType` | string | Choose your preferred balance of cost vs reliability. Standard (Datacenter) is faster; Premium (Residential) is most reliable for high-security targets.<br>Options: `DATACENTER`, `RESIDENTIAL` | DATACENTER |
| `debugMode` | boolean | Enable minimal extraction for health checks and testing. Guarantees success within 300s. | false |
| `outputFormat` | string | Choose output format for easy integration<br>Options: `json`, `csv`, `xlsx`, `markdown` | json |
| `checkOnly` | boolean | When true, returns immediately with capability metadata without scraping. Used by AI agents to verify availability before committing to a paid run. Free, <5 seconds. | false |

### Output Schema

| Field | Type | Description |
|-------|------|-------------|
| `results` | string | Bluesky decentralized social network posts and profiles. Each result contains: handle, displayName, bio, followersCount, followingCount, postsCount (profiles) or text, author, createdAt, likeCount, repostCount, replyCount, url, hashtags (posts). Use for decentralized social monitoring, audience research, brand listening. AI agents: search by handle, keyword, or hashtag. |

### Example Output

```json
{
  "results": [
    {
      "url": "https://example.com/profile",
      "username": "example_user",
      "fullName": "Example User",
      "followersCount": 10000,
      "followingCount": 500,
      "postsCount": 250,
      "isVerified": false,
      "biography": "Example bio text",
      "latestPosts": [],
      "scrapedAt": "2026-03-23T13:24:11.540Z"
    }
  ]
}
```

### Pricing

### Use Cases

- **Influencer Research**: Identify and evaluate potential influencers by engagement metrics and audience quality
- **Competitor Monitoring**: Track competitor presence and activity on Target Platform
- **Lead Generation**: Build targeted lead lists from public profiles and contact information
- **Market Intelligence**: Gather market intelligence and trend data for business decisions
- **Content Aggregation**: Collect content for analysis, archiving, or republication

### FAQ

#### How do I scrape Bluesky posts without an API key?

Open the Actor, enter a handle (for example `bsky.app`), a username or a profile URL, and press Start. It reads Bluesky's public data, so you don't need an account, app password or API key.

#### How much does it cost to scrape 1,000 Bluesky posts?

About $2.00: $0.002 per result plus $0.005 per run. You only pay for items that land in your dataset.

#### Can I export Bluesky data to CSV, Excel or Google Sheets?

Yes. Every run's dataset downloads as JSON, CSV, Excel, XML or HTML, and you can send it to Google Sheets, Zapier, Make or n8n through Apify integrations.

#### Can AI agents use this Bluesky scraper?

Yes. It works as a tool for AI agents through the Apify API and Apify's MCP server, and returns structured JSON an LLM can read directly.

#### Do I need an API key?

No, this actor does not require an API key. It uses Apify proxy infrastructure for reliable extraction.

#### How does pricing work?

This actor uses Apify's Pay-Per-Event model. You are charged per successful result returned. No charge for queries that return zero results.

#### What are the rate limits?

Rate limits depend on your Apify plan. Higher-tier plans provide more compute units and faster extraction.

#### How do I increase success rate?

- Enable **Premium (Residential)** proxy for high-security targets
- Reduce concurrency for rate-limited profiles
- Use debug mode to test before full extraction

#### Can I run this on a schedule?

Yes, use Apify Scheduler to run this actor on a cron schedule for continuous monitoring.

#### How do I export to CRM?

Set `exportFormat` to `salesforce` or `hubspot` for direct CRM import format.

### Troubleshooting

| Error | Cause | Fix |
|-------|-------|-----|
| NETWORK_ERROR | Network connectivity issue | Check internet connection, retry with proxy |
| VALIDATION_ERROR | Invalid input parameters | Review input schema and retry |
| PLATFORM_ERROR | Instagram platform issue | Instagram may be experiencing issues, try again later |

### Known Limitations

- **Private accounts**: Cannot extract data from private accounts without following
- **Rate limiting**: Platform may temporarily block repeated requests from same IP
- **Data freshness**: Extracted data reflects moment of extraction; historical data may be limited
- **Proxy requirements**: High-security targets may require residential proxy for reliable extraction
- **Content limits**: Platform-imposed limits on historical post retrieval

### Legal

**Data Source**: the target platform (the target platform.com)

**Terms of Service**: This actor is provided for legitimate data collection purposes only. Users must comply with the target platform's Terms of Service and applicable laws. Red.cars is not responsible for misuse of this tool.

**Privacy**: All extracted data is processed in accordance with applicable privacy laws. Do not use this tool for unauthorized data collection or privacy-violating activities.

**Attribution**: When using the target platform data, comply with their attribution requirements and data policies.

***

*red.cars Intelligence Fleet • [apify.com/red.cars](https://apify.com/red.cars)*

# Actor input Schema

## `mode` (type: `string`):

Type of Bluesky content to extract

## `handles` (type: `array`):

Bluesky handles to scrape. Accepts 'name.bsky.social', a custom domain handle like 'bsky.app', '@name', a bare 'name' (we add .bsky.social), or a full https://bsky.app/profile/... URL.

## `urls` (type: `array`):

Direct Bluesky URLs to scrape

## `searchQuery` (type: `string`):

Search term for finding posts

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

Total number of items to extract

## `outputFormat` (type: `string`):

Choose output format

## `proxyType` (type: `string`):

Choose proxy reliability

## Actor input object example

```json
{
  "mode": "profile",
  "handles": [
    "bsky.app"
  ],
  "maxResults": 50,
  "outputFormat": "json",
  "proxyType": "RESIDENTIAL"
}
```

# Actor output Schema

## `results` (type: `string`):

Bluesky profiles and posts from the AT Protocol. Each result contains: handle, did, displayName, description, followersCount, followsCount, postsCount, and for posts the text, createdAt, replyCount, repostCount, likeCount and embedded media. Use for social listening, audience research, competitor monitoring and RAG pipelines. AI agents: supply any Bluesky handle or profile URL.

# 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 = {
    "handles": [
        "bsky.app"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("red.cars/bluesky-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 = { "handles": ["bsky.app"] }

# Run the Actor and wait for it to finish
run = client.actor("red.cars/bluesky-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 '{
  "handles": [
    "bsky.app"
  ]
}' |
apify call red.cars/bluesky-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,red.cars/bluesky-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/dXHaHpUAGy5zIqZjA/builds/Q0QlEFelzKGkaq3gc/openapi.json
