An AI-powered brand onboarding agent for brand protection platforms.
Given only a company name and one or more official domains, it automatically discovers and compiles a comprehensive BrandProfile.
| Layer | Technology |
|---|---|
| Runtime | Python 3.13, asyncio |
| Schemas | Pydantic |
| LLM | OpenAI |
| Search | Tavily API |
| Domain verification | IANA RDAP bootstrap |
| API server | FastAPI + Uvicorn |
| Containerisation | Docker |
brand_input.json (or POST /scan body)
│
main.py / server.py
│ (validate inputs)
│
asyncio.gather - five extractors run concurrently:
├── extract_domains -> Tavily search -> LLM -> RDAP validation
├── extract_assets -> HTTP scrape (og:image, favicons)
├── extract_keywords -> Tavily search -> LLM (GICS taxonomy)
├── extract_people -> Tavily search -> LLM structured extraction
└── extract_socials -> Tavily search -> LLM URL extraction
│
BrandProfile (Pydantic)
│
├── API mode -> JSON response body
└── CLI mode -> output/<company>_brand_profile.json
| Field | Description |
|---|---|
discovered_domains |
Related domains with RDAP ownership confirmation |
visual_assets |
Logo and favicon URLs with source and type |
keywords |
GICS-mapped industry taxonomy terms |
key_people |
Executives with name, role, and source URL |
social_links |
Official social media profile URLs |
- Vision Model: Pass discovered logo URLs to a vision model to confirm logo for [Company].
- DNS Validation: Resolve discovered domains against public DNS to filter parked or stale domains.
- Agentic Loop: Replace single-pass extraction with an agentic loop for refined & validated results.
- Log Redaction: Custom logging formatter that scrubs API key patterns before output.
- LLM Fallback: Support a secondary model if the primary is unavailable.
- Contact Emails: Extend social extraction to also get official customer support emails.
See
how_to_run.mdto get started. Seeanalysis.mdfor implementation decisions.