# Company Logo & Favicon Finder (`lowlanddata/company-logo-finder`) Actor

Fetch company logos, favicons and social images in bulk from a list of domains. Reads only the site's public brand assets - GDPR-clean, no personal data. Free on a no-match.

- **URL**: https://apify.com/lowlanddata/company-logo-finder.md
- **Developed by:** [Lowland Data](https://apify.com/lowlanddata) (community)
- **Categories:** Lead generation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 brand assets founds

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/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

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

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Company Logo & Favicon Finder

You have a list of company domains and you need their logos — for a CRM, a
partner directory, a comparison page, an email signature, a slide. Clearbit's free
logo API was the tool everyone reached for; it moved behind an enterprise product,
and the scripts that depended on it broke.

Give this a list of domains and it hands back, for each one, the brand images the
site publishes about itself: its favicon, its high-resolution apple-touch icon
(the closest thing to a square logo most sites declare), its social-share image,
and its theme colour. It reads only what the site itself advertises in its
homepage `<head>` — public brand assets, nothing personal.

Every field is about the *company*, not a person. No names, no emails, no contact
data — the same GDPR-first line the rest of this account holds.

**Live health record:** [lowlanddata.com/status/company-logo-finder](https://lowlanddata.com/status/company-logo-finder/) - 30-day success rate and daily canary results, failures included. Full input/output reference: [tool page](https://lowlanddata.com/tools/company-logo-finder/).

### Quick start (30 seconds)

1. Paste your domains into **domains**, one per line — `stripe.com`,
   `https://adyen.com` and `www.colruyt.be` all work.
2. Click **Start**. Each domain comes back with its favicon, logo and social-image
   URLs, plus a status.
3. Only have company names, not domains? Run the
   [Company Domain Finder](https://apify.com/lowlanddata/company-domain-finder)
   first, then feed its `domain` column in here.

### What you can build with it

- **Fill the logo column in a CRM or directory.** One batch turns a domain list
  into a set of ready-to-use image URLs.
- **Show partner or customer logos on a page.** A "trusted by" wall or a
  marketplace listing, each logo pulled from the company's own site.
- **Brand an outreach tool.** Drop the favicon or apple-touch icon next to a
  company in your sequencer, dashboard or email.
- **Match a company's brand colour.** `themeColor` gives the accent the site uses,
  handy for cards and badges.

### What you get

Each domain is one row:

```json
{
  "input": "stripe.com",
  "domain": "stripe.com",
  "website": "https://stripe.com",
  "faviconUrl": "https://stripe.com/favicon.ico",
  "appleTouchIconUrl": "https://stripe.com/apple-touch-icon.png",
  "ogImageUrl": "https://stripe.com/img/og.png",
  "iconUrls": ["https://stripe.com/apple-touch-icon.png", "https://stripe.com/favicon.ico"],
  "themeColor": "#635bff",
  "status": "found",
  "checkedAt": "2026-09-25T10:00:00.000Z"
}
```

Field notes:

- `faviconUrl` is the best square icon the site declares — the largest one, or the
  `/favicon.ico` convention when it declares none.
- `appleTouchIconUrl` is the high-resolution square icon meant for phone home
  screens; it is usually the cleanest logo mark a site publishes.
- `ogImageUrl` is the social-share image — often the wordmark or a brand banner,
  good for a wide slot rather than a square one.
- `iconUrls` lists every icon the site declares, largest first, if you want to pick
  your own size.
- `status` is `found` (the site declared real assets), `partial` (nothing declared,
  so only the `/favicon.ico` guess is offered), `unreachable` (the homepage could
  not be read), or `invalid` (the input was not a domain).

### How it finds the assets

It fetches each domain's homepage, follows redirects to the canonical site, and
reads the brand tags in the `<head>`: the `<link rel="icon">` and
`apple-touch-icon` entries, the `og:image`/`twitter:image` meta, and the
`theme-color`. Icon URLs are resolved to absolute and sorted largest-first. When a
site declares nothing, it offers the `/favicon.ico` convention and marks the row
`partial` rather than pretending. It never invents an asset the site does not
point to.

### What does it cost?

$3.00 per 1,000 domains with **declared** brand assets (`found`). A domain that
declares nothing, is unreachable, or was not a valid domain is delivered **free** —
you pay only for real results. A run that finds nothing costs the $0.00005 actor
start and nothing else.

- **A 500-domain list, most resolving ≈ $1.40**, once.
- **A daily 50-domain feed ≈ $0.12/month.**

The price is all-inclusive: platform usage and homepage traffic are covered, and
the free plan returns a 5-item sample per run so you can see the output shape first.

### Not technical? Let your AI assistant set it up

Copy this into ChatGPT, Claude or any AI assistant, fill in the one line, and
follow the conversation:

```text
Help me set up the "Company Logo & Favicon Finder" actor on Apify
(https://apify.com/lowlanddata/company-logo-finder). Guide me one step at a time.

What I have: [E.G. "a spreadsheet of 200 company domains I need logos for"]

Guide me to:
1. Create a free Apify account (apify.com), open the actor page, and paste my
   domains into the domains field, one per line.
2. Start a run, then export the results as CSV or Excel, or read them from the API.
3. Explain which column to use for a square logo (appleTouchIconUrl or faviconUrl)
   versus a wide one (ogImageUrl).
4. If I only have company names, point me to the Company Domain Finder to get the
   domains first.
5. If it works, remind me to leave a quick rating on the actor page.
```

### Input

| Field      | Description                                                                                                  |
| ---------- | ------------------------------------------------------------------------------------------------------------ |
| `domains`  | The domains to fetch brand assets for, one per line. A bare domain, a URL, or a www host all work. Required. |
| `maxItems` | Stop after this many domains. Default 1000; free-plan runs are capped at 5.                                  |

### Use it from your code

```bash
curl -X POST "https://api.apify.com/v2/acts/lowlanddata~company-logo-finder/run-sync-get-dataset-items?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"domains": ["stripe.com", "adyen.com"]}'
```

Schedules, webhooks and the Make/Zapier/n8n integrations all apply. This is a
standard Apify actor.

### Use it with AI agents (MCP)

Through Apify's hosted MCP server, an agent can call this as a tool: hand over the
domains, read the logo URLs back.

Claude Code:

```bash
claude mcp add apify --transport http "https://mcp.apify.com?actors=lowlanddata/company-logo-finder"
```

Cursor or Claude Desktop (add a custom connector / MCP server with this URL):

```text
https://mcp.apify.com?actors=lowlanddata/company-logo-finder
```

Runs bill to the Apify account you sign in with. Per-client setup: [Apify MCP docs](https://docs.apify.com/platform/integrations/mcp).

### Is it legal to fetch company logos?

A company's favicon, icons and social image are public brand assets it publishes on
its own homepage for exactly this kind of use. This reads only the public `<head>`
of the public homepage — nothing gated, nothing personal. Trademark still belongs
to its owner: the URLs point at the company's own hosted images, so you display the
real asset rather than a copy, and how you use a logo is between you and its owner.

### Is there a company logo API?

This is one — the pay-per-result replacement for the free logo lookups that moved
behind enterprise products. Send domains to `run-sync-get-dataset-items` and read
the logo, favicon and social-image URLs straight back as JSON, on a schedule, or as
an MCP tool.

### FAQ

**Which field is the actual logo?** There is no universal "logo" tag, so this
returns the closest honest proxies: `appleTouchIconUrl` (a high-res square mark) is
usually best for a square slot, `ogImageUrl` for a wide one, and `faviconUrl` for a
tiny one. `iconUrls` lists them all so you can pick.

**Do the image URLs stay valid?** They point at the company's own hosting, so they
live as long as the company keeps them — the same as any image on its site. Re-run
the actor to refresh.

**Why is a row `partial`?** The homepage loaded but declared no icons or social
image, so only the `/favicon.ico` convention is offered. It usually exists, but it
is a guess, so the row says so and it is not billed.

**Does it return anything personal?** No. Brand images, a theme colour and the
domain — nothing about any person, by design.

**Can I export the results to Excel?** Yes: any dataset exports as Excel, CSV, JSON
or XML from the Apify Console or API.

**Why did I only get 5 results?** The Apify free plan caps this actor at a 5-item
sample. Any paid plan lifts the cap to your `maxItems`.

### The company-identity family

The domain is the key that unlocks the rest. This tool is one rung; each takes the
domain and adds one organisation-level layer, nothing personal:

- [Company Domain Finder](https://apify.com/lowlanddata/company-domain-finder) — company name → website domain, the entry point.
- [Company Socials Finder](https://apify.com/lowlanddata/company-socials-finder) — a domain's LinkedIn, X, Instagram and more.
- [EU Company VAT Finder](https://apify.com/lowlanddata/company-vat-finder) — the official EU VAT id behind a domain, VIES-validated.
- [Company Email Security Checker](https://apify.com/lowlanddata/company-email-security) — a domain's SPF, DMARC, DKIM and email-spoofing grade.

### Troubleshooting

Failures are loud and named in the run's status message:

- **"Provide at least one domain."** `domains` was empty; add at least one.
- **A row came back `unreachable`.** The homepage did not respond (a transient block, or the domain is parked). Re-run later.
- **A row came back `invalid`.** The input was not a parseable domain — check for stray text.
- **5 results instead of your maxItems**: the free-plan sample cap; a paid Apify plan removes it.

### Support

Missing an asset a site clearly declares, or found one parsed wrong? Open a report
on the actor's **Issues tab**; this tool is actively maintained.

If it earns its keep, a **rating on this page** takes ten seconds and tells us which
enrichment tool to build next.

# Actor input Schema

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

The company domains to fetch logos and favicons for, one per line. A bare domain (stripe.com), a URL (https://stripe.com) or a www host all work. Only have company names? Run the Company Domain Finder first.

## `maxItems` (type: `integer`):

Stop after this many domains. Default 1000; free-plan runs are capped at 5.

## Actor input object example

```json
{
  "domains": [
    "stripe.com",
    "adyen.com",
    "backmarket.com"
  ],
  "maxItems": 1000
}
```

# Actor output Schema

## `results` (type: `string`):

One JSON object per domain, with its favicon, logo and social image URLs.

# 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",
        "adyen.com",
        "backmarket.com"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("lowlanddata/company-logo-finder").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",
        "adyen.com",
        "backmarket.com",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("lowlanddata/company-logo-finder").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",
    "adyen.com",
    "backmarket.com"
  ]
}' |
apify call lowlanddata/company-logo-finder --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,lowlanddata/company-logo-finder"
        }
    }
}
```

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/Z10YI5qvYHLqtbIjS/builds/IcAXgup05tWFMquMv/openapi.json
