# Kalshi Trader Social Profile Scraper (`automation-lab/kalshi-trader-social-profile-scraper`) Actor

Track public Kalshi traders with clean profile, performance, trade, post, comment, and liked-post datasets. No Kalshi login or API key required.

- **URL**: https://apify.com/automation-lab/kalshi-trader-social-profile-scraper.md
- **Developed by:** [Stas Persiianenko](https://apify.com/automation-lab) (community)
- **Categories:** Social media, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

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/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/docs.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.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/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

## Kalshi Trader Social Profile Scraper

Extract public Kalshi trader profiles, performance metrics, trades, posts, comments, and liked posts by nickname.

Use this Actor to turn Kalshi's public trader pages into clean, exportable datasets for research, monitoring, journalism, and quantitative workflows. No Kalshi login, API key, or user account is required.

### What does Kalshi Trader Social Profile Scraper do?

The Actor accepts one or more public Kalshi nicknames or profile URLs and creates separate datasets for the records you select.

It can collect:

- 👤 Profile identity and public description
- 👥 Follower, following, and post counts
- 📅 Join date and profile view count
- 📈 Open interest, volume, PnL, and markets traded
- 🏷️ Top trading categories and ranking badges
- 🔁 Public trades with ticker, side, price, count, and timestamp
- 💬 Public posts and comments
- ❤️ Public posts liked by a trader

Every row includes the requested nickname, source profile URL, record type, and scrape timestamp.

### Who is it for? Prediction-market trader personas

#### Prediction-market traders

Build watchlists of public traders and compare activity over time without copying profile details by hand.

#### Quantitative researchers

Create repeatable snapshots of public trader performance and activity for exploratory analysis, signal research, or feature engineering.

#### Copy-trading and whale-discovery products

Monitor selected public profiles, engagement, and recent trades as inputs to scoring and alerting systems. The Actor provides data; it does not recommend or place trades.

#### Journalists and analysts

Archive public profile statistics, posts, and comments with source URLs and collection timestamps for reproducible reporting.

#### Data teams

Schedule runs, export named datasets, and connect results to warehouses, dashboards, notebooks, or automation tools.

### Why use this Actor?

- ✅ No Kalshi credentials required
- ✅ Multiple nicknames in one run
- ✅ Profile URLs and plain nicknames accepted
- ✅ Separate datasets for different record types
- ✅ Small, low-cost default input
- ✅ Automatic retry for temporary 429 and server errors
- ✅ Source attribution on every record
- ✅ JSON, CSV, Excel, XML, RSS, and API exports through Apify
- ✅ Schedule-friendly for recurring snapshots

The Actor calls Kalshi's public web-client JSON surface directly. It does not depend on the protected profile HTML page, so runs remain lightweight and use 256 MB of memory.

### What public Kalshi data can I extract?

| Dataset | Important fields | Typical use |
|---|---|---|
| Profiles | nickname, description, followers, joined date, views | Identity and audience snapshots |
| Performance | open interest, volume, PnL, markets traded | Trader comparison and monitoring |
| Categories | top categories, badges, ranks | Specialization and leaderboard research |
| Trades | ticker, price, count, side, action, date | Public trade activity analysis |
| Posts | content, market context, ROI, likes, comments | Sentiment and idea research |
| Comments | content, parent post, depth, likes, date | Conversation and journalism workflows |
| Likes | liked post, author, market context, engagement | Public interest and affinity research |

Kalshi controls which social and trading activity is public. A valid profile can naturally return zero posts, comments, likes, or public trades.

### Input

The default input is intentionally small:

```json
{
  "nicknames": ["weatherman.allday"],
  "modes": ["profile"],
  "maxItemsPerNickname": 10,
  "includeBadges": true
}
````

#### Input fields

| Field | Type | Required | Description |
|---|---|---:|---|
| `nicknames` | string\[] | Yes | 1-50 public nicknames or full Kalshi profile URLs |
| `modes` | string\[] | No | `profile`, `trades`, `posts`, `comments`, and/or `likes` |
| `maxItemsPerNickname` | integer | No | 1-100 activity records per nickname and mode |
| `includeBadges` | boolean | No | Attach public ranking badges to profile rows |

Profiles always return at most one row per nickname. The item limit applies separately to every selected activity dataset.

### How to scrape a Kalshi trader profile

1. Open the Actor input page.
2. Paste a nickname such as `weatherman.allday`.
3. Keep **Profile & performance** selected.
4. Choose whether ranking badges should be included.
5. Click **Start**.
6. Open the **Trader profiles** dataset when the run finishes.
7. Export the results or connect the dataset to another tool.

You can also paste a full URL:

```text
https://kalshi.com/profile/weatherman.allday
```

The Actor normalizes the URL to its public nickname.

### How to monitor public Kalshi trader activity

Select multiple datasets for a recurring watchlist run:

```json
{
  "nicknames": [
    "weatherman.allday",
    "galamex1"
  ],
  "modes": [
    "profile",
    "trades",
    "posts",
    "comments",
    "likes"
  ],
  "maxItemsPerNickname": 50,
  "includeBadges": true
}
```

Then create an Apify schedule and store each run's datasets in your downstream system. Use `sourceNickname` and `scrapedAt` as snapshot keys.

### Output datasets

This Actor uses named datasets rather than mixing unrelated records into one table.

- `profiles` — identity, audience, performance, categories, and badges
- `trades` — public trade records
- `posts` — posts authored by selected traders
- `comments` — comments authored by selected traders
- `likes` — public posts liked by selected traders

Only selected datasets are opened and populated.

### Profile output example

```json
{
  "social_id": "6d479151-102d-4b4b-b881-f86c7c2fc94c",
  "nickname": "weatherman.allday",
  "follower_count": 903,
  "following_count": 0,
  "posts_count": 1,
  "joined_at": "2026-01-06",
  "profile_view_count": 656262,
  "top_categories": ["Sports", "Climate And Weather"],
  "open_interest": 50009,
  "volume": 9593959,
  "pnl": 576829259,
  "num_markets_traded": 292975,
  "recordType": "profile",
  "sourceNickname": "weatherman.allday",
  "sourceUrl": "https://kalshi.com/profile/weatherman.allday",
  "scrapedAt": "2026-07-15T03:00:00.000Z"
}
```

Counts and performance metrics change over time. The example illustrates the shape, not a guaranteed current value.

### Trade output example

```json
{
  "trade_id": "6c1936e6-ced2-4586-7c99-2a7f6fe15721",
  "ticker": "KXWCSTART-26JUL15ENGARG-ENG-JBELLI10",
  "price": 99,
  "price_dollars": "0.9900",
  "count": 1,
  "taker_side": "yes",
  "maker_action": "buy",
  "taker_action": "buy",
  "create_date": "2026-07-15T02:53:13.80876Z",
  "recordType": "trades",
  "sourceNickname": "weatherman.allday",
  "sourceUrl": "https://kalshi.com/profile/weatherman.allday",
  "scrapedAt": "2026-07-15T03:00:00.000Z"
}
```

Raw public fields are preserved when Kalshi supplies additional market or participant context.

### Post, comment, and likes output

Posts and liked posts include public market context, author, content, media, ROI fields, engagement counts, and creation time when available.

Comments include:

- Comment ID and parent post ID
- Author nickname and social ID
- Comment text and nesting depth
- Like and deletion status fields
- Parent post context
- Source trader and scrape timestamp

A liked-post row describes the post that the selected trader publicly liked. The post author can therefore differ from `sourceNickname`.

### How much does it cost to scrape Kalshi trader profiles?

The Actor uses pay-per-event pricing:

- A small one-time Actor start event
- One result event for every profile, trade, post, comment, or liked-post row saved
- Tiered discounts for larger Apify plans

The formula-derived BRONZE price is **$0.00013565 per record** (about **$0.14 per 1,000 records**), plus the $0.005 start event. The FREE tier is $0.000156 per record, while higher plans receive progressively lower per-record prices. The exact amount is visible before each run in Apify Console and in run charging details.

A profile-only run for one nickname normally creates one result record and costs about $0.0052 on the FREE tier. Selecting activity modes increases the number of result events according to the public records returned and your limit.

### Tips for accurate and economical runs

- Start with one nickname and `profile` mode.
- Add activity modes only when you need those record types.
- Use a limit of 10-25 for previews.
- Increase the limit only after reviewing output relevance.
- Schedule stable watchlists instead of repeatedly creating manual runs.
- Store `scrapedAt` because public metrics are snapshots.
- Treat empty activity datasets as a valid result for inactive or private activity.

### Scheduling recurring profile snapshots

Apify schedules can run the Actor hourly, daily, weekly, or with a custom cron expression.

A practical workflow is:

1. Run profile mode daily.
2. Append the `profiles` dataset to a warehouse table.
3. Key rows by `social_id` and `scrapedAt`.
4. Calculate changes in followers, views, volume, PnL, or markets traded.
5. Trigger alerts only after applying your own thresholds and validation.

Public metrics can be revised by the source. Store snapshots rather than assuming a value is permanent.

### Integrations

#### Google Sheets

Export profile snapshots to Sheets for a lightweight watchlist and comparison table.

#### Slack or email alerts

Use an Apify webhook after successful runs, compare the latest snapshot in Make or Zapier, and send alerts for material changes.

#### Snowflake, BigQuery, or PostgreSQL

Load each named dataset into a separate table. Keep source IDs, source nickname, and scrape timestamp for deduplication.

#### Python notebooks

Fetch datasets through the Apify API and analyze public performance, category specialization, or post activity with pandas.

#### BI dashboards

Connect scheduled snapshots to Looker Studio, Tableau, or Power BI to visualize profile changes over time.

### API usage with JavaScript

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

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/kalshi-trader-social-profile-scraper').call({
  nicknames: ['weatherman.allday'],
  modes: ['profile', 'trades'],
  maxItemsPerNickname: 20,
  includeBadges: true,
});

console.log(run.id, run.status);
```

Open the named datasets from the run's storage links in the Apify Console or API response.

### API usage with Python

```python
from apify_client import ApifyClient

client = ApifyClient('YOUR_APIFY_TOKEN')
run = client.actor('automation-lab/kalshi-trader-social-profile-scraper').call(
    run_input={
        'nicknames': ['weatherman.allday'],
        'modes': ['profile', 'posts', 'comments'],
        'maxItemsPerNickname': 20,
        'includeBadges': True,
    }
)
print(run['id'], run['status'])
```

Use `client.dataset(DATASET_ID).list_items()` with the dataset ID shown for each named output.

### API usage with cURL

```bash
curl -X POST \
  "https://api.apify.com/v2/acts/automation-lab~kalshi-trader-social-profile-scraper/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "nicknames": ["weatherman.allday"],
    "modes": ["profile", "likes"],
    "maxItemsPerNickname": 10,
    "includeBadges": true
  }'
```

Poll the returned run ID or configure a webhook for completion.

### Use with Apify MCP and AI agents

Connect the Actor through [Apify MCP](https://mcp.apify.com/?tools=automation-lab/kalshi-trader-social-profile-scraper) so supported AI clients can start runs and inspect results.

#### Claude Code setup

Run this command and replace the token value:

```bash
claude mcp add --transport http apify "https://mcp.apify.com/?tools=automation-lab/kalshi-trader-social-profile-scraper" --header "Authorization: Bearer $APIFY_TOKEN"
```

Example prompt:

```text
Run the Kalshi Trader Social Profile Scraper for weatherman.allday in profile mode and summarize the public performance fields.
```

#### Claude Desktop setup

Add this block to the Claude Desktop MCP configuration and restart the application:

```json
{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com/?tools=automation-lab/kalshi-trader-social-profile-scraper",
      "headers": {
        "Authorization": "Bearer YOUR_APIFY_TOKEN"
      }
    }
  }
}
```

#### Cursor setup

Open **Settings → MCP → Add new MCP server**, use the same Apify MCP URL and authorization header from the Claude Desktop configuration, then enable the server.

Example prompt:

```text
Collect profile and recent public posts for these Kalshi nicknames, then compare their top categories.
```

#### VS Code setup

Open the MCP server configuration in VS Code, add an HTTP server pointing to the same Apify MCP URL, provide the bearer token header, and start the server from the MCP panel.

#### Agent workflow ideas

- Refresh a public trader watchlist every morning.
- Summarize new posts for a journalist's research queue.
- Compare current profile metrics with the previous snapshot.
- Export public trades for independent analysis.

AI-generated analysis can be wrong. Verify important conclusions against source records.

### Reliability and rate limits

The Actor accesses Kalshi's public social JSON endpoints with conservative sequential requests.

For HTTP 429 and server errors it retries with exponential delays. Each nickname and dataset mode is isolated, so one unavailable activity mode does not discard successful profile records from other requests.

Kalshi can change undocumented web-client endpoints or response fields. Endpoint adapters are kept separate to make source changes easier to diagnose.

### Limitations

- The Actor does not place trades or access private portfolios.
- It does not require or accept Kalshi account credentials.
- Open and closed position history is not included in this initial release.
- Activity visibility depends on each trader's public settings and Kalshi's public API.
- A nickname can return zero trades, posts, comments, or likes.
- Results are snapshots, not investment advice or audited financial statements.
- The maximum is 50 nicknames and 100 activity records per nickname/mode per run.
- Upstream schema changes can add, remove, or rename source fields.

### Legality: scraping public Kalshi profiles

This Actor is designed for public information available without login. Users are responsible for following applicable laws, Kalshi's terms, contractual obligations, and privacy requirements in their jurisdiction.

Do not use the output to harass people, infer sensitive traits, evade access controls, or make misleading claims. Minimize retained personal data and honor valid deletion or correction obligations where applicable.

This documentation is general information, not legal advice.

### Troubleshooting

#### Why is a profile activity dataset empty?

The trader may have no public records for that mode, may use private activity settings, or the selected limit may not apply because the source returned no matching rows. Confirm the nickname and run profile mode first.

#### Why does a nickname fail while others succeed?

The nickname may not exist, may have changed, or the public API may be temporarily unavailable. Check the run log for the nickname and mode, then retry later.

#### Why are profile counts different from an older export?

Followers, views, activity, and performance metrics change. Compare `scrapedAt` timestamps and treat each run as a point-in-time snapshot.

#### Why is the liked-post author different from the selected trader?

The `likes` dataset contains posts liked by the source trader. `nickname` identifies the post author; `sourceNickname` identifies the trader whose likes were requested.

#### Why do I see additional fields in JSON?

The Actor preserves useful public source fields beyond the table's default columns. JSON exports can therefore contain richer context than the overview table.

### FAQ

#### Does this Actor need a Kalshi API key?

No. It only accesses anonymous public social-profile data.

#### Can I provide profile URLs instead of nicknames?

Yes. Full `https://kalshi.com/profile/...` URLs and plain nicknames are accepted.

#### Can it scrape multiple traders?

Yes, up to 50 unique nicknames per run.

#### Does it include badges and category rankings?

Yes. Enable `includeBadges` and select profile mode.

#### Can I scrape positions?

Not in the initial release. Stable anonymous position-history coverage was not confirmed, so the Actor does not make that claim.

#### Does it guarantee complete trade history?

No. It returns the public records supplied by Kalshi, bounded by the Actor limit and upstream availability.

#### Can I use it for investment decisions?

The data can support independent research, but it is not investment advice and can be incomplete, delayed, or revised.

### Related scrapers

Explore other data products from [Automation Labs](https://apify.com/automation-lab):

- [Kalshi Market Trader Leaderboard Scraper](https://apify.com/automation-lab/kalshi-market-trader-leaderboard-scraper) for leaderboard-oriented discovery when available
- [Polymarket Scraper](https://apify.com/automation-lab/polymarket-scraper) for prediction-market event and odds workflows
- [Reddit Scraper](https://apify.com/automation-lab/reddit-scraper) for public community sentiment research

Choose this Actor when your starting point is a known public Kalshi trader nickname and you need profile or social activity records.

### Support

If a run fails unexpectedly:

1. Open the run in Apify Console.
2. Confirm the input nickname and selected modes.
3. Review the log and named datasets.
4. Share the run with the Actor developer through the Apify issue form.
5. Describe the expected public record and the observed result.

Please do not include private credentials or sensitive account information in support requests.

# Actor input Schema

## `nicknames` (type: `array`):

One nickname or https://kalshi.com/profile/... URL per line. Maximum 50 per run.

## `modes` (type: `array`):

Profile includes identity, social counts, performance metrics, categories, and optional badges. Other selections create separate named datasets.

## `maxItemsPerNickname` (type: `integer`):

Applies separately to trades, posts, comments, and likes. Profiles always produce at most one record per nickname.

## `includeBadges` (type: `boolean`):

Attach public Kalshi achievement and ranking badges to profile records.

## Actor input object example

```json
{
  "nicknames": [
    "weatherman.allday"
  ],
  "modes": [
    "profile"
  ],
  "maxItemsPerNickname": 10,
  "includeBadges": true
}
```

# Actor output Schema

## `profiles` (type: `string`):

No description

## `trades` (type: `string`):

No description

## `posts` (type: `string`):

No description

## `comments` (type: `string`):

No description

## `likes` (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 = {
    "nicknames": [
        "weatherman.allday"
    ],
    "modes": [
        "profile"
    ],
    "maxItemsPerNickname": 10,
    "includeBadges": true
};

// Run the Actor and wait for it to finish
const run = await client.actor("automation-lab/kalshi-trader-social-profile-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 = {
    "nicknames": ["weatherman.allday"],
    "modes": ["profile"],
    "maxItemsPerNickname": 10,
    "includeBadges": True,
}

# Run the Actor and wait for it to finish
run = client.actor("automation-lab/kalshi-trader-social-profile-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 '{
  "nicknames": [
    "weatherman.allday"
  ],
  "modes": [
    "profile"
  ],
  "maxItemsPerNickname": 10,
  "includeBadges": true
}' |
apify call automation-lab/kalshi-trader-social-profile-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=automation-lab/kalshi-trader-social-profile-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Kalshi Trader Social Profile Scraper",
        "description": "Track public Kalshi traders with clean profile, performance, trade, post, comment, and liked-post datasets. No Kalshi login or API key required.",
        "version": "0.1",
        "x-build-id": "VNAnyzCe5k8fnFyhE"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/automation-lab~kalshi-trader-social-profile-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-automation-lab-kalshi-trader-social-profile-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/automation-lab~kalshi-trader-social-profile-scraper/runs": {
            "post": {
                "operationId": "runs-sync-automation-lab-kalshi-trader-social-profile-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/automation-lab~kalshi-trader-social-profile-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-automation-lab-kalshi-trader-social-profile-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": [
                    "nicknames"
                ],
                "properties": {
                    "nicknames": {
                        "title": "Kalshi nicknames or profile URLs",
                        "minItems": 1,
                        "maxItems": 50,
                        "type": "array",
                        "description": "One nickname or https://kalshi.com/profile/... URL per line. Maximum 50 per run.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "modes": {
                        "title": "Datasets",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Profile includes identity, social counts, performance metrics, categories, and optional badges. Other selections create separate named datasets.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "profile",
                                "trades",
                                "posts",
                                "comments",
                                "likes"
                            ],
                            "enumTitles": [
                                "Profile & performance",
                                "Public trades",
                                "Posts",
                                "Comments",
                                "Liked posts"
                            ]
                        },
                        "default": [
                            "profile"
                        ]
                    },
                    "maxItemsPerNickname": {
                        "title": "Maximum activity records per nickname",
                        "minimum": 1,
                        "maximum": 100,
                        "type": "integer",
                        "description": "Applies separately to trades, posts, comments, and likes. Profiles always produce at most one record per nickname.",
                        "default": 20
                    },
                    "includeBadges": {
                        "title": "Include profile badges",
                        "type": "boolean",
                        "description": "Attach public Kalshi achievement and ranking badges to profile records.",
                        "default": true
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
