Website Brand Identity Scraper avatar

Website Brand Identity Scraper

Pricing

from $1.42 / 1,000 item extracteds

Go to Apify Store
Website Brand Identity Scraper

Website Brand Identity Scraper

Analyze public company websites for source-attributed logos, imagery, colors, fonts, messaging, calls to action, and evidence-based brand themes and tone.

Pricing

from $1.42 / 1,000 item extracteds

Rating

0.0

(0)

Developer

Automation Lab

Automation Lab

Maintained by Community

Actor stats

0

Bookmarked

7

Total users

4

Monthly active users

17 days ago

Last modified

Share

Turn public company websites into normalized website brand identity records for CRM enrichment, creative research, and brand audits. Supply one or many URLs and receive source-attributed logo and image candidates, CSS colors, resolved font candidates, declared theme colors, site-observed social profiles, messaging, calls to action, and deterministic theme and tone signals.

The Actor uses public HTML and linked CSS. It does not invent a brand book, use private accounts, or present heuristic labels as facts. Every asset, color, and font retains the page or stylesheet where it was found; derived themes and tone include evidence and confidence.

What does Website Brand Identity Scraper extract?

Each successful website produces one record containing:

GroupFields
Identitysite name, input URL, final URL, domain
Logosranked logo/favicon candidates, source URL, source type, label, confidence
ImageryOpen Graph, Twitter, hero, and content image candidates
Color palettefrequent CSS hex, RGB, and HSL values with occurrence counts and sources
Fontsresolved font-family candidates, original declaration, and source page or stylesheet
Declared enrichmentJSON-LD logos/site identity, theme-color metadata with media conditions, site-observed social profile links
Diagnosticsbounded warnings for unavailable, malformed, or capped CSS extraction
Messagingtitle, meta description, H1/H2 headings, tagline candidates, calls to action
Derived identitybrand themes and messaging tone with evidence and bounded confidence
Provenanceall successfully analyzed page and stylesheet URLs, analysis timestamp

Examined failed websites produce an uncharged status: failed record. Equivalent normalized URLs produce one row, not repeated charges. Malformed entries produce a failure row with an empty input URL rather than crashing valid peers. maxItems limits the ordered normalized entries, including malformed entries.

Who is it for?

  • Revenue operations teams enriching company and account records.
  • Creative teams preparing references before a campaign or redesign.
  • Agencies comparing visual identity and calls to action across client websites.
  • Data teams building source-attributed brand datasets.
  • Developers who need structured website brand guidelines inputs without manual copy-and-paste.

Why use this website brand identity extractor?

Unlike a logo-only utility, this Actor combines visual candidates with messaging and evidence-based derived signals. Unlike a generative brand kit, it reports what the public website exposes and keeps provenance. One successful website incurs one item charge regardless of how many logo, color, font, image, or messaging candidates it contains.

Getting started

  1. Open the Actor input.
  2. Add public company homepages to Website URLs.
  3. Choose the maximum number of websites.
  4. Keep the stylesheet limit at 8 for normal analysis, increase it for CSS-heavy sites, or set it to 0 for HTML-only analysis.
  5. Start the run and open the default dataset.
  6. Filter status to separate successful analyses from failures.

Input parameters

startUrls

Required array of public HTTP or HTTPS website URLs, as strings or request-list objects with a string url. URL normalization happens before deduplication and selection: host casing, default ports, empty homepage paths, and fragments are normalized. Distinct paths and query strings remain distinct; redirects are not used to merge supplied websites. URLs containing credentials, local hosts, and nonpublic network addresses are rejected.

maxItems

Maximum normalized entries to analyze, from 1 to 100. Processing follows input order. The Console/schema default is 10; the runtime fallback, if no schema default is supplied, is the supplied list length. The stylesheet fallback and form default are both 8. These existing defaults are unchanged.

maxStylesheetsPerWebsite

Maximum linked CSS files to fetch per website, from 0 to 20. A higher value can discover more fonts and colors but takes longer. Failed stylesheet requests are skipped while the page analysis continues.

Example input

{
"startUrls": [
{ "url": "https://stripe.com" },
{ "url": "https://slack.com" },
{ "url": "https://www.hubspot.com" }
],
"maxItems": 3,
"maxStylesheetsPerWebsite": 8
}

Example output

Shortened excerpt from a real local Apify homepage analysis on 8 October 2026 (HTML plus two linked stylesheets). The asset was declared by that page; it has not been independently downloaded or licensed. Other fields remain available in the full record.

{
"inputUrl": "https://apify.com/",
"finalUrl": "https://apify.com/",
"domain": "apify.com",
"status": "ok",
"error": null,
"siteName": "Apify",
"logos": [
{
"url": "https://apify.com/img/apify-logo/apify-symbol-200x200.svg",
"sourceUrl": "https://apify.com/",
"sourceType": "json-ld",
"label": "Apify",
"confidence": 0.98
}
],
"themeColors": [{ "value": "#020202", "sourceUrl": "https://apify.com/", "sourceType": "theme-color-meta", "media": null }],
"socialProfiles": [{ "platform": "linkedin", "url": "https://linkedin.com/company/apify", "sourceUrl": "https://apify.com/", "sourceType": "json-ld-sameAs" }],
"fonts": [{ "family": "GT-Walsheim-Regular", "sourceUrl": "https://apify.com/", "declaration": "'GT-Walsheim-Regular',sans-serif" }],
"warnings": ["Stylesheet extraction limited to 2 of 3 linked files."]
}

URLs can redirect according to geography, so text and source URLs may differ between runs.

How are confidence and evidence calculated?

Confidence is deterministic, not an AI probability. HTML logo candidates must combine brand-name evidence with explicit logo/brandmark structure or a home-linked header position; long descriptive labels, photographic assets, and product/icon clues are penalized. Relevant site Organization/WebSite JSON-LD and explicit logo metadata rank highest, while favicons are retained at moderate confidence. Social metadata receives high image confidence. Theme and tone confidence increases only when configured whole words or phrases occur in extracted messaging. CSS colors are literal declaration values (including custom properties), not selectors, comments, or URL payloads; black and white are excluded from the frequency palette but retained in explicit themeColors. Font custom-property references are resolved with bounded fallbacks; conflicting definitions and cycles do not claim browser-computed cascade truth. Original declarations remain attached.

socialProfiles contains observed links on known platform profile paths, not verified company ownership. Share, login, intent, embed, watch, post, and video-content paths are excluded. No profile or asset destination is fetched.

Treat candidates as ranked leads. Confirm selected assets before publishing creative work, especially when a homepage exposes several brand variants.

How much does it cost to analyze website brand identity?

The PPE schedule charges $0.001 per run plus the active tier price for each successfully analyzed website. At the BRONZE tier, a successful website is $0.00236.

Example BRONZE totals:

Successful websitesEstimated Actor charge
1$0.00336
10$0.02460
100$0.23700

Failed website rows have no item charge. The Apify Console displays the active tier and exact run charge before and after execution. The six usage tiers decrease from FREE through DIAMOND; Apify applies the tier associated with the user's plan.

CRM enrichment workflow

Map company website fields into startUrls, run the Actor in batches, and join results back on inputUrl or domain. Store status, error, and analyzedAt so retries are explicit. Flatten colors, fonts, themes, or calls to action only when your destination system needs scalar fields.

Creative benchmarking workflow

Use logo and image candidates as an evidence queue, compare the most frequent colors, and review font sources before downloading any asset. Messaging headings and CTA arrays help compare positioning without treating every page link as a CTA.

Monitoring and change detection

Schedule an Apify Task with the same URL list, export each dataset, and compare normalized fields in your data warehouse or automation tool. The Actor returns current observations; it does not itself send alerts, retain prior snapshots, or claim that every detected difference is a deliberate rebrand.

API usage with cURL

curl -X POST \
"https://api.apify.com/v2/acts/automation-lab~website-brand-identity-extractor/runs?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"startUrls":[{"url":"https://stripe.com"}],"maxItems":1}'

API usage with JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/website-brand-identity-extractor').call({
startUrls: [{ url: 'https://stripe.com' }],
maxItems: 1,
maxStylesheetsPerWebsite: 8,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

API usage with Python

from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("automation-lab/website-brand-identity-extractor").call(run_input={
"startUrls": [{"url": "https://stripe.com"}],
"maxItems": 1,
})
items = client.dataset(run["defaultDatasetId"]).list_items().items
print(items)

Use with MCP and AI assistants

Add the Apify MCP server to Claude Code:

claude mcp add --transport http apify \
"https://mcp.apify.com?tools=automation-lab/website-brand-identity-extractor"

Claude Desktop, Cursor, and VS Code can use the same HTTP MCP configuration. Add this JSON in the client-specific MCP settings panel:

{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com?tools=automation-lab/website-brand-identity-extractor"
}
}
}

Example prompts:

  • “Analyze Stripe and Slack and compare their top CSS colors and calls to action.”
  • “Extract source-attributed website brand identity fields for these CRM company URLs.”
  • “Show only failed websites and explain which URLs should be retried.”

Limits and failure behavior

  • The Actor analyzes the supplied page, usually a homepage; it does not crawl an entire domain.
  • Client-rendered-only text, canvas content, and runtime CSS may be absent from SSR HTML.
  • Protected, login-only, CAPTCHA, or rate-limited pages may return status: failed.
  • CSS variables without literal color values are not resolved through a browser rendering engine.
  • Logo candidates are precision-filtered, but ambiguous brand variants can remain; use confidence, label, source, and human review.
  • Theme and tone labels cover a bounded vocabulary and are not a complete brand strategy assessment.
  • Images and fonts are referenced, not downloaded or relicensed. URL-less inline SVG is not exported as an invented image URL.
  • Static font inference does not guarantee actual rendered fonts, and CSS parse/fetch/cap warnings indicate incomplete coverage.

Each completed row is persisted before the next website starts. Each delivered successful site has one item event; failed rows have none. Charging limits are checked one site at a time: an unaccepted charge does not publish an unpaid success, and processing stops when the limit is reached. Dataset storage and billing are separate platform operations; a storage failure after an accepted item charge fails the run rather than claiming successful delivery.

If every examined website fails, the run exits as failed after writing diagnostic rows. Mixed success/failure completes normally. A later request failure or platform timeout cannot erase already persisted rows; unexamined sites have no row and should be retried explicitly. Requests have a 30-second timeout and up to two transient retries, so a 300-second run cannot guarantee completion of 100 slow sites with 20 stylesheets each. Reduce batch size or increase run timeout for slow workloads. Decoded HTML is limited during receipt to 10 MB and each CSS response to 2 MB; CSS-compatible content type is required.

Sanitized failure diagnostics

Failed operations send sanitized diagnostic input, exceptions, and Actor/build/run IDs to our private GlitchTip service for repair. Secret fields and URL query strings are removed; reports are retained for 30 days. No telemetry credentials or endpoints are input parameters.

Responsible use and legality

This independently developed Actor is not affiliated with or endorsed by the analyzed companies or social platforms. Company names and logo references are used only to identify observed public data; the Actor's own branding remains Automation Lab's.

Analyze only public websites you are authorized to access. Respect website terms, robots guidance where applicable, intellectual-property rights, and local law. A public asset URL does not grant permission to reuse a logo, image, font, or copy. Keep source attribution and obtain the required license or brand approval before commercial reuse.

Data handling, dependencies, and support

The Actor fetches anonymous public HTML/CSS and stores normalized evidence in the run's default Apify dataset. It uses Apify hosting/storage and our private diagnostic service; there are no paid supplier APIs, browsers, proxies, AI providers, or user-supplied supplier keys. Company-owned infrastructure usage is not an extra off-platform fee. There is no cross-run website cache. Run input, dataset, and logs follow your Apify account's retention settings and can be deleted in Console or through the API; diagnostic reports expire after 30 days. Public links and site text may incidentally identify people, so restrict access to datasets and avoid unnecessary personal-data collection. Do not supply private or credential-bearing URLs.

For questions or reproducible problems, open a Store issue with a non-sensitive input and run link. We use Apify's standard end-user terms.

Troubleshooting

Why are colors or fonts empty?

The site may load style values at runtime, use CSS variables without literal values, block stylesheet requests, or exceed the configured stylesheet limit. Increase maxStylesheetsPerWebsite within the supported limit, then inspect sourceUrls and warnings. Unresolved font variables are omitted rather than returned as font names.

Why does the final URL use another locale?

Some sites redirect based on network geography or cookies. The Actor records both inputUrl and finalUrl; messaging reflects the final public page actually analyzed.

Why are there multiple logos?

Modern homepages often expose header marks, dark/light variants, and favicons. The Actor precision-filters company candidates and intentionally returns evidence rather than claiming certainty. Sort by confidence and check labels and source URLs.

Are failed websites charged?

The one-time start event still applies, but failed website rows do not emit the per-website item event.

FAQ

Does this generate website brand guidelines?

It produces structured evidence that can support a brand audit or style-guide workflow. It does not generate an authoritative brand manual or replace a designer.

Does it use AI?

No. Extraction and derived labels are deterministic. Evidence terms are included so users can review every theme and tone signal.

Can I analyze more than 100 websites?

Split larger lists across Tasks or API runs. The per-run cap keeps fetches bounded and makes failures easier to retry.

Can it scrape private brand portals?

No. Only anonymous public HTTP and HTTPS pages are supported; credentials in URLs and private network addresses are rejected.