Playbook · Financial Market Data

Convert an ISIN, exchange code or company name to a stock ticker

Send an ISIN, a local exchange code or a company name and get the matching ticker with its exchange, currency and price, plus the other exchanges the share trades on.

In short

Call /search with the ISIN, exchange code or company name as the query. data.stock lists every matching listing with symbol, exchange, currency and price, so you can pick the exchange you need.

The use case

Broker statements, fund holdings and data feeds identify shares by ISIN or by a local code, while charts and quote APIs want a ticker. Mapping one to the other is the first step of every portfolio import.

Who does this: Portfolio trackers and wealth apps importing statements, fintech data teams normalizing identifiers, and research tools matching company names to listed shares.

How to do it

Uses the Real-Time Finance Data API, tested live on October 28, 2026. Call /search with the identifier as the query. Here, Apple's ISIN:

import requests

r = requests.get(
    "https://api.openwebninja.com/realtime-finance-data/search",
    headers={"x-api-key": "YOUR_API_KEY"},
    params={"query": "US0378331005"},
)
for s in r.json()["data"]["stock"]:
    print(s["symbol"], "|", s["name"], "|", s["exchange"], s["currency"], s["price"])
Result
AAPL:NASDAQ | Apple Inc | NASDAQ USD 347.1
AAPL:WSE | Apple Inc | WSE PLN 1348.6
1AAPL:BIT | Apple Inc | BIT EUR 294.9
AAPL:SWX | Apple Inc | SWX CHF 280.7
APC:ETR | Apple Inc | ETR EUR 311.1
AAPL-USD:SWX | Apple Inc | SWX USD 312.5
Full response of the cURL call above · JSON
{
  "status": "OK",
  "request_id": "ec55ece7-d127-4a77-9be8-d23d5a04ebe4",
  "data": {
    "stock": [
      {
        "symbol": "AAPL:NASDAQ",
        "name": "Apple Inc",
        "type": "stock",
        "price": 347.1,
        "change": 3.19,
        "change_percent": 0.9276,
        "previous_close": 343.91,
        "last_update_utc": "2026-10-28 09:29:11",
        "country_code": "US",
        "exchange": "NASDAQ",
        "exchange_open": "2026-10-27 09:30:00",
        "exchange_close": "2026-10-27 16:00:00",
        "timezone": "America/New_York",
        "utc_offset_sec": -14400,
        "currency": "USD",
        "google_mid": "/m/07zmbvf"
      },
      {
        "symbol": "AAPL:WSE",
        "name": "Apple Inc",
        "type": "stock",
        "price": 1348.6,
        "change": 0,
        "change_percent": 0,
        "previous_close": 1348.6,
        "last_update_utc": "2026-10-28 08:04:42",
        "country_code": "PL",
        "exchange": "WSE",
        "exchange_open": "2026-10-26 09:00:00",
        "exchange_close": "2026-10-26 17:00:00",
        "timezone": "Europe/Warsaw",
        "utc_offset_sec": 3600,
        "currency": "PLN",
        "google_mid": "/g/11w4ft3n8v"
      },
      {
        "symbol": "1AAPL:BIT",
        "name": "Apple Inc",
        "type": "stock",
        "price": 294.9,
        "change": 2.8,
        "change_percent": 0.9586,
        "previous_close": 292.1,
        "last_update_utc": "2026-10-02 16:00:00",
        "country_code": "IT",
        "exchange": "BIT",
        "exchange_open": "2026-10-02 09:00:00",
        "exchange_close": "2026-10-02 17:26:00",
        "timezone": "Europe/Rome",
        "utc_offset_sec": 3600,
        "currency": "EUR",
        "google_mid": "/g/11fzyls3dt"
      },
      {
        "symbol": "AAPL:SWX",
        "name": "Apple Inc",
        "type": "stock",
        "price": 280.7,
        "change": 0,
        "change_percent": 0,
        "previous_close": 280.7,
        "last_update_utc": "2026-10-28 09:06:43",
        "country_code": "CH",
        "exchange": "SWX",
        "exchange_open": "2026-10-20 09:00:00",
        "exchange_close": "2026-10-20 17:30:00",
        "timezone": "Europe/Zurich",
        "utc_offset_sec": 3600,
        "currency": "CHF",
        "google_mid": "/g/11b6dns5cc"
      },
      {
        "symbol": "APC:ETR",
        "name": "Apple Inc",
        "type": "stock",
        "price": 311.1,
        "change": -0.15,
        "change_percent": -0.0482,
        "previous_close": 311.25,
        "last_update_utc": "2026-10-28 09:12:04",
        "country_code": "DE",
        "exchange": "ETR",
        "exchange_open": "2026-10-28 09:00:00",
        "exchange_close": "2026-10-28 17:30:00",
        "timezone": "Europe/Berlin",
        "utc_offset_sec": 3600,
        "currency": "EUR",
        "google_mid": "/g/11f102cqtm"
      },
      {
        "symbol": "AAPL-USD:SWX",
        "name": "Apple Inc",
        "type": "stock",
        "price": 312.5,
        "change": 0,
        "change_percent": 0,
        "previous_close": 312.5,
        "last_update_utc": "2026-10-28 09:01:54",
        "country_code": "CH",
        "exchange": "SWX",
        "exchange_open": "2026-06-08 09:00:00",
        "exchange_close": "2026-06-08 17:30:00",
        "timezone": "Europe/Zurich",
        "utc_offset_sec": 3600,
        "currency": "USD",
        "google_mid": "/g/11cp7hgxn5"
      }
    ],
    "ETF": [],
    "index": [],
    "mutual_fund": [],
    "currency": [],
    "futures": []
  }
}

For a whole list

For a list of mixed identifiers, keep the first match and count the other listings:

import csv
import requests

API_KEY = "YOUR_API_KEY"
URL = "https://api.openwebninja.com/realtime-finance-data/search"
inputs = ["US0378331005", "DE0007236101", "603345", "Siemens AG", "Siemens"]

with open("tickers.csv", "w", newline="") as f:
    w = csv.writer(f)
    w.writerow(["input", "symbol", "name", "exchange", "currency", "other_listings"])
    for q in inputs:
        stocks = (requests.get(URL, headers={"x-api-key": API_KEY},
                               params={"query": q}, timeout=60).json().get("data") or {}).get("stock") or []
        top = stocks[0] if stocks else {}
        w.writerow([q, top.get("symbol"), top.get("name"), top.get("exchange"), top.get("currency"),
                    len(stocks) - 1 if stocks else 0])
tickers.csv
input,symbol,name,exchange,currency,other_listings
US0378331005,AAPL:NASDAQ,Apple Inc,NASDAQ,USD,5
DE0007236101,SIE:VIE,Siemens AG,VIE,EUR,5
603345,603345:SHA,Anjoy Foods Group Co Ltd,SHA,CNY,0
Siemens AG,SIE:VIE,Siemens AG,VIE,EUR,4
Siemens,SIEMENS:NSE,Siemens Ltd,NSE,INR,4

Five lookups took 6 seconds.

Good to know

  • An ISIN returns every listing of the share. Apple's ISIN returned 6, from NASDAQ to Warsaw and Milan.
  • The first listing is not always the home exchange. Siemens' ISIN returned Vienna (SIE:VIE) first, so pick the exchange you want from the list.
  • Bare local codes work. 603345 returned Anjoy Foods on the Shanghai exchange.
  • Company names are ambiguous. "Siemens" returned Siemens Ltd in India; "Siemens AG" returned the German company.

Frequently asked questions

How do I convert the ETF ISINs on my broker statement to tickers?

The response has separate lists for stocks, ETFs, indexes, mutual funds, currencies and futures, so search with the ETF's ISIN or name and read the ETF list.

After converting ISINs to tickers, how do I get live prices for all of them at once?

Each match already includes price, change and previous close. For several tickers at once, /stock-quote takes up to 100 symbols per request.

Should I search by ISIN or by company name?

ISINs and exchange codes give exact matches. Company names can match the wrong company, as with Siemens above.

Start building with real-time web data

Every API includes a free tier. No credit card required, and the first request is a minute away.