# Mastodon Scraper (`crawlerbros/mastodon-scraper`) Actor

Scrape any Mastodon instance like public timeline, hashtag streams, user profiles, account search, and trending tags. Pure HTTP, no login required, works against mastodon.social, mas.to, hachyderm.io, fosstodon.org, and every other federated instance.

- **URL**: https://apify.com/crawlerbros/mastodon-scraper.md
- **Developed by:** [Crawler Bros](https://apify.com/crawlerbros) (community)
- **Categories:** Social media, Developer tools, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 17 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $3.00 / 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.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

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

## Mastodon Scraper

Scrape any **Mastodon** instance — single statuses by URL, full thread context, status / account search, hashtag streams, hashtag info, user profiles, follower/following lists, public timelines, trending content, and instance metadata. Pure HTTP, no login, no cookies, no proxy required. Works against `mastodon.social`, `mas.to`, `hachyderm.io`, `fosstodon.org`, `infosec.exchange`, and every other federated instance.

Mastodon's public REST API is permissive — every instance exposes the same documented endpoints, so this single actor covers the entire Fediverse.

### What you get

For each record returned:

#### Status records (`recordType=status`)

| Field | Description |
| --- | --- |
| `id` | Mastodon status ID (per instance) |
| `url` | Public URL of the status |
| `createdAt` | ISO 8601 timestamp |
| `language` | ISO 639-1 language code |
| `visibility` | `public` / `unlisted` / `private` / `direct` |
| `content` | Original HTML content |
| `contentText` | Plain-text version of `content` (HTML stripped, entities decoded) |
| `spoilerText` | Content-warning text |
| `sensitive` | `true` if marked sensitive |
| `inReplyToId` | Status ID this is replying to |
| `editedAt` | ISO 8601 timestamp of the last edit |
| `repliesCount` | Reply count |
| `reblogsCount` | Reblog (boost) count |
| `favouritesCount` | Favourite count |
| `quotesCount` | Quote-post count (Mastodon 4.4+) |
| `isReblog` | `true` if this status reblogs another |
| `reblogOfId` | ID of the reblogged status (when `isReblog=true`) |
| `mediaAttachments` | Array of `{type, url, previewUrl, description}` |
| `mentions` | Array of mentioned handles |
| `tags` | Array of hashtags used (lowercase) |
| `account` | Author profile (full Account object — see below) |
| `instance` | Source instance domain |
| `scrapedAt` | ISO 8601 UTC timestamp of extraction |

#### Account records (`recordType=account`)

| Field | Description |
| --- | --- |
| `id` | Mastodon account ID |
| `username` | Handle on this instance |
| `acct` | Federated handle (`user@otherinstance.tld` for remote users) |
| `displayName` | Display name |
| `url` | Profile URL |
| `note` | Profile bio (plain text) |
| `avatar` | Avatar image URL |
| `header` | Header image URL |
| `followersCount` | Follower count |
| `followingCount` | Following count |
| `statusesCount` | Total status count |
| `bot` | `true` if marked as a bot |
| `locked` | `true` if profile is locked |
| `discoverable` | `false` if hidden from discovery |
| `createdAt` | Account creation timestamp |
| `lastStatusAt` | Last activity timestamp |

#### Tag records (`recordType=tag`)

| Field | Description |
| --- | --- |
| `name` | Hashtag name (lowercase) |
| `url` | Public hashtag URL |
| `usesToday` | Uses in the past 24h |
| `accountsToday` | Distinct accounts using it in the past 24h |
| `history` | Array of `{day, uses, accounts}` for the past 7 days |

Empty fields are dropped from every record at every depth — the dataset never contains nulls or empty values.

### Input

| Parameter | Type | Default | Description |
| --- | --- | --- | --- |
| `mode` | Enum | `statusByUrl` | `statusByUrl` / `statusContext` / `statusSearch` / `hashtag` / `hashtagInfo` / `profile` / `accountSearch` / `followers` / `following` / `publicTimeline` / `trending` / `instanceMetadata` |
| `instancePopular` | Enum | — | Pick a popular instance from a curated dropdown (overrides `instance` when set) |
| `instance` | String | `mastodon.social` | Custom instance domain |
| `statusUrl` | String | sample | Status URL (`mode=statusByUrl` / `statusContext`) |
| `includeContext` | Boolean | `false` | Include thread context with `mode=statusByUrl` |
| `hashtag` | String | `python` | Hashtag (without `#`). Used by `mode=hashtag` / `hashtagInfo` |
| `username` | String | — | User handle (`Gargron` or `user@otherinstance.tld`). Used by `mode=profile` / `followers` / `following` |
| `searchQuery` | String | — | Free-text query (`mode=accountSearch` / `statusSearch`) |
| `timelineScope` | Enum | `federated` | `local` / `federated` / `remote`. Used by `mode=publicTimeline` |
| `trendingType` | Enum | `tags` | `tags` / `statuses` / `links`. Used by `mode=trending` |
| `language` | Enum | — | ISO 639-1 language filter (curated dropdown of 40 codes). Empty = no filter |
| `excludeReplies` | Boolean | `false` | Drop reply statuses |
| `excludeReblogs` | Boolean | `false` | Drop reblogs (boosts) |
| `mediaOnly` | Boolean | `false` | Only emit statuses with at least one media attachment |
| `minFavourites` | Integer | — | Drop statuses with fewer favourites than this |
| `minReblogs` | Integer | — | Drop statuses with fewer reblogs than this |
| `maxItems` | Integer | `40` | Hard cap on emitted records (1-5000) |

#### Modes overview

- **`statusByUrl`** — paste a status URL (e.g. `https://mastodon.social/@Gargron/110423915824138798`). Returns the single status. Toggle `includeContext=true` to also pull ancestors + descendants.
- **`statusContext`** — full reply thread for the given status URL.
- **`statusSearch`** — `q=` search across statuses; instance-dependent (many instances throttle for unauthenticated requests — try `mas.to`, `fosstodon.org`).
- **`followers` / `following`** — paginated follower / following lists for a user.
- **`hashtagInfo`** — `/api/v1/tags/{tag}` returns 7-day usage history + `usesToday` / `accountsToday`.
- **`instanceMetadata`** — `/api/v2/instance` returns server version, rules, languages, contact email, active-monthly-user count.

#### Example input — hashtag stream

```json
{
  "mode": "hashtag",
  "instance": "mastodon.social",
  "hashtag": "python",
  "maxItems": 50
}
````

#### Example input — user profile

```json
{
  "mode": "profile",
  "instance": "mastodon.social",
  "username": "Gargron",
  "maxItems": 100
}
```

#### Example input — federated profile (cross-instance)

```json
{
  "mode": "profile",
  "instance": "mastodon.social",
  "username": "rss@oisaur.com",
  "maxItems": 50
}
```

#### Example input — instance public timeline (local)

```json
{
  "mode": "publicTimeline",
  "instance": "fosstodon.org",
  "timelineScope": "local",
  "maxItems": 100
}
```

#### Example input — account search

```json
{
  "mode": "accountSearch",
  "instance": "mastodon.social",
  "searchQuery": "rust",
  "maxItems": 25
}
```

#### Example input — trending tags

```json
{
  "mode": "trending",
  "instance": "mastodon.social",
  "trendingType": "tags"
}
```

### Example output

```json
{
  "recordType": "status",
  "id": "111234567890123456",
  "url": "https://mastodon.social/@username/111234567890123456",
  "createdAt": "2026-04-15T14:32:00.000Z",
  "language": "en",
  "visibility": "public",
  "content": "<p>Hello <a href=\"...\">#Mastodon</a>!</p>",
  "contentText": "Hello #Mastodon!",
  "repliesCount": 12,
  "reblogsCount": 47,
  "favouritesCount": 230,
  "tags": ["mastodon"],
  "mentions": [],
  "mediaAttachments": [
    { "type": "image", "url": "https://files.mastodon.social/.../photo.jpg", "description": "Hello banner" }
  ],
  "account": {
    "id": "1",
    "username": "Gargron",
    "acct": "Gargron",
    "displayName": "Eugen Rochko",
    "url": "https://mastodon.social/@Gargron",
    "followersCount": 379745,
    "statusesCount": 81294,
    "createdAt": "2016-03-16T14:34:26.392Z"
  },
  "instance": "mastodon.social",
  "scrapedAt": "2026-05-06T05:07:30Z"
}
```

### Use cases

- **OSINT / intelligence research** — Mastodon hosts journalist + dissident + academic communities; track conversations on specific tags or accounts.
- **Brand monitoring** — Pull every public mention of your brand handle or hashtag across the Fediverse.
- **Trend analysis** — Use `mode=trending` to surface what's heating up on a given instance.
- **Academic research** — Snapshot public-discourse data for sociological / linguistic studies.
- **Cross-platform social listening** — Pair with our Bluesky / Twitter / Reddit scrapers for full coverage of post-X social media.
- **Content discovery** — Surface high-engagement posts in a niche hashtag for content curation.

### FAQ

**Do I need a Mastodon account or login?**
No. Every endpoint this actor uses is fully public — `t.me/s/`-style. The actor authenticates as nobody and works straight from datacenter IPs.

**Some instances return "This method requires an authenticated user" — what's going on?**
A few large instances (notably `mastodon.social` and `infosec.exchange`) lock down their public timeline and remote feed for anti-spam reasons. The actor surfaces a clear status message in that case. Workarounds:

- Use `mode=hashtag`, `mode=profile`, or `mode=accountSearch` instead — those still work everywhere.
- Switch `instance` to a more permissive instance like `mas.to`, `hachyderm.io`, or `fosstodon.org`.

**How does federation work for `mode=profile`?**
Pass either a local handle (`Gargron`) or a federated handle (`user@otherinstance.tld`). The actor uses the configured `instance`'s account-lookup endpoint, which transparently resolves remote users by federation.

**What's the difference between `local`, `federated`, and `remote` timelines?**

- `local` — only posts from accounts on the configured `instance`.
- `federated` — everything the instance currently sees (its own posts + every remote post that has reached it via federation).
- `remote` — federated minus local (i.e. only remote posts).

**How are reblogs (boosts) handled?**
A reblog is emitted as one record with `isReblog=true` and `reblogOfId` pointing at the original. The `content`, `mediaAttachments`, `mentions`, `tags`, `repliesCount`, etc. are all sourced from the **underlying** post (so the record is meaningful even though it was emitted via the booster). Use `excludeReblogs=true` to drop these.

**How current is the data?**
Live — every run hits the configured instance at request time. Schedule the actor on the Apify platform for hourly / daily refreshes.

**Do I need a proxy?**
No. Mastodon instances are happy to serve datacenter IPs. The actor sets a polite User-Agent and makes a small number of requests (3-30 per run typically).

**What about NSFW / sensitive content?**
The actor returns `sensitive: true` and `spoilerText` for every flagged status. It does not filter sensitive content by default — handle this in your downstream pipeline.

### Limitations

- Status full-text search (`q=...&type=statuses`) is an authenticated endpoint on every instance — this actor cannot search status text by keyword. Use `mode=hashtag` to find topical content instead.
- Some large instances (e.g. `mastodon.social`) have removed public-timeline access; the actor surfaces a clear status message and suggests an alternative instance.
- Mastodon timeline endpoints page at most 40 statuses per request; very large `maxItems` will issue many requests with a polite delay.
- Federated `acct` handles only resolve correctly when the configured instance has previously seen the remote user (federation is eventually-consistent).

# Actor input Schema

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

What to fetch.

## `instancePopular` (type: `string`):

Pick a popular Mastodon instance from the dropdown. If set, this overrides the `instance` textfield. Leave empty to use the textfield.

## `instance` (type: `string`):

Mastodon instance domain (e.g. `mastodon.social`, `mas.to`, custom-instance.tld). The popular dropdown above takes precedence if set. Some instances lock down the public timeline / search; if you hit auth errors, try a different instance.

## `statusUrl` (type: `string`):

Public URL of a Mastodon status (e.g. `https://mastodon.social/@Gargron/110423915824138798`). The instance is derived from the URL and overrides `instance`.

## `includeContext` (type: `boolean`):

If true, also emit the full thread (ancestors + descendants) for the status.

## `hashtag` (type: `string`):

Hashtag without the `#`, e.g. `python`, `linux`, `news`.

## `username` (type: `string`):

Username on the configured instance, e.g. `Gargron`. For federated users, pass the full handle `username@otherinstance.tld`.

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

Free-text query.

## `timelineScope` (type: `string`):

`local` = posts from this instance only, `federated` = everything the instance sees, `remote` = federated only excluding local.

## `trendingType` (type: `string`):

What kind of trending content to fetch.

## `language` (type: `string`):

ISO 639-1 language code. Drop statuses not in this language. Leave empty for no filter.

## `excludeReplies` (type: `boolean`):

Drop statuses that are replies to another post.

## `excludeReblogs` (type: `boolean`):

Drop statuses that are reblogs of someone else's post.

## `mediaOnly` (type: `boolean`):

Only emit statuses that have at least one media attachment (image / video / GIF / audio).

## `minFavourites` (type: `integer`):

Drop statuses with fewer than this many favourites.

## `minReblogs` (type: `integer`):

Drop statuses with fewer than this many reblogs (boosts).

## `maxItems` (type: `integer`):

Hard cap on emitted records.

## Actor input object example

```json
{
  "mode": "statusByUrl",
  "instancePopular": "",
  "instance": "mastodon.social",
  "statusUrl": "https://mastodon.social/@Gargron/110423915824138798",
  "includeContext": false,
  "hashtag": "python",
  "timelineScope": "federated",
  "trendingType": "tags",
  "language": "",
  "excludeReplies": false,
  "excludeReblogs": false,
  "mediaOnly": false,
  "maxItems": 40
}
```

# Actor output Schema

## `records` (type: `string`):

Dataset containing all scraped statuses, accounts, and tags.

# 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 = {
    "mode": "statusByUrl",
    "instance": "mastodon.social",
    "statusUrl": "https://mastodon.social/@Gargron/110423915824138798",
    "includeContext": false,
    "hashtag": "python",
    "excludeReplies": false,
    "excludeReblogs": false,
    "mediaOnly": false,
    "maxItems": 40
};

// Run the Actor and wait for it to finish
const run = await client.actor("crawlerbros/mastodon-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 = {
    "mode": "statusByUrl",
    "instance": "mastodon.social",
    "statusUrl": "https://mastodon.social/@Gargron/110423915824138798",
    "includeContext": False,
    "hashtag": "python",
    "excludeReplies": False,
    "excludeReblogs": False,
    "mediaOnly": False,
    "maxItems": 40,
}

# Run the Actor and wait for it to finish
run = client.actor("crawlerbros/mastodon-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 '{
  "mode": "statusByUrl",
  "instance": "mastodon.social",
  "statusUrl": "https://mastodon.social/@Gargron/110423915824138798",
  "includeContext": false,
  "hashtag": "python",
  "excludeReplies": false,
  "excludeReblogs": false,
  "mediaOnly": false,
  "maxItems": 40
}' |
apify call crawlerbros/mastodon-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Mastodon Scraper",
        "description": "Scrape any Mastodon instance like public timeline, hashtag streams, user profiles, account search, and trending tags. Pure HTTP, no login required, works against mastodon.social, mas.to, hachyderm.io, fosstodon.org, and every other federated instance.",
        "version": "1.0",
        "x-build-id": "YNO7bPle9lfXwrAA6"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/crawlerbros~mastodon-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-crawlerbros-mastodon-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/crawlerbros~mastodon-scraper/runs": {
            "post": {
                "operationId": "runs-sync-crawlerbros-mastodon-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/crawlerbros~mastodon-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-crawlerbros-mastodon-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": [
                    "mode"
                ],
                "properties": {
                    "mode": {
                        "title": "Mode",
                        "enum": [
                            "statusByUrl",
                            "statusContext",
                            "statusSearch",
                            "hashtag",
                            "hashtagInfo",
                            "profile",
                            "accountSearch",
                            "followers",
                            "following",
                            "publicTimeline",
                            "trending",
                            "instanceMetadata"
                        ],
                        "type": "string",
                        "description": "What to fetch.",
                        "default": "statusByUrl"
                    },
                    "instancePopular": {
                        "title": "Instance (popular dropdown)",
                        "enum": [
                            "",
                            "mastodon.social",
                            "mas.to",
                            "hachyderm.io",
                            "fosstodon.org",
                            "infosec.exchange",
                            "indieweb.social",
                            "mastodon.online",
                            "c.im",
                            "mastodonapp.uk",
                            "sfba.social",
                            "mstdn.social",
                            "mastodon.world",
                            "techhub.social",
                            "mastodon.art",
                            "chaos.social",
                            "mastodon.gamedev.place",
                            "social.vivaldi.net",
                            "mstdn.party",
                            "universeodon.com",
                            "mstdn.jp"
                        ],
                        "type": "string",
                        "description": "Pick a popular Mastodon instance from the dropdown. If set, this overrides the `instance` textfield. Leave empty to use the textfield.",
                        "default": ""
                    },
                    "instance": {
                        "title": "Instance domain (textfield, for power users)",
                        "type": "string",
                        "description": "Mastodon instance domain (e.g. `mastodon.social`, `mas.to`, custom-instance.tld). The popular dropdown above takes precedence if set. Some instances lock down the public timeline / search; if you hit auth errors, try a different instance.",
                        "default": "mastodon.social"
                    },
                    "statusUrl": {
                        "title": "Status URL (mode=statusByUrl / statusContext)",
                        "type": "string",
                        "description": "Public URL of a Mastodon status (e.g. `https://mastodon.social/@Gargron/110423915824138798`). The instance is derived from the URL and overrides `instance`.",
                        "default": "https://mastodon.social/@Gargron/110423915824138798"
                    },
                    "includeContext": {
                        "title": "Include thread context (mode=statusByUrl)",
                        "type": "boolean",
                        "description": "If true, also emit the full thread (ancestors + descendants) for the status.",
                        "default": false
                    },
                    "hashtag": {
                        "title": "Hashtag (mode=hashtag / hashtagInfo)",
                        "type": "string",
                        "description": "Hashtag without the `#`, e.g. `python`, `linux`, `news`.",
                        "default": "python"
                    },
                    "username": {
                        "title": "Username (mode=profile / followers / following)",
                        "type": "string",
                        "description": "Username on the configured instance, e.g. `Gargron`. For federated users, pass the full handle `username@otherinstance.tld`."
                    },
                    "searchQuery": {
                        "title": "Search query (mode=accountSearch / statusSearch)",
                        "type": "string",
                        "description": "Free-text query."
                    },
                    "timelineScope": {
                        "title": "Timeline scope (mode=publicTimeline)",
                        "enum": [
                            "local",
                            "federated",
                            "remote"
                        ],
                        "type": "string",
                        "description": "`local` = posts from this instance only, `federated` = everything the instance sees, `remote` = federated only excluding local.",
                        "default": "federated"
                    },
                    "trendingType": {
                        "title": "Trending type (mode=trending)",
                        "enum": [
                            "tags",
                            "statuses",
                            "links"
                        ],
                        "type": "string",
                        "description": "What kind of trending content to fetch.",
                        "default": "tags"
                    },
                    "language": {
                        "title": "Language filter",
                        "enum": [
                            "",
                            "en",
                            "es",
                            "de",
                            "fr",
                            "ja",
                            "zh",
                            "pt",
                            "ru",
                            "it",
                            "nl",
                            "pl",
                            "tr",
                            "ar",
                            "ko",
                            "sv",
                            "fi",
                            "da",
                            "no",
                            "cs",
                            "uk",
                            "hu",
                            "ro",
                            "el",
                            "he",
                            "th",
                            "vi",
                            "id",
                            "hi",
                            "bg",
                            "ca",
                            "eu",
                            "gl",
                            "sl",
                            "sk",
                            "hr",
                            "sr",
                            "lt",
                            "lv",
                            "et",
                            "lb"
                        ],
                        "type": "string",
                        "description": "ISO 639-1 language code. Drop statuses not in this language. Leave empty for no filter.",
                        "default": ""
                    },
                    "excludeReplies": {
                        "title": "Exclude replies",
                        "type": "boolean",
                        "description": "Drop statuses that are replies to another post.",
                        "default": false
                    },
                    "excludeReblogs": {
                        "title": "Exclude reblogs (boosts)",
                        "type": "boolean",
                        "description": "Drop statuses that are reblogs of someone else's post.",
                        "default": false
                    },
                    "mediaOnly": {
                        "title": "Media only",
                        "type": "boolean",
                        "description": "Only emit statuses that have at least one media attachment (image / video / GIF / audio).",
                        "default": false
                    },
                    "minFavourites": {
                        "title": "Min favourites",
                        "minimum": 0,
                        "maximum": 10000000,
                        "type": "integer",
                        "description": "Drop statuses with fewer than this many favourites."
                    },
                    "minReblogs": {
                        "title": "Min reblogs",
                        "minimum": 0,
                        "maximum": 10000000,
                        "type": "integer",
                        "description": "Drop statuses with fewer than this many reblogs (boosts)."
                    },
                    "maxItems": {
                        "title": "Max items",
                        "minimum": 1,
                        "maximum": 5000,
                        "type": "integer",
                        "description": "Hard cap on emitted records.",
                        "default": 40
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
