# Website Logo Extractor (`botflowtech/website-logo-extractor`) Actor

Extract logos, favicons, brand icons, og:image, and Twitter card images from any URL. Bulk processing with concurrency. Ideal for brand monitoring and data enrichment.

- **URL**: https://apify.com/botflowtech/website-logo-extractor.md
- **Developed by:** [BotFlowTech](https://apify.com/botflowtech) (community)
- **Categories:** Automation, Marketing
- **Stats:** 288 total users, 4 monthly users, 100.0% runs succeeded, 7 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

$5.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/actors/running/actors-in-store.md#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

## Website Logo Extractor 🔍

> **Extract logos, favicons, brand icons, and OpenGraph images from any website URL — fast and at scale.**

### What does Website Logo Extractor do?

Website Logo Extractor is a powerful Apify actor that scrapes and extracts all logo-related images from any website. It finds favicons, Apple touch icons, OpenGraph images, Twitter card images, schema.org logos, manifest icons, SVG logos, and any `<img>` elements identified as logos.

**Perfect for:** brand monitoring, directory building, competitor research, data enrichment, marketing automation, and building logo databases.

### Key Features

- ✅ **8 logo extraction methods** — favicon, apple-touch-icon, og:image, twitter:image, schema.org, manifest.json icons, SVG inline logos, and img tag logos
- ✅ **Bulk processing** — process hundreds or thousands of URLs in a single run
- ✅ **Configurable concurrency** — control parallel processing speed (default: 10)
- ✅ **Timeout handling** — per-URL timeout to skip slow or unresponsive sites
- ✅ **Automatic deduplication** — removes duplicate logo URLs from results
- ✅ **PPE monetization** — pay-per-event pricing support for Apify marketplace
- ✅ **Error resilience** — gracefully handles failures without stopping the batch
- ✅ **Zero configuration** — just provide URLs and go

### Logo Types Extracted

| Type | Source | Description |
|------|--------|-------------|
| `favicon` | `<link rel="icon">` | Standard favicon links including apple-touch-icon |
| `favicon-default` | `/favicon.ico` | Default favicon.ico path |
| `og-image` | `<meta property="og:image">` | OpenGraph image for social sharing |
| `twitter-image` | `<meta name="twitter:image">` | Twitter card image |
| `schema-org` | `<script type="application/ld+json">` | Schema.org structured data logo |
| `img-logo` | `<img>` with "logo" in attributes | Images identified as logos by class, id, alt, or src |
| `svg-inline` | `<header>` / `<nav>` SVGs | Inline SVG logos found in header/navigation |
| `manifest-icon` | `manifest.json` | Progressive Web App manifest icons |

### Input

```json
{
    "urls": [
        "https://apify.com/",
        "https://google.com/",
        "https://github.com/"
    ],
    "maxConcurrency": 10,
    "timeoutSecs": 30
}
```

#### Input Parameters

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| `urls` | array | Yes | — | List of website URLs to extract logos from |
| `maxConcurrency` | integer | No | 10 | Maximum concurrent URL processing (1-50) |
| `timeoutSecs` | integer | No | 30 | Timeout per URL in seconds (5-120) |
| `proxyConfiguration` | object | No | — | Optional Apify proxy configuration |

### Output

Each URL produces a result object in the dataset:

```json
{
    "url": "https://apify.com/",
    "logoCount": 5,
    "logos": [
        {
            "url": "https://apify.com/favicon.ico",
            "type": "favicon",
            "size": "32x32"
        },
        {
            "url": "https://apify.com/img/logo.png",
            "type": "img-logo",
            "size": null
        },
        {
            "url": "https://apify.com/og-image.png",
            "type": "og-image",
            "size": null
        }
    ]
}
```

If an error occurs for a URL:

```json
{
    "url": "https://example-down.com/",
    "logoCount": 0,
    "logos": [],
    "error": "fetch failed"
}
```

### Use Cases

- **Brand Monitoring** — Track competitor logos and brand identity changes
- **Directory Building** — Automatically populate business directories with company logos
- **Data Enrichment** — Add logo images to CRM records or contact databases
- **Marketing Automation** — Collect brand assets for partner pages or reports
- **Competitive Intelligence** — Analyze visual branding across an industry
- **SEO & Social Auditing** — Verify og:image and favicon presence across your sites
- **Design Research** — Collect logo samples for design inspiration or analysis

### Pricing

This actor supports **Pay-Per-Event (PPE)** pricing on the Apify marketplace. You are charged per successfully extracted logo result. The actor automatically stops processing when your budget limit is reached, so you never overspend.

Free tier usage is also supported — the actor works the same way without PPE, storing all results in the dataset.

### FAQ

**Q: What if a website blocks the request?**
A: The actor uses a realistic browser User-Agent header. For difficult sites, enable proxy configuration in the input settings.

**Q: Can I extract logos from thousands of URLs?**
A: Yes! The actor supports bulk processing with configurable concurrency. Adjust `maxConcurrency` based on your needs.

**Q: What image formats are supported?**
A: The actor extracts URLs to logos in any format the website uses (PNG, JPG, SVG, ICO, WebP, etc.). Inline SVGs are returned as HTML content.

**Q: Does it work with SPAs (Single Page Applications)?**
A: The actor fetches the initial HTML response. Most meta tags and link elements are present in the initial HTML even for SPAs. For JavaScript-rendered logos, consider using a browser-based scraper.

**Q: How is pricing calculated with PPE?**
A: Each URL that produces a result (success or error) counts as one `logo-extracted` event. You set your budget limit, and the actor stops when it's reached.

### Keywords

website logo extractor, brand icon scraper, favicon extractor, og image extractor, logo API, bulk logo extraction, website favicon scraper, brand logo finder, OpenGraph image scraper, Twitter card image extractor, schema.org logo, manifest icon extractor, website branding tool, logo database builder

# Actor input Schema

## `urls` (type: `array`):

List of website URLs to extract logos from

## `maxConcurrency` (type: `integer`):

Maximum number of URLs to process concurrently

## `proxyConfiguration` (type: `object`):

Optional proxy configuration for requests

## `timeoutSecs` (type: `integer`):

Timeout in seconds for each URL request

## Actor input object example

```json
{
  "urls": [
    "https://apify.com/"
  ],
  "maxConcurrency": 10,
  "timeoutSecs": 30
}
```

# 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 = {
    "urls": [
        "https://apify.com/"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("botflowtech/website-logo-extractor").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 = { "urls": ["https://apify.com/"] }

# Run the Actor and wait for it to finish
run = client.actor("botflowtech/website-logo-extractor").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 '{
  "urls": [
    "https://apify.com/"
  ]
}' |
apify call botflowtech/website-logo-extractor --silent --output-dataset

```

## MCP server setup

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

```

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/8tT2n5FSPjeN1swS4/builds/vaalcMPbzMNEoDIas/openapi.json
