# Mastodon Posts & Profiles Scraper (`fetch_cat/mastodon-posts-profiles-scraper`) Actor

Scrape public Mastodon posts, profiles, hashtags, timelines, and status details from Fediverse instances.

- **URL**: https://apify.com/fetch\_cat/mastodon-posts-profiles-scraper.md
- **Developed by:** [Hanna Nosova](https://apify.com/fetch_cat) (community)
- **Categories:** Social media, News, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.03 / 1,000 status extracteds

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/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 Posts & Profiles Scraper

Extract public Mastodon and Fediverse posts into a clean Apify dataset for social listening, journalism, research, community monitoring, and automation.

### What does Mastodon Posts & Profiles Scraper do?

Mastodon Posts & Profiles Scraper collects public statuses from Mastodon-compatible instances.

It can export hashtag timelines, public account posts, the public timeline, and individual public statuses.

Every saved row includes the post URL, timestamp, content, engagement counters, account profile details, tags, mentions, media attachments, cards, and scrape metadata.

Use it when you need repeatable public Fediverse data instead of manual browsing and copy-paste.

### Who is it for?

- 📣 Social listening teams tracking public Fediverse conversations.
- 🧭 PR and communications teams monitoring topics, launches, and incidents.
- 📰 Journalists researching public posts around breaking news or communities.
- 🧪 Researchers studying open social networks and decentralized communities.
- 🧑‍💻 Automation builders sending public Mastodon data into databases, dashboards, or alerts.
- 🛡️ Trust and safety teams reviewing public posts and profile context.

### Why use this actor?

Mastodon conversations are spread across many independent instances.

This actor lets you point at the instance you care about and export public data in a consistent format.

The output is ready for spreadsheet review, BI tools, LLM enrichment, notifications, or long-running monitoring workflows.

### What Mastodon data can you extract?

| Field | Description |
| --- | --- |
| `statusId` | Mastodon status ID |
| `url` | Public status URL when available |
| `uri` | Fediverse URI |
| `instanceBaseUrl` | Instance used for the request |
| `scrapeMode` | Mode that produced the row |
| `createdAt` | Status creation time |
| `editedAt` | Last edit time when available |
| `visibility` | Public, unlisted, private, or direct visibility value returned by the instance |
| `language` | Status language code when available |
| `contentHtml` | Original status HTML |
| `contentText` | Plain text version of the status |
| `spoilerText` | Content warning / spoiler text |
| `sensitive` | Whether the status is marked sensitive |
| `repliesCount` | Reply count |
| `reblogsCount` | Boost count |
| `favouritesCount` | Favourite count |
| `bookmarksCount` | Bookmark count when returned |
| `account` | Embedded public account profile object |
| `tags` | Hashtags attached to the status |
| `mentions` | Mentioned accounts |
| `mediaAttachments` | Public media attachment metadata |
| `emojis` | Custom emojis used in the status |
| `poll` | Poll data when present |
| `card` | Link preview card when present |
| `raw` | Original normalized status object for advanced users |

### Pricing

This Actor uses Apify pay-per-event pricing. The prices below come from the current Actor pricing configuration. Apify public plans map to Store discount tiers, so the table shows both the user-facing plan context and the pricing tier name. The final price shown in Apify depends on the user account plan and any custom agreement.

| Event | What is charged | Price |
| --- | --- | ---: |
| `start` | One-time fee charged when a run starts. Covers fixed startup cost. | $0.005 |
| `item` | Charged for each saved status extracted. | $0.000028 |

Apify may also charge platform usage for compute, storage, proxies, or data transfer outside this Actor pricing. Check the Actor run and the Apify Pricing tab for the exact cost shown to your account.

### Quick start

1. Open Mastodon Posts & Profiles Scraper on Apify.
2. Choose a Mastodon instance, such as `https://mastodon.social`.
3. Select a scrape mode.
4. Fill in the hashtag, account, or status field for that mode.
5. Set `maxItems` to the number of statuses you need.
6. Run the actor.
7. Export the dataset as JSON, CSV, Excel, XML, or through the Apify API.

### Input example: hashtag monitoring

```json
{
  "instanceBaseUrl": "https://mastodon.social",
  "mode": "hashtag",
  "hashtag": "news",
  "maxItems": 20
}
````

### Input example: public account posts

```json
{
  "instanceBaseUrl": "https://mastodon.social",
  "mode": "accountStatuses",
  "accountIdOrHandle": "Gargron",
  "excludeReplies": true,
  "excludeReblogs": true,
  "maxItems": 25
}
```

### Input example: public timeline

```json
{
  "instanceBaseUrl": "https://mastodon.social",
  "mode": "publicTimeline",
  "local": true,
  "maxItems": 50
}
```

### Input example: single status

```json
{
  "instanceBaseUrl": "https://mastodon.social",
  "mode": "statusByUrlOrId",
  "statusUrlOrId": "110000000000000000",
  "maxItems": 1
}
```

### Input fields explained

| Input | Required | Description |
| --- | --- | --- |
| `instanceBaseUrl` | Yes | Mastodon instance to query |
| `mode` | Yes | `hashtag`, `accountStatuses`, `publicTimeline`, or `statusByUrlOrId` |
| `hashtag` | For hashtag mode | Hashtag with or without `#` |
| `accountIdOrHandle` | For account mode | Numeric account ID or public acct handle |
| `statusUrlOrId` | For status mode | Local status ID or same-instance status URL |
| `maxItems` | Yes | Maximum statuses to save |
| `local` | No | Public timeline local-only filter |
| `remote` | No | Public timeline remote-only filter |
| `onlyMedia` | No | Account timeline media-only filter |
| `excludeReplies` | No | Skip account replies |
| `excludeReblogs` | No | Skip boosts in account mode |
| `sinceId` | No | Cursor for newer statuses |
| `minId` | No | Cursor for immediately newer statuses |
| `maxId` | No | Cursor for older statuses |

### Supported scrape modes

#### Hashtag timeline

Use `mode: "hashtag"` to collect public statuses attached to a hashtag.

This is useful for topic monitoring, event tracking, and public conversation research.

#### Account public posts

Use `mode: "accountStatuses"` to collect statuses from a public account profile.

You can enter a numeric account ID or a public handle resolvable by the selected instance.

#### Public timeline

Use `mode: "publicTimeline"` to collect public statuses visible from the selected instance.

Use `local: true` when you only want posts created by accounts on that instance.

#### Single status lookup

Use `mode: "statusByUrlOrId"` to collect one public status.

Same-instance URLs and numeric local status IDs are supported.

### Output example

```json
{
  "statusId": "116838156372364425",
  "url": "https://example.social/@account/116838156372364425",
  "instanceBaseUrl": "https://mastodon.social",
  "scrapeMode": "hashtag",
  "createdAt": "2026-06-30T08:00:00.000Z",
  "contentText": "Example public Mastodon post text",
  "language": "en",
  "visibility": "public",
  "repliesCount": 2,
  "reblogsCount": 4,
  "favouritesCount": 10,
  "account": {
    "acct": "account@example.social",
    "displayName": "Example Account",
    "url": "https://example.social/@account"
  },
  "tags": [],
  "mentions": [],
  "mediaAttachments": []
}
```

### Tips for better results

- 🐘 Choose the instance closest to the community you want to monitor.
- 🔎 Start with a small `maxItems` value to confirm your filters.
- 🧵 Use `excludeReplies` when you only want top-level account posts.
- 🖼️ Use `onlyMedia` for image or video review workflows.
- 📌 Store the newest status ID from one run and use cursor fields in later monitoring jobs.
- 🌍 Remember that each Mastodon instance may see a different slice of the Fediverse.

### Common workflows

#### Brand and topic monitoring

Run hashtag mode every hour and send new rows to a webhook, database, or Slack alert.

#### Public account archiving

Run account mode daily for public project, organization, or community accounts.

#### Community research

Run local public timeline mode on an instance dedicated to a topic or region.

#### Evidence collection

Run single status mode when you need a structured record for a specific public post.

### Integrations

Mastodon Posts & Profiles Scraper works with Apify integrations and APIs.

Useful workflow patterns include:

- Send new public posts to Google Sheets for editorial review.
- Trigger a webhook when a monitored hashtag produces new rows.
- Store output in BigQuery, Snowflake, or S3 for longitudinal research.
- Enrich `contentText` with sentiment or topic classification.
- Feed public posts into an LLM summarization workflow.
- Combine Mastodon exports with Bluesky, Reddit, Telegram, and X monitoring datasets.

### API usage: Node.js

```js
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });

const run = await client.actor('fetch_cat/mastodon-posts-profiles-scraper').call({
  instanceBaseUrl: 'https://mastodon.social',
  mode: 'hashtag',
  hashtag: 'news',
  maxItems: 20,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

### API usage: Python

```python
from apify_client import ApifyClient
import os

client = ApifyClient(os.environ['APIFY_TOKEN'])

run = client.actor('fetch_cat/mastodon-posts-profiles-scraper').call(run_input={
    'instanceBaseUrl': 'https://mastodon.social',
    'mode': 'hashtag',
    'hashtag': 'news',
    'maxItems': 20,
})

items = client.dataset(run['defaultDatasetId']).list_items().items
print(items)
```

### API usage: cURL

```bash
curl -X POST "https://api.apify.com/v2/acts/fetch_cat~mastodon-posts-profiles-scraper/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "instanceBaseUrl": "https://mastodon.social",
    "mode": "hashtag",
    "hashtag": "news",
    "maxItems": 20
  }'
```

### MCP: use with Claude Code and Claude Desktop

You can connect this actor through the Apify MCP server.

Use this MCP URL:

```text
https://mcp.apify.com/?tools=fetch_cat/mastodon-posts-profiles-scraper
```

Claude Code example:

```bash
claude mcp add apify-mastodon "https://mcp.apify.com/?tools=fetch_cat/mastodon-posts-profiles-scraper"
```

Claude Desktop configuration example:

```json
{
  "mcpServers": {
    "apify-mastodon": {
      "url": "https://mcp.apify.com/?tools=fetch_cat/mastodon-posts-profiles-scraper"
    }
  }
}
```

Example prompts showing MCP usage:

- "Use the Mastodon Posts & Profiles Scraper MCP tool to collect 30 public Mastodon posts from the #news hashtag and summarize the main topics."
- "Use the Apify MCP Mastodon scraper to export recent public posts from this account and identify links that were shared."
- "Run the Mastodon MCP tool on a local public timeline and group posts by language."

### Data quality notes

The actor saves public data returned by the selected Mastodon instance.

Some remote statuses may have incomplete counts or missing link cards depending on federation state.

Account handles can resolve differently across instances, so use a numeric account ID when you need strict repeatability.

### Limits and troubleshooting

#### Why did I get zero results?

The hashtag, account, or timeline may have no recent public posts visible from the selected instance.

Try a broader hashtag, another instance, or a higher `maxItems` value.

#### Why does account lookup fail?

The selected instance may not know that remote account yet.

Try the account's home instance, use the numeric account ID, or search the account manually on the instance first.

#### Why does status URL lookup reject my URL?

Single status URL mode supports same-instance URLs.

For remote statuses, use the numeric local status ID from the instance you are querying.

#### Can I scrape private posts?

No. This actor is for public Mastodon/Fediverse content only.

### Legality and ethical use

This actor collects publicly available content.

You are responsible for using the data lawfully and respecting applicable privacy, copyright, platform, and research ethics requirements.

Do not use the actor to harass people, deanonymize users, bypass access controls, or collect non-public content.

### Related scrapers

- https://apify.com/fetch\_cat/bluesky-profile-feed-scraper
- https://apify.com/fetch\_cat/reddit-scraper
- https://apify.com/fetch\_cat/telegram-channel-posts-scraper
- https://apify.com/fetch\_cat/x-profile-tweets-scraper
- https://apify.com/fetch\_cat/youtube-channel-videos-scraper

### FAQ

#### Does this actor need my Mastodon login?

No. It is designed for public data that selected instances expose without a user login.

#### Does it work on every Mastodon instance?

It works with Mastodon-compatible public endpoints. Some instances may disable features, rate limit aggressively, or expose less federated data.

#### Can I monitor multiple hashtags?

Run the actor once per hashtag or create an Apify task for each monitored hashtag.

#### Can I schedule recurring runs?

Yes. Use Apify schedules to run the actor hourly, daily, or at any interval that fits your monitoring workflow.

#### Can I export to CSV or Excel?

Yes. Open the dataset after the run and choose JSON, CSV, Excel, XML, RSS, or HTML export.

#### Can I use the output in an LLM workflow?

Yes. The `contentText`, account fields, tags, mentions, and timestamps are suitable for summarization, classification, and alerting prompts.

# Actor input Schema

## `instanceBaseUrl` (type: `string`):

Mastodon instance to query, for example https://mastodon.social or https://fosstodon.org.

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

What public Mastodon data should be collected.

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

Hashtag to scrape in hashtag mode. Use news or #news format.

## `accountIdOrHandle` (type: `string`):

Numeric account ID or public acct handle for account post mode, for example Gargron or Gargron@mastodon.social.

## `statusUrlOrId` (type: `string`):

Local status ID or same-instance status URL for single status mode.

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

Maximum number of statuses to save. Keep low for first tests, then increase for monitoring jobs.

## `local` (type: `boolean`):

Only return statuses originating on the selected instance when using public timeline mode.

## `remote` (type: `boolean`):

Only return remote statuses federated into the selected instance when using public timeline mode.

## `onlyMedia` (type: `boolean`):

Only include account statuses with media attachments.

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

Skip replies when collecting public account statuses.

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

Skip boosts/reblogs when collecting public account statuses.

## `sinceId` (type: `string`):

Return results newer than this Mastodon status ID when supported by the endpoint.

## `minId` (type: `string`):

Return results immediately newer than this Mastodon status ID.

## `maxId` (type: `string`):

Return results older than this Mastodon status ID.

## Actor input object example

```json
{
  "instanceBaseUrl": "https://mastodon.social",
  "mode": "hashtag",
  "hashtag": "news",
  "maxItems": 20,
  "local": false,
  "remote": false,
  "onlyMedia": false,
  "excludeReplies": false,
  "excludeReblogs": false
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

# 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 = {
    "instanceBaseUrl": "https://mastodon.social",
    "mode": "hashtag",
    "hashtag": "news",
    "maxItems": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("fetch_cat/mastodon-posts-profiles-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 = {
    "instanceBaseUrl": "https://mastodon.social",
    "mode": "hashtag",
    "hashtag": "news",
    "maxItems": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("fetch_cat/mastodon-posts-profiles-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 '{
  "instanceBaseUrl": "https://mastodon.social",
  "mode": "hashtag",
  "hashtag": "news",
  "maxItems": 20
}' |
apify call fetch_cat/mastodon-posts-profiles-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Mastodon Posts & Profiles Scraper",
        "description": "Scrape public Mastodon posts, profiles, hashtags, timelines, and status details from Fediverse instances.",
        "version": "0.1",
        "x-build-id": "jGdn9yi5NZLSHd8bh"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/fetch_cat~mastodon-posts-profiles-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-fetch_cat-mastodon-posts-profiles-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/fetch_cat~mastodon-posts-profiles-scraper/runs": {
            "post": {
                "operationId": "runs-sync-fetch_cat-mastodon-posts-profiles-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/fetch_cat~mastodon-posts-profiles-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-fetch_cat-mastodon-posts-profiles-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": [
                    "instanceBaseUrl",
                    "mode",
                    "maxItems"
                ],
                "properties": {
                    "instanceBaseUrl": {
                        "title": "Instance base URL",
                        "type": "string",
                        "description": "Mastodon instance to query, for example https://mastodon.social or https://fosstodon.org.",
                        "default": "https://mastodon.social"
                    },
                    "mode": {
                        "title": "Scrape mode",
                        "enum": [
                            "hashtag",
                            "accountStatuses",
                            "publicTimeline",
                            "statusByUrlOrId"
                        ],
                        "type": "string",
                        "description": "What public Mastodon data should be collected.",
                        "default": "hashtag"
                    },
                    "hashtag": {
                        "title": "Hashtag",
                        "type": "string",
                        "description": "Hashtag to scrape in hashtag mode. Use news or #news format.",
                        "default": "news"
                    },
                    "accountIdOrHandle": {
                        "title": "Account ID or handle",
                        "type": "string",
                        "description": "Numeric account ID or public acct handle for account post mode, for example Gargron or Gargron@mastodon.social."
                    },
                    "statusUrlOrId": {
                        "title": "Status URL or ID",
                        "type": "string",
                        "description": "Local status ID or same-instance status URL for single status mode."
                    },
                    "maxItems": {
                        "title": "Maximum statuses",
                        "minimum": 1,
                        "maximum": 5000,
                        "type": "integer",
                        "description": "Maximum number of statuses to save. Keep low for first tests, then increase for monitoring jobs.",
                        "default": 20
                    },
                    "local": {
                        "title": "Public timeline: local only",
                        "type": "boolean",
                        "description": "Only return statuses originating on the selected instance when using public timeline mode.",
                        "default": false
                    },
                    "remote": {
                        "title": "Public timeline: remote only",
                        "type": "boolean",
                        "description": "Only return remote statuses federated into the selected instance when using public timeline mode.",
                        "default": false
                    },
                    "onlyMedia": {
                        "title": "Account posts: only media",
                        "type": "boolean",
                        "description": "Only include account statuses with media attachments.",
                        "default": false
                    },
                    "excludeReplies": {
                        "title": "Account posts: exclude replies",
                        "type": "boolean",
                        "description": "Skip replies when collecting public account statuses.",
                        "default": false
                    },
                    "excludeReblogs": {
                        "title": "Account posts: exclude boosts",
                        "type": "boolean",
                        "description": "Skip boosts/reblogs when collecting public account statuses.",
                        "default": false
                    },
                    "sinceId": {
                        "title": "Since ID",
                        "type": "string",
                        "description": "Return results newer than this Mastodon status ID when supported by the endpoint."
                    },
                    "minId": {
                        "title": "Minimum ID",
                        "type": "string",
                        "description": "Return results immediately newer than this Mastodon status ID."
                    },
                    "maxId": {
                        "title": "Maximum ID",
                        "type": "string",
                        "description": "Return results older than this Mastodon status ID."
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
