Skip to content

Company Logo Lookup via Logo.dev

FieldValue
TypeSkill Resource
Source~/.copilot/skills/generators/references/logos.md
DescriptionNot 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:

  1. Call RUBE_MANAGE_CONNECTIONS with toolkit: "logo_dev" to check status.
  2. If the status is PENDING or INACTIVE, follow the returned auth link.
  3. Confirm the connection is ACTIVE before 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?”

  1. Search for tools: RUBE_SEARCH_TOOLS → “Fetch a company logo by domain”
  2. Read the returned schema (e.g., get_logo_by_domain)
  3. Execute: RUBE_MULTI_EXECUTE_TOOL with:
    • tool_slug: “get_logo_by_domain” (from discovery)
    • arguments: { "domain": "stripe.com" }
    • memory: {}
  4. 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”

  1. Search for tools: RUBE_SEARCH_TOOLS → “Search for company logos by name”
  2. Read the returned schema (e.g., search_logos_by_name)
  3. Execute: RUBE_MULTI_EXECUTE_TOOL with:
    • tool_slug: “search_logos_by_name”
    • arguments: { "company_name": "Acme", "limit": 5 }
    • memory: {}
  4. 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

TaskApproach
One logo by domainRUBE_SEARCH_TOOLS (discover) → RUBE_MULTI_EXECUTE_TOOL (execute)
Search by nameRUBE_SEARCH_TOOLSRUBE_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 connectionRUBE_MANAGE_CONNECTIONS → follow auth → confirm ACTIVE
Check connectionRUBE_MANAGE_CONNECTIONS → read status
Troubleshoot schema errorsRUBE_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

User request: “Fetch the logo for stripe.com”

Workflow:

  1. Call RUBE_SEARCH_TOOLS: “Fetch a company logo by domain”
  2. Discover tool slug: get_logo_by_domain
  3. Call RUBE_MULTI_EXECUTE_TOOL:
    {
    "tools": [
    {
    "tool_slug": "get_logo_by_domain",
    "arguments": { "domain": "stripe.com" },
    "memory": {}
    }
    ]
    }
  4. Response includes URL and caching headers
  5. 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:

  1. Call RUBE_SEARCH_TOOLS: “Fetch logos by domain”
  2. Discover tool slug and schema
  3. 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"
    }
  4. Execute and gather URLs
  5. Reply with table:
    DomainLogo URLCache Until
    stripe.comhttps://logo.clearbit.com/stripe.com2026-07-15
    github.comhttps://logo.clearbit.com/github.com2026-07-15

Example 3: Set Up Logo.dev for the First Time

User request: “Set up Logo.dev in Rube”

Workflow:

  1. Call RUBE_MANAGE_CONNECTIONS with toolkit: "logo_dev"
  2. If status is PENDING, show auth link: “Visit this link to authorize: https://rube.app/auth?toolkit=logo_dev&...
  3. User visits link, approves in browser
  4. Call RUBE_MANAGE_CONNECTIONS again to confirm status is now ACTIVE
  5. Reply: “Logo.dev is now ready. Fetch your first logo with RUBE_MULTI_EXECUTE_TOOL.”