Pricing
from $2.00 / 1,000 results
Go to Apify Store
Website Brand Extractor (Pay per Event)
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 $2.00 / 1,000 results
Rating
0.0
(0)
Developer
Actor stats
0
Bookmarked
34
Total users
7
Monthly active users
3 months 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."}
