{"id":48133213,"url":"https://github.com/adanos-software/free-ticker-database","last_synced_at":"2026-05-10T08:22:54.136Z","repository":{"id":348111602,"uuid":"1196545934","full_name":"adanos-software/free-ticker-database","owner":"adanos-software","description":"Free global stock \u0026 ETF ticker reference database - 50k+ tickers, 66 exchanges, 81 countries","archived":false,"fork":false,"pushed_at":"2026-04-25T07:45:34.000Z","size":882428,"stargazers_count":3,"open_issues_count":1,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-25T09:29:20.462Z","etag":null,"topics":["data","etf","finance","stocks"],"latest_commit_sha":null,"homepage":"https://adanos.org/ticker-database/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/adanos-software.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-03-30T19:59:59.000Z","updated_at":"2026-04-23T06:47:58.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/adanos-software/free-ticker-database","commit_stats":null,"previous_names":["adanos-software/free-ticker-database"],"tags_count":19,"template":false,"template_full_name":null,"purl":"pkg:github/adanos-software/free-ticker-database","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adanos-software%2Ffree-ticker-database","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adanos-software%2Ffree-ticker-database/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adanos-software%2Ffree-ticker-database/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adanos-software%2Ffree-ticker-database/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/adanos-software","download_url":"https://codeload.github.com/adanos-software/free-ticker-database/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adanos-software%2Ffree-ticker-database/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32586187,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-03T06:36:36.687Z","status":"ssl_error","status_checked_at":"2026-05-03T06:36:09.306Z","response_time":103,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["data","etf","finance","stocks"],"created_at":"2026-04-04T16:41:21.945Z","updated_at":"2026-05-03T22:01:06.024Z","avatar_url":"https://github.com/adanos-software.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Free Global Ticker Database\n\n[![CI](https://github.com/adanos-software/free-ticker-database/actions/workflows/ci.yml/badge.svg)](https://github.com/adanos-software/free-ticker-database/actions/workflows/ci.yml)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)\n\nFree stock and ETF ticker reference data with primary tickers, listing-keyed venue rows, aliases, ISIN/WKN identifiers, cross-listings, and coverage reports.\n\n## Snapshot\n\n| Metric | Value | Meaning |\n|---|---:|---|\n| Primary tickers | 61,984 | Rows in `data/tickers.csv`; one primary row per security. |\n| Full listing rows | 71,092 | Rows in `data/listings.csv`; venue-level rows keyed by `listing_key`, including cross/secondary listings. |\n| Stocks | 46,380 | Primary ticker rows where `asset_type=Stock`. |\n| ETFs | 15,604 | Primary ticker rows where `asset_type=ETF`. |\n| Exchanges | 80 | Distinct primary-listing exchange codes in `data/tickers.csv`. |\n| Countries | 86 | Distinct non-empty `country` values in `data/tickers.csv`. |\n| Aliases | 118,209 | Rows in `data/aliases.csv`; structured alias/name/identifier lookup rows. |\n| ISIN coverage | 56,175 (90.6%) | Primary ticker rows with a non-empty `isin`. |\n| Sector/category coverage | 49,846 (80.4%) | Primary ticker rows with either `stock_sector` or `etf_category`. |\n| Stock sector coverage | 36,694 | Primary ticker rows with a non-empty `stock_sector`. |\n| ETF category coverage | 13,152 | Primary ticker rows with a non-empty `etf_category`. |\n| Core listing-scope rows | 54,172 | Rows in `data/instrument_scopes.csv` where `instrument_scope=core`. |\n| Core primary rows with ISIN | 49,594 | Core primary listing rows with an ISIN; tracked as `scope_reason=primary_listing`. |\n| Core primary rows missing ISIN | 4,578 | Core primary listing rows still missing ISIN; tracked as `scope_reason=primary_listing_missing_isin`. |\n| Extended listing-scope rows | 16,920 | Rows in `data/instrument_scopes.csv` where `instrument_scope=extended`. |\n\n## Core Files\n\n| File | Use |\n|---|---|\n| [`data/tickers.csv`](data/tickers.csv) | Canonical primary ticker export, one row per security |\n| [`data/listings.csv`](data/listings.csv) | Full listing-level export keyed by `listing_key` |\n| [`data/instrument_scopes.csv`](data/instrument_scopes.csv) | Core vs. extended listing scope and primary-listing links |\n| [`data/aliases.csv`](data/aliases.csv) | Alias/name/identifier lookup |\n| [`data/adanos/ticker_reference.csv`](data/adanos/ticker_reference.csv) | Adanos Sentiment API-safe reference export with conservative natural-language aliases |\n| [`data/adanos/natural_language_aliases.csv`](data/adanos/natural_language_aliases.csv) | Natural-language alias candidates with detection policy and confidence |\n| [`data/identifiers.csv`](data/identifiers.csv) | Compact ISIN/WKN lookup |\n| [`data/cross_listings.csv`](data/cross_listings.csv) | Same-ISIN listings across exchanges |\n| [`data/tickers.json`](data/tickers.json) | JSON export for APIs and apps |\n| [`data/tickers.parquet`](data/tickers.parquet) | Analytics export |\n| [`data/tickers.db`](data/tickers.db) | SQLite export |\n\nReference and audit files:\n\n| File | Use |\n|---|---|\n| [`data/listing_index.csv`](data/listing_index.csv) | Listing-keyed identity bridge |\n| [`data/identifiers_extended.csv`](data/identifiers_extended.csv) | FIGI/CIK/LEI enrichment snapshot |\n| [`data/masterfiles/reference.csv`](data/masterfiles/reference.csv) | Official exchange-masterfile reference rows |\n| [`data/masterfiles/source_candidates.json`](data/masterfiles/source_candidates.json) | Official source candidates not yet implemented as parsers |\n| [`data/masterfiles/supplemental_listings.csv`](data/masterfiles/supplemental_listings.csv) | Safe official listings added to the core export |\n| [`data/masterfiles/financialdata_isin_supplemental_listings.csv`](data/masterfiles/financialdata_isin_supplemental_listings.csv) | FinancialData-discovered rows accepted only after official ISIN-bearing masterfile match |\n| [`data/history/latest_snapshot.csv`](data/history/latest_snapshot.csv) | Current listing-status baseline |\n| [`data/reports/coverage_report.json`](data/reports/coverage_report.json) | Machine-readable coverage report |\n| [`data/reports/source_inventory_gap.md`](data/reports/source_inventory_gap.md) | Missing/partial/global official-source backlog |\n| [`data/reports/completion_backlog.md`](data/reports/completion_backlog.md) | Prioritized missing ISIN/sector/category backlog |\n| [`data/reports/alias_quality.md`](data/reports/alias_quality.md) | Alias safety report for natural-language mention detection |\n| [`data/reports/adanos_detection_simulation.md`](data/reports/adanos_detection_simulation.md) | Mention-detection smoke test for Adanos natural-language aliases |\n| [`data/reports/entry_quality.md`](data/reports/entry_quality.md) | Per-listing deterministic quality scan summary |\n| [`data/reports/validation_report.md`](data/reports/validation_report.md) | Release-gate validation summary across structure, ISINs, scopes, aliases, and reports |\n| [`data/reports/override_debt_report.md`](data/reports/override_debt_report.md) | Open reviewed metadata/alias override debt after canonical normalization |\n| [`data/reports/ohlcv_plausibility.md`](data/reports/ohlcv_plausibility.md) | Kronos-inspired market-data plausibility queue |\n| [`data/reports/masterfile_collision_report.json`](data/reports/masterfile_collision_report.json) | Official-symbol gaps blocked by ticker collisions |\n| [`docs/quality_improvement_plan.md`](docs/quality_improvement_plan.md) | Structured quality roadmap from the latest full-dataset audit |\n\n## Data Model\n\n`tickers.csv` is the primary-security export:\n\n```csv\nticker,name,exchange,asset_type,stock_sector,etf_category,country,country_code,isin,aliases\nKO,The Coca-Cola Company,NYSE,Stock,Consumer Staples,,United States,US,US1912161007,coca-cola\n```\n\n`listings.csv` is the full venue export:\n\n```csv\nlisting_key,ticker,exchange,name,asset_type,stock_sector,etf_category,country,country_code,isin,aliases\nNASDAQ::AAPL,AAPL,NASDAQ,Apple Inc,Stock,Information Technology,,United States,US,US0378331005,apple\n```\n\nImportant rules:\n\n- `ticker` is globally unique only in `tickers.csv`; use `listing_key` for venue-level identity.\n- Stocks use `stock_sector`; ETFs use `etf_category`.\n- `instrument_scopes.csv` marks `core`, OTC `extended`, and secondary cross-listings.\n- Core rows without ISIN are tagged as `scope_reason=primary_listing_missing_isin`.\n- Secondary listings stay in `listings.csv` and `cross_listings.csv`; `tickers.csv` keeps one primary row per security.\n- `tickers.csv.aliases` is restricted to conservative natural-language aliases. ISINs, WKNs, and exchange-ticker aliases stay in `data/aliases.csv` and identifier exports.\n- `data/adanos/ticker_reference.csv` is the preferred import for Adanos Sentiment API ticker detection.\n\nJSON metadata:\n\n```json\n{\n  \"_meta\": {\n    \"version\": \"3.16.0\",\n    \"built_at\": \"2026-05-03T19:46:01Z\",\n    \"total_tickers\": 61984\n  },\n  \"tickers\": []\n}\n```\n\nSQLite tables: `tickers`, `listings`, `aliases`, `cross_listings`, and `instrument_scopes`.\n\n## Quality\n\n- Valid ISINs are checksum-verified.\n- `data/reports/alias_quality.csv` classifies every alias as safe, review-only, or identifier-only for mention detection.\n- `data/reports/adanos_detection_simulation.json` measures positive alias hits and negative false-positive probes for the Sentiment API import.\n- Natural-language aliases are derived from current security names on every rebuild, then normalized to API-safe aliases.\n- Duplicate natural-language aliases are either assigned to a clear best owner or removed from public alias columns.\n- `data/reports/entry_quality.csv` stores one deterministic quality row per `listing_key`.\n- `data/reports/validation_report.json` is the release gate: duplicate keys, invalid ISINs, typed sector/category leakage, blank country metadata on ISIN-bearing rows, mojibake name corruption, Adanos alias findings, unexpected entry-quality warnings, and stale coverage counts must be clean.\n- `data/reports/ohlcv_plausibility.csv` stores optional market-data hygiene checks; default runs are no-network and omit unchecked rows unless local OHLCV samples, `--fetch-yahoo`, or `--include-not-checked` are provided.\n- Obvious common-word, wrapper, celebrity, product, junk, short, and numeric aliases are filtered.\n- Rights, units, warrants, notes, preferreds, and depositary lines are filtered from the stock universe.\n- Foreign OTC country metadata is corrected from valid ISIN prefixes where possible.\n- Official masterfiles are kept separate from secondary sources.\n- Yahoo, EODHD, XTB, and FinanceDatabase are treated as reviewed candidate sources, not as exchange authority.\n- Local probe/test artifacts are ignored via `output/` and `test-results/`; committed artifacts live under `data/`.\n\n## Coverage\n\nTop exchanges by primary ticker count:\n\n| Exchange | Tickers |\n|---|---:|\n| OTC | 7,812 |\n| NASDAQ | 4,539 |\n| LSE | 3,767 |\n| TSE | 3,190 |\n| SZSE | 3,083 |\n| HKEX | 2,841 |\n| SSE | 2,787 |\n| BSE_IN | 2,639 |\n| NYSE ARCA | 2,576 |\n| XETRA | 2,228 |\n| NYSE | 2,046 |\n| KRX | 1,796 |\n| TSX | 1,666 |\n| KOSDAQ | 1,583 |\n| B3 | 1,557 |\n| ASX | 1,291 |\n\nFor full exchange, country, source, and verification coverage, use:\n\n```bash\npython3 scripts/build_coverage_report.py\npython3 scripts/build_source_inventory.py\npython3 scripts/build_completion_backlog.py\npython3 scripts/build_alias_quality_report.py\npython3 scripts/build_adanos_ticker_reference.py\npython3 scripts/simulate_adanos_detection.py\npython3 scripts/build_entry_quality_report.py\npython3 scripts/validate_database.py\npython3 scripts/build_ohlcv_plausibility_report.py\npython3 scripts/fetch_symbol_changes.py\nFINANCIALDATA_API_KEY=... python3 scripts/fetch_financialdata_symbols.py\n```\n\nLong OHLCV fetch runs should use streaming checkpoints:\n\n```bash\npython3 scripts/build_ohlcv_plausibility_report.py --fetch-yahoo --include-not-checked --stream --resume\n```\n\n## Refresh Pipeline\n\nQuick rebuild:\n\n```bash\npython3 scripts/rebuild_dataset.py\npython3 scripts/build_listing_history.py\npython3 scripts/build_coverage_report.py\npython3 scripts/build_source_inventory.py\npython3 scripts/build_completion_backlog.py\npython3 scripts/build_alias_quality_report.py\npython3 scripts/build_adanos_ticker_reference.py\npython3 scripts/simulate_adanos_detection.py\npython3 scripts/build_entry_quality_report.py\npython3 scripts/validate_database.py\npython3 scripts/build_ohlcv_plausibility_report.py\npython3 scripts/fetch_symbol_changes.py\n```\n\nPlanned enrichment run:\n\n```bash\npython3 scripts/run_enrichment_pipeline.py --dry-run\n```\n\nUse `--include-secondary-network` for EODHD/Yahoo candidate stages. Use `--apply-reviewed-backfills` only when reviewed candidates should be merged into overrides.\n\nMain targeted backfills:\n\n| Task | Script |\n|---|---|\n| Official masterfiles | `scripts/fetch_exchange_masterfiles.py` |\n| Safe official supplements | `scripts/build_masterfile_supplements.py` |\n| Extended FIGI/CIK/LEI identifiers | `scripts/enrich_global_identifiers.py` |\n| Same-ISIN sector/category peers | `scripts/backfill_sector_from_isin_peers.py` |\n| FinanceDatabase sectors | `scripts/backfill_financedatabase_metadata.py` |\n| EODHD ISIN candidates | `scripts/backfill_eodhd_metadata.py` |\n| XTB OMI ISIN candidates | `scripts/backfill_xtb_omi_isins.py` |\n| Yahoo OTC ISIN candidates | `scripts/backfill_yahoo_otc_isins.py` |\n| ASX official ISINs | `scripts/backfill_asx_isins.py` |\n| Daily symbol-change feed | `scripts/fetch_symbol_changes.py` |\n| FinancialData.net symbol match | `scripts/fetch_financialdata_symbols.py` |\n| FinancialData.net official-ISIN supplements | `scripts/build_financialdata_isin_supplements.py` |\n\nReview queue:\n\n```bash\npython3 scripts/build_entry_quality_report.py\npython3 scripts/build_ohlcv_plausibility_report.py\npython3 scripts/audit_dataset.py --write-defaults\npython3 scripts/run_claude_review_queue.py --model sonnet --skip-existing\npython3 scripts/build_claude_review_overrides.py --min-confidence 0.8\npython3 scripts/rebuild_dataset.py\n```\n\n## Sources\n\nImplemented primary exchange/reference inputs include Nasdaq Trader, Nasdaq Nordic, ASX, Deutsche Boerse, B3, TMX, Euronext, JPX/TSE, TWSE, TPEX, SSE/SZSE, Bursa Malaysia, BME, BMV, WSE/NewConnect, TASE, KRX, HOSE/HNX/UPCOM, CSE Sri Lanka, and SEC company tickers.\n\nOfficial source candidates and reconciled source gaps are tracked in [`data/masterfiles/source_candidates.json`](data/masterfiles/source_candidates.json) and summarized by [`data/reports/source_inventory_gap.md`](data/reports/source_inventory_gap.md). Current source inventory status: `0` missing current-scope sources, `0` parser todo rows, `0` real global-expansion candidates, `30` official-full rows, and `34` official-partial rows. Remaining work is now field-completion and taxonomy coverage, not undiscovered exchange-source inventory.\n\nSecondary/reviewed enrichment inputs include [EODHD](https://eodhd.com/financial-apis/), [FinanceDatabase](https://github.com/JerBouma/FinanceDatabase), XTB OMI specification data, Yahoo Finance review helpers, [FinancialData.net](https://financialdata.net/documentation) symbol-universe matching, OpenFIGI, GLEIF, and curated production aliases from [api.adanos.org](https://api.adanos.org).\n\nFinancialData.net output is intentionally review-only: the international-symbols endpoint has `trading_symbol` and `registrant_name`, but no ISIN or sector. The sync writes [`data/financialdata/international_stock_symbols.csv`](data/financialdata/international_stock_symbols.csv), [`data/reports/financialdata_symbol_match.md`](data/reports/financialdata_symbol_match.md), [`data/reports/financialdata_current_exchange_gaps.csv`](data/reports/financialdata_current_exchange_gaps.csv), and [`data/reports/financialdata_global_expansion_candidates.csv`](data/reports/financialdata_global_expansion_candidates.csv). Missing rows are split into current-exchange gaps and global expansion candidates. The follow-up [`scripts/build_financialdata_isin_supplements.py`](scripts/build_financialdata_isin_supplements.py) only writes supplemental core rows when the FinancialData discovery row matches an official active masterfile row with a valid ISIN, name gate, no existing global ticker, and no existing/selected ISIN.\n\n## Project\n\n- License: [MIT](LICENSE)\n- Changelog: [CHANGELOG.md](CHANGELOG.md)\n- Releases: [GitHub Releases](https://github.com/adanos-software/free-ticker-database/releases)\n- Contributing: [CONTRIBUTING.md](CONTRIBUTING.md)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fadanos-software%2Ffree-ticker-database","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fadanos-software%2Ffree-ticker-database","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fadanos-software%2Ffree-ticker-database/lists"}