# Token Unlock Tracker — Vesting Schedules & Cliff Alerts (`aspiring_barricade/crypto-token-unlock-tracker`) Actor

Upcoming token unlocks & vesting schedules with the numbers that move price: date, cliff vs linear, tokens released, % of circulating supply (dilution), USD value, big-unlock flag and per-beneficiary breakdown (team/investors/ecosystem). Lookahead window, watchlist & new-only alerts.

- **URL**: https://apify.com/aspiring\_barricade/crypto-token-unlock-tracker.md
- **Developed by:** [Joachim Pouchain](https://apify.com/aspiring_barricade) (community)
- **Categories:** Developer tools, Automation, Agents
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.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 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

## Token Unlock Tracker — Vesting Schedules & Cliff Alerts

Track **upcoming token unlocks** and **vesting schedules** with the numbers that actually move price. This **token unlock calendar** returns, for every upcoming **cliff** or **linear** unlock: the date, the amount released, the **% of circulating supply** unlocked (dilution / sell pressure), the USD value, a **big-unlock** flag, and the **per-beneficiary breakdown** (team / investors / ecosystem). Built for trading bots, AI agents and analysts who need a clean **token vesting API** instead of a screenshot of a website.

Most unlock tools give you a calendar. This one gives you **actionable supply-unlock data**: the headline figure is **% of circulating supply**, because a 5% unlock going to early investors is a very different trade than a 0.1% ecosystem drip.

### What it does

- **Upcoming unlocks per token** — date, type (`cliff` / `linear` / `mixed`), tokens released.
- **% of circulating supply unlocked** — the dilution number that matters, using real circulating supply.
- **Big-unlock flag** — flags any unlock above your threshold (default ≥ 1% of circulating supply).
- **USD value** — tokens unlocked × live price.
- **Beneficiaries** — who receives the unlock (investors, insiders, ecosystem, public sale, farming…) — they don't all sell the same way.
- **Lookahead window** — only unlocks in the next *N* days.
- **Watchlist or all** — track specific tokens, or auto-scan every protocol with the biggest upcoming unlocks.
- **New-only alert mode** — return only unlocks not seen in previous runs (dedup), ideal for scheduled alerts.

### What you get per unlock event

| Field | Meaning |
|-------|---------|
| `unlock_date`, `days_until`, `unlock_timestamp` | When the unlock happens |
| `unlock_type` | `cliff`, `linear` or `mixed` |
| `tokens_unlocked` | Number of tokens released |
| `pct_of_circulating_supply` | **Dilution** — % of circulating supply unlocked |
| `pct_of_max_supply` | % of max supply unlocked |
| `usd_value` | USD value at current price |
| `is_big_unlock` | Above your big-unlock threshold? |
| `beneficiaries[]` | Per-recipient amount, category & % of circulating |
| `beneficiary_categories` | Distinct recipient classes (insiders, privateSale, ecosystem…) |
| `circulating_supply`, `max_supply`, `price_usd` | Context for the numbers |

### Why this one

- **% of circulating supply + cliff flags**, not just a date. The differentiator: dilution and sell-pressure, computed for you.
- **Beneficiary breakdown** — distinguishes insider/investor unlocks (high dump risk) from ecosystem/staking emissions.
- **Big-unlock alerts + new-only mode** — turn the calendar into a high-signal alert stream for scheduled runs.
- **Agent- & bot-ready** — one clean JSON row per unlock event, ready for an LLM or a trading strategy.
- **Free, official-grade source** — DefiLlama emissions for the vesting schedules, CoinGecko for real circulating supply and price. No fragile scraping.

### Input

| Field | Type | Description |
|-------|------|-------------|
| `tokens` | array | Optional watchlist as DefiLlama slugs / names / CoinGecko ids (e.g. `aptos`, `arbitrum`, `optimism`). Empty = auto-scan the biggest upcoming unlocks. |
| `window_days` | integer | Only unlocks within the next N days. Default 30. |
| `big_unlock_pct` | number | Flag unlocks ≥ this % of circulating supply. Default 1. |
| `only_big_unlocks` | boolean | Return only flagged big unlocks. Default false. |
| `alert_new_only` | boolean | Only events new since the last run. Default false. |
| `alert_key` | string | Namespace for new-only history. |
| `max_items` | integer | Max events returned/charged. Default 50. |

#### Example input

```json
{
  "tokens": [],
  "window_days": 30,
  "big_unlock_pct": 1,
  "only_big_unlocks": false,
  "alert_new_only": false,
  "max_items": 50
}
````

### Output

One dataset item per unlock event. Real output for an **EIGEN** cliff unlock:

```json
{
  "token": "EigenCloud",
  "symbol": "EIGEN",
  "slug": "eigencloud",
  "gecko_id": "eigenlayer",
  "chain": null,
  "unlock_date": "2026-07-01",
  "unlock_timestamp": 1782933573,
  "days_until": 2,
  "unlock_type": "cliff",
  "tokens_unlocked": 36820227,
  "pct_of_circulating_supply": 4.97,
  "pct_of_max_supply": null,
  "usd_value": 8515893,
  "is_big_unlock": true,
  "circulating_supply": 741228567,
  "circulating_supply_source": "coingecko",
  "max_supply": null,
  "price_usd": 0.231283,
  "beneficiaries": [
    { "recipient": "Investors", "category": "privateSale", "unlock_type": "cliff", "amount": 19749031, "pct_of_circulating_supply": 2.66 },
    { "recipient": "Early Contributors", "category": "insiders", "unlock_type": "cliff", "amount": 17071196, "pct_of_circulating_supply": 2.3 }
  ],
  "beneficiary_categories": ["privateSale", "insiders"],
  "source": "DefiLlama Emissions + CoinGecko",
  "source_url": "https://defillama.com/unlocks/eigencloud",
  "timestamp": "2026-06-29T09:59:29.977Z"
}
```

This single row tells a trader: in 2 days, **EIGEN unlocks ~4.97% of circulating supply (~$8.5M)**, and it goes to **investors and early contributors** — a classic sell-pressure event.

### Use cases

- **Trading bots** — avoid or short tokens ahead of large insider unlocks; gate entries on `pct_of_circulating_supply`.
- **AI research agents** — a single tool call returns structured, ranked unlock events to reason over.
- **Unlock alerts** — schedule with `alert_new_only: true` and `only_big_unlocks: true` for a clean, high-signal feed.
- **Token & fund due diligence** — quantify forward dilution and the insider/investor share of upcoming supply.

### Pricing

Pay-per-result: charged **per unlock event returned** (target **$0.003 per result**, i.e. **$3 / 1,000**), plus Apify platform usage. `max_items` caps your spend; `only_big_unlocks` and `alert_new_only` keep scheduled runs cheap. (Final price is set on the Store listing.)

### Categories

`Developer tools`, `Automation`, `Agents`.

### Data source & method

- **Vesting schedules:** [DefiLlama](https://defillama.com/unlocks) emissions dataset (free, public) — `cliffAllocations` / `linearAllocations` per unlock event.
- **Circulating supply & price:** [CoinGecko](https://www.coingecko.com) public API. When a token isn't on CoinGecko, circulating supply is derived from cumulative past unlocks and flagged via `circulating_supply_source: "derived"`.
- **% of circulating supply** = tokens unlocked ÷ circulating supply. **% of max supply** = tokens unlocked ÷ max supply (`null` when the token has no fixed max supply).

### Notes & limits

- Coverage follows DefiLlama's tracked protocols (hundreds of major tokens with documented vesting). Tokens without a published schedule won't appear.
- In "all" mode the actor scans the protocols with the largest upcoming emissions; use the `tokens` watchlist to force specific tokens regardless of size.
- Informational data, **not financial advice**. Unlock schedules can change if a project amends its tokenomics.

### Use as an MCP tool (AI agents)

This Actor is available as an **MCP tool** for AI agents (Claude, ChatGPT, Cursor, etc.) through Apify’s hosted MCP server. Point your MCP client at:

```
https://mcp.apify.com/?actors=aspiring_barricade/crypto-token-unlock-tracker
```

The Actor’s input schema becomes the tool’s parameters automatically. An Apify API token is required.

### Use in n8n

Run this Actor inside your [n8n](https://n8n.io) workflows using the official **Apify** node (search “Apify” in the n8n nodes panel) and select the Actor `aspiring_barricade/crypto-token-unlock-tracker`. A dedicated community node (`n8n-nodes-token-unlock-tracker`) is also being published to npm for one-click installation via **n8n → Settings → Community Nodes**.

# Actor input Schema

## `tokens` (type: `array`):

Optional list of tokens to track, as DefiLlama protocol slugs / names / CoinGecko ids (e.g. "aptos", "arbitrum", "optimism", "sui"). Leave EMPTY to auto-scan all protocols with the biggest upcoming unlocks.

## `window_days` (type: `integer`):

Only return unlocks happening within the next N days.

## `big_unlock_pct` (type: `number`):

Flag an unlock as a "big unlock" when it releases at least this percentage of the circulating supply (dilution / sell-pressure). Example: 1 = 1%.

## `only_big_unlocks` (type: `boolean`):

If on, return only unlocks flagged as big (>= the threshold above). Great for high-signal alerts.

## `alert_new_only` (type: `boolean`):

Return only unlock events not seen in previous runs (persisted per alert key). Perfect for scheduled monitoring.

## `alert_key` (type: `string`):

Namespace for new-only history so different saved watchlists keep separate state.

## `max_items` (type: `integer`):

Maximum number of unlock events to return (and charge).

## Actor input object example

```json
{
  "tokens": [],
  "window_days": 30,
  "big_unlock_pct": 1,
  "only_big_unlocks": false,
  "alert_new_only": false,
  "alert_key": "default",
  "max_items": 50
}
```

# 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 = {
    "window_days": 30,
    "big_unlock_pct": 1,
    "max_items": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("aspiring_barricade/crypto-token-unlock-tracker").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 = {
    "window_days": 30,
    "big_unlock_pct": 1,
    "max_items": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("aspiring_barricade/crypto-token-unlock-tracker").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 '{
  "window_days": 30,
  "big_unlock_pct": 1,
  "max_items": 50
}' |
apify call aspiring_barricade/crypto-token-unlock-tracker --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=aspiring_barricade/crypto-token-unlock-tracker",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Token Unlock Tracker — Vesting Schedules & Cliff Alerts",
        "description": "Upcoming token unlocks & vesting schedules with the numbers that move price: date, cliff vs linear, tokens released, % of circulating supply (dilution), USD value, big-unlock flag and per-beneficiary breakdown (team/investors/ecosystem). Lookahead window, watchlist & new-only alerts.",
        "version": "1.0",
        "x-build-id": "jP94NpOHxTemQBxq6"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/aspiring_barricade~crypto-token-unlock-tracker/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-aspiring_barricade-crypto-token-unlock-tracker",
                "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/aspiring_barricade~crypto-token-unlock-tracker/runs": {
            "post": {
                "operationId": "runs-sync-aspiring_barricade-crypto-token-unlock-tracker",
                "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/aspiring_barricade~crypto-token-unlock-tracker/run-sync": {
            "post": {
                "operationId": "run-sync-aspiring_barricade-crypto-token-unlock-tracker",
                "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": {
                    "tokens": {
                        "title": "Watchlist (optional)",
                        "type": "array",
                        "description": "Optional list of tokens to track, as DefiLlama protocol slugs / names / CoinGecko ids (e.g. \"aptos\", \"arbitrum\", \"optimism\", \"sui\"). Leave EMPTY to auto-scan all protocols with the biggest upcoming unlocks.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "window_days": {
                        "title": "Lookahead window (days)",
                        "minimum": 1,
                        "maximum": 1095,
                        "type": "integer",
                        "description": "Only return unlocks happening within the next N days.",
                        "default": 30
                    },
                    "big_unlock_pct": {
                        "title": "Big-unlock threshold (% of circulating supply)",
                        "type": "number",
                        "description": "Flag an unlock as a \"big unlock\" when it releases at least this percentage of the circulating supply (dilution / sell-pressure). Example: 1 = 1%.",
                        "default": 1
                    },
                    "only_big_unlocks": {
                        "title": "Only return big unlocks",
                        "type": "boolean",
                        "description": "If on, return only unlocks flagged as big (>= the threshold above). Great for high-signal alerts.",
                        "default": false
                    },
                    "alert_new_only": {
                        "title": "Alert mode: only new since last run",
                        "type": "boolean",
                        "description": "Return only unlock events not seen in previous runs (persisted per alert key). Perfect for scheduled monitoring.",
                        "default": false
                    },
                    "alert_key": {
                        "title": "Alert key",
                        "type": "string",
                        "description": "Namespace for new-only history so different saved watchlists keep separate state.",
                        "default": "default"
                    },
                    "max_items": {
                        "title": "Max results (cost cap)",
                        "minimum": 1,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "Maximum number of unlock events to return (and charge).",
                        "default": 50
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
