Company Logo Lookup via Logo.dev
| Field | Value |
|---|---|
| Type | Skill Resource |
| Source | ~/.copilot/skills/generators/references/logos.md |
| Description | Not specified |
Source Content
Company Logo Lookup via Logo.dev
Fetch or search company logos by domain, business name, or batch operations using the Logo.dev API via Rube MCP (Composio). Never design logos from scratch — this reference is for consuming existing brand marks, not creating them.
Overview
Logo.dev is a REST API that returns company logos and branding information. Access it through Rube MCP, which abstracts the HTTP layer and handles schema discovery, authentication, and pagination. Logos are useful for:
- Company info cards (e.g., “about this customer”)
- Brand reference tables
- Customer logos in testimonials or case studies
- Batch logo pipelines (CDN upload, cache population, etc.)
Prerequisites
Rube MCP Must Be Installed
Confirm RUBE_SEARCH_TOOLS responds:
Call `RUBE_SEARCH_TOOLS` with a simple query like "logo" or "company logo"If it fails, add Rube MCP to your host’s configured MCP servers:
- URL:
https://rube.app/mcp - Name:
rube - No API keys needed at the host level (auth is per-toolkit)
Logo.dev Connection Must Be Active
Before executing any Logo.dev operation:
- Call
RUBE_MANAGE_CONNECTIONSwithtoolkit: "logo_dev"to check status. - If the status is
PENDINGorINACTIVE, follow the returned auth link. - Confirm the connection is
ACTIVEbefore proceeding.
Status values:
- ACTIVE: Ready to execute; proceed.
- PENDING: Auth link was returned; user must visit it, approve, and return.
- INACTIVE: Connection failed; may need re-authentication.
Discovery: Never Hardcode Tool Slugs
Logo.dev’s toolkit evolves. Always discover tools before executing them.
Call RUBE_SEARCH_TOOLS with a use-case description:- "Fetch a company logo by domain"- "Search for logos by company name"- "Look up logos in batch"Read the returned schemas, tool names, and field descriptions. Do not assume slug names from prior conversations — schemas drift.
Example discovery output:
{ "tools": [ { "tool_slug": "get_logo_by_domain", "description": "Fetch logo and company info for a given domain", "arguments": { "domain": { "type": "string", "description": "e.g., stripe.com" }, "format": { "type": "string", "enum": ["png", "svg", "jpg"], "default": "png" } } }, { "tool_slug": "search_logos_by_name", "description": "Search for logos by company name", "arguments": { "company_name": { "type": "string" }, "limit": { "type": "integer", "default": 10 } } } ]}Operations
Single Logo Lookup by Domain
Use case: “Fetch the Stripe logo” or “What’s the logo for ourvendor.com?”
- Search for tools:
RUBE_SEARCH_TOOLS→ “Fetch a company logo by domain” - Read the returned schema (e.g.,
get_logo_by_domain) - Execute:
RUBE_MULTI_EXECUTE_TOOLwith:tool_slug: “get_logo_by_domain” (from discovery)arguments:{ "domain": "stripe.com" }memory: {}
- Parse response: URL, format, dimensions, caching headers
Example call:
{ "tools": [ { "tool_slug": "get_logo_by_domain", "arguments": { "domain": "stripe.com" }, "memory": {} } ]}Example response:
{ "domain": "stripe.com", "company": "Stripe", "logo_url": "https://logo.clearbit.com/stripe.com", "format": "png", "width": 400, "height": 400, "caching": { "cache_control": "max-age=86400", "etag": "\"abc123\"" }}Search by Company Name
Use case: “Find logos for Acme Corp” or “Batch-search logos for these companies”
- Search for tools:
RUBE_SEARCH_TOOLS→ “Search for company logos by name” - Read the returned schema (e.g.,
search_logos_by_name) - Execute:
RUBE_MULTI_EXECUTE_TOOLwith:tool_slug: “search_logos_by_name”arguments:{ "company_name": "Acme", "limit": 5 }memory: {}
- Handle pagination: If response includes a token, continue until complete
Example call:
{ "tools": [ { "tool_slug": "search_logos_by_name", "arguments": { "company_name": "Acme", "limit": 5 }, "memory": {} } ]}Batch Operations (50+ Domains)
Use case: “Fetch logos for 100 customer domains” or “Populate our customer directory with logos”
For large batches, use RUBE_REMOTE_WORKBENCH with a run_composio_tool() loop (if available), or issue multiple calls to RUBE_MULTI_EXECUTE_TOOL with session reuse:
{ "tools": [ { "tool_slug": "get_logo_by_domain", "arguments": { "domain": "stripe.com" }, "memory": {} }, { "tool_slug": "get_logo_by_domain", "arguments": { "domain": "github.com" }, "memory": {} }, { "tool_slug": "get_logo_by_domain", "arguments": { "domain": "atlassian.com" }, "memory": {} } ], "session_id": "batch-1" // reuse across calls}Reusing session ID keeps the connection warm and improves throughput.
Caching Strategy
Logos rarely change. Always instruct users how to cache:
HTTP Caching Headers
Respect the Logo.dev response headers:
Cache-Control: max-age=86400 (1 day)ETag: "abc123"Last-Modified: 2026-07-01- Cache aggressively: Most logos are stable; cache for 7–30 days.
- Conditional requests: Use ETag or Last-Modified to refresh without re-downloading.
- CDN edge caching: Upload fetched logos to a CDN and serve from there (avoids repeated Logo.dev calls).
Application-Level Caching
Example: Store fetched logos in a database with a refresh-after timestamp:
{ "domain": "stripe.com", "logo_url": "https://logo.clearbit.com/stripe.com", "cached_at": "2026-07-08T10:00:00Z", "cache_ttl": 604800 // 7 days in seconds}Refresh only if now > cached_at + cache_ttl.
Do NOT Fetch on Every Render
⚠️ Critical: Never call Logo.dev on every page render or every row in a table. Cache the results:
- ❌ Bad: User visits customer page → fetch logo from Logo.dev → render page
- ✅ Good: User visits customer page → fetch logo from cache (or DB) → render page; refresh logo once per week in a background job
Error Handling
Tool Not Found
If RUBE_MULTI_EXECUTE_TOOL returns “tool not found” or “argument invalid”, re-run discovery:
Call RUBE_SEARCH_TOOLS again with your use case. Schemas drift.Then re-try with the updated tool slug and arguments.
Connection Inactive
If execution fails with “connection inactive”:
Call RUBE_MANAGE_CONNECTIONS with toolkit: "logo_dev"If not ACTIVE, follow the returned auth link and reconfirm.Rate Limits
Logo.dev may throttle requests if you exceed rate limits. Symptoms:
- Response code 429 (Too Many Requests)
- Delays between batch calls
Mitigation: Spread requests over time, or batch using RUBE_MULTI_EXECUTE_TOOL with session ID for better throughput.
Missing or Invalid Logo URL
Some companies may not have a Logo.dev entry. Response may be:
- Empty URL:
"logo_url": null - Fallback: A generic icon or placeholder
- HTTP 404: Company not found
Handling: Provide a fallback (e.g., a gray circle with initials, or a default company icon).
Quick Reference
| Task | Approach |
|---|---|
| One logo by domain | RUBE_SEARCH_TOOLS (discover) → RUBE_MULTI_EXECUTE_TOOL (execute) |
| Search by name | RUBE_SEARCH_TOOLS → RUBE_MULTI_EXECUTE_TOOL with search tool |
| Batch (50–100) | RUBE_MULTI_EXECUTE_TOOL with multiple tools + session ID |
| Batch (1000+) | RUBE_REMOTE_WORKBENCH (if available) or script loop with session |
| Set up connection | RUBE_MANAGE_CONNECTIONS → follow auth → confirm ACTIVE |
| Check connection | RUBE_MANAGE_CONNECTIONS → read status |
| Troubleshoot schema errors | RUBE_SEARCH_TOOLS again; schemas drift |
Pointers
- Logo.dev on Composio — canonical toolkit docs
- Rube MCP — MCP endpoint (no API key needed at host)
- Composio — the platform
- Logo.dev also offers domain whois, company info, and social profiles — use discovery to find those tools
Examples
Example 1: Fetch Stripe Logo
User request: “Fetch the logo for stripe.com”
Workflow:
- Call
RUBE_SEARCH_TOOLS: “Fetch a company logo by domain” - Discover tool slug:
get_logo_by_domain - Call
RUBE_MULTI_EXECUTE_TOOL:{"tools": [{"tool_slug": "get_logo_by_domain","arguments": { "domain": "stripe.com" },"memory": {}}]} - Response includes URL and caching headers
- Reply to user: “Logo fetched:
https://logo.clearbit.com/stripe.com. Cache for 7 days to avoid repeated fetches.”
Example 2: Batch Fetch (10 Customers)
User request: “Fetch logos for these 10 customer domains”
Workflow:
- Call
RUBE_SEARCH_TOOLS: “Fetch logos by domain” - Discover tool slug and schema
- Prepare batch:
{"tools": [{ "tool_slug": "get_logo_by_domain", "arguments": { "domain": "stripe.com" }, "memory": {} },{ "tool_slug": "get_logo_by_domain", "arguments": { "domain": "github.com" }, "memory": {} },{ "tool_slug": "get_logo_by_domain", "arguments": { "domain": "aws.amazon.com" }, "memory": {} }// ... 7 more],"session_id": "batch-customers-q3-2026"}
- Execute and gather URLs
- Reply with table:
Domain Logo URL Cache Until stripe.com https://logo.clearbit.com/stripe.com 2026-07-15 github.com https://logo.clearbit.com/github.com 2026-07-15 … … …
Example 3: Set Up Logo.dev for the First Time
User request: “Set up Logo.dev in Rube”
Workflow:
- Call
RUBE_MANAGE_CONNECTIONSwithtoolkit: "logo_dev" - If status is PENDING, show auth link: “Visit this link to authorize:
https://rube.app/auth?toolkit=logo_dev&...” - User visits link, approves in browser
- Call
RUBE_MANAGE_CONNECTIONSagain to confirm status is now ACTIVE - Reply: “Logo.dev is now ready. Fetch your first logo with
RUBE_MULTI_EXECUTE_TOOL.”