Next free-source hunt
We check for new free financial data every Wednesday.

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.

Download
https://signal-lab-jet.vercel.app/catalog.json

catalog.csv

Same data in CSV format for spreadsheet tools and data analysis.

Download
https://signal-lab-jet.vercel.app/catalog.csv

llms.txt

Plain-text list of all 84 entries with a short header: notice, schemaVersion and field meanings.

Download
https://signal-lab-jet.vercel.app/llms.txt

llms-full.txt

Plain-text version with per-resource ingestion guidance for LLM context.

Download
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

FieldDescription
nameResource display name
slugURL-friendly identifier
categoryResource category (e.g., Market Data, Crypto, Backtesting)
typeKind of entry. Values in the catalog: "Dataset", "Tool", "Model", "Recipe", "Starter Kit".
badgeValues 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".
authAuthentication 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".
freeTierLimitsFree tier usage limits (if available)
rateLimitsAPI rate limits (if available)
licenseShows 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".
licenseUrlLink to the terms or license page recorded for the entry
licenseNoteEntry-specific wording about the terms. Read it together with license and the linked terms before using data in a product
tasksTask tags for the entry; the /browse page filters on them
lastVerifiedDate (YYYY-MM-DD) we last compared the entry with the provider's pages
coverageWhat 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.
attributionThe 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.
evidenceUrlOne 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.
evidenceUrlsA 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.
providerUrlOfficial provider website or documentation
sitePageUrlSignal Lab page with full details
docsUrlDocumentation 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.