daymade/claude-code-skills/bigdata-skill
- community
Checking that the SKILL.md file is still in the repository.
Pulls Bigdata.com (RavenPack) financial and news data via the official bigdata-client SDK and /v1/* REST endpoints — structured financials, prices, analyst estimates, entity-sentiment series, annotated chunk search, screener. Use when the Bigdata MCP's tearsheets/search feel thin and you need the machine-readable substrate: mentions of Bigdata.com, RavenPack, a bd_v2_ key, rp_entity_id, or chunk/query_unit cost.
Install
npx vskill@latest install daymade/claude-code-skills/bigdata-skillSKILL.md
Bigdata.com SDK + REST Toolkit
Get the structured substrate the Bigdata.com MCP server doesn't hand over. The MCP returns clean prose and pre-synthesized tearsheets, but its search tool gives chunks with no per-chunk sentiment or entity spans, and its tearsheets give aggregate values — not the fiscal-period time series, universe screener, or per-field JSON you'd build a pipeline on. The official bigdata-client SDK plus a thin REST passthrough over the same backend, same JWT reach the official /v1/* endpoints that hold it. This skill bundles a toolkit that does exactly that — already debugged, already cost-guarded — so you don't re-pay the discovery cost.
The core problem this solves (read this first)
The Bigdata MCP server answers "what's the sentiment around NVIDIA?" with a readable paragraph or a pre-synthesized tearsheet — genuinely useful for a chat turn. But the moment you need the machine-readable substrate to build a pipeline on, the MCP doesn't hand it over:
- its search tool returns chunks with text + relevance only — **no per-chunk
sentiment number, no entity character spans**;
- its tearsheets give aggregate values (a single sentiment score, a summary
of estimates) — not a fiscal-period time series you can compute on, a universe screener, or per-field JSON.
The fix is a general pattern, not a Bigdata trick:
**When an MCP data source returns only synthesized output but you need thestructured fields underneath, drop to the vendor SDK or REST.** MCP optimizesfor a chat turn, not a pipeline.
Crucially, for Bigdata these structured fields are official, publicly documented REST endpoints (docs.bigdata.com/api-reference/...), not a hidden backend — and Bigdata is sunsetting the SDK (EOL 2026-12-31) in favour of this REST API, so the REST layer here is the forward-compatible path, not a hack. The SDK (bigdata_client.Bigdata) covers search + knowledge-graph; `bd._api.http` reaches every /v1/* endpoint the SDK never wrapped. The bundled bigdata_toolkit packages both behind one BigdataClient.
When to use this skill
Trigger on any of these, in any language:
- The user is using Bigdata.com / RavenPack and the MCP result feels thin —
"where's the sentiment score?", "I need entity-level data", "the calendar".
- They want forward / structured financials for a ticker: analyst
estimates, earnings or event calendar, earnings surprise, analyst ratings, price targets, a company screener / universe.
- They want annotated news chunks with numeric sentiment + entity spans, or
a sentiment time series / co-mention graph.
- They mention a `bd_v2_` API key,
rp_entity_id,query_unit/ chunk
cost, bigdata-client, or "the bigdata MCP isn't enough".
- They're building an investment-research dataset and need a reusable,
cost-aware data-pull layer rather than one-off MCP calls.
Setup (one time)
1 — API key (never hardcode it). The client fail-fasts if it's missing:
2 — An isolated Python env with the official SDK. The bundled toolkit imports bigdata_client; install it once:
3 — Outbound proxy (only if your network needs one to reach `api.bigdata.com`). Two equivalent options — the official SDK accepts both: an env var, or BigdataClient(proxy=...) in code. The env var is simplest:
If a proxy does TLS interception (self-signed CA) and you hit SSL handshake errors, the official fix is BigdataClient(verify_ssl="<proxy-CA>.pem") — not blind retries.
4 — Make the bundled package importable by putting this skill's scripts/ on PYTHONPATH (or sys.path.insert(0, "<this-skill>/scripts")).
Smoke-test the whole path (entity resolve + quota are free; --with-search adds one ~1 query_unit chunk search):
Quickstart
Wrap every network call in rc(lambda: ...) — a first-handshake SSL: UNEXPECTED_EOF is common and the SDK's internal retry doesn't cover it.
Routing — which capability answers the question
| The user wants… | Use | Module | |
|---|---|---|---|
Company name / ISIN / CUSIP / SEDOL → rp_entity_id | EntityResolver.resolve_id / .resolve_by_isin | kg.py (SDK) | |
| Forward analyst consensus (revenue/EPS by fiscal period) | StructuredDataREST.analyst_estimates | rest_ext.py | |
| Latest earnings surprise (actual vs estimate) | .latest_surprise | rest_ext.py | |
| Upcoming earnings / event calendar (one name or whole market) | .events_calendar | rest_ext.py | |
| Analyst ratings / price-target consensus | .analyst_ratings / .price_target | rest_ext.py | |
| Full financial statements (income / balance / cash-flow, multi-year) | .income_statement / .balance_sheet / .cash_flow_statement | rest_ext.py | |
| TTM valuation metrics & ratios (EV/EBITDA, ROE, P/E, margins) | .key_metrics_ttm / .company_ratios_ttm | rest_ext.py | |
| Company profile (CEO, sector, employees, IPO date) | .company_profile | rest_ext.py | |
| Daily OHLC prices / dividend history | .daily_prices / .dividends | rest_ext.py | |
| Revenue by geography / product segment | .revenue_geographic_segments / .revenue_product_segments | rest_ext.py | |
| Daily entity-sentiment time series (don't self-aggregate from chunks!) | .entity_sentiment | rest_ext.py | |
| Co-mention graph (supply-chain / competitor / customer — ⚠️ chunk-billed) | .connected_entities | rest_ext.py | |
| Build a universe by market-cap / sector / country | .company_screener | rest_ext.py | |
| News/filing/transcript chunks with sentiment + entity spans | AnnotatedSearcher.search_entity | search.py (SDK) | |
| Bulk-pull many searches 50% cheaper (portfolio backfill) | BatchSearch (create→upload→poll→download) | rest_ext.py | |
| Track / forecast quota spend before a backfill | CostTracker / CostModel | cost.py | |
| Hit an endpoint the toolkit hasn't wrapped yet | client.http.post("v1/<resource>/query", body) | client.py |
income/balance/cash-flow/daily-prices/dividends/revenue-segmentsreturn{fields, values}— wrap them infields_values_to_records()to get[{field: value}]. The*_ttm/company_profileendpoints are already flat.All structured endpoints above are free (0 chunks) exceptconnected_entitiesandAnnotatedSearcher(chunk-billed).
The two data faces (do NOT say "Bigdata fails for Chinese / A-shares")
This split is the most important non-obvious conclusion — state it precisely:
| Face | Path | A-share / Chinese verdict | |
|---|---|---|---|
| Structured financial (estimates, calendar, surprise, ratings, target, screener, financials, prices, dividends, revenue segments, daily entity-sentiment) | REST (rest_ext.py) | Works — via rp_entity_id resolved from the English name or ISIN (not the Chinese name). Data is fresh. Minor holes (some A-share price-targets return the entity with no numeric target). The daily entity_sentiment series lives here and works for any resolvable entity — it is not the dead end below. | |
| Unstructured Chinese NLP (Chinese-news entity detection, per-chunk Chinese sentiment) | SDK search (search.py) | Dead end — a data-source-level gap, not an SDK bug: Chinese entity detection ≈ 0, per-chunk CJK sentiment is a doc-level inherited value, and language mislabels Chinese filings as English. Pair Bigdata with a China-domestic source for Chinese-language chunk content; use Bigdata for the structured face (incl. aggregate entity_sentiment) + ISIN/KG crosswalk + English-language chunk sentiment. |
Cost discipline
1 query_unit = 10 chunks (official). Only chunk-search is billed — the structured /v1/* endpoints (estimates, financials, prices, calendar, surprise, ratings, the sentiment time series, screener…) are free (0 chunks, contract-tested). connected_entities (co-mentions) and AnnotatedSearcher are chunk-billed.
Three levers when you do pay for chunks:
- `ChunkLimit`, never a bare `int`.
Search.run(int)is a document limit
billed by the full chunk page; ChunkLimit(n) bills per chunk. AnnotatedSearcher.search forces ChunkLimit for you. (We observed roughly a 52x gap once — a single measured data point, not stated in the official docs; treat the exact multiple as indicative. The rule "use ChunkLimit" holds regardless, because max_chunks is the official billing unit.)
- Rerank bills only the *returned* chunks (official) — pass a
rerank_threshold to recall broadly but pay only for the high-relevance hits.
- Batch search is 50% cheaper (
$0.0075vs$0.015/ qu) — use
BatchSearch for a large multi-query backfill.
Use CostModel to veto an over-budget job before running it, and CostTracker.snapshot() / delta() to measure real spend. Full accounting → references/cost_accounting.md.
Known pitfalls (already solved — don't re-debug these)
Each cost real debugging time and is fixed or guarded in the toolkit. Full reproductions and fixes in `references/known_pitfalls.md`:
- First-handshake `SSL: UNEXPECTED_EOF` → wrap calls in
rc(); the SDK's
urllib3 retry only covers HTTP status, not the SSL EOF.
- `All(entity, Keyword(kw))` raises `TypeError` → combine with the
&
operator (entity & Keyword(kw)); All takes a single iterable. (Fixed in AnnotatedSearcher.entity_query.)
- The 52x doc-limit billing trap → always
ChunkLimit, never a bareint. - Closure capture in loops → bind loop vars:
rc(lambda q=q, dr=dr: ...). - `analyst_estimates(period="quarter")` 400s above `limit≈20`.
- `company_screener` filters must nest under `"filters"` — flat top-level
keys don't 400, they're silently dropped → unfiltered universe.
- `Document.reporting_period` is always `None` (the SDK model drops a field
present on the REST wire) → fetch_reporting_period_raw.
What this skill will not do
This is the start of the file. Read the full SKILL.md on GitHub.
Security
- Security scanPassed, 100 of 100Pattern checks on the skill's files.
- Model reviewNot runA model review is scheduled for the next rescan.
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingdaymade-financial/bigdata-skill/SKILL.md
Popularity
- Repository stars
- 1,255
- Repository forks
- 205
- 7-day trend score
- 36
Stars and forks are for the whole GitHub repository, not this skill alone. Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/daymade/claude-code-skills/bigdata-skill)