# Unusual Crypto Options Activity Scanner — BTC/ETH Options Flow (`0xgollum/unusual-crypto-options-activity`) Actor

Scan BTC and ETH options on Deribit and surface unusual options activity — contracts trading on abnormal volume versus open interest, big-premium prints, and net call/put sentiment. The crypto-market version of unusual options flow scanning.

- **URL**: https://apify.com/0xgollum/unusual-crypto-options-activity.md
- **Developed by:** [0xGollum](https://apify.com/0xgollum) (community)
- **Categories:** Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$5.00 / 1,000 results

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

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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

## Unusual Crypto Options Activity Scanner 📈

**Give it BTC and/or ETH and get the option contracts that are actually being traded today on abnormal volume — the fresh, big-money positioning that raw option chains bury.** The crypto-market version of unusual options flow scanning.

### What "unusual" means here

An option chain is thousands of rows. Almost all of it is noise. What matters is the handful of contracts where **today's volume is far bigger than the open interest that was already there** — that means new positions are being opened *right now*, not old ones being closed. Layer on the dollar premium behind the trade, and you get the same signal the "unusual options activity" services sell for equities: where the smart money is quietly building.

This actor turns a raw Deribit option book into that signal. For each currency it pulls every option contract, then keeps only the ones that clear **three gates at once**:

1. **Liquidity** — traded at least `min_volume` contracts today (1 contract = 1 unit of the underlying, e.g. 1 BTC).
2. **Fresh positioning** — today's volume is at least `min_vol_oi_ratio`× the standing open interest (contracts with no prior open interest qualify on volume alone).
3. **Real money** — estimated premium traded in USD is at least `min_premium_usd`.

### Data source

[Deribit](https://www.deribit.com) is the dominant crypto options exchange — BTC/ETH options volume and open interest concentrate there far more than any competitor. Its public API needs no key: one call per currency (`get_book_summary_by_currency`) returns volume, open interest and price for every strike/expiry at once, plus a second lightweight call for the current USD index price used to convert premiums.

### What you get

Two kinds of rows in one dataset:

**`contract` rows** — each unusual contract found:

| Field | Description |
|-------|-------------|
| **currency** | Underlying (BTC or ETH) |
| **option_type** | `call` or `put` |
| **strike / expiry** | Contract strike and expiration date |
| **spot** | Underlying USD price at scan time |
| **moneyness** | ITM / ATM / OTM relative to spot |
| **volume** | Contracts traded today |
| **open_interest** | Contracts outstanding before today |
| **vol_oi_ratio** | Volume ÷ open interest (how fresh the positioning is) |
| **last_price_usd** | Last traded contract price, converted to USD |
| **premium_usd** | Estimated dollar premium traded |
| **implied_volatility** | Deribit's mark IV for the contract, when priced |
| **unusual_score** | Sortable blend of ratio and premium — biggest signals on top |

**`sentiment` rows** — one summary per currency: net **call vs put premium** across its unusual contracts, labelled **BULLISH**, **BEARISH** or **MIXED**. This is the headline read — is the unusual flow leaning up or down?

Rows are sorted with the strongest `unusual_score` first, and the per-currency sentiment summaries are always included.

**Nothing unusual = never billed.** You only pay for runs that actually return signals.

# Actor input Schema

## `currencies` (type: `array`):

Underlying currencies to scan for unusual options activity on Deribit (BTC and ETH are the only liquid crypto options markets).
## `max_expiries` (type: `integer`):

How many upcoming expiration dates to pull per currency (nearest first). More = deeper scan, slower run.
## `min_volume` (type: `number`):

Ignore contracts trading below this many contracts today (1 contract = 1 unit of the underlying, e.g. 1 BTC). Filters out illiquid noise.
## `min_vol_oi_ratio` (type: `number`):

Flag a contract as unusual when today's volume is at least this multiple of its open interest (fresh positioning). Contracts with zero open interest qualify on volume alone.
## `min_premium_usd` (type: `integer`):

Only report contracts whose estimated traded premium (volume x price-in-USD) is at least this much. Focuses on big-money prints.
## `max_results` (type: `integer`):

Cap on the number of unusual-activity rows returned per run.
## `include_sentiment` (type: `boolean`):

If true, append one summary row per currency with net call vs put premium (bullish/bearish flow).
## `request_timeout_secs` (type: `integer`):

HTTP request timeout.

## Actor input object example

```json
{
  "currencies": [
    "BTC",
    "ETH"
  ],
  "max_expiries": 4,
  "min_volume": 20,
  "min_vol_oi_ratio": 1.5,
  "min_premium_usd": 20000,
  "max_results": 100,
  "include_sentiment": true,
  "request_timeout_secs": 30
}
````

# 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 = {
    "currencies": [
        "BTC",
        "ETH"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("0xgollum/unusual-crypto-options-activity").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 = { "currencies": [
        "BTC",
        "ETH",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("0xgollum/unusual-crypto-options-activity").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 '{
  "currencies": [
    "BTC",
    "ETH"
  ]
}' |
apify call 0xgollum/unusual-crypto-options-activity --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=0xgollum/unusual-crypto-options-activity",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Unusual Crypto Options Activity Scanner — BTC/ETH Options Flow",
        "description": "Scan BTC and ETH options on Deribit and surface unusual options activity — contracts trading on abnormal volume versus open interest, big-premium prints, and net call/put sentiment. The crypto-market version of unusual options flow scanning.",
        "version": "0.1",
        "x-build-id": "vjmjQsfK0K1yxT8EA"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/0xgollum~unusual-crypto-options-activity/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-0xgollum-unusual-crypto-options-activity",
                "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/0xgollum~unusual-crypto-options-activity/runs": {
            "post": {
                "operationId": "runs-sync-0xgollum-unusual-crypto-options-activity",
                "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/0xgollum~unusual-crypto-options-activity/run-sync": {
            "post": {
                "operationId": "run-sync-0xgollum-unusual-crypto-options-activity",
                "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",
                "properties": {
                    "currencies": {
                        "title": "Crypto currencies to scan",
                        "type": "array",
                        "description": "Underlying currencies to scan for unusual options activity on Deribit (BTC and ETH are the only liquid crypto options markets).",
                        "default": [
                            "BTC",
                            "ETH"
                        ],
                        "items": {
                            "type": "string"
                        }
                    },
                    "max_expiries": {
                        "title": "Expiries to scan per currency",
                        "minimum": 1,
                        "maximum": 12,
                        "type": "integer",
                        "description": "How many upcoming expiration dates to pull per currency (nearest first). More = deeper scan, slower run.",
                        "default": 4
                    },
                    "min_volume": {
                        "title": "Minimum contract volume",
                        "minimum": 0,
                        "type": "number",
                        "description": "Ignore contracts trading below this many contracts today (1 contract = 1 unit of the underlying, e.g. 1 BTC). Filters out illiquid noise.",
                        "default": 20
                    },
                    "min_vol_oi_ratio": {
                        "title": "Minimum volume / open-interest ratio",
                        "minimum": 0,
                        "type": "number",
                        "description": "Flag a contract as unusual when today's volume is at least this multiple of its open interest (fresh positioning). Contracts with zero open interest qualify on volume alone.",
                        "default": 1.5
                    },
                    "min_premium_usd": {
                        "title": "Minimum premium traded (USD)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Only report contracts whose estimated traded premium (volume x price-in-USD) is at least this much. Focuses on big-money prints.",
                        "default": 20000
                    },
                    "max_results": {
                        "title": "Max unusual contracts returned",
                        "minimum": 1,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "Cap on the number of unusual-activity rows returned per run.",
                        "default": 100
                    },
                    "include_sentiment": {
                        "title": "Include per-currency call/put sentiment",
                        "type": "boolean",
                        "description": "If true, append one summary row per currency with net call vs put premium (bullish/bearish flow).",
                        "default": true
                    },
                    "request_timeout_secs": {
                        "title": "Request timeout (seconds)",
                        "minimum": 5,
                        "maximum": 60,
                        "type": "integer",
                        "description": "HTTP request timeout.",
                        "default": 30
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
