How to Fetch Company Logos by Domain — A Practical Guide for Developers
The ticket says: display the company logo next to each account record. Should be quick.
Then you start building it. The first domain works. The second returns a favicon from 2016. The third has no image at all. The fourth returns a white logo and your background is white. By domain number ten you are either writing a scraper or looking for an API.
Most developers end up at the API option eventually. The question is which one, and what to actually check before you build on it.
This is a practical guide to fetching company logos by domain in 2026 — the approaches worth using, the ones that waste your time, and what a production-ready implementation actually looks like.
Why the Simple Approaches Break
There are two approaches developers usually try first before reaching for a proper API.
Scraping og:image or favicon
Parse the HTML at the root domain, find the og:image meta tag or the favicon link, grab the URL, done. Works maybe 40% of the time in any meaningful sample.
The other 60% is a mixed bag. og:image points to a promotional banner, not the brand logo. The favicon is 16×16 and pixelates at any real display size. The site blocks your request. The logo URL changes when the company updates their website. You cache it and it goes stale silently.
The maintenance problem is the real cost. You are not building a scraper once — you are maintaining it indefinitely while it breaks in different ways across different domains.
Google’s favicon service
One line. No auth. Returns something for almost every domain. For quick internal tools, it is fine.
For anything user-facing, the output quality is the problem. You get a small, often pixelated image that does not look like a logo in a professional product. No SVG. No dark mode variant. No brand colors. It technically works but it does not look like it does.
What a Proper Logo API Returns
A brand API built for production use returns something more structured than a single image URL.
A good response includes logos in SVG, PNG, and JPG. Multiple variants — light version for dark backgrounds, dark version for light backgrounds, icon-only, full lockup. Brand colors as hex values. For teams supporting both light and dark mode, having both logo variants returned automatically removes an entire category of manual decisions.
Quality providers also include contrast metadata alongside the color data. That tells you programmatically whether the logo is designed for light or dark backgrounds, so you can select the right variant without hardcoding that logic per-brand.
The better APIs also return company data alongside the logo. Industry, employee count, founding year, headquarters location, company description. One API call covers both the visual layer and the contextual layer.
BrandsAPI in Practice
The implementation pattern with BrandsAPI is straightforward. Pass the domain, get back the full data payload.
Coverage is 44 million indexed brands. Logos come back in SVG, PNG, and JPG across light, dark, icon-only, and full lockup variants. Brand colors include contrast data. Firmographics, social links, and company descriptions are in the same response.
Data accuracy is 99.97%. P99 response time averages 94ms. SOC 2 Type II certified — relevant when you are going through procurement with enterprise customers who review your vendor stack.
Pricing is straightforward. Logo API access is free — no credit card needed to get started. If you need the full brand data payload — colors, firmographics, social links, company metadata — that is available on the paid plan starting at $50 per month for 10,000 calls. Most teams start on the free tier, test coverage against their actual domain sample, and upgrade only when the integration is confirmed working.
The Integration Pattern
The core implementation is small. A trigger fires when a new company domain enters your system. You call the API with that domain. You parse the response and write the relevant fields to your data model. You display the logo in the UI.
Most of the real decisions are about caching.
- Store logo URLs in your database on first fetch rather than calling the API on every page load.
- Serve logos directly from the API’s CDN unless you have specific reasons to re-host them. Most brand APIs serve logos with proper cache headers already set.
- Set a background refresh for active domains — weekly is usually enough for most use cases. Monthly works if logo freshness is not critical.
One thing to avoid: storing the actual image files in your own storage and never refreshing them. Companies rebrand. A logo cached two years ago may be wrong today and you will not know unless something in your system checks.
Handling the Edge Cases
A few situations come up consistently once this is in production.
Subdomains
Users enter app.company.com instead of company.com. Strip subdomains before making the API call. Most brand APIs index the root domain and a subdomain call returns nothing even when coverage exists for the parent.
Personal email domains
If you are calling the API based on signup email, gmail.com and outlook.com will appear constantly. Filter these out. They have brand data but it is not useful context for representing a user’s employer.
No logo returned
No API has 100% coverage. Build a fallback that does not look broken. A generated avatar using the first letter of the company name in the brand’s primary color is the standard pattern. It looks intentional. A broken image icon does not.
Recently rebranded companies
Fresh rebrands take time to propagate across any provider’s database. If you are in a vertical where this happens often, add a manual override in your admin panel so your team can update a logo without waiting for the API data to refresh.
What to Check Before Picking a Provider
Provider-level coverage statistics are averages across their full database. What matters is how they perform on your specific domain set.
Pull 50 to 100 domains from your actual user base and run them through the free tier of any API you are evaluating. Check three things: whether a logo was returned, whether it is the current version of the brand, and whether SVG is available. That test takes 20 minutes and tells you more than any benchmark.
Beyond coverage, P99 latency matters more than average latency for user-facing applications. Format completeness matters if you need SVG or specific variants. Data freshness matters if your users will notice stale logos. Pricing at your projected call volume matters more than the entry tier.
The full response schema, code examples in JavaScript, Python, and cURL, and live API testing are all available at the BrandsAPI documentation. Logo access starts free — no commitment needed to test it properly.
The Short Version
Scraping breaks. Favicons look bad. A proper brand API solves both problems and adds the additional data your product will eventually need anyway.
Logo API access is free to start. If you need colors, firmographics, and the full company data set on top of that, the paid plan covers it from $50 a month. Either way, test your actual domain sample first before writing any integration code.
The integration itself is smaller than it looks. Most teams finish it in a day.