> **Building with AI coding agents?** Install the authstack plugin with one command. This equips your agent with accurate Scalekit implementation patterns.
>
> **Recommended** (the `-y` flags skip prompts, so the command runs without an interactive terminal):
> ```bash
> npx -y @scalekit-inc/cli setup -y
> ```
>
> Global:
> ```bash
> npm install -g @scalekit-inc/cli
> scalekit setup -y
> ```
>
> Supports Claude Code, Cursor, GitHub Copilot, Codex + skills for other Agent Skills-compatible agents in `~/.agents/skills`.
> Skills: integrate-agentkit, implement-saaskit, add-mcp-oauth, implement-sso, implement-scim.
> [Full setup guide](https://docs.scalekit.com/dev-kit/build-with-ai/)

---

# Connect AI agents to Logo.dev

The Logo.dev connector lets your AI agent act in each user's Logo.dev account. Each user connects their own Logo.dev access token once, and Scalekit sends it with every call, so your agent never handles credentials. It comes with 5 tools.

**Authentication:** Bearer Token
**Categories:** CRM & Sales, Design, Search
**Tools:** 5: 5 read, 0 write, 0 destructive
**Users sign in with:** Access token
**Built by:** Scalekit connector
**Try it:** [Playground in the Scalekit dashboard](https://app.scalekit.com/ws/signup?sk_intent=playground&provider=LOGODEV)

## Setup

1. ### Install the SDK

   **Node.js**

   ```bash
   npm install @scalekit-sdk/node dotenv
   ```

   **Python**

   ```bash
   pip install scalekit-sdk-python python-dotenv
   ```

2. ### Set your credentials

   Add your Scalekit credentials to your `.env` file. Find values in **[app.scalekit.com](https://app.scalekit.com)** > **Developers** > **API Credentials**.

   ```sh title=".env"
   SCALEKIT_ENVIRONMENT_URL=<your-environment-url>
   SCALEKIT_CLIENT_ID=<your-client-id>
   SCALEKIT_CLIENT_SECRET=<your-client-secret>
   ```

3. ### Create the Logo.dev connection

   In **AgentKit > Connections**, create a Logo.dev connection. The name you give it is the `connection_name` your code passes. See [Configure connections](/agentkit/connections/).

4. ### Authorize a user and make your first call

   **Node.js** (`quickstart.mts`)

   ```typescript
   import { ScalekitClient } from '@scalekit-sdk/node'
   import 'dotenv/config'
   import { createInterface } from 'node:readline/promises'

   const scalekit = new ScalekitClient(
     process.env.SCALEKIT_ENVIRONMENT_URL,
     process.env.SCALEKIT_CLIENT_ID,
     process.env.SCALEKIT_CLIENT_SECRET,
   )
   const actions = scalekit.actions

   const connector = 'logodev'
   const identifier = 'user_123'

   // Generate an authorization link for the user
   const { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })
   console.log('Authorize Logo.dev:', link)
   const rl = createInterface({ input: process.stdin, output: process.stdout })
   await rl.question('Press Enter after authorizing...')
   rl.close()

   // Make your first call
   const result = await actions.executeTool({
     connector,
     identifier,
     toolName: 'logodev_get_brand',
     toolInput: {},
   })
   console.log(result)
   ```

   ```bash
   npx tsx quickstart.mts
   ```

   **Python** (`quickstart.py`)

   ```python
   import os
   from scalekit import ScalekitClient
   from dotenv import load_dotenv
   load_dotenv()

   scalekit_client = ScalekitClient(
       env_url=os.getenv("SCALEKIT_ENVIRONMENT_URL"),
       client_id=os.getenv("SCALEKIT_CLIENT_ID"),
       client_secret=os.getenv("SCALEKIT_CLIENT_SECRET"),
   )
   actions = scalekit_client.actions

   connection_name = "logodev"
   identifier = "user_123"

   # Generate an authorization link for the user
   link_response = actions.get_authorization_link(
       connection_name=connection_name,
       identifier=identifier,
   )
   print("Authorize Logo.dev:", link_response.link)
   input("Press Enter after authorizing...")

   # Make your first call
   result = actions.execute_tool(
       tool_input={},
       tool_name="logodev_get_brand",
       connection_name=connection_name,
       identifier=identifier,
   )
   print(result)
   ```

   ```bash
   python quickstart.py
   ```

   Each user opens the link once and enters their Logo.dev credentials there. See [Authorize a user](/agentkit/tools/authorize/) for the full flow and statuses.

## Tools

Pass the exact name to `execute_tool`, with an input like each tool's example. To ask for a tool that's missing, use the [request form](https://scalekitsupport.portal.usepylon.com/forms/request-a-connector-tool).

**Node.js**

```typescript
const result = await actions.executeTool({
  toolName: 'logodev_get_brand',
  toolInput: {},
  connector: 'logodev',
  identifier: 'user_123',
})
```

**Python**

```python
result = actions.execute_tool(
    tool_name="logodev_get_brand",
    tool_input={},
    connection_name="logodev",
    identifier="user_123",
)
```

`result.data` is the app's response as JSON, and `result.execution_id` (`executionId` in Node.js) is the ID of the call.

### `logodev_get_brand`

Get Brand · Read-only

Look up a brand's full profile on Logo.dev from one identifier: a domain, stock ticker, ISIN, crypto symbol or company name.
Returns the brand id, name, domain, description, brand colors (hex, RGB and OKLCH, most dominant first), social profile URLs, and the logo, brandmark and social banners as temporary download URLs (valid about 24 hours) with dimensions and format, plus metadata.resolution showing how the identifier was matched. A brand Logo.dev has not indexed yet returns data.status not_indexed with metadata.pending; wait retry_after_seconds and call again (pending responses and retries are not billed).
Use this to enrich a company record. Use logodev_get_logo or logodev_get_brandmark when you only need one image, logodev_search_brands to choose between several companies with similar names, and logodev_get_brand_by_id when you already stored the brand id.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `crypto` (`string`, optional): Crypto token symbol, case-insensitive. Send exactly one of domain, ticker, isin, crypto or name. Example: BTC
- `domain` (`string`, optional): Company website domain. A subdomain is reduced to its registrable domain, so www.stripe.com looks up stripe.com. Send exactly one of domain, ticker, isin, crypto or name. Example: stripe.com
- `isin` (`string`, optional): International Securities Identification Number of the company's security, 12 characters, case-insensitive. Send exactly one of domain, ticker, isin, crypto or name. Example: US0378331005
- `name` (`string`, optional): Company or brand name. Logo.dev resolves it to the top search match, so use logodev_search_brands first when the name could mean several companies. Send exactly one of domain, ticker, isin, crypto or name. Example: Stripe
- `nosubscribe` (`string`, optional): Set to true to skip the automatic webhook subscription to this brand. It only matters when webhooks are turned on for your Logo.dev account; leave it empty otherwise. Example: true. One of: `true`.
- `ticker` (`string`, optional): Stock or ETF ticker symbol, in any case, with no exchange prefix. A bare symbol resolves against US exchanges; for a listing on another exchange add its suffix, such as 7203.T for Tokyo. Send exactly one of domain, ticker, isin, crypto or name. Example: AAPL

Example input: `{}`

### `logodev_get_brand_by_id`

Get Brand by ID · Read-only

Get a brand's full profile on Logo.dev by its brand id.
Returns the same profile as logodev_get_brand: name, domain, description, brand colors, social profile URLs, and logo, brandmark and social banner download URLs (valid about 24 hours). A brand Logo.dev has not indexed yet returns data.status not_indexed with metadata.pending; wait retry_after_seconds and call again (pending responses and retries are not billed).
Use this to refresh a brand you already stored, since a brand keeps its id when its domain changes. Use logodev_get_brand to look a brand up by domain, ticker, ISIN, crypto symbol or name.
Requires a brand id (data.id) from an earlier logodev_get_brand call.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `id` (`string`, required): Logo.dev brand id, the data.id value from a logodev_get_brand response. It starts with brand_. Example: brand_4x0wr3g0000g00400000000004
- `nosubscribe` (`string`, optional): Set to true to skip the automatic webhook subscription to this brand. It only matters when webhooks are turned on for your Logo.dev account; leave it empty otherwise. Example: true. One of: `true`.

Example input: `{"id":"<id>"}`

### `logodev_get_brandmark`

Get Brandmark · Read-only

Get a brand's brandmark, the wide logo lockup with the symbol and wordmark, from Logo.dev using one identifier: a domain, stock ticker, ISIN, crypto symbol or company name.
Returns JSON, not image bytes: a temporary signed download url (valid until expires_at, about 24 hours; append size, format (png, jpg, webp) or theme (light, dark) to it to resize or convert), the brand id, the source width, height, format, transparency and vector flags, an etag and a blurhash placeholder. Returns 404 when the brand has no brandmark. A brand Logo.dev has not indexed yet returns data.status not_indexed with metadata.pending; wait retry_after_seconds and call again (pending responses and retries are not billed).
Use this for headers, logo walls and documents that need the full lockup. Use logodev_get_logo for the square logo, and logodev_get_brand for the complete profile.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `crypto` (`string`, optional): Crypto token symbol, case-insensitive. Send exactly one of domain, ticker, isin, crypto or name. Example: BTC
- `domain` (`string`, optional): Company website domain. A subdomain is reduced to its registrable domain, so www.stripe.com looks up stripe.com. Send exactly one of domain, ticker, isin, crypto or name. Example: stripe.com
- `isin` (`string`, optional): International Securities Identification Number of the company's security, 12 characters, case-insensitive. Send exactly one of domain, ticker, isin, crypto or name. Example: US0378331005
- `name` (`string`, optional): Company or brand name. Logo.dev resolves it to the top search match, so use logodev_search_brands first when the name could mean several companies. Send exactly one of domain, ticker, isin, crypto or name. Example: Stripe
- `ticker` (`string`, optional): Stock or ETF ticker symbol, in any case, with no exchange prefix. A bare symbol resolves against US exchanges; for a listing on another exchange add its suffix, such as 7203.T for Tokyo. Send exactly one of domain, ticker, isin, crypto or name. Example: AAPL

Example input: `{}`

### `logodev_get_logo`

Get Logo · Read-only

Get a brand's square logo from Logo.dev using one identifier: a domain, stock ticker, ISIN, crypto symbol or company name.
Returns JSON, not image bytes: a temporary signed download url (valid until expires_at, about 24 hours; append size, format (png, jpg, webp) or theme (light, dark) to it to resize or convert), the brand id, the source width, height, format, transparency and vector flags, an etag that changes when the logo changes, and a blurhash placeholder. Returns 404 when the brand has no logo. A brand Logo.dev has not indexed yet returns data.status not_indexed with metadata.pending; wait retry_after_seconds and call again (pending responses and retries are not billed).
Use this when you only need the logo. Use logodev_get_brandmark for the wide logo with the wordmark, and logodev_get_brand when you also need colors, description and social profiles.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `crypto` (`string`, optional): Crypto token symbol, case-insensitive. Send exactly one of domain, ticker, isin, crypto or name. Example: BTC
- `domain` (`string`, optional): Company website domain. A subdomain is reduced to its registrable domain, so www.stripe.com looks up stripe.com. Send exactly one of domain, ticker, isin, crypto or name. Example: stripe.com
- `isin` (`string`, optional): International Securities Identification Number of the company's security, 12 characters, case-insensitive. Send exactly one of domain, ticker, isin, crypto or name. Example: US0378331005
- `name` (`string`, optional): Company or brand name. Logo.dev resolves it to the top search match, so use logodev_search_brands first when the name could mean several companies. Send exactly one of domain, ticker, isin, crypto or name. Example: Stripe
- `ticker` (`string`, optional): Stock or ETF ticker symbol, in any case, with no exchange prefix. A bare symbol resolves against US exchanges; for a listing on another exchange add its suffix, such as 7203.T for Tokyo. Send exactly one of domain, ticker, isin, crypto or name. Example: AAPL

Example input: `{}`

### `logodev_search_brands`

Search Brands · Read-only

Search Logo.dev for companies by name and return candidate brands, best match first.
Returns up to limit candidates (10 by default, 25 at most), each with name, domain and logo_url, a logo image link signed with your account's publishable key. Returns an empty list when nothing matches. Results are candidates, not brand records, and carry no brand id.
Use this to turn a company name into a domain or to suggest companies as someone types. Use logodev_get_brand with the chosen domain for the full profile, or with name to take the top match in one step.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `q` (`string`, required): Company or brand name to search for. Example: sweetgreen
- `limit` (`integer`, optional): Maximum number of candidates to return, from 1 to 25. Defaults to 10. Search is not paginated. Example: 5
- `method` (`string`, optional): How to match the query: match searches full names and aliases (the API default, for a submitted query); typeahead matches name prefixes (for suggestions while someone types). Example: typeahead. One of: `match`, `typeahead`.

Example input: `{"q":"<q>"}`

## Related

Other CRM & Sales connectors ([all 103](/agentkit/connectors/?category=crm-sales)):

- [Insightly](/agentkit/connectors/insightly/): Scalekit connector, API key, 108 tools
- [HubSpot](/agentkit/connectors/hubspot/): Scalekit connector, OAuth, 457 tools
- [Salesforce](/agentkit/connectors/salesforce/): Scalekit connector, OAuth, 74 tools


---

## More Scalekit documentation

| Resource | What it contains | When to use it |
|----------|-----------------|----------------|
| [/llms.txt](/llms.txt) | Structured index with routing hints per product area | Start here — find which documentation set covers your topic before loading full content |
| [/llms-full.txt](/llms-full.txt) | Complete documentation for all Scalekit products in one file | Use when you need exhaustive context across multiple products or when the topic spans several areas |
| [sitemap-0.xml](https://docs.scalekit.com/sitemap-0.xml) | Full URL list of every documentation page | Use to discover specific page URLs you can fetch for targeted, page-level answers |
