Skip to main content
Have an agent build it. Copy the brief below into Claude Code, Cursor, or any coding agent with access to your project. It states the calls, the questions worth asking you first, and the mistakes to avoid.
You have domains, from a signup form, a CRM export, or a conference list, and you need them to become companies: a real name, what they do, an industry code, a logo you can render, and the social accounts to follow. One call per domain does it. brand resolves the whole record.

The pipeline

1. Resolve a domain into a brand record

You get back the company name, description, tagline, an industry classification, a colour palette, the fonts the site uses, social profiles, and logos already processed into several formats and background variants.

2. Take only the logo when that is all you need

If you are rendering an avatar in a list and nothing else, resolving the whole record and throwing most of it away is five times the price.

3. Resolve a name you do not have a domain for

GET /v1/web/brand/search?query=stripe finds candidate companies by name, so a messy list of company names can be turned into domains before enrichment.

4. Store the record, not just the fields you use today

The full record is one call whether you read three fields or thirty. Store it, and adding a field to your UI later becomes a database change rather than a re-enrichment of your whole list.

Clean the input first

Most of the money wasted on enrichment is spent before any call is made, on inputs that were never going to resolve. Normalise every domain to one form: strip the scheme, strip www, drop the path and any trailing slash, lowercase it. www.stripe.com, stripe.com/pricing and https://Stripe.com are one company, and sending all three spends three times for one answer. Deduplicate after normalising, not before. A list of 5,000 rows from a CRM is routinely 3,000 companies. Drop the addresses that are not companies. A list built from signup emails is full of gmail.com, outlook.com and the rest, and enriching a free email provider returns the email provider. Filter those out before spending, and treat the row as a person without a company rather than a company. Watch for the subsidiary problem. Enriching youtube.com gives you YouTube, which is correct and may not be what a sales team means when the parent is the account. Decide which you want before the data lands somewhere it will be trusted.

Resolving a name instead of a domain

When the list is company names, add a step. GET /v1/web/brand/search?query=... returns candidates, and 1 credit per lookup makes it cheap to run across the whole list. Names are ambiguous in a way domains are not. Several real companies share a name across countries and industries, so keep the match confidence and any other signal you have, like a country or an industry, and hold anything ambiguous for review rather than guessing. Store the resolved domain back onto your record. That turns a fuzzy name match into a stable key you never have to resolve again.

Refreshing without re-spending

Brands move slowly. A company changes its logo or its palette every few years, not every quarter, so a nightly refresh spends real money to discover that nothing happened. Refresh on a long cycle, six or twelve months, and stagger it so the whole list does not re-resolve on one day. Refresh on a signal instead when you have one. A domain that starts returning something different, a customer who mentions a rebrand, a record that fails to render in your UI: those are worth a targeted refresh in a way that a calendar is not. Keep what you had until the new answer arrives. Replacing a good record with an empty one because a refresh failed is worse than serving a slightly old logo.

Measuring the match rate

Track the share of your list that resolved to a real record, and look at the failures rather than only the total. A low rate on a list of large companies means something is wrong with the input, usually formatting. A low rate on a list of small local businesses is simply the shape of the world, since plenty of them have no real web presence to read. Sample the successes too. A record that resolved to the wrong company is more damaging than one that did not resolve at all, because it is confidently wrong on a sales call.

What it costs

A full brand record is 5 credits. A single logo is 1. A brand search is 1. The price is flat whether the record was already held or resolved fresh, so a list with repeats does not cost more per unique company than a list without them.

What to watch for

Normalise domains before you send them. www.stripe.com, stripe.com/, and https://stripe.com are one company, and sending all three spends three times. Handle the empty answer. Some domains have no resolvable brand: a parked domain, a personal site, a company that no longer exists. Decide what your UI shows for that case before you meet it in production. A logo has a variant for a reason. Ask for the one that suits the background you are drawing on, rather than picking one and hoping. A dark wordmark on a dark card is invisible.