"Guide Kalshi and Polymarket market, trade, block, and legacy
Scanned 9/8/2026
Install to Claude Code
npx -y skills add VectorSpaceLab/AREX-Skill --skill indexing --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Indexing?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/vectorspacelab-indexing-de55e0f2)More formats (shields.io, HTML) on the badges page.
---
name: indexing
description: "Guide Kalshi and Polymarket market, trade, block, and legacy
backfill workflows."
metadata:
disco-role: operating
disable-model-invocation: true
license: MIT
---
# indexing
Use this sub-skill for data-collection workflows that write Parquet chunks and resume from cursor files.
It covers both API-based and blockchain-based collectors.
## Use this route when
- The user wants to backfill markets, trades, blocks, or legacy FPMM data.
- The user wants to resume a partially completed run.
- The user wants to understand the shape of a cursor file or chunked Parquet output.
- The user wants to add a new indexer subclass.
## Scope
### Included
- Kalshi market and trade backfills.
- Polymarket market, trade, block, and legacy FPMM backfills.
- Cursor files, chunk naming, deduplication, and resume behavior.
- `KalshiClient`, `PolymarketClient`, `PolygonClient`, and `Indexer.load()`.
### Excluded
- Analysis and chart output workflows, which belong to `sub-skills/analysis/`.
- Dataset packaging and host-tool installation, which belong to `sub-skills/data-ops/`.
## Read first
- `../../references/indexing-catalog.md` for the full indexer list.
- `../../references/api-reference.md` for the client and base-class APIs.
- `../../references/data-layout.md` for chunk paths, cursor files, and helper files.
- `../../references/troubleshooting.md` for cross-cutting failures.
## Core workflow
1. Identify the indexer name and required inputs.
2. Confirm the cursor file and output directory state.
3. Provide any required env vars, especially `POLYGON_RPC` for blockchain-backed collectors.
4. Run the indexer through `uv run main.py index` or directly from the Python class.
5. Verify that the expected Parquet chunks and cursor files were updated.
## Indexer families
### Kalshi
- `kalshi_markets` backfills market snapshots into chunked Parquet files.
- `kalshi_trades` fetches trades for markets discovered from the market parquet tree and skips already-processed tickers.
Important details:
- Markets use `ParquetStorage` for chunking and deduplication.
- Trades run concurrently and dedupe by `trade_id`.
- `kalshi_trades` only considers markets above the built-in volume threshold.
### Polymarket markets and trades
- `polymarket_markets` paginates the Gamma API with an offset cursor.
- `polymarket_trades` backfills CTF and NegRisk `OrderFilled` logs by block range.
Important details:
- The trade indexer stores progress after each completed block chunk.
- The trade indexer writes chunked Parquet files under `data/polymarket/trades/`.
- The market indexer writes an offset cursor and chunked market files.
### Polymarket blocks
- `polymarket_blocks` builds a block-to-timestamp lookup.
- It samples every 100 blocks and interpolates the values to fill each bucket.
- The output feeds analyses that need approximate timestamps for trade blocks.
### Polymarket legacy FPMM trades
- `polymarket_fpmm_trades` decodes `FPMMBuy` and `FPMMSell` logs from the Polygon chain.
- It filters to USDC-collateralized markets.
- It is the most RPC-intensive collector in the repo.
## Adding or fixing an indexer
- Subclass `Indexer`.
- Set `name` and `description` in `__init__`.
- Keep the fetch/resume/save loop explicit so interruption points are easy to reason about.
- Write Parquet chunks with predictable names.
- Save or update a cursor file only after the relevant unit of work is safely completed.
- Prefer small helper methods for decoding logs, chunking ranges, or deduplicating existing rows.
## Common failure patterns
- Missing `POLYGON_RPC` for chain-backed collectors.
- Invalid cursor files that point to the wrong offset or block.
- Duplicate rows when the collector is rerun without deduplication.
- Chunk files that are partially written because a run was interrupted.
- Slow or failing RPC queries when the block range is too large.
## Helpful helper
- `../../scripts/catalog.py --indexers` lists the indexer names without opening the interactive menu when run through the repo environment.
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!