# Bluesky Trending Topics - What's Trending Now, With Posts (`appdata-labs/bluesky-trending-topics`) Actor

See what is trending on Bluesky right now: each topic with its summary, category, status (trending, cooling…), post count, start time and the top posts driving it, with likes, reposts and links. Filter by category or status. Bluesky's public API, no login.

- **URL**: https://apify.com/appdata-labs/bluesky-trending-topics.md
- **Developed by:** [Kobkoon Janngam](https://apify.com/appdata-labs) (community)
- **Categories:** Agents, MCP servers, Social media
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 trend returneds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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 Trending Topics — what's trending now, with posts

**See what is trending on Bluesky right now** — every current trend with its one-line summary, category, status, post count, start time and the top posts driving it. Built for social media managers, newsrooms, trend researchers and AI agents that need to know what people are talking about today.

**Quick start:** press **Start** with no configuration. You get all of Bluesky's current trends (up to 25), each with its top 3 posts. Then narrow it: `categories: ["politics"]`, or `statuses: ["hot", "trending"]` for topics still rising.

### Sample output

| rank | topic | category | status | postCount | startedAt |
|---|---|---|---|---|---|
| 1 | Halloween trick-or-treating traditions | culture | trending | 8,761 | 2026-10-26T18:54Z |
| 2 | Michigan Senate candidates' partners feud | politics | trending | 657 | 2026-10-30T20:24Z |
| 3 | Midterm elections days away | politics | cooling | 60,804 | 2026-10-01T20:14Z |
| 4 | Streamers host Halloween live streams | entertainment | cooling | 39,431 | 2026-09-24T22:14Z |

Read from the live API on 31 October 2026.

Each row also carries `description` (Bluesky's own one-line summary of the trend), `trendUrl` (the trend's page on bsky.app), `topAccounts` (handles of accounts prominent in it), `retrievedAt`, and `topPosts` — for example:

```json
{
  "authorHandle": "kevinmkruse.bsky.social",
  "text": "Electing El-Sayed will put an end to Mike Rogers' career, and Haley Stevens' career too. It's a two-fer, Michigan!",
  "likeCount": 1096,
  "repostCount": 144,
  "url": "https://bsky.app/profile/kevinmkruse.bsky.social/post/3mz6ipwtlkk2k"
}
```

### What you can do with it

- **Spot stories early** — run it hourly and catch topics while their status is still `hot` or `trending`.
- **Brief an AI agent** — compact rows (always under 4 KB) that say what a trend is, how big it is and which posts carry it.
- **Track a beat** — politics, sports, science-tech or entertainment only.
- **Measure momentum** — compare `postCount` and `status` across runs to see what is rising and what is cooling.

### Input

| Field | Default | Notes |
|---|---|---|
| `maxTrends` | `25` | How many trends to return, best first. Bluesky publishes up to 25 at a time. |
| `postsPerTrend` | `3` | Top posts per trend, 0–10. Post text is capped at 280 characters. 0 is fastest. |
| `categories` | `[]` (all) | e.g. `politics`, `sports`, `entertainment`, `science-tech`, `culture`, `video-games`, `other`. A value that is not a category name is skipped with a reason. |
| `statuses` | `[]` (all) | `hot`, `trending`, `saturating`, `cooling`, `stale`. |

### FAQ

**Does it need a Bluesky account?** No. It reads Bluesky's public API, the same data the Explore tab shows anyone. It never logs in and you never hand over a password.

**How fresh is it?** Live: every run reads the trends Bluesky lists at that moment. `retrievedAt` stamps each row.

**Why did my filtered run return nothing?** Trends change by the hour, and some categories have no trend at a given moment. The run still succeeds, charges nothing, and its log and `SUMMARY` record list the categories and statuses that were trending at the time.

**Can it search Bluesky for a keyword?** No. Bluesky's post search requires a login, and this Actor never logs in. To follow specific accounts, use the Bluesky Posts Scraper below.

**What if Bluesky changes the trends API?** These endpoints are labelled "unspecced" by Bluesky. If the detailed trends call stops working the Actor falls back to the simpler trending-topics list (topics without category, status or post count) and says so in `SUMMARY`; if both change, the run fails with a clear message rather than returning bad data.

### Pricing

Pay per trend returned, top posts included. Trends your filters remove are not returned or charged.

### Works well with

Same publisher, same output conventions, same honest-failure rules:

- [**google-trends-trending-now**](https://apify.com/appdata-labs/google-trends-trending-now) — What people are searching on Google right now, by country, with the news behind it.
- [**trending-now-aggregator**](https://apify.com/appdata-labs/trending-now-aggregator) — Google trends, Wikipedia most-read and Hacker News top stories in one call.

### Disclaimer

This is an unofficial tool, not affiliated with or endorsed by Bluesky Social PBC. It uses Bluesky's public API, whose robots.txt explicitly allows crawling its public parts, with a polite rate limit. It never logs in and reads only public posts. Use the data in line with the privacy rules that apply to you.

# Actor input Schema

## `maxTrends` (type: `integer`):

How many of the current trends to return, best first. Bluesky publishes up to 25 at a time, so 25 means all of them.

## `postsPerTrend` (type: `integer`):

How many of each trend's top posts to include, with author, text (up to 280 characters), likes, reposts and link. 0 returns the trends alone, faster. Up to 10.

## `categories` (type: `array`):

Only trends in these categories, for example politics, sports, entertainment, science-tech, culture, video-games, other. Leave empty for every category. Case does not matter; a value that is not a category name is skipped with a reason.

## `statuses` (type: `array`):

Only trends with these statuses: hot, trending, saturating, cooling or stale. Leave empty for all. Use \["hot", "trending"] for topics still rising. A value that is not a status name is skipped with a reason.

## Actor input object example

```json
{
  "maxTrends": 10,
  "postsPerTrend": 5,
  "categories": [
    "politics",
    "science-tech"
  ],
  "statuses": [
    "hot",
    "trending"
  ]
}
```

# Actor output Schema

## `rows` (type: `string`):

See what is trending on Bluesky right now

## `summary` (type: `string`):

What was requested, what was returned, what your filters removed and anything that could not be read.

# 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 = {
    "maxTrends": 25,
    "postsPerTrend": 3,
    "categories": [],
    "statuses": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("appdata-labs/bluesky-trending-topics").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 = {
    "maxTrends": 25,
    "postsPerTrend": 3,
    "categories": [],
    "statuses": [],
}

# Run the Actor and wait for it to finish
run = client.actor("appdata-labs/bluesky-trending-topics").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 '{
  "maxTrends": 25,
  "postsPerTrend": 3,
  "categories": [],
  "statuses": []
}' |
apify call appdata-labs/bluesky-trending-topics --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,appdata-labs/bluesky-trending-topics"
        }
    }
}
```

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/8b6fzZuoXzUa4QP5z/builds/5XgYJalCByDZUDVfQ/openapi.json
