Website Brand Extractor
Pricing
from $5.00 / 1,000 results
Go to Apify Store

Website Brand Extractor
Extract logos, brand colors, fonts, social links, and metadata from any website. Returns structured JSON with favicon, logo images, primary/secondary colors, font families, OG/Twitter metadata, and links for 17+ social platforms.
Pricing
from $5.00 / 1,000 results
Rating
0.0
(0)
Developer
Otto Linsky
Maintained by Community
Actor stats
0
Bookmarked
5
Total users
4
Monthly active users
3 days ago
Last modified
Categories
Share
Brand Fetcher
Apify Actor that scrapes any website and extracts brand assets — logos, favicon, brand colors, fonts, metadata, and social media links. Returns clean, structured JSON.
Features
- Images — Extracts favicon, logo (images containing "logo" in URL or alt text), and up to 2 product/hero images
- Brand Colors — Returns primary and secondary brand colors, sourced from theme-color meta, CSS custom properties, and stylesheets (neutrals filtered, similar colors deduplicated)
- Fonts — Detects font families from CSS,
@font-face, Google Fonts links, and CSS variables. Filters out numeric values, CSS keywords, and non-font entries. - Metadata — Open Graph, Twitter Card, author, keywords, canonical URL, charset, viewport
- Social Links — Detects profile links for 17 platforms
- Toggleable — Enable or disable each extraction category independently
- Rate Limiting — 1-second delay between requests to avoid overloading target sites
Supported Platforms
Image Sources
- Favicon links (
<link rel="icon">,<link rel="shortcut icon">) - Apple touch icons (
<link rel="apple-touch-icon">) - Images with "logo" in URL or alt text (jpg, png, webp, gif)
- JSON-LD schema.org logos
- Product, hero, banner, and featured images
Social Media Platforms
| Platform | Pattern |
|---|---|
| facebook.com, fb.com, fb.me | |
| Twitter/X | twitter.com, x.com |
| instagram.com | |
| linkedin.com | |
| YouTube | youtube.com, youtu.be |
| TikTok | tiktok.com |
| pinterest.com, pin.it | |
| Snapchat | snapchat.com |
| GitHub | github.com |
| GitLab | gitlab.com |
| Bitbucket | bitbucket.org |
| Discord | discord.gg, discord.com |
| Telegram | t.me, telegram.org |
| reddit.com | |
| Mastodon | mastodon., mstdn. |
| Threads | threads.net |
| Bluesky | bsky.app |
Metadata Standards
- Basic HTML meta tags (charset, viewport, author, keywords)
- Open Graph protocol (og:title, og:description, og:image, og:site_name, og:type, og:url)
- Twitter Cards (twitter:card, twitter:title, twitter:description)
- Theme color and application name
- Canonical URL
Input
| Field | Type | Default | Description |
|---|---|---|---|
urls | string[] | required | Website URLs to extract brand info from |
extractLogos | boolean | true | Extract favicon, logo, and product images |
extractColors | boolean | true | Extract primary and secondary brand colors |
extractFonts | boolean | true | Extract font families used on the page |
extractMetadata | boolean | true | Extract OG, Twitter Card, and other meta tags |
extractSocialLinks | boolean | true | Extract social media profile links |
proxyConfiguration | object | Apify Proxy | Proxy settings |
Input example
{"urls": ["https://stripe.com", "https://github.com"],"extractLogos": true,"extractColors": true,"extractFonts": true,"extractMetadata": true,"extractSocialLinks": true,"proxyConfiguration": {"useApifyProxy": true}}
Output
Each URL produces one JSON object in the dataset:
| Field | Type | Description |
|---|---|---|
url | string | The scraped URL |
success | boolean | Whether extraction succeeded |
timestamp | string | ISO 8601 extraction timestamp |
title | string | null | Brand/site name (from og:site_name, og:title, or <title>) |
description | string | null | Site description (from og:description or meta description) |
images | ImageAsset[] | Extracted images — favicon, logo, product (if enabled) |
colors | BrandColors | Primary and secondary brand colors (if enabled) |
fonts | FontInfo[] | Font families used (if enabled) |
metadata | object | Meta tags (if enabled) |
socialLinks | string[] | Social media profile URLs (if enabled) |
Image asset object
| Field | Type | Values |
|---|---|---|
url | string | Absolute URL of the image |
type | string | favicon, logo, or product |
Brand colors object
| Field | Type | Description |
|---|---|---|
primary | object | null | Most dominant brand color (hex, rgb, source) |
secondary | object | null | Second most dominant brand color (hex, rgb, source) |
Font info object
| Field | Type | Description |
|---|---|---|
family | string | Font family name (e.g. Inter) |
usageCount | number | Weighted occurrence count |
source | string | Where the font was found (e.g. google-fonts, @font-face, stylesheet) |
Output example
{"url": "https://stripe.com","success": true,"timestamp": "2026-03-26T10:30:00.000Z","title": "Stripe","description": "Stripe is a suite of APIs powering online payment processing.","images": [{"url": "https://stripe.com/favicon.ico","type": "favicon"},{"url": "https://stripe.com/img/v3/home/logo.png","type": "logo"},{"url": "https://stripe.com/img/v3/home/hero.jpg","type": "product"}],"colors": {"primary": {"hex": "#635bff","rgb": "rgb(99, 91, 255)","source": "theme-color meta"},"secondary": {"hex": "#0a2540","rgb": "rgb(10, 37, 64)","source": "css-variable"}},"fonts": [{"family": "Sohne","usageCount": 25,"source": "@font-face"},{"family": "Inter","usageCount": 10,"source": "google-fonts"}],"metadata": {"charset": "utf-8","viewport": "width=device-width, initial-scale=1","ogTitle": "Stripe | Payment Processing Platform","ogDescription": "Stripe is a suite of APIs powering online payment processing.","twitterCard": "summary_large_image","themeColor": "#635bff"},"socialLinks": ["https://twitter.com/stripe","https://www.linkedin.com/company/stripe","https://github.com/stripe"]}
Error Handling
The Actor provides detailed error messages for common scenarios:
| Scenario | Example Message |
|---|---|
| Domain not found | Domain not found: Could not resolve example.invalid. Check the URL for typos. |
| Connection refused | Connection refused: The server at example.com is not accepting connections. |
| HTTP 403 Forbidden | HTTP 403 Forbidden: Access denied. The site may be blocking automated requests. |
| HTTP 404 Not Found | HTTP 404 Not Found: The page does not exist. |
| HTTP 429 Rate Limited | HTTP 429 Too Many Requests: Rate limited. Try again later or use a proxy. |
| HTTP 5xx Server Error | HTTP 500 Server Error: The server encountered an internal error. |
| Request Timeout | Request timeout: URL did not respond within 30 seconds. |
| Invalid URL | Invalid URL format: "not-a-url" |
| SSL/TLS Error | SSL/TLS error: Could not establish a secure connection. |
Failed extractions output:
{"url": "https://unreachable-site.example","success": false,"timestamp": "2026-03-26T10:30:00.000Z","error": "Domain not found: Could not resolve unreachable-site.example. Check the URL for typos."}