Agent Ingestion
Machine-readable catalog of financial datasets, tools, and models for AI agents and automation.
Available Files
catalog.json
Complete catalog with metadata: name, category, badge, auth, free-tier limits, rate limits, and URLs.
https://signal-lab-jet.vercel.app/catalog.jsoncatalog.csv
Same data in CSV format for spreadsheet tools and data analysis.
https://signal-lab-jet.vercel.app/catalog.csvllms.txt
Plain-text list of all 84 entries with a short header: notice, schemaVersion and field meanings.
https://signal-lab-jet.vercel.app/llms.txtllms-full.txt
Plain-text version with per-resource ingestion guidance for LLM context.
https://signal-lab-jet.vercel.app/llms-full.txt⚠️ Important Notice
Information presented for educational purposes only. Free tiers, limits, and licenses belong to the providers and may change. Users must verify and follow each provider's terms. Signal Lab does not host or redistribute third-party data.
Copy-Paste Prompt for Claude/ChatGPT/Cursor
Use this prompt with your AI assistant to automatically build data loaders:
Fetch https://signal-lab-jet.vercel.app/catalog.json and build loaders for the data sources I need. Filter by type, badge (Free, Freemium, Open Source, Unofficial) and category. Read each entry's license and licenseNote, and respect each provider's terms, rate limits, and authentication requirements as stated in the catalog.
Python Starter Code
Filter catalog by badge, category, or authentication requirements:
import requests
import pandas as pd
# Load Signal Lab catalog
response = requests.get("https://signal-lab-jet.vercel.app/catalog.json", timeout=30)
response.raise_for_status()
catalog = response.json()
print(f"schemaVersion {catalog['schemaVersion']}, {catalog['count']} entries, generated {catalog['generated']}")
# Datasets (type == "Dataset"); no badge filter, so Free, Freemium and Unofficial entries are all kept
datasets = [r for r in catalog["resources"] if r["type"] == "Dataset"]
# Filter by category
market_data = [r for r in datasets if r["category"] == "Market Data"]
# Display results; read license and licenseNote before using data in a product
columns = ["name", "badge", "auth", "freeTierLimits", "license", "licenseNote", "lastVerified", "providerUrl"]
df = pd.DataFrame(datasets).reindex(columns=columns)
print(df.to_string(max_colwidth=40))
# Always check and respect provider terms and rate limits before use
print(f"\nNotice: {catalog['notice']}")Use Cases
AI Agent Integration
Fetch catalog.json to discover available data sources, then build loaders dynamically based on your agent's needs.
Data Pipeline Automation
Filter by free tier limits and authentication to identify sources suitable for automated ingestion.
Research & Prototyping
Quickly identify free and open-source tools and datasets to build MVPs without upfront costs.
Compliance Checking
Reference authentication and rate limit fields to ensure your implementation respects provider terms.
Catalog Fields
| Field | Description |
|---|---|
| name | Resource display name |
| slug | URL-friendly identifier |
| category | Resource category (e.g., Market Data, Crypto, Backtesting) |
| type | Kind of entry. Values in the catalog: "Dataset", "Tool", "Model", "Recipe", "Starter Kit". |
| badge | Values in the catalog: "Free", "Open Source", "Freemium", "Unofficial". The homepage counts Free and Open Source as "fully free or open source" and Freemium and Unofficial as "with a free tier or unofficial access". |
| auth | Authentication requirement. Values in the catalog: "none", "free API key", "account", "none (v1); free registration key for v2", "free account; API key issued from the dashboard", "free registration key for the API; none for bulk files". |
| freeTierLimits | Free tier usage limits (if available) |
| rateLimits | API rate limits (if available) |
| license | Shows where the terms live: "Provider terms" is the provider's own terms of service, "Custom" is a license or notice specific to that provider, "unknown" marks Signal Lab originals whose reuse terms are not yet published, other values name a license. It is not a permission to use the data; read licenseNote and the linked terms. Values in the catalog: "Custom", "Provider terms", "unknown", "Apache-2.0", "MIT", "BSD-3-Clause", "CC0-1.0", "GPL-3.0-or-later", "CC-BY-NC-SA-4.0", "BSD-2-Clause". |
| licenseUrl | Link to the terms or license page recorded for the entry |
| licenseNote | Entry-specific wording about the terms. Read it together with license and the linked terms before using data in a product |
| tasks | Task tags for the entry; the /browse page filters on them |
| lastVerified | Date (YYYY-MM-DD) we last compared the entry with the provider's pages |
| coverage | What a dataset covers (instruments, sources, history, delays), as free text recorded for the entry. Only Dataset entries have it. Recorded on 29 of 84 entries. |
| attribution | The attribution wording or rule recorded for the entry, as the provider states it (for example a credit line to display). Missing means not recorded, not that none is required. Recorded on 12 of 84 entries. |
| evidenceUrl | One provider page recorded as evidence for the entry (for example a terms, pricing or license page). Missing means not recorded. Recorded on 12 of 84 entries. |
| evidenceUrls | A list of provider pages recorded as evidence for the entry; a note may cite a page not in the list. Missing means not recorded. Recorded on 70 of 84 entries. |
| providerUrl | Official provider website or documentation |
| sitePageUrl | Signal Lab page with full details |
| docsUrl | Documentation or getting-started URL |
A field that is missing has no recorded value in the catalog. It does not mean the provider has no limit, no attribution rule or no terms.