To build a daily stock-token activity view on Robinhood Chain, start with transfer counts and holder counts for the latest recorded UTC day. The example below fetches them with one authenticated Data API request. Its default run makes no JSON-RPC calls.
Run the first request
Use Node.js 24 or newer. Clone the example, install locked dependencies, and export a key in your own shell:
git clone https://github.com/blockvectra/robinhood-stock-tokens.git
cd robinhood-stock-tokens
npm ci
export BLOCKVECTRA_API_KEY='replace-with-your-key'
npm start -- --limit 5
Get a BlockVectra API key and keep it in your environment; do not paste it into chat or commit it. Installation downloads are setup work, not API runtime traffic. The first npm start calls GET /v1/data/robinhood_mainnet/stocks?limit=5.
Read what comes back
Omitting --day asks for the latest recorded day, not today's date or a live quote. The CLI prints the requested day, response metadata, then rows with the recorded Day and token Address alongside activity fields. The API rows include day, token, symbol, transfers, and holder_count; the stock token data guide documents the full response.
This is a capped list of indexed activity, with up to five rows for this command. The default budget is one Data GET and zero RPC calls, and the stocks leaderboard has no cursor pagination. Each request has a 10-second timeout, and the CLI does not retry. meta.refreshed_at is the snapshot's refresh time. If it is missing or null, the CLI prints unknown and says to treat the data as stale. meta.as_of_block is the current indexed watermark; it does not prove that the daily table is fresh or complete.
An empty data array means there are no recorded rows for that request. That can be a normal quiet day; it does not, by itself, prove the ingestion pipeline is broken. Conversely, a populated response does not guarantee every token is covered. Check the actual day and freshness fields before using the result.
Add the multiplier only when needed
Pass --with-multiplier to create an RPC client. The CLI first checks eth_chainId equals 4663, then reads uiMultiplier() for at most the first 10 rows, sequentially and without retries. That optional path can use at most 12 runtime requests: one Data GET, one chain-ID check, and ten calls. A chain mismatch or unverifiable chain ID exits before any eth_call; a failed per-token read appears as unavailable, and rows past the cap appear as not queried (limit 10).
The multiplier is current contract state, not the historical value for a past day. It cannot supply the historical multiplier needed to calculate adjusted values for that past date. For the exact implementation, see the source at commit 12f341c.
Top comments (0)