> ## Documentation Index
> Fetch the complete documentation index at: https://www.logo.dev/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Stock Ticker Logo API: Company Logos by Symbol

> Stock logo API: get company logos by ticker symbol across NYSE, NASDAQ, and global exchanges, with the standard logo size and format options.

export const LogoDemo = ({type = "domain"}) => {
  const DEFAULT_VALUES = {
    domain: "logo.dev",
    name: "Shopify",
    crypto: "BTC",
    ticker: "AAPL",
    isin: "US0378331005"
  };
  const PLACEHOLDERS = {
    domain: "Enter a domain...",
    name: "Enter a brand name...",
    crypto: "Enter a crypto symbol...",
    ticker: "Enter a stock ticker...",
    isin: "Enter an ISIN..."
  };
  const LABELS = {
    domain: "company domain",
    name: "brand name",
    crypto: "cryptocurrency symbol",
    ticker: "stock ticker",
    isin: "ISIN"
  };
  const [input, setInput] = useState("");
  const [displayValue, setDisplayValue] = useState(DEFAULT_VALUES[type] || DEFAULT_VALUES.domain);
  const [imageError, setImageError] = useState(false);
  const normalizeInput = useCallback(value => {
    if (!value) return "";
    let cleaned = value.trim();
    if (type === "domain") {
      cleaned = cleaned.replace(/^https?:\/\//, "");
      cleaned = cleaned.replace(/^www\./, "");
      cleaned = cleaned.split("/")[0].split("?")[0];
      if (cleaned.includes(".")) {
        return cleaned.toLowerCase();
      }
      if (cleaned.length > 0) {
        return `${cleaned.toLowerCase()}.com`;
      }
    }
    if (type === "name") {
      return encodeURIComponent(cleaned);
    }
    if (type === "crypto" || type === "ticker" || type === "isin") {
      return cleaned.toUpperCase();
    }
    return cleaned;
  }, [type]);
  const handleInputChange = useCallback(e => {
    const value = e.target.value;
    setInput(value);
    const normalized = normalizeInput(value);
    if (normalized) {
      setDisplayValue(normalized);
      setImageError(false);
    } else if (value === "") {
      setDisplayValue(DEFAULT_VALUES[type] || DEFAULT_VALUES.domain);
    }
  }, [normalizeInput, type]);
  const handleImageError = useCallback(() => {
    setImageError(true);
  }, []);
  const imageUrl = useMemo(() => {
    const baseUrl = "https://img.logo.dev";
    const token = "live_6a1a28fd-6420-4492-aeb0-b297461d9de2";
    const params = "format=webp&retina=true&size=128";
    if (type === "domain") {
      return `${baseUrl}/${displayValue}?token=${token}&${params}`;
    }
    return `${baseUrl}/${type}/${displayValue}?token=${token}&${params}`;
  }, [displayValue, type]);
  return <div className="not-prose my-8 rounded-2xl border border-zinc-950/10 dark:border-white/10 bg-gradient-to-br from-zinc-50 to-white dark:from-zinc-900 dark:to-zinc-950 p-8 shadow-sm">
      <div className="max-w-2xl mx-auto space-y-6">
        {}
        <div className="flex justify-center" role="img" aria-label={`${LABELS[type]} logo preview`}>
          <div className="rounded-2xl bg-zinc-100 dark:bg-zinc-800/50 inline-flex items-center justify-center">
            <img alt={`${displayValue} logo`} width="128" height="128" src={imageUrl} onError={handleImageError} className="rounded-lg" loading="lazy" key={displayValue} />
          </div>
        </div>
        {}
        <div className="relative">
          <label htmlFor="logo-input" className="sr-only">
            Enter {LABELS[type]}
          </label>
          <div className="absolute inset-y-0 left-4 flex items-center pointer-events-none">
            <svg className="h-5 w-5 text-zinc-400" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="true">
              <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z" />
            </svg>
          </div>
          <input id="logo-input" type="text" value={input} onChange={handleInputChange} placeholder={PLACEHOLDERS[type] || PLACEHOLDERS.domain} aria-describedby={imageError ? "image-error" : undefined} className="w-full pl-12 pr-4 py-4 text-lg rounded-xl border border-zinc-950/10 dark:border-white/20 bg-white dark:bg-zinc-900 text-zinc-950 dark:text-white placeholder:text-zinc-400 focus:outline-none focus:ring-2 focus:ring-zinc-950/20 dark:focus:ring-white/20 transition-shadow" />
          {imageError && <p id="image-error" className="sr-only">
              Logo not found for {displayValue}
            </p>}
        </div>
      </div>
    </div>;
};

Get company and stock market logos for your financial website or application using stock ticker symbols.

The stock logo API maps ticker symbols to company logos and works with symbols from all major global exchanges — ideal for brokerages, portfolio trackers, and market dashboards.

## Try it yourself

Enter any stock ticker symbol below to see the company logo. Supports NYSE, NASDAQ, and global exchanges.

<LogoDemo type="ticker" />

***

### How to use stock ticker logos

Using the stock ticker logo API is very simple, all you need is your publishable key from the [Logo.dev dashboard](https://www.logo.dev/dashboard).

<Frame caption="https://img.logo.dev/ticker/etsy?token=LOGO_DEV_PUBLISHABLE_KEY">
  <img alt="Etsy Logo" width="100" height="100" src="https://img.logo.dev/ticker/etsy?token=live_6a1a28fd-6420-4492-aeb0-b297461d9de2&size=200" />
</Frame>

Here's an example of how to implement a stock ticker logo lookup for Etsy on your website:

<CodeGroup>
  ```html Example theme={null}
  <img src="https://img.logo.dev/ticker/etsy?token=LOGO_DEV_PUBLISHABLE_KEY" alt="Etsy stock ticker logo" />
  ```

  ```html Format theme={null}
  <img
    src="https://img.logo.dev/ticker/:symbol?token=LOGO_DEV_PUBLISHABLE_KEY"
    alt="Stock ticker logo"
  />
  ```
</CodeGroup>

Anywhere you can use an image URL, such as Excel, Slack, or email, you can use this endpoint:

<CodeGroup>
  ```html Example theme={null}
  https://img.logo.dev/ticker/etsy?token=LOGO_DEV_PUBLISHABLE_KEY
  ```

  ```html Format theme={null}
  https://img.logo.dev/ticker/:symbol?token=LOGO_DEV_PUBLISHABLE_KEY
  ```
</CodeGroup>

### How stock ticker lookup works

For supported exchanges, ticker symbols are mapped to domain names. So whether you do a lookup by ticker symbol or domain name, you'll get the same result.

### Exchange support

We support ticker symbols from all major global exchanges. By default, if you don't specify an exchange, we'll search American markets (NYSE and NASDAQ).

To specify a particular exchange, append the exchange shortcode after the ticker symbol with a dot:

<CodeGroup>
  ```html American markets (default) theme={null}
  <img src="https://img.logo.dev/ticker/AAPL?token=LOGO_DEV_PUBLISHABLE_KEY" alt="Apple stock ticker logo" />
  ```

  ```html London Stock Exchange theme={null}
  <img
    src="https://img.logo.dev/ticker/AAPL.L?token=LOGO_DEV_PUBLISHABLE_KEY"
    alt="Apple logo from London Stock Exchange"
  />
  ```

  ```html Tokyo Stock Exchange theme={null}
  <img
    src="https://img.logo.dev/ticker/7203.T?token=LOGO_DEV_PUBLISHABLE_KEY"
    alt="Toyota stock ticker logo from Tokyo Stock Exchange"
  />
  ```
</CodeGroup>

### Exchange shortcodes

| Shortcode | Exchange                       |
| --------- | ------------------------------ |
| None      | US Exchanges                   |
| .AS       | Euronext Amsterdam             |
| .AT       | Athens Exchange                |
| .AX       | Australian Securities Exchange |
| .BA       | Buenos Aires Exchange          |
| .BE       | Berlin Exchange                |
| .BK       | Thailand Exchange              |
| .BR       | Euronext Brussels              |
| .CA       | Canadian Securities Exchange   |
| .CO       | Copenhagen Exchange            |
| .DU       | Dusseldorf Exchange            |
| .HA       | Hanover Exchange               |
| .HE       | Helsinki Exchange              |
| .HK       | Hong Kong Stock Exchange       |
| .HM       | Hamburg Exchange               |
| .IC       | Iceland Exchange               |
| .IL       | London International           |
| .IN       | Indian Stock Exchange          |
| .IR       | Irish Exchange                 |
| .JK       | Jakarta Exchange               |
| .KQ       | Korean Exchange                |
| .L        | London Stock Exchange          |
| .LS       | Euronext Lisbon                |
| .MC       | Madrid Exchange                |
| .MI       | Milan Exchange                 |
| .MU       | Munich Exchange                |
| .MX       | Mexican Exchange               |
| .NE       | NEO Exchange                   |
| .OL       | Oslo Stock Exchange            |
| .PA       | Euronext Paris                 |
| .PR       | Prague Stock Exchange          |
| .SA       | São Paulo Exchange             |
| .SI       | Singapore Exchange             |
| .SN       | Chilean Stock Exchange         |
| .ST       | Stockholm Exchange             |
| .SW       | SIX Swiss Exchange             |
| .T        | Tokyo Stock Exchange           |
| .TA       | Tel Aviv Stock Exchange        |
| .TO       | Toronto Stock Exchange         |
| .TW       | Taiwan Stock Exchange          |
| .TWO      | Taiwan OTC Exchange            |
| .V        | TSX Venture Exchange           |
| .VI       | Vienna Exchange                |

### FAQs

<AccordionGroup>
  <Accordion title="Can I change the size or image format?">
    Yes, all the parameters of the [logo endpoint](/docs/logo-images/get) are also available for the ticker endpoint.
  </Accordion>

  <Accordion title="Does this support ETFs and other security types?">
    Yes, we've added support for every ticker symbol to return the proper logo.
  </Accordion>

  <Accordion title="Do you support crypto?">
    Yes, we support cryptocurrency logos through our dedicated crypto endpoint. [View the crypto documentation](./crypto).
  </Accordion>

  <Accordion title="What if I find a missing or wrong ticker logo?">
    We're obsessed with quality. You can report issues in two ways: - Submit an update at [logo.dev/update](https://www.logo.dev/update) - Report directly from the dashboard when you're logged in
  </Accordion>
</AccordionGroup>
