# Brand Data API - Logos, Colors, Fonts, Company Info (`nabeelbaghoor/brand-logo-data-api`) Actor

Look up brand data by domain, stock ticker, ISIN or crypto symbol, and search brands by name. Returns logos, icons, brand colors, fonts, description, industry, employee count, founded year, location and social links as flat rows. Pay per result. Bring your own API key.

- **URL**: https://apify.com/nabeelbaghoor/brand-logo-data-api.md
- **Developed by:** [Nabeel Hassan](https://apify.com/nabeelbaghoor) (community)
- **Categories:** Business, Developer tools, Lead generation
- **Stats:** 2 total users, 1 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$12.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Brand Data API - Logos, Colors, Fonts and Company Info

Turn a list of domains, stock tickers, ISINs or crypto symbols into structured brand records: logo and icon URLs, brand colors, fonts, description, industry, employee count, founded year, headquarters and social links, one flat row per brand.

### What this actor does

- **Looks up brands by domain**, the way you enrich a CRM export or a signup list.
- **Looks up brands by stock ticker, ISIN or crypto symbol**, using the provider's explicit typed routes rather than the auto-detecting legacy route that collides on ambiguous strings.
- **Searches brands by name** and returns candidate brands with their domains, which is how you resolve a company name you have into a domain you can enrich.
- **Promotes the useful pieces into flat columns**: logo, icon, symbol and banner URLs picked by theme and format, accent and brand colors, title and body fonts, firmographics and location. The untouched API record stays under `raw`.
- **Records misses instead of hiding them.** An identifier with no brand record becomes a row with `matched: false`, so a list with dead domains still finishes and you can see exactly which inputs resolved.
- **Never charges for a miss.** Only rows carrying an actual brand record are billed.

### Input

| Field | What it does |
| --- | --- |
| `domains` | Company domains to look up. A pasted URL is reduced to the bare hostname. |
| `tickers` | Listed stock ticker symbols, for example `NKE`. |
| `isins` | Twelve character securities identifiers, for example `US0378331005`. |
| `cryptoSymbols` | Cryptocurrency symbols, for example `BTC`. |
| `brandNames` | Brand names to run through brand search. Uses the client id, not the API key. |
| `logoTheme` | Which themed logo to promote into the logo columns: light or dark background. |
| `includeContext` | Also fetch the brand context record per domain: positioning, tone of voice, audience. |
| `skipUnmatched` | Leave unresolved identifiers out of the dataset. |
| `maxResults` | Hard cap on rows, and therefore on spend and run time. |
| `apiKey` | Your own API key, sent as a bearer token. Stored as a secret. |
| `clientId` | Your own client id for brand search. A separate credential from the API key. Stored as a secret. |

### Example output

```json
{
  "recordType": "brand",
  "matched": true,
  "queryType": "domain",
  "query": "example.com",
  "name": "Example Labs",
  "domain": "example.com",
  "description": "Runtime security for containerised workloads.",
  "qualityScore": 0.94,
  "logoUrl": "https://cdn.example.com/example.com/logo.svg",
  "iconUrl": "https://cdn.example.com/example.com/icon.png",
  "colorAccent": "#3b5bdb",
  "colors": ["#3b5bdb", "#0a2540", "#ffffff"],
  "fontTitle": "Inter",
  "fontBody": "Inter",
  "employees": 320,
  "foundedYear": 2018,
  "industries": ["Software", "Security"],
  "city": "Berlin",
  "country": "Germany",
  "countryCode": "DE",
  "links": { "linkedin": "https://linkedin.com/company/example-labs", "twitter": "https://twitter.com/examplelabs" },
  "raw": { }
}
```

### Frequently asked questions

#### What data does the Brand Data API return?

Each brand record carries the brand's name, domain and description, logo, icon, symbol and banner images in vector and raster formats, the brand color palette with each color's role, the title and body fonts, and firmographics: employee count, founded year, industry list, company kind and headquarters city, state, region and country. Social and web links are returned as a name to URL map.

#### Do I need my own API key?

Yes. This actor does not include data access. You use your own API key from Brandfetch, which is the provider whose API this actor calls, created on their developer portal. Your own plan, quota and terms apply. Paste the key into the `apiKey` field, where it is stored as an Apify secret and sent as a bearer header rather than a URL parameter, so it never appears in a log line or a redirect. Brand name search authenticates with a separate client id, which is why `clientId` is its own field.

#### What is the difference between brand lookup and brand search?

Lookup takes an identifier you already have (a domain, ticker, ISIN or crypto symbol) and returns one complete brand record. Search takes a brand name you do not have an identifier for and returns candidate brands with their domains and icons. The usual pipeline is search first to resolve names to domains, then look those domains up.

#### How do I get a logo for a dark background?

Set `logoTheme` to `dark`. The actor prefers a dark-theme logo entry when picking `logoUrl`, `iconUrl`, `symbolUrl` and `bannerUrl`, and falls back to whatever theme exists. Every logo variant the record carries is still available under `raw.logos`.

#### Which image format do the logo columns point at?

The highest quality usable format available, ranked vector first, then PNG, WebP and JPEG, and within a format the widest variant. A vector URL scales to any size downstream, which is why it wins.

#### What happens when a domain has no brand record?

The row is written with `matched: false` and an `error` explaining the miss, and the run continues to the next identifier. Misses are not charged for. Set `skipUnmatched` to true to leave them out of the dataset entirely.

#### How much does a run cost?

Pricing is pay per result: you are charged for each brand record returned to the dataset, and never for misses or duplicates. Apify platform usage is included in the per-result price. Your own API provider's quota is separate and billed by them.

#### How many requests does a run make?

One per identifier, because the provider has no bulk lookup endpoint. A 500 domain list is 500 requests. The actor paces itself well under the documented throughput limits and backs off on HTTP 429, so a large list finishes rather than tripping the limiter halfway through.

### Keyword map

brand data API, logo API, brand logo lookup, company logo API, brand colors API, brand fonts API, domain to brand, ticker to brand, ISIN lookup, crypto symbol lookup, brand search API, company enrichment by domain, firmographic enrichment, brand assets API, brand identity data, CRM logo enrichment

# Actor input Schema

## `domains` (type: `array`):

Company domains to look up, one per line. A full URL works too: it is reduced to the bare hostname before the request.

## `tickers` (type: `array`):

Listed stock ticker symbols to look up, one per line, for example NKE or AAPL.

## `isins` (type: `array`):

International Securities Identification Numbers to look up, one per line. An ISIN is a twelve character code, for example US0378331005.

## `cryptoSymbols` (type: `array`):

Cryptocurrency symbols to look up, one per line, for example BTC or ETH.

## `brandNames` (type: `array`):

Brand names to run through the brand search endpoint, one per line. Search returns candidate brands with their domains, which is how you resolve a name you have to a domain you can look up. Search uses the client id below, not the API key.

## `logoTheme` (type: `string`):

Which themed logo to promote into the logoUrl, iconUrl, symbolUrl and bannerUrl columns. Every logo the record carries is still available under raw.

## `includeContext` (type: `boolean`):

Also fetch the brand context record for each domain, which carries positioning, tone of voice and target audience. This is one extra request per domain and needs a plan that includes the brand context endpoint.

## `skipUnmatched` (type: `boolean`):

Leave identifiers that returned no brand record out of the dataset. Off by default, because keeping the misses is what lets you see which inputs resolved. Unmatched rows are never charged for either way.

## `maxResults` (type: `integer`):

Stop after this many rows. Lookup costs one request per identifier, so this is the cap on both spend and run time.

## `apiKey` (type: `string`):

Your own brand data API key, used as a bearer token for the lookup and context endpoints. Required for domain, ticker, ISIN and crypto lookups. Leave empty only if you are running brand name search alone.

## `clientId` (type: `string`):

Your own client id for the brand search endpoint. This is a separate credential from the API key and is only needed when you fill in brand names to search.

## Actor input object example

```json
{
  "domains": [
    "stripe.com",
    "figma.com"
  ],
  "logoTheme": "light",
  "includeContext": false,
  "skipUnmatched": false,
  "maxResults": 100
}
```

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "domains": [
        "stripe.com",
        "figma.com"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("nabeelbaghoor/brand-logo-data-api").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "domains": [
        "stripe.com",
        "figma.com",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("nabeelbaghoor/brand-logo-data-api").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "domains": [
    "stripe.com",
    "figma.com"
  ]
}' |
apify call nabeelbaghoor/brand-logo-data-api --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,nabeelbaghoor/brand-logo-data-api"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/lstJmSfXBo4AiY63B/builds/jEJJmvFkcG7kd0LeC/openapi.json
