> ## 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.

# Get company logos by ISIN

> Get company logos by International Securities Identification Number (ISIN). Supports global securities with all standard logo size and format parameters.

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 logos for your financial website or application using International Securities Identification Numbers (ISIN).

Works with ISIN codes for securities from markets worldwide.

## Try it yourself

Enter any ISIN code below to see the company logo.

<LogoDemo type="isin" />

***

### How to use ISIN logos

Using the ISIN 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/isin/US0378331005?token=LOGO_DEV_PUBLISHABLE_KEY">
  <img alt="Apple Logo" width="100" height="100" src="https://img.logo.dev/isin/US0378331005?token=live_6a1a28fd-6420-4492-aeb0-b297461d9de2&size=200" />
</Frame>

Here's an example of how to implement an ISIN logo lookup for Apple on your website:

<CodeGroup>
  ```html Example theme={null}
  <img src="https://img.logo.dev/isin/US0378331005?token=LOGO_DEV_PUBLISHABLE_KEY" alt="Apple ISIN logo" />
  ```

  ```html Format theme={null}
  <img
    src="https://img.logo.dev/isin/:isin?token=LOGO_DEV_PUBLISHABLE_KEY"
    alt="ISIN 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/isin/US0378331005?token=LOGO_DEV_PUBLISHABLE_KEY
  ```

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

### How ISIN lookup works

We map ISIN codes to their corresponding company domains to retrieve the correct logo. This ensures you get the official brand asset for the security's underlying company.

### Supported ISINs

We support valid ISIN codes from all major global markets. The 12-character alphanumeric code typically consists of:

* A two-letter country code (e.g., US, DE, GB)
* A nine-character alphanumeric national security identifier
* A single check digit

<Note>
  If you find an ISIN that doesn't return the expected logo, please [report
  it](mailto:support@logo.dev?subject=Missing%20ISIN%20Logo) or submit an update
  via the dashboard.
</Note>
