----
url: https://docs.context.dev/install-cli
----

> ## Documentation Index
>
> Fetch the complete documentation index at: [/llms.txt](/llms.txt)
>
> Use this file to discover all available pages before exploring further.

[Skip to main content](#content-area)

The [`context-dev` CLI](https://github.com/context-dot-dev/context-dev-cli) wraps every Context.dev endpoint in a single binary. Anything that can run a shell command — you, a CI job, or a coding agent like Claude Code or Codex — can resolve brands, scrape pages to Markdown, take screenshots, and classify industries without writing any SDK code.

Paste this into your agent to install the CLI and teach it the commands.

## [​](#install)Install

Prebuilt binaries for macOS, Linux, and Windows ship with every [GitHub release](https://github.com/context-dot-dev/context-dev-cli/releases/latest). If you have Go 1.22+ installed, `go install` works too.

* macOS
* Linux
* Windows
* Go

terminal

```
# Apple Silicon — swap arm64 for amd64 on Intel Macs
curl -fsSL https://api.github.com/repos/context-dot-dev/context-dev-cli/releases/latest \
  | grep -o 'https://[^"]*macos_arm64\.zip' \
  | xargs curl -fsSL -o context-dev.zip
unzip -o context-dev.zip -d context-dev-cli
sudo mv context-dev-cli/context-dev /usr/local/bin/
```

The archive also bundles shell completions (bash, zsh, fish) and man pages if you want them.

terminal

```
# Debian/Ubuntu (amd64)
curl -fsSL https://api.github.com/repos/context-dot-dev/context-dev-cli/releases/latest \
  | grep -o 'https://[^"]*linux_amd64\.deb' \
  | xargs curl -fsSL -o context-dev.deb
sudo dpkg -i context-dev.deb
```

`.rpm`, `.apk` (Alpine), `.pkg.tar.zst` (Arch), and plain `.tar.gz` builds for amd64, arm64, 386, and armv6 are on the [releases page](https://github.com/context-dot-dev/context-dev-cli/releases/latest).

terminal

```
# x64 — swap amd64 for arm64 on ARM machines
$release = Invoke-RestMethod https://api.github.com/repos/context-dot-dev/context-dev-cli/releases/latest
$url = ($release.assets | Where-Object name -like "*windows_amd64.zip").browser_download_url
Invoke-WebRequest $url -OutFile context-dev.zip
Expand-Archive context-dev.zip -DestinationPath "$env:LOCALAPPDATA\context-dev"
setx PATH "$env:PATH;$env:LOCALAPPDATA\context-dev"
```

Open a new terminal after `setx` so the updated `PATH` takes effect.

terminal

```
go install 'github.com/context-dot-dev/context-dev-cli/cmd/context-dev@latest'
```

Go places the binary in `$HOME/go/bin` (or `$GOPATH/bin` if `GOPATH` is set). If the command isn’t found afterwards, add that directory to your `PATH`:

terminal

```
# Add to your shell profile (.zshrc, .bashrc, etc.)
export PATH="$PATH:$(go env GOPATH)/bin"
```

Confirm it installed:

terminal

```
context-dev --version
```

## [​](#set-your-api-key)Set your API key

Sign up at [context.dev/signup](https://context.dev/signup) (free tier: 500 one-time credits, no card) and copy your key from the [dashboard](https://context.dev/dashboard) — it starts with `ctxt_secret_`. The CLI reads the key from the `CONTEXT_DEV_API_KEY` environment variable. Every command also accepts an explicit `--api-key` flag, which takes precedence over the environment.

### [​](#temporary-current-terminal-only)Temporary (current terminal only)

`export` sets the key for the shell you’re in; it disappears when you close the terminal:

terminal

```
export CONTEXT_DEV_API_KEY="ctxt_secret_..."
```

For a single command, prefix the variable or pass the flag — neither touches your shell state:

terminal

```
CONTEXT_DEV_API_KEY="ctxt_secret_..." context-dev brand retrieve --domain stripe.com

context-dev brand retrieve --domain stripe.com --api-key "ctxt_secret_..."
```

### [​](#permanent-every-new-terminal)Permanent (every new terminal)

Append the export to your shell profile so the key is set in every session:

terminal

```
# zsh (macOS default)
echo 'export CONTEXT_DEV_API_KEY="ctxt_secret_..."' >> ~/.zshrc && source ~/.zshrc

# bash
echo 'export CONTEXT_DEV_API_KEY="ctxt_secret_..."' >> ~/.bashrc && source ~/.bashrc
```

On Windows, `setx` persists it for all future terminals:

terminal

```
setx CONTEXT_DEV_API_KEY "ctxt_secret_..."
```

Never commit the key. Keep it in your shell profile, an `.envrc`, or a secret manager — and never bake it into scripts that land in a repo.

## [​](#usage)Usage

Commands follow a resource-based structure:

terminal

```
context-dev [resource] <command> [flags...]
```

| Resource   | What it covers                                                                                                                 |
| ---------- | ------------------------------------------------------------------------------------------------------------------------------ |
| `brand`    | Brand profiles by domain, name, email, ticker, or ISIN; transaction identification                                             |
| `web`      | Scraping (Markdown, HTML, images, sitemap, crawl), search, screenshots, styleguide, fonts, competitors, JSON Schema extraction |
| `ai`       | Product extraction and AI data queries                                                                                         |
| `industry` | NAICS and SIC classification                                                                                                   |
| `utility`  | Zero-credit cache prefetching                                                                                                  |

`--help` works at every level: `context-dev --help` lists the resources, `context-dev web --help` lists its commands, and `context-dev web web-scrape-md --help` documents every flag. Three global flags do most of the output work:

terminal

```
# Pull one field out of the response with GJSON syntax
context-dev brand retrieve --domain stripe.com --transform 'brand.colors'

# Force plain JSON for piping into jq or a file
context-dev brand retrieve --domain stripe.com --format json > stripe.json

# Interactively browse a large response
context-dev web extract-styleguide --domain stripe.com --format explore
```

`--format` accepts `auto`, `explore`, `json`, `jsonl`, `pretty`, `raw`, and `yaml`; `auto` (the default) picks based on whether output is going to a terminal or a pipe. `--transform` uses [GJSON syntax](https://github.com/tidwall/gjson/blob/master/SYNTAX.md) to reshape responses before they’re printed.

## [​](#examples)Examples

One example per endpoint, grouped the same way as the [API Reference](/api-reference/brand-intelligence/retrieve-brand-data-by-domain). Credit costs are noted inline; the full breakdown is on the [pricing page](https://context.dev/pricing).

### [​](#brand-intelligence)Brand Intelligence

terminal

```
# Full brand profile — logos, colors, socials, industry, links (10 credits)
context-dev brand retrieve --domain stripe.com

# Same profile from other identifiers (10 credits each)
context-dev brand retrieve-by-name --name "Stripe"
context-dev brand retrieve-by-email --email contact@stripe.com
context-dev brand retrieve-by-ticker --ticker AAPL
context-dev brand retrieve-by-isin --isin US0378331005

# Slimmer payload: just domain, title, colors, logos, and backdrops (10 credits)
context-dev brand retrieve-simplified --domain stripe.com

# Resolve a raw card-statement descriptor to a real merchant (10 credits)
context-dev brand identify-from-transaction \
  --transaction-info "UBER *TRIP HELP.UBER.COM" \
  --country-gl us
```

See [Get brand data](/guides/get-brand-data) and [Enrich transaction codes](/guides/enrich-transaction-codes) for what comes back.

### [​](#web-scraping)Web Scraping

terminal

```
# One page → LLM-ready Markdown (1 credit)
context-dev web web-scrape-md --url https://stripe.com/pricing

# Raw HTML instead (1 credit)
context-dev web web-scrape-html --url https://stripe.com/pricing

# Every image asset on a page (1 credit; 5 with --enrichment)
context-dev web web-scrape-images --url https://stripe.com

# All URLs in a site's sitemap (1 credit)
context-dev web web-scrape-sitemap --domain stripe.com

# Crawl a whole site to Markdown (1 credit per page)
context-dev web web-crawl-md --url https://docs.stripe.com --max-pages 25

# Search the web (1 credit per result)
context-dev web search --query "stripe billing pricing"

# Screenshot — returns a hosted PNG URL (5 credits)
context-dev web screenshot --direct-url https://stripe.com/pricing
context-dev web screenshot --domain stripe.com --page pricing --full-screenshot
```

See [Scrape websites to Markdown](/guides/scrape-websites-to-markdown) and [Take webpage screenshots](/guides/take-webpage-screenshot).

### [​](#web-extraction)Web Extraction

terminal

```
# Full design system: colors, typography, spacing, shadows, components (10 credits)
context-dev web extract-styleguide --domain stripe.com

# Fonts only (5 credits)
context-dev web extract-fonts --domain stripe.com

# Direct competitors, from landing-page and web-search evidence
context-dev web extract-competitors --domain stripe.com --num-competitors 5

# Typed extraction from any URL with a JSON Schema (10 credits)
context-dev web extract \
  --url https://stripe.com/pricing \
  --instructions "Extract the pricing plans" \
  --schema '{
    "type": "object",
    "properties": {
      "plans": {
        "type": "array",
        "items": {
          "type": "object",
          "properties": {
            "name": { "type": "string" },
            "price": { "type": "string", "description": "Display price, like 2.9% + 30c" }
          }
        }
      }
    }
  }'
```

See [Extract a design system](/guides/extract-design-system-from-website) and [Extract structured data](/guides/extract-structured-data-from-websites).

### [​](#product-extraction-&-ai-queries)Product Extraction & AI Queries

terminal

```
# Is this URL a product page? If so, extract the product (10 credits)
context-dev ai extract-product --url https://www.allbirds.com/products/mens-wool-runners

# Pull a product list from a brand's whole site (10 credits)
context-dev ai extract-products --domain allbirds.com --max-products 10

# Ask for arbitrary datapoints from a brand's website (10 credits)
context-dev ai ai-query \
  --domain stripe.com \
  --data-to-extract.datapoint-name ceo_name \
  --data-to-extract.datapoint-description "Full name of the company's CEO" \
  --data-to-extract.datapoint-type text
```

See [Extract products from websites](/guides/extract-product-from-websites).

### [​](#industry-classification)Industry Classification

terminal

```
# 2022 NAICS codes from a domain or company name
context-dev industry retrieve-naics --input stripe.com

# SIC codes — original_sic (1987 list, default) or latest_sec (SEC's current list)
context-dev industry retrieve-sic --input stripe.com --type latest_sec
```

See the [classification overview](/guides/classification/overview) for how the three systems differ.

### [​](#prefetch)Prefetch

terminal

```
# Warm the cache so the next lookup lands in under a second (0 credits, paid plans only)
context-dev utility prefetch --domain stripe.com
context-dev utility prefetch-by-email --email contact@stripe.com
```

See [Prefetching](/optimization/prefetching) for when this pays off.

## [​](#give-it-to-your-agent)Give it to your agent

Any agent with shell access can use the CLI as-is — no MCP server or tool config required. Make sure `CONTEXT_DEV_API_KEY` is exported in the shell your agent inherits, then tell it the CLI exists in your `CLAUDE.md` or `AGENTS.md`:

CLAUDE.md / AGENTS.md

```
## Context.dev CLI

The `context-dev` CLI is installed and `CONTEXT_DEV_API_KEY` is set. Use it to
look up brand data (`context-dev brand retrieve --domain example.com`), scrape
pages to Markdown (`context-dev web web-scrape-md --url ...`), take screenshots,
extract styleguides and products, and classify industries. Run
`context-dev --help` to list resources and
`context-dev <resource> <command> --help` for flags.
```

When the agent pipes a command, `--format auto` emits plain JSON, so the output is parseable without extra flags. For trimming large responses before they hit the agent’s context window, `--transform` is the tool: `--transform 'brand.colors'` returns just the colors instead of the full profile.

## [​](#next-steps)Next steps

## [Agent Quickstart](/agent-quickstart)

[The full agent setup: copyable system prompt, SKILL.md, and MCP, in one page.](/agent-quickstart)

## [Install MCP](/install-mcp)

[Prefer tool calls over shell commands? Connect the MCP server instead.](/install-mcp)

## [SKILL.md](/install-skill)

[Teach your agent when to reach for each endpoint.](/install-skill)

## [API Reference](/api-reference/brand-intelligence/retrieve-brand-data-by-domain)

[The underlying endpoints every CLI command calls.](/api-reference/brand-intelligence/retrieve-brand-data-by-domain)

Was this page helpful?

[Install MCP](/install-mcp)

[Previous](/install-mcp)

[Scrape Websites](/guides/scrape-websites-to-markdown)

[Next](/guides/scrape-websites-to-markdown)

Ctrl+I

Assistant

Responses are generated using AI and may contain mistakes.

[Contact support](mailto:founders@context.dev)

----
url: https://docs.context.dev/nocode/make
----

> ## Documentation Index
>
> Fetch the complete documentation index at: [/llms.txt](/llms.txt)
>
> Use this file to discover all available pages before exploring further.

[Skip to main content](#content-area)

[Make](https://www.make.com) (formerly Integromat) is a visual automation platform. Context.dev publishes a native integration on the Make marketplace, plus all endpoints are reachable through Make’s generic HTTP module.

* Native integration: install once, drop pre-built modules into any scenario
* HTTP module: call any Context.dev endpoint, including ones not yet exposed as native modules

## [Install Context.dev for Make](https://www.make.com/en/integrations/context-dev)

[Open the Make marketplace listing and add the integration to your account.](https://www.make.com/en/integrations/context-dev)

## [​](#install-the-native-integration)Install the native integration

1. Open the [Context.dev integration on Make](https://www.make.com/en/integrations/context-dev).
2. Click **Install** and authorize Context.dev in your Make account.
3. Paste your Context.dev API key from the [dashboard](https://context.dev/dashboard).

## [​](#available-modules)Available modules

Once installed, the following modules appear under Context.dev in Make’s module picker:

| Module                 | Input                              | Output                                     | Underlying endpoint                                                        |
| ---------------------- | ---------------------------------- | ------------------------------------------ | -------------------------------------------------------------------------- |
| Retrieve Brand Data    | Domain, email, or ticker           | Brand record (logos, colors, company data) | `/brand/retrieve`, `/brand/retrieve-by-email`, `/brand/retrieve-by-ticker` |
| NAICS Classification   | Domain or company name             | NAICS code(s) with confidence              | `/web/naics`                                                               |
| Transaction Enrichment | Merchant descriptor, MCC, location | Merchant brand with logo and industry      | `/brand/transaction_identifier`                                            |
| AI Products Extraction | Domain                             | Product catalog with pricing and features  | `/brand/ai/products`                                                       |
| Screenshot Capture     | URL                                | Hosted screenshot URL                      | `/web/screenshot`                                                          |
| Styleguide Extraction  | Domain                             | Design system (colors, fonts, components)  | `/web/styleguide`                                                          |

Each module returns a structured object the rest of the scenario can map into downstream modules.

## [​](#walkthrough-brand-a-google-slides-presentation)Walkthrough: brand a Google Slides presentation

The scenario fetches a brand record from Context.dev and pipes the logo and company name into a Google Slides template. A similar pattern is covered in [Branded Campaign Assets](/use-cases/branded-campaign-assets).

### [​](#1-design-a-google-slides-template)1. Design a Google Slides template

Create a Google Slides template with placeholders for the brand logo and name. Wrap each placeholder in double curly braces, e.g. `{{client_logo}}` and `{{client_name}}`. For logo placement, insert a **shape** where you want the logo to appear, then add text inside it with the placeholder (e.g. `{{client_logo}}`). The shape acts as a bounding box: the image module added in step 4 will replace it with the resized logo while preserving aspect ratio.

### [​](#2-set-up-the-make-scenario)2. Set up the Make scenario

Start with a trigger that captures new client signups or form submissions (Google Forms, Typeform, etc.) and pipe its domain output into the Context.dev module.

### [​](#3-add-the-google-slides-module)3. Add the Google Slides module

Add the Google Slides **Create a Presentation from a Template** module. Select your template and map the text placeholders to the corresponding fields from the trigger and Context.dev modules:

* `{{client_name}}` → company name from the form or `brand.title` from Context.dev
* `{{client_logo}}` → leave unmapped, so it stays as literal placeholder text that step 4’s image module can find and replace

You can also override the destination folder and the new presentation’s name in the same module.

The Google Slides template must have placeholders wrapped in double curly braces **before** you add this module. If you edit the template afterward, delete and re-add the module (or change the presentation ID) so Make refreshes the field list.

### [​](#4-replace-the-logo-placeholder)4. Replace the logo placeholder

Add the **Upload an Image to a Presentation** module. Select the presentation created in the previous step; the module finds the `{{client_logo}}` placeholder text left in place by step 3 and swaps it for the image. For the **Image URL** field, map `brand.logos[1].url` from the Context.dev module (Make arrays start at `1`, so index `1` is the primary logo).

### [​](#5-optional-final-step)5. Optional final step

A common closer is a notification: a Slack message to the team, a Notion entry, or a record in your project management tool linking to the new presentation.

### [​](#6-test-and-activate)6. Test and activate

Run the scenario a few times against test inputs. Once the output looks right, activate the scenario.

### [​](#result)Result

A few presentations generated through the scenario for a fictional Pied Piper client:

## [​](#http-module-fallback)HTTP module fallback

For endpoints not yet exposed as a native module, use Make’s HTTP module:

1

[](#)

Add the HTTP module

Add an **HTTP > Make a request** module.

2

[](#)

Configure the request

* **URL:** `https://api.context.dev/v1/brand/retrieve`
* **Method:** `GET`
* **Query string:** `domain` → mapped from the trigger
* **Headers:** `Authorization: Bearer YOUR_API_KEY`

3

[](#)

Enable JSON parsing

Tick **Parse response** so downstream modules can map fields directly (e.g. `brand.title`).

## [​](#transform-brand-data-inside-make)Transform brand data inside Make

Make’s built-in functions handle the common reshapes without a Code module.

### [​](#extract-a-domain-from-an-email)Extract a domain from an email

```
{{trim(get(split(email; "@"); 2))}}
```

Make uses `;` to separate function arguments, and its arrays are 1-indexed: index `1` is the part before the `@`, index `2` is the domain.

### [​](#flatten-brand-fields-for-downstream-modules)Flatten brand fields for downstream modules

```
Company Name: {{brand.title}}
Logo URL: {{brand.logos[1].url}}
Primary Color: {{brand.colors[1].hex}}
Industry: {{brand.industries.eic[1].industry}}
```

### [​](#fall-back-when-a-field-is-missing)Fall back when a field is missing

```
{{if(brand.logos[1].url; brand.logos[1].url; "https://placehold.co/400x400?text=No+Logo")}}
```

## [​](#handle-errors)Handle errors

Make routes errors through dedicated error-handler branches:

1

[](#)

Add an error handler

Right-click the Context.dev module and select **Add error handler**.

2

[](#)

Pick the error type

* `DataError`: invalid request format
* `RuntimeError`: API errors (400, 408, 429, 500, etc.)
* `ConnectionError`: network issues

3

[](#)

Define recovery

Retry with exponential backoff, log to a database, notify an admin, or continue with fallback data.

Rate limits apply per API key regardless of which platform calls the API. Use Make’s scheduling and rate-limit features to stay within your plan; see [Handle Rate Limits](/optimization/rate-limits) for the current per-plan caps.

## [​](#example-workflows)Example workflows

### [​](#enrich-new-hubspot-contacts)Enrich new HubSpot contacts

```
Trigger: New Contact in HubSpot
  ↓
Action: Extract domain from email
  ↓
Context.dev: Retrieve Brand Data
  ↓
Router:
  → If brand found: Update HubSpot contact
  → If not found: Add to manual review list
```

### [​](#monitor-competitors-daily)Monitor competitors daily

```
Trigger: Scheduled (daily)
  ↓
Array: List of competitor domains
  ↓
For each:
  → Context.dev: Retrieve Brand Data
  → Context.dev: AI Products Extraction
  ↓
Action: Update Google Sheets
  ↓
Action: Slack alert on changes
```

### [​](#process-transactions-in-real-time)Process transactions in real time

```
Trigger: Webhook (new transaction)
  ↓
Context.dev: Transaction Enrichment
  ↓
Router:
  → If brand identified:
     - Attach logo and category to the transaction
  → If not identified:
     - Flag for manual review
```

## [​](#pricing)Pricing

Context.dev API calls cost the same whether they go through Make or a direct HTTP call. Make charges per operation (including HTTP module calls). Caching reduces both bills.

## [​](#next-steps)Next steps

## [Make documentation](https://www.make.com/en/help/getting-started)

[Make basics: scenarios, modules, and triggers.](https://www.make.com/en/help/getting-started)

## [Make HTTP module guide](https://www.make.com/en/help/modules/http)

[Reference for the HTTP module used above.](https://www.make.com/en/help/modules/http)

## [Context.dev API Reference](/api-reference/brand-intelligence/retrieve-brand-data-by-domain)

[Endpoint reference for every Make module and HTTP call.](/api-reference/brand-intelligence/retrieve-brand-data-by-domain)

## [Zapier Integration](/nocode/zapier)

[The same workflows on Zapier.](/nocode/zapier)

Stuck wiring up a Make scenario with Context.dev? [Email us](mailto:hello@context.dev) and we’ll help you get it working.

Was this page helpful?

[Troubleshooting](/optimization/troubleshooting)

[Previous](/optimization/troubleshooting)

[Zapier](/nocode/zapier)

[Next](/nocode/zapier)

Ctrl+I

Assistant

Responses are generated using AI and may contain mistakes.

[Contact support](mailto:founders@context.dev)

----
url: https://docs.context.dev/skill.md
----

````
---
name: context-dev
description: Use this skill to call the Context.dev API for brand data and web extraction. Make sure to use this skill whenever the user wants to look up a company's logo, colors, socials, industry, address, or stock ticker by domain, name, work email, ticker, or ISIN; enrich a lead or CRM record; pre-fill an onboarding form; build a customer logo wall or "trusted by" strip; categorize a card or bank transaction descriptor (e.g. "AMZN MKTP US"); scrape a webpage to clean markdown or HTML for an LLM or RAG pipeline; crawl a site or fetch its sitemap; run a web search; extract products or pricing from a storefront; take a screenshot of a webpage; pull a website's design system (colors, fonts, spacing, components) for theming; classify a company by NAICS or SIC; or extract structured data from a website with a JSON Schema, even if they don't explicitly mention "Context.dev" or "Brand API". Requires a CONTEXT_DEV_API_KEY environment variable.
license: MIT
compatibility: Requires a Context.dev API key in the CONTEXT_DEV_API_KEY environment variable. SDKs for TypeScript, Python, Ruby, Go, and PHP; or call the REST API directly.
metadata:
  author: context.dev
  version: "3.0"
---

# Context.dev

Context.dev turns any domain or URL into structured, typed JSON: brand profiles, design systems, scraped content, extracted products, industry codes, and merchant identity. Base URL `https://api.context.dev/v1`. Full docs: [docs.context.dev](https://docs.context.dev) · machine index: [docs.context.dev/llms.txt](https://docs.context.dev/llms.txt).

Every endpoint takes one bearer token and returns typed JSON. No HTML parsing, no Open Graph scraping. This file tells you which endpoint answers which question, exactly what each takes, and exactly what each gives back.

## Setup

Authenticate with a bearer token read from `CONTEXT_DEV_API_KEY`. Never hardcode it; never ship it to client-side code (use a backend proxy).

```bash
export CONTEXT_DEV_API_KEY="ctxt_secret_..."
```

Install an SDK, or call REST directly with `curl`:

| Language   | Install                                            | Import                                                          |
| ---------- | -------------------------------------------------- | --------------------------------------------------------------- |
| TypeScript | `npm install context.dev`                          | `import ContextDev from "context.dev"`                          |
| Python     | `pip install context.dev`                          | `from context.dev import ContextDev`                            |
| Ruby       | `gem install context.dev`                          | `require "context_dev"`                                         |
| Go         | `go get github.com/context-dot-dev/context-go-sdk` | `import contextdev "github.com/context-dot-dev/context-go-sdk"` |
| PHP        | `composer require context-dev/context-dev-php`   | `use ContextDev\Client;`                                        |

```typescript
import ContextDev from "context.dev";
const client = new ContextDev({ apiKey: process.env.CONTEXT_DEV_API_KEY });
const { brand } = await client.brand.retrieve({ domain: "stripe.com" });
```

**SDK naming.** Methods below are shown in TypeScript camelCase (`client.brand.retrieve`). Python and Ruby use snake_case (`retrieve`, `retrieve_by_name`); PHP uses the same camelCase method names as TypeScript with named parameters (`$client->brand->retrieve(domain: 'stripe.com')`); Go uses PascalCase and renames a few (`client.Brand.Get`, `client.Industry.GetNaics`). Methods are grouped under five namespaces that don't always match the URL path: `brand.*`, `web.*`, `ai.*`, `industry.*` (NAICS/SIC, despite `/web/` paths), `utility.*` (prefetch). The Python SDK currently lags the others: a few methods live under different namespaces (`client.style.*` for styleguide/fonts) or are missing; if an SDK method is missing or unavailable, call the REST path directly. See [best practices](https://docs.context.dev/optimization/best-practices).

## Choosing an endpoint

Pick the narrowest endpoint that answers the question. Start from what you already have:

| You have                          | Use                                              | Path                                         |
| --------------------------------- | ------------------------------------------------ | -------------------------------------------- |
| A domain, want everything         | Retrieve Brand                                   | `GET /brand/retrieve`                        |
| A domain, only need logo + colors | Retrieve Simplified (same price, smaller/faster) | `GET /brand/retrieve-simplified`             |
| A company name                    | Retrieve by Name                                 | `GET /brand/retrieve-by-name`                |
| A work email                      | Retrieve by Email                                | `GET /brand/retrieve-by-email`               |
| A stock ticker / ISIN             | Retrieve by Ticker / ISIN                        | `GET /brand/retrieve-by-ticker` · `-by-isin` |
| A card/bank descriptor            | Transaction Enrichment                           | `GET /brand/transaction_identifier`          |
| A URL → clean text for an LLM     | Scrape Markdown                                  | `GET /web/scrape/markdown`                   |
| A whole site → text for RAG       | Crawl                                            | `POST /web/crawl`                            |
| A design system to copy/theme     | Styleguide                                       | `GET /web/styleguide`                        |
| A product page → structured data  | Extract Product                                  | `POST /brand/ai/product`                     |
| A custom schema for a site        | Structured Extract                               | `POST /web/extract`                          |
| An industry code (NAICS/SIC)      | Classify                                         | `GET /web/naics` · `/web/sic`                |

**Prefer bare domains:** use `stripe.com` instead of `https://stripe.com` or `www.stripe.com`. The API normalizes protocol and `www.`, but a string with no TLD fails validation.

---

## Brand intelligence

All seven brand endpoints share the same response envelope: `{ status, code, brand }`. They cost **10 credits** each and only bill on a successful resolution (a 400 `NOT_FOUND` "no brand" response is free). Guide: [Get brand data](https://docs.context.dev/guides/get-brand-data).

### The `brand` object (shared response shape)

This is what `brand` contains on the full endpoints (`retrieve`, `by-name`, `by-email`, `by-ticker`, `by-isin`, `transaction_identifier`). Any field may be `null`/absent, so always provide fallbacks.

| Field                         | Type         | Notes                                                                                                                                                                                                                              |
| ----------------------------- | ------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `brand.domain`                | string       | Canonical domain after normalization.                                                                                                                                                                                              |
| `brand.title`                 | string       | Company name.                                                                                                                                                                                                                      |
| `brand.description`           | string       | One-paragraph description.                                                                                                                                                                                                         |
| `brand.slogan`                | string       | Tagline.                                                                                                                                                                                                                           |
| `brand.colors[]`              | array        | `{ hex, name }`, ordered by prominence. `name` is generated, not official; key off `hex`.                                                                                                                                          |
| `brand.logos[]`               | array        | `{ url, mode, type, resolution{width,height,aspect_ratio}, colors[] }`. `mode` ∈ `light` / `dark` / `has_opaque_background`; `type` ∈ `icon` (square) / `logo` (horizontal). **Filter by `mode`+`type`; don't assume `logos[0]`.** |
| `brand.backdrops[]`           | array        | Hero imagery: `{ url, colors[], resolution }`.                                                                                                                                                                                     |
| `brand.socials[]`             | array        | `{ type, url }`. `type` ∈ x, facebook, instagram, linkedin, youtube, tiktok, github, +24 more.                                                                                                                                     |
| `brand.address`               | object       | `street, city, state_province, state_code, country, country_code, postal_code`.                                                                                                                                                    |
| `brand.stock`                 | object\|null | `{ ticker, exchange }`. `null` for private companies.                                                                                                                                                                              |
| `brand.industries.eic[]`      | array        | `{ industry, subindustry }`: Context's own taxonomy ([EIC](https://docs.context.dev/guides/classification/EIC)), inline on every full response. For NAICS/SIC use the dedicated endpoints.                                         |
| `brand.links`                 | object       | `careers, blog, pricing, contact, terms, privacy`, each nullable.                                                                                                                                                                  |
| `brand.email` / `brand.phone` | string       | Public contact info, when found.                                                                                                                                                                                                   |
| `brand.primary_language`      | string\|null | Detected site language.                                                                                                                                                                                                            |
| `brand.is_nsfw`               | boolean      | Safe-content flag.                                                                                                                                                                                                                 |

```json
{
  "status": "ok",
  "code": 200,
  "brand": {
    "domain": "stripe.com",
    "title": "Stripe",
    "colors": [{ "hex": "#543cfb", "name": "Meteor Shower" }],
    "logos": [
      {
        "url": "https://media.brand.dev/….svg",
        "mode": "light",
        "type": "logo",
        "resolution": { "width": 150, "height": 48, "aspect_ratio": 3.13 }
      }
    ],
    "industries": {
      "eic": [
        { "industry": "Finance", "subindustry": "Payments & Money Movement" }
      ]
    },
    "stock": null
  }
}
```

### Retrieve brand by domain

`GET /brand/retrieve` · 10 credits · SDK `client.brand.retrieve` (Go `Brand.Get`)
[Guide](https://docs.context.dev/guides/get-brand-data#get-a-brand-by-domain) · [API reference](https://docs.context.dev/api-reference/brand-intelligence/retrieve-brand-data-by-domain)

- **When:** you have the company's website domain and want the full profile (logos, colors, socials, address, industry, stock).
- **Takes:** `domain` (string, **required**, bare domain). Optional: `maxSpeed` (bool; skip slow steps for a faster, lighter answer), `force_language` ([SupportedLanguage](https://docs.context.dev/guides/get-brand-data) enum), `maxAgeMs` (int, default `7776000000` ≈ 90d, clamped 1d–1y), `timeoutMS` (int, max `300000`).
- **Gives:** the shared `{ status, code, brand }` envelope above.

### Retrieve simplified

`GET /brand/retrieve-simplified` · 10 credits · SDK `client.brand.retrieveSimplified` (Go `Brand.GetSimplified`)
[Guide](https://docs.context.dev/guides/get-brand-data#get-a-brand-by-domain) · [API reference](https://docs.context.dev/api-reference/brand-intelligence/retrieve-simplified-brand-data-by-domain)

- **When:** you have a domain and only need lightweight visual assets. Fastest payload for logo walls, signup pre-fill, or theming.
- **Takes:** `domain` (string, **required**), `maxAgeMs`, `timeoutMS`. No name/email/ticker/`maxSpeed`/`force_language`.
- **Gives:** `{ status, code, brand }` where `brand` is **stripped to `domain`, `title`, `colors[]`, `logos[]`, `backdrops[]` only**: no description, socials, address, stock, industries, or links. Same 10-credit price as the full retrieve, just less data.

### Retrieve by company name

`GET /brand/retrieve-by-name` · 10 credits · SDK `client.brand.retrieveByName` (Go `Brand.GetByName`)
[Guide](https://docs.context.dev/guides/get-brand-data#look-up-by-company-name) · [API reference](https://docs.context.dev/api-reference/brand-intelligence/retrieve-brand-data-by-company-name)

- **When:** you only know the company name and need Context to resolve it to a domain + full profile.
- **Takes:** `name` (string, **required**, 3–30 chars). Optional: `country_gl` (ISO 3166-1 alpha-2 hint to disambiguate, e.g. `us`), `maxSpeed`, `force_language`, `maxAgeMs`, `timeoutMS`.
- **Gives:** the full shared `brand` envelope.

### Retrieve by work email

`GET /brand/retrieve-by-email` · 10 credits · SDK `client.brand.retrieveByEmail` (Go `Brand.GetByEmail`)
[Guide](https://docs.context.dev/guides/get-brand-data#look-up-by-work-email) · [API reference](https://docs.context.dev/api-reference/brand-intelligence/retrieve-brand-data-by-email-address)

- **When:** lead/onboarding enrichment from a work email; the domain is extracted automatically.
- **Takes:** `email` (string, **required**). Optional: `maxSpeed`, `force_language`, `maxAgeMs`, `timeoutMS`.
- **Gives:** the full shared `brand` envelope.
- **Note:** free providers (gmail, outlook…) and disposable addresses return **HTTP 422** (`FREE_EMAIL_DETECTED` / `DISPOSABLE_EMAIL_DETECTED`); handle 422 as "skip enrichment", not a hard error.

### Retrieve by ticker / ISIN

`GET /brand/retrieve-by-ticker` · `GET /brand/retrieve-by-isin` · 10 credits · SDK `client.brand.retrieveByTicker` / `retrieveByIsin` (Go `Brand.GetByTicker` / `GetByIsin`)
[Guide](https://docs.context.dev/guides/get-brand-data#look-up-by-stock-ticker) · [Ticker API reference](https://docs.context.dev/api-reference/brand-intelligence/retrieve-brand-data-by-stock-ticker)

- **When:** investor/finance flows where the key is a listing identifier.
- **Ticker takes:** `ticker` (string, **required**, 1–15 chars, e.g. `AAPL`, `BRK.A`). Optional `ticker_exchange` (**defaults to NASDAQ**; set it for non-NASDAQ listings), plus `maxSpeed`/`force_language`/`maxAgeMs`/`timeoutMS`.
- **ISIN takes:** `isin` (string, **required**, exactly 12 chars `^[A-Z]{2}[A-Z0-9]{9}[0-9]$`, e.g. `US0378331005`). _ISIN is a niche/hidden lookup; the ticker endpoint is the common one._
- **Gives:** the full shared `brand` envelope, with `brand.stock` populated.

### Transaction enrichment

`GET /brand/transaction_identifier` · 10 credits · SDK `client.brand.identifyFromTransaction` (Go `Brand.IdentifyFromTransaction`)
[Guide](https://docs.context.dev/guides/enrich-transaction-codes) · [API reference](https://docs.context.dev/api-reference/brand-intelligence/identify-brand-from-transaction-data)

- **When:** you have a messy card/ACH descriptor (`AMZN MKTP US`, `SQ *COFFEE BAR`) and need the real merchant brand for spend analytics or categorization.
- **Takes:** `transaction_info` (string, **required**). Optional disambiguators sharply improve accuracy: `mcc` (4-digit category code), `city`, `country_gl` (ISO alpha-2), `phone` (number), `high_confidence_only` (bool, default false; set true for fewer false matches), `maxSpeed`, `force_language`, `timeoutMS`.
- **Gives:** the full shared `brand` envelope (the identified merchant).
- **Note:** this is the only brand endpoint that does **not** accept `maxAgeMs`.

---

## Web scraping

Render, crawl, and search the live web. Bot-detection bypass and proxy escalation are automatic. Guide: [Scrape websites](https://docs.context.dev/guides/scrape-websites-to-markdown).

### Scrape Markdown

`GET /web/scrape/markdown` · 1 credit · SDK `client.web.webScrapeMd` (Go `Web.WebScrapeMd`)
[Guide](https://docs.context.dev/guides/scrape-websites-to-markdown#scrape-a-single-page-to-markdown) · [API reference](https://docs.context.dev/api-reference/web-scraping/scrape-markdown)

- **When:** turn one page into clean, LLM-ready GitHub-Flavored Markdown (nav/ads stripped). The default for feeding pages to a model.
- **Takes:** `url` (string URI, **required**). Optional: `includeLinks` (default true), `includeImages` (default false), `shortenBase64Images` (default true), `useMainContentOnly` (default false), `includeFrames` (default false), `includeSelectors[]`/`excludeSelectors[]` (CSS selectors to keep/remove before conversion; exclusion wins), `pdf` object (`shouldParse` default true, `start`/`end` page range), `maxAgeMs` (default 1d, 0–30d), `waitForMs` (0–30000 render wait), `headers` object (forwarded to the target URL; bypasses cache), `timeoutMS`.
- **Gives:** `{ success: true, markdown, url }`.

### Scrape HTML

`GET /web/scrape/html` · 1 credit · SDK `client.web.webScrapeHTML` (Go `Web.WebScrapeHTML`)
[Guide](https://docs.context.dev/guides/scrape-websites-to-markdown#scrape-a-single-page-to-markdown) · [API reference](https://docs.context.dev/api-reference/web-scraping/scrape-html)

- **When:** you need the fully-rendered raw HTML (to parse the DOM, attributes, or scripts) instead of cleaned text.
- **Takes:** `url` (**required**), `pdf`, `includeFrames`, `useMainContentOnly`, `includeSelectors[]`/`excludeSelectors[]`, `maxAgeMs`, `waitForMs`, `headers`, `timeoutMS` (same shapes as Scrape Markdown).
- **Gives:** `{ success: true, html, url }`.

### Scrape Images

`GET /web/scrape/images` · **1 credit (5 if any enrichment flag is set)** · SDK `client.web.webScrapeImages` (Go `Web.WebScrapeImages`)
[Guide](https://docs.context.dev/guides/scrape-websites-to-markdown#extract-every-image-on-a-page) · [API reference](https://docs.context.dev/api-reference/web-scraping/scrape-images)

- **When:** enumerate every image on a page (`img`, inline SVG, CSS backgrounds, video posters, data URIs) and optionally measure / classify / CDN-host them.
- **Takes:** `url` (**required**), `maxAgeMs`, `waitForMs`, `headers` (forwarded to the target URL; bypasses cache), `timeoutMS`, and an `enrichment` object: `resolution` (bool), `hostedUrl` (bool), `classification` (bool), `maxTimePerMs` (int). **Enabling any enrichment flag makes the whole call cost 5 credits** (not per-image).
- **Gives:** `{ success, images[], url }`. Each image: `{ src, element (img|svg|css|background|…), type (url|html|base64), alt|null, enrichment{ width, height, mimetype, url, type(photography|illustration|logo|wordmark|icon|…) } }`. The `enrichment` sub-fields populate only for the flags you requested.

### Crawl Sitemap

`GET /web/scrape/sitemap` · 1 credit · SDK `client.web.webScrapeSitemap` (Go `Web.WebScrapeSitemap`)
[Guide](https://docs.context.dev/guides/scrape-websites-to-markdown#get-all-urls-of-a-domain) · [API reference](https://docs.context.dev/api-reference/web-scraping/crawl-sitemap)

- **When:** discover the URL inventory of a domain (cheap, no page content) before deciding what to scrape or crawl.
- **Takes:** `domain` (string, **required**, bare domain, not a URL). Optional: `maxLinks` (default 10000, 1–100000), `urlRegex` (RE2, ≤256 chars, filters which URLs return), `headers` (forwarded to the target URL; bypasses cache), `timeoutMS`.
- **Gives:** `{ success, domain, urls[], meta{ sitemapsDiscovered, sitemapsFetched, sitemapsSkipped, errors } }`. Returns URLs only; it does not fetch page content despite the "Crawl" name.

### Crawl Website

`POST /web/crawl` · **1 credit per page** · SDK `client.web.webCrawlMd` (Go `Web.WebCrawlMd`)
[Guide](https://docs.context.dev/guides/scrape-websites-to-markdown#crawl-a-whole-site) · [API reference](https://docs.context.dev/api-reference/web-scraping/crawl-website-&-scrape-markdown)

- **When:** traverse a site from a seed URL and collect every page's Markdown in one call, e.g. ingesting a docs site or blog into RAG.
- **Takes (JSON body):** `url` (**required**). Optional: `maxPages` (default 100, **hard cap 500**), `maxDepth`, `urlRegex` (limit which links to follow), `followSubdomains` (default false), `includeLinks`/`includeImages`/`shortenBase64Images`/`useMainContentOnly`, `includeSelectors[]`/`excludeSelectors[]`, `pdf`, `includeFrames`, `maxAgeMs`, `waitForMs`, `stopAfterMs` (soft budget, default 80000, range 10000–110000, returns partial results early), `timeoutMS` (hard abort).
- **Gives:** `{ results[], metadata }`. Each result: `{ markdown, metadata{ url, title, crawlDepth, statusCode, success } }`. Top-level `metadata`: `{ numUrls, maxCrawlDepth, numSucceeded, numFailed, numSkipped }`. Failed pages appear with empty `markdown` and `success: false`; skipped URLs are counted but omitted. **Billed per page crawled**, so set `maxPages` conservatively.

### Web Search

`POST /web/search` · **1 credit per result** · SDK `client.web.search` (Go `Web.Search`)
[Guide](https://docs.context.dev/guides/scrape-websites-to-markdown) · [API reference](https://docs.context.dev/api-reference/web-scraping/web-search)

- **When:** find relevant pages for a natural-language query across the web (optionally scraping each hit to Markdown in the same round-trip) and you don't already have a URL.
- **Takes (JSON body):** `query` (string, **required**, 1–500 chars). Optional: `includeDomains[]`, `excludeDomains[]`, `freshness` (`last_24_hours`|`last_week`|`last_month`|`last_year`), `queryFanout` (bool), `markdownOptions` (off by default; set `enabled: true` to scrape each result, with the same markdown sub-options as Scrape Markdown), `timeoutMS`.
- **Gives:** `{ results[], query }`. Each result: `{ url, title, description, relevance (high|medium|low), markdown{ markdown|null, code } }`. **Always check `markdown.code` first**: `NOT_REQUESTED` (scraping off), `SUCCESS`, `TIMEOUT`, `WEBSITE_ACCESS_ERROR`, `ERROR`; only `SUCCESS` guarantees non-null markdown.

---

## Design system

Extract a site's visual system to reproduce or theme on-brand. XOR rule: pass **exactly one** of `domain` or `directUrl` (omitting both → 400). Guide: [Extract a design system](https://docs.context.dev/guides/extract-design-system-from-website).

### Styleguide

`GET /web/styleguide` · 10 credits · SDK `client.web.extractStyleguide` (Go `Web.ExtractStyleguide`; Python `client.style.extract_styleguide`)
[Guide](https://docs.context.dev/guides/extract-design-system-from-website#extract-the-full-styleguide) · [API reference](https://docs.context.dev/api-reference/web-extraction/scrape-styleguide)

- **When:** you need the full design system: palette, type scale, spacing, shadows, and paste-ready button/card CSS.
- **Takes:** `domain` **or** `directUrl` (one required), `maxAgeMs` (default `7776000000` ≈ 90d, clamped 1d–1y), `timeoutMS`.
- **Gives:** `{ status, domain, code, styleguide }` where `styleguide` =
  - `mode` (`light`|`dark`)
  - `colors` `{ accent, background, text }` (hex)
  - `typography.headings.{h1..h4}` and `typography.p`, each `{ fontFamily, fontFallbacks[], fontSize, fontWeight, lineHeight, letterSpacing }`
  - `elementSpacing` `{ xs, sm, md, lg, xl }`
  - `shadows` `{ sm, md, lg, xl, inner }`
  - `components.button.{primary,secondary,link}` and `components.card`; each carries a precomputed **`css`** string you can paste directly (note card uses `textColor`, buttons use `color`)
  - `fontLinks`: map of family → `{ type (google|custom), files{ "400": url, "700": url, … }, category, displayName }`; may be `{}` when no families resolve to downloadable URLs.

### Fonts

`GET /web/fonts` · 5 credits · SDK `client.web.extractFonts` (Go `Web.ExtractFonts`; Python `client.style.extract_fonts`)
[Guide](https://docs.context.dev/guides/extract-design-system-from-website#extract-just-the-fonts) · [API reference](https://docs.context.dev/api-reference/web-extraction/scrape-fonts)

- **When:** you only need typography: which families a site uses, fallbacks, dominance, and downloadable file URLs.
- **Takes:** `domain` **or** `directUrl` (one required), `maxAgeMs` (default `7776000000` ≈ 90d, clamped 1d–1y), `timeoutMS`.
- **Gives:** `{ status, domain, code, fonts[], fontLinks? }`. Each font: `{ font, uses[], fallbacks[], num_elements, num_words, percent_elements, percent_words }` (word % = text volume, element % = DOM coverage; a mono font can dominate elements but carry few words). `fontLinks` is omitted entirely when nothing resolves.

---

## Screenshots

### Capture Screenshot

`GET /web/screenshot` · 5 credits · SDK `client.web.screenshot` (Go `Web.Screenshot`)
[Guide](https://docs.context.dev/guides/take-webpage-screenshot) · [API reference](https://docs.context.dev/api-reference/web-scraping/scrape-screenshot)

- **When:** a rendered PNG of a page, for link previews, share cards, or visual archives.
- **Takes:** `domain` **or** `directUrl` (one required, XOR). Optional: `fullScreenshot` (**string** `"true"`/`"false"`, not a JSON bool), `handleCookiePopup` (string `"true"`/`"false"`, default `"false"`), `viewport` object `{ width 240–7680 default 1920, height 240–4320 default 1080 }`, `page` (enum `login|signup|blog|careers|pricing|terms|privacy|contact`; auto-finds that page type; **only works with `domain`**, ignored with `directUrl`), `maxAgeMs`, `waitForMs` (default 3000), `timeoutMS`.
- **Gives:** `{ status, domain, screenshot, screenshotType (viewport|fullPage), width, height, code }`. `screenshot` is a hosted public image URL, not inline bytes.

---

## AI extraction

LLM-backed structured extraction. All 10 credits, `POST` with JSON body. SDK namespace is `client.ai.*` for the product endpoints and `client.web.*` for structured web extraction (`/web/extract`).

### Extract a single product

`POST /brand/ai/product` · 10 credits · SDK `client.ai.extractProduct` (Go `AI.ExtractProduct`)
[Guide](https://docs.context.dev/guides/extract-product-from-websites) · [API reference](https://docs.context.dev/api-reference/web-extraction/extract-a-single-product-from-a-url)

- **When:** you have one product-page URL and want its structured details.
- **Takes:** `url` (string URI, **required**), `maxAgeMs` (default 7d, 0–30d), `timeoutMS`.
- **Gives:** `{ is_product_page, platform (amazon|tiktok_shop|etsy|generic|null), product|null }`. `product`: `{ name, description, price|null, currency|null, billing_frequency(monthly|yearly|one_time|usage_based)|null, pricing_model(per_seat|flat|tiered|freemium|custom)|null, url, category|null, features[], target_audience[], tags[], image_url|null, images[], sku|null }`.
- **Note:** `product` and `platform` can be `null` even when `is_product_page` is `true` (e.g. a bot-protected storefront), so **branch on both**.

### Extract products from a site

`POST /brand/ai/products` · 10 credits · **Beta** · SDK `client.ai.extractProducts` (Go `AI.ExtractProducts`)
[Guide](https://docs.context.dev/guides/extract-product-from-websites) · [API reference](https://docs.context.dev/api-reference/web-extraction/extract-products-from-a-brands-website)

- **When:** discover and extract a brand's product list from its site.
- **Takes (JSON body):** `domain` **or** `directUrl` (exactly one, XOR; both or neither → 400). Optional `maxProducts` (1–12), `maxAgeMs`, `timeoutMS`. (Ruby: `extract_products(body: { domain: … })`; Go: `OfByDomain`.)
- **Gives:** `{ products[] }`, each product the same shape as `/brand/ai/product`'s `product`. `images[]` may be omitted for non-physical products (SaaS).

### Structured web extraction

`POST /web/extract` · 10 credits · SDK `client.web.extract` (Go `Web.Extract`)
[Guide](https://docs.context.dev/guides/extract-structured-data-from-websites) · [API reference](https://docs.context.dev/api-reference/web-extraction/query-website-data-using-ai)

- **When:** extract arbitrary caller-defined data from a site with a JSON Schema. Replaces a scrape-many-pages-then-LLM pipeline.
- **Takes (JSON body):** `url` (**required**) and `schema` (**required**). Optional `instructions`, `maxPages` (1–50, default 5), `maxDepth`, `factCheck`, `followSubdomains`, `pdf`, `includeFrames`, `maxAgeMs` (default 7d), `waitForMs`, `stopAfterMs` (soft crawl budget, default 80000), and `timeoutMS`.
- **Gives:** `{ data, urls_analyzed[], metadata }`, where `data` matches the schema you sent.
- **Legacy:** `POST /brand/ai/query` remains available for older integrations, but prefer `/web/extract` for new structured extraction work.

---

## Industry classification

Dedicated code lookups. **SDK namespace is `client.industry.*`, not `web.*`**, despite the `/web/` path. Both 10 credits, `GET`. Overview: [Classification](https://docs.context.dev/guides/classification/overview).

### NAICS

`GET /web/naics` · 10 credits · SDK `client.industry.retrieveNaics` (Go `Industry.GetNaics`)
[Guide](https://docs.context.dev/guides/classification/NAICS) · [API reference](https://docs.context.dev/api-reference/web-extraction/classify-naics-industries)

- **When:** you need 2022 NAICS codes for regulatory reporting or TAM segmentation.
- **Takes:** `input` (string, **required**; a domain is preferred, a free-text name also works), `minResults` (1–10, default 1), `maxResults` (1–10, default 5), `timeoutMS`.
- **Gives:** `{ status, domain, type, codes[] }`, each code `{ code, name, confidence (high|medium|low) }`.

### SIC

`GET /web/sic` · 10 credits · SDK `client.industry.retrieveSic` (Go `Industry.GetSic`)
[Guide](https://docs.context.dev/guides/classification/SIC) · [API reference](https://docs.context.dev/api-reference/web-extraction/classify-sic-industries)

- **When:** SEC filings, tax/accounting, or legacy systems that still speak SIC.
- **Takes:** `input` (**required**), `type` (`original_sic` default | `latest_sec`; picks the dataset), `minResults`/`maxResults` (1–10), `timeoutMS`.
- **Gives:** `{ status, domain, type, classification, codes[] }`. `original_sic` codes carry `majorGroup` + `majorGroupName`; `latest_sec` codes carry `office`. Each code also has `code`, `name`, `confidence`.

---

## Prefetch (cache warming)

Free, no rate limit, **paid-subscriber only** (403 `FORBIDDEN` otherwise). Fire-and-forget: the 200 only confirms the domain was queued; it returns **no brand data**. Call `/brand/retrieve` afterward to read the warmed result. Guide: [Prefetching](https://docs.context.dev/optimization/prefetching).

### Prefetch by domain

`POST /brand/prefetch` · 0 credits · SDK `client.utility.prefetch` (Go `Utility.Prefetch`)
[API reference](https://docs.context.dev/api-reference/utility/prefetch-brand-data-for-a-domain)

- **When:** you know a domain ahead of when you'll need it (CRM import, signup form) and want to warm the cache so the later `/brand/retrieve` lands sub-second.
- **Takes:** `domain` (string, **required**), `timeoutMS`. **Gives:** `{ status, message, domain }`.

### Prefetch by email

`POST /brand/prefetch-by-email` · 0 credits · SDK `client.utility.prefetchByEmail` (Go `Utility.PrefetchByEmail`)
[API reference](https://docs.context.dev/api-reference/utility/prefetch-brand-data-by-email)

- **When:** same as above but you have a work email; the domain is extracted from it.
- **Takes:** `email` (string, **required**), `timeoutMS`. **Gives:** `{ status, message, domain }` (the extracted domain).
- **Note:** free/disposable emails return **422** (`FREE_EMAIL_DETECTED` / `DISPOSABLE_EMAIL_DETECTED`).

---

## Latency

Cached brand lookups return in **under 1 second** (~60% of calls hit the cache). A cold lookup runs a full crawl: **p50 ≈ 7s, p90 ≈ 18s, p99 ≈ 1 min**. If you know the domain/email ahead of time, [prefetch](https://docs.context.dev/optimization/prefetching) it (free) so the later retrieve lands warm; otherwise set `timeoutMS` generously (up to `300000`). Prefetch only warms brand lookups, not `/web/*` or `/brand/ai/*`. Details: [rate limits](https://docs.context.dev/optimization/rate-limits) · [best practices](https://docs.context.dev/optimization/best-practices).

## Errors

Errors carry an `error_code`; through the SDKs they surface as typed exceptions with the status code (the SDKs do **not** auto-retry). Common cases:

| Status | Meaning                                                               | Recovery                                                               |
| ------ | --------------------------------------------------------------------- | ---------------------------------------------------------------------- |
| 400    | Malformed input; `WEBSITE_ACCESS_ERROR` (site unreachable/blocked); or `NOT_FOUND` (no brand matched — not billed) | Validate input; treat `WEBSITE_ACCESS_ERROR` and `NOT_FOUND` as "no brand / not found" |
| 401    | Missing/invalid key                                                   | Check `CONTEXT_DEV_API_KEY`                                            |
| 403    | `FORBIDDEN` (e.g. prefetch without a paid plan) / `USAGE_EXCEEDED`    | Check plan / quota                                                     |
| 408    | Cold-hit or `timeoutMS` exceeded                                      | Prefetch, raise `timeoutMS`, or retry                                  |
| 422    | Free/disposable email on the `*-by-email` endpoints                   | Skip enrichment for personal emails                                    |
| 429    | Rate limit                                                            | Exponential backoff                                                    |

Full catalog: [Troubleshooting](https://docs.context.dev/optimization/troubleshooting).

## Gotchas

- **Fields are nullable.** Logos, colors, stock, phone, links may be absent, so always fall back.
- **Pick the right logo.** Filter by `mode` (`light`/`dark`/`has_opaque_background`) and `type` (`logo` horizontal / `icon` square); don't assume `logos[0]`.
- **Color `name` is generated**, not the brand's official name; key off `hex`.
- **Bare domains only** (`stripe.com`), and **XOR `domain`/`directUrl`** on styleguide, fonts, screenshot, and `/brand/ai/products`.
- **Brand data caches ~3 months** server-side; pass `maxAgeMs: 0` to force a refresh where supported (not on `transaction_identifier`).
- **Logo Link is separate.** For high-volume logo embedding in a UI, use `https://logos.context.dev/?publicClientId=...&domain=...`: a front-end-safe `publicClientId`, no API key, its own quota. See [Get logos from a domain](https://docs.context.dev/guides/get-logo-from-url).

## Reference

- Machine index for agents: [docs.context.dev/llms.txt](https://docs.context.dev/llms.txt)
- [Introduction](https://docs.context.dev/introduction) · [Brand data](https://docs.context.dev/guides/get-brand-data) · [Scraping](https://docs.context.dev/guides/scrape-websites-to-markdown) · [Design system](https://docs.context.dev/guides/extract-design-system-from-website) · [Products](https://docs.context.dev/guides/extract-product-from-websites) · [Structured extraction](https://docs.context.dev/guides/extract-structured-data-from-websites) · [Transactions](https://docs.context.dev/guides/enrich-transaction-codes) · [Classification](https://docs.context.dev/guides/classification/overview)
- Optimization: [prefetching](https://docs.context.dev/optimization/prefetching) · [rate limits](https://docs.context.dev/optimization/rate-limits) · [best practices](https://docs.context.dev/optimization/best-practices) · [troubleshooting](https://docs.context.dev/optimization/troubleshooting) · [fair use](https://docs.context.dev/optimization/fair-use)
````

----
url: https://docs.context.dev/api-reference/web-scraping/scrape-images
----

> ## Documentation Index
>
> Fetch the complete documentation index at: [/llms.txt](/llms.txt)
>
> Use this file to discover all available pages before exploring further.

[Skip to main content](#content-area)

JavaScript

```
import ContextDev from 'context.dev';

const client = new ContextDev({
  apiKey: process.env['CONTEXT_DEV_API_KEY'], // This is the default and can be omitted
});

const response = await client.web.webScrapeImages({ url: 'https://example.com' });

console.log(response.images);
```

```
{
  "success": true,
  "images": [
    {
      "src": "<string>",
      "alt": "<string>",
      "enrichment": {
        "width": 123,
        "height": 123,
        "mimetype": "<string>",
        "url": "<string>"
      }
    }
  ],
  "url": "<string>",
  "key_metadata": {
    "credits_consumed": 123,
    "credits_remaining": 123
  }
}
```

GET

/

web

/

scrape

/

images

JavaScript

```
import ContextDev from 'context.dev';

const client = new ContextDev({
  apiKey: process.env['CONTEXT_DEV_API_KEY'], // This is the default and can be omitted
});

const response = await client.web.webScrapeImages({ url: 'https://example.com' });

console.log(response.images);
```

```
{
  "success": true,
  "images": [
    {
      "src": "<string>",
      "alt": "<string>",
      "enrichment": {
        "width": 123,
        "height": 123,
        "mimetype": "<string>",
        "url": "<string>"
      }
    }
  ],
  "url": "<string>",
  "key_metadata": {
    "credits_consumed": 123,
    "credits_remaining": 123
  }
}
```

1 Credit Enriched: 5 Credits

#### Authorizations

[​](#authorization-authorization)

Authorization

string

header

required

Bearer authentication header of the form `Bearer <token>`, where `<token>` is your auth token.

#### Query Parameters

[​](#parameter-url)

url

string\<uri>

required

Page URL to inspect. Must include http\:// or https\://.

[​](#parameter-max-age-ms)

maxAgeMs

integer

default:86400000

Reuse a cached result this many milliseconds old or newer. Default: 86400000 (1 day). Set to 0 to bypass cache. Maximum: 2592000000 (30 days).

Required range: `0 <= x <= 2592000000`

[​](#parameter-enrichment)

enrichment

object

Optional per-image processing, sent as deep-object query params such as enrichment\[resolution]=true.

Show child attributes

[​](#parameter-wait-for-ms)

waitForMs

integer

Optional browser wait time in milliseconds after initial page load before collecting images. Min: 0. Max: 30000 (30 seconds).

Required range: `0 <= x <= 30000`

Always true on success.

Available options:

`true`

[​](#response-images)

images

object\[]

required

Images found on the page.

Show child attributes

[​](#response-url)

url

string

required

Page URL that was scraped.

[​](#response-key-metadata)

key\_metadata

object

Metadata about the API key used for the request. Included in every response whenever a valid API key is provided, even when the response status is not 200.

Show child attributes

Was this page helpful?

[Scrape Markdown](/api-reference/web-scraping/scrape-markdown)

[Previous](/api-reference/web-scraping/scrape-markdown)

[Crawl Sitemap](/api-reference/web-scraping/crawl-sitemap)

[Next](/api-reference/web-scraping/crawl-sitemap)

Ctrl+I

Assistant

Responses are generated using AI and may contain mistakes.

[Contact support](mailto:founders@context.dev)

----
url: https://docs.context.dev/install-skill
----

> ## Documentation Index
>
> Fetch the complete documentation index at: [/llms.txt](/llms.txt)
>
> Use this file to discover all available pages before exploring further.

[Skip to main content](#content-area)

The Context.dev skill teaches your coding agent how to use Context.dev without being told each time. The skill file is hosted at [`docs.context.dev/skill.md`](https://docs.context.dev/skill.md). Once installed, your agent will be able to:

* Look up brand information using name, domain, email, stock ticker, or ISIN
* Scrape websites and get markdown outputs
* Classify industries and transactions
* Integrate Context.dev APIs and SDKs into your application

## [​](#prerequisites)Prerequisites

* **A Context.dev API key.** Sign up at [context.dev/signup](https://context.dev/signup), copy the key from the [dashboard](https://context.dev/dashboard) (prefix `ctxt_secret_`), and export it in the shell your agent inherits so the skill can read it:

  ```
  # Add to your shell profile or .envrc — never commit it.
  export CONTEXT_DEV_API_KEY="ctxt_secret_..."
  ```

  For a single project, drop it in `.env.local` and have the agent load that file before each run.

* **A supported agent.** Claude Code, Codex, Cursor, Windsurf, OpenCode, Gemini CLI, GitHub Copilot, and [50+ others](https://github.com/vercel-labs/skills#supported-agents) read skill files.

* **Node.js** to run the `npx skills` installer (or install manually with `curl`).

## [​](#installation)Installation

### [​](#method-1-skills-cli-one-command-every-agent)Method 1: Skills CLI (one command, every agent)

The skills CLI detects your agent and drops the skill in the directory that agent reads. One command covers every supported agent:

```
npx skills add -g https://docs.context.dev/skill.md
```

Drop the `-g` to install into the current project instead of globally.

### [​](#method-2-manual-install-with-curl)Method 2: Manual install with `curl`

Pick your client below and run the matching `curl`. Use the project commands for an in-repo skill, or the global commands for a cross-project skill that lives in your home directory.

* Claude Code
* Codex
* Cursor
* Windsurf
* OpenCode
* Any agent (.agents)

```
# Project
mkdir -p .claude/skills/context-dev
curl -fsSL https://docs.context.dev/skill.md -o .claude/skills/context-dev/SKILL.md

# Global (across all projects)
mkdir -p ~/.claude/skills/context-dev
curl -fsSL https://docs.context.dev/skill.md -o ~/.claude/skills/context-dev/SKILL.md
```

```
# Project
mkdir -p .agents/skills/context-dev
curl -fsSL https://docs.context.dev/skill.md -o .agents/skills/context-dev/SKILL.md

# Global
mkdir -p ~/.codex/skills/context-dev
curl -fsSL https://docs.context.dev/skill.md -o ~/.codex/skills/context-dev/SKILL.md
```

```
# Project
mkdir -p .agents/skills/context-dev
curl -fsSL https://docs.context.dev/skill.md -o .agents/skills/context-dev/SKILL.md

# Global
mkdir -p ~/.cursor/skills/context-dev
curl -fsSL https://docs.context.dev/skill.md -o ~/.cursor/skills/context-dev/SKILL.md
```

```
# Project
mkdir -p .windsurf/skills/context-dev
curl -fsSL https://docs.context.dev/skill.md -o .windsurf/skills/context-dev/SKILL.md

# Global
mkdir -p ~/.codeium/windsurf/skills/context-dev
curl -fsSL https://docs.context.dev/skill.md -o ~/.codeium/windsurf/skills/context-dev/SKILL.md
```

```
# Project
mkdir -p .agents/skills/context-dev
curl -fsSL https://docs.context.dev/skill.md -o .agents/skills/context-dev/SKILL.md

# Global
mkdir -p ~/.config/opencode/skills/context-dev
curl -fsSL https://docs.context.dev/skill.md -o ~/.config/opencode/skills/context-dev/SKILL.md
```

Codex, Cursor, OpenCode, Gemini CLI, GitHub Copilot, Cline, and other agents share the `.agents/skills/` directory:

```
mkdir -p .agents/skills/context-dev
curl -fsSL https://docs.context.dev/skill.md -o .agents/skills/context-dev/SKILL.md
```

## [​](#verify-it-loaded)Verify it loaded

Open a fresh agent session and ask:

> “Using Context.dev, what’s the fastest, lightest-payload way to get just a brand’s logos and colors for a domain?”

A correctly loaded skill answers with `GET /brand/retrieve-simplified` and notes it costs the same 10 credits as the full brand retrieve. If the agent invents an endpoint, the skill didn’t load. Confirm the file exists at the path your agent reads and that nothing else is shadowing it.

## [​](#next-steps)Next steps

## [Agent Quickstart](/agent-quickstart)

[Pair the skill with a copyable agent prompt.](/agent-quickstart)

## [MCP server](/install-mcp)

[Add live API execution alongside the skill.](/install-mcp)

## [Get brand data](/guides/get-brand-data)

[The core endpoint the skill teaches.](/guides/get-brand-data)

## [Introduction](/introduction)

[What Context.dev returns and how responses are shaped.](/introduction)

Was this page helpful?

[Agent Quickstart](/agent-quickstart)

[Previous](/agent-quickstart)

[Install MCP](/install-mcp)

[Next](/install-mcp)

Ctrl+I

Assistant

Responses are generated using AI and may contain mistakes.

[Contact support](mailto:founders@context.dev)

----
url: https://docs.context.dev/optimization/rate-limits
----

> ## Documentation Index
>
> Fetch the complete documentation index at: [/llms.txt](/llms.txt)
>
> Use this file to discover all available pages before exploring further.

[Skip to main content](#content-area)

Each plan has a per-minute request cap. If you exceed it, the API returns `429 Too Many Requests`. To make your app production-ready, use these four patterns to prevent this or handle errors when it happens:

* Client-side caching for hot domains.
* Backoff on 429, honoring the `Retry-After` header.
* Prefetch to shift slow work ahead of bursts.
* Tier-aware fallbacks when the limit holds.

## [​](#rate-limits-per-plan)Rate limits per plan

Rate limits apply per API key, are measured per minute, and are visible on your [dashboard](https://www.context.dev/dashboard). The current tiers:

| Plan       | Credits per month | Rate limit         | Overage             |
| ---------- | ----------------- | ------------------ | ------------------- |
| Free       | 500 one-time\*    | 10 requests/min    | None                |
| Starter    | 30,000            | 120 requests/min   | $19 per 10K credits |
| Pro        | 200,000           | 300 requests/min   | $9 per 10K credits  |
| Scale      | 2,500,000         | 1,200 requests/min | $6 per 10K credits  |
| Enterprise | Custom            | Custom             | Contact sales       |

\* Free plan credits are a one-time grant, not a monthly allowance.

[Logo Link](/guides/get-logo-from-url) and [Prefetch](/optimization/prefetching) endpoints do not have any rate limits.

## [​](#what-a-429-looks-like)What a 429 looks like

The API returns a JSON envelope:

```
{
  "status": "error",
  "message": "Rate limit exceeded",
  "code": 429,
  "key_metadata": {
    "credits_consumed": 0,
    "credits_remaining": 29940
  }
}
```

`credits_consumed` is always `0` on a 429 — throttled requests are never charged. Every 429 response also includes a `Retry-After` header with the number of seconds (1–60) until your per-minute window resets:

```
Retry-After: 23
```

Through an SDK, the error surfaces as a typed exception with `status === 429`. The SDK does not retry automatically. You wire that in.

## [​](#pattern-1-client-side-cache-for-hot-domains)Pattern 1: Client-side cache for hot domains

The cheapest way to stay under the cap is to skip the call. Brand data changes on the order of months, so a 24-hour client cache is safe for most products:

```
import ContextDev from "context.dev";

const client = new ContextDev({ apiKey: process.env.CONTEXT_DEV_API_KEY });

const CACHE_TTL_MS = 30 * 24 * 60 * 60 * 1000;
const cache = new Map<string, { data: unknown; at: number }>();

async function getBrand(domain: string) {
  const hit = cache.get(domain);
  if (hit && Date.now() - hit.at < CACHE_TTL_MS) return hit.data;

  const { brand } = await client.brand.retrieve({ domain });
  cache.set(domain, { data: brand, at: Date.now() });
  return brand;
}
```

Reasonable TTL starting points: 30 days for brand responses, 7 days for product extractions, indefinite for industry codes (NAICS / SIC). Adjust per use case.

## [​](#pattern-2-backoff-on-429-with-retry-after)Pattern 2: Backoff on 429 with `Retry-After`

When you hit rate limits, you get a 429 status code on the response:

```
{
  "status": "error",
  "message": "Rate limit exceeded",
  "code": 429
}
```

The response’s `Retry-After` header tells you exactly how many seconds until your window resets, so use it as the wait time when it’s present. Fall back to exponential backoff (wait 1 second before the first retry and double the delay on each subsequent attempt) if you can’t read the header. Here’s an example of a retry script that honors `Retry-After` and falls back to exponential delays:

```
async function retrieveWithBackoff(domain: string, maxAttempts = 4) {
  for (let attempt = 0; attempt < maxAttempts; attempt++) {
    try {
      return await client.brand.retrieve({ domain });
    } catch (err: any) {
      if (err.status !== 429 || attempt === maxAttempts - 1) throw err;

      const retryAfter = Number(err.headers?.["retry-after"]);
      const delayMs = retryAfter > 0 ? retryAfter * 1000 : Math.pow(2, attempt) * 1000;
      await new Promise((r) => setTimeout(r, delayMs));
    }
  }
}
```

## [​](#pattern-3-prefetch-to-shift-slow-work-ahead-of-bursts)Pattern 3: Prefetch to shift slow work ahead of bursts

Bursty traffic (like when a marketing email triggers 200 signups in 60 seconds) can get you rate limited. Prefetching doesn’t reduce the number of Brand API calls that count against your limit; every user-facing `/brand/retrieve` still spends rate-limit budget. What it does is shift the slow crawl work earlier, so each call during the burst completes in under a second instead of stalling for up to a minute and piling up retries on top of an already-saturated window. Here’s how it works:

* During the burst, your application calls `/brand/prefetch` (if it has a domain) or `/brand/prefetch-by-email` (if it has an email) right when it first receives the target domain or email. These prefetch endpoints are rate-limit-free, so 200 calls in a minute is fine.
* A few seconds later, when the user actually submits and the user-facing client hits the Brand API, the request lands on a warm cache and returns in under a second. That call still counts toward your per-minute limit; it’s just fast.

See [Prefetch for Faster Response](/optimization/prefetching) for the full pattern.

## [​](#pattern-4-degrade-gracefully-when-the-limit-holds)Pattern 4: Degrade gracefully when the limit holds

If exponential backoff has run out of retries and you are still seeing 429s, the user is better served by a missing-data fallback than an error screen. Some examples:

* **Onboarding form.** Skip the prefilled fields. Let the user enter them by hand and do not block on the API.
* **Logo wall.** Render the customer’s name in a styled box instead of the logo.
* **CRM enrichment.** Queue the contact for an offline enrichment job that runs overnight.

Build the fallback once and the end user never sees a rate-limit message.

## [​](#related-resources)Related resources

## [Prefetch](/optimization/prefetching)

[Warm the cache so burst-time calls return fast.](/optimization/prefetching)

## [Best practices](/optimization/best-practices)

[Cache, fallback, and proxy patterns end to end.](/optimization/best-practices)

## [Troubleshooting](/optimization/troubleshooting)

[Other status codes, retry logic, and SDK gotchas.](/optimization/troubleshooting)

## [Pricing](https://www.context.dev/pricing)

[Per-plan credit, rate limit, and overage details.](https://www.context.dev/pricing)

Was this page helpful?

[Fair Use](/optimization/fair-use)

[Previous](/optimization/fair-use)

[Integration Best Practices](/optimization/best-practices)

[Next](/optimization/best-practices)

Ctrl+I

Assistant

Responses are generated using AI and may contain mistakes.

[Contact support](mailto:founders@context.dev)

----
url: https://docs.context.dev/guides/extract-product-from-websites
----

> ## Documentation Index
>
> Fetch the complete documentation index at: [/llms.txt](/llms.txt)
>
> Use this file to discover all available pages before exploring further.

[Skip to main content](#content-area)

Context.dev’s Product API takes any product page URL (Amazon, TikTok Shop, or any SaaS/D2C website) and gives you a structured product record:

* Name, description, category of the product
* Pricing models, listed price and ISO currency code
* List of features, the product’s target audience, and more

Integrate Context.dev's Product API in your app

[Open in Cursor](https://cursor.com/link/prompt?text=I'm%20integrating%20Context.dev's%20Product%20API%20into%20my%20app.%20Help%20me%3A%0A%0A1.%20Install%20the%20official%20SDK%20for%20my%20language%20\(%60context.dev%60%20on%20npm%20%2F%20PyPI%20%2F%20RubyGems%2C%20%60context-dev%2Fcontext-dev-php%60%20on%20Packagist%2C%20%60github.com%2Fcontext-dot-dev%2Fcontext-go-sdk%60%20for%20Go\).%0A2.%20Read%20the%20API%20key%20from%20the%20%60CONTEXT_DEV_API_KEY%60%20environment%20variable.%20Never%20hardcode%20it.%0A3.%20Call%20%60POST%20%2Fbrand%2Fai%2Fproduct%60%20with%20a%20single%20%60url%60%20to%20extract%20one%20product.%20Always%20check%20that%20%60is_product_page%60%20is%20true%20**and**%20that%20%60product%60%20is%20non-null%20before%20reading%20product%20fields%2C%20since%20pages%20that%20aren't%20product%20pages%20\(or%20where%20extraction%20fails\)%20return%20%60product%3A%20null%60.%0A4.%20Use%20%60maxAgeMs%60%20\(body%20field%2C%20defaults%20to%207%20days%2C%20max%2030%20days%2C%20%600%60%20for%20fresh\)%20when%20I%20want%20a%20cached%20result.%20Use%20%60timeoutMS%60%20\(max%20300000\)%20to%20bound%20long-running%20calls.%0A5.%20Branch%20error%20handling%20on%20%60error_code%60%20from%20the%20response%20body.%20The%20common%20ones%20are%20%60INPUT_VALIDATION_ERROR%60%20\(400\)%2C%20%60UNAUTHORIZED%60%20\(401\)%2C%20%60REQUEST_TIMEOUT%60%20\(408\)%2C%20and%20%60INTERNAL_ERROR%60%20\(500\).%0A%0ADocs%3A%20%5Bhttps%3A%2F%2Fdocs.context.dev%2Fguides%2Fextract-product-from-websites%5D\(https%3A%2F%2Fdocs.context.dev%2Fguides%2Fextract-product-from-websites\))

## [​](#prerequisites)Prerequisites

* **A Context.dev API key.** Sign up at [context.dev/signup](https://context.dev/signup), copy the key from the [dashboard](https://context.dev/dashboard) (prefix `ctxt_secret_`), and export it:

  ```
  export CONTEXT_DEV_API_KEY="ctxt_secret_..."
  ```

* **An SDK (optional).** Install for your language, or skip the install and call directly with `curl`:

  ```
  npm install context.dev
  ```

## [​](#extract-a-single-product)Extract a single product

`POST /brand/ai/product` takes a single product URL and returns whether the page is a product page, the detected ecommerce platform, and the extracted product record.

```
curl -X POST https://api.context.dev/v1/brand/ai/product \
  -H "Authorization: Bearer $CONTEXT_DEV_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"url": "https://www.allbirds.com/products/mens-wool-runners"}'
```

10 credits per successful call

### [​](#request-parameters)Request Parameters

| Parameter   | Type                   | Description                                                                                                                                             |
| ----------- | ---------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `url`       | string (URI)           | **Required.** The product page URL.                                                                                                                     |
| `maxAgeMs`  | integer (0-2592000000) | Return a cached result if one exists younger than this many milliseconds. Set to `0` to always scrape fresh. Max 30 days. Defaults to `604800000` (7d). |
| `timeoutMS` | integer (1000-300000)  | Abort with a 408 if the request exceeds this many milliseconds. Max `300000` (5 min).                                                                   |

### [​](#response)Response

```
{
  "is_product_page": true,
  "platform": "generic",
  "product": {
    "name": "Men's Wool Runner - Natural Grey (Light Grey Sole)",
    "description": "The Allbirds Men's Wool Runner is a classic casual sneaker made from soft, responsibly-sourced Merino wool that is breathable, lightweight, and machine washable…",
    "price": 110,
    "currency": "USD",
    "billing_frequency": "one_time",
    "pricing_model": "flat",
    "url": "https://www.allbirds.com/products/mens-wool-runners",
    "category": "Footwear",
    "features": [
      "Soft Merino wool upper",
      "Machine washable (remove insoles and laces)",
      "Sugarcane-based SweetFoam® midsole for support and cushioning",
      "Breathable and lightweight",
      "Responsibly sourced materials"
    ],
    "target_audience": ["Men"],
    "tags": ["wool", "sneaker", "men's shoes", "casual", "sustainable"],
    "image_url": "https://media.brand.dev/34f4b265-7198-4eaa-a4a3-e0b87f40de29.png",
    "images": [
      "https://media.brand.dev/2177175e-aae3-4179-b59d-0df12fb1b59d.png",
      "https://media.brand.dev/04027441-7ec6-4928-94e5-5b74c21347b8.png",
      "https://media.brand.dev/f47cbb41-7c3b-4fa1-92c5-4764560dda3e.png"
    ],
    "sku": "MENS_WOOL_RUNNERS"
  }
}
```

| Field                       | Type           | Description                                                                                                   |
| --------------------------- | -------------- | ------------------------------------------------------------------------------------------------------------- |
| `is_product_page`           | boolean        | Whether the URL was recognized as a product detail page.                                                      |
| `platform`                  | string \| null | One of `amazon`, `tiktok_shop`, `etsy`, `generic`. `null` when not a product page.                            |
| `product`                   | object \| null | The extracted product record. `null` when not a product page or when extraction failed (e.g. bot protection). |
| `product.name`              | string         | Product name.                                                                                                 |
| `product.description`       | string         | Product description.                                                                                          |
| `product.price`             | number \| null | Numeric price for the listed currency. `null` when no price is shown.                                         |
| `product.currency`          | string \| null | ISO currency code (e.g. `USD`, `EUR`).                                                                        |
| `product.billing_frequency` | string \| null | One of `monthly`, `yearly`, `one_time`, `usage_based`.                                                        |
| `product.pricing_model`     | string \| null | One of `per_seat`, `flat`, `tiered`, `freemium`, `custom`.                                                    |
| `product.url`               | string \| null | Canonical product page URL.                                                                                   |
| `product.category`          | string \| null | Single category label.                                                                                        |
| `product.features`          | string\[]      | Bulleted feature claims, one sentence each.                                                                   |
| `product.target_audience`   | string\[]      | Audience tags (e.g. `Men`, `Small teams`).                                                                    |
| `product.tags`              | string\[]      | Free-form tags.                                                                                               |
| `product.image_url`         | string \| null | Primary image URL (CDN-hosted).                                                                               |
| `product.images`            | string\[]      | Up to 7 product image URLs (CDN-hosted).                                                                      |
| `product.sku`               | string \| null | Stock keeping unit. `null` for SaaS, services, and other non-inventoried offerings.                           |

## [​](#handle-errors)Handle errors

A non-2xx response returns an `{ message, error_code }` envelope:

| Status | `error_code`             | Meaning                                                             | What to do                                                |
| ------ | ------------------------ | ------------------------------------------------------------------- | --------------------------------------------------------- |
| 400    | `INPUT_VALIDATION_ERROR` | Missing or malformed `url`                                          | Validate input before the call.                           |
| 401    | `UNAUTHORIZED`           | API key missing, invalid, or deleted                                | Re-check the env var and the dashboard.                   |
| 408    | `REQUEST_TIMEOUT`        | Page didn’t finish extracting before `timeoutMS` (or 5 min default) | Retry once with backoff.                                  |
| 500    | `INTERNAL_ERROR`         | Transient server error                                              | Retry once with backoff; if it persists, contact support. |

A 400 from omitting `url`:

```
{
  "error_code": "INPUT_VALIDATION_ERROR",
  "message": [
    {
      "code": "invalid_type",
      "expected": "string",
      "received": "undefined",
      "path": ["url"],
      "message": "Required"
    }
  ]
}
```

For the full catalog of error codes, see [Troubleshooting](/optimization/troubleshooting).

## [​](#use-cases)Use cases

* **Build a printable product catalog**: Use a website’s sitemap to find all products, run `extract_product` on each page
* **Procurement / ERP auto-fill**: when a buyer pastes a product URL into a procurement form, populate `sku`, `name`, `description`, `currency`, `price` and `features` automatically.

[Capture Webpage Screenshots](/guides/take-webpage-screenshot)

[Previous](/guides/take-webpage-screenshot)

[Transaction Enrichment](/guides/enrich-transaction-codes)

[Next](/guides/enrich-transaction-codes)

Ctrl+I

Assistant

Responses are generated using AI and may contain mistakes.

[Contact support](mailto:founders@context.dev)

----
url: https://docs.context.dev/api-reference/web-extraction/extract-a-single-product-from-a-url
----

> ## Documentation Index
>
> Fetch the complete documentation index at: [/llms.txt](/llms.txt)
>
> Use this file to discover all available pages before exploring further.

[Skip to main content](#content-area)

JavaScript

```
import ContextDev from 'context.dev';

const client = new ContextDev({
  apiKey: process.env['CONTEXT_DEV_API_KEY'], // This is the default and can be omitted
});

const response = await client.ai.extractProduct({ url: 'https://example.com' });

console.log(response.is_product_page);
```

```
{
  "is_product_page": true,
  "product": {
    "name": "<string>",
    "description": "<string>",
    "features": [
      "<string>"
    ],
    "target_audience": [
      "<string>"
    ],
    "tags": [
      "<string>"
    ],
    "images": [
      "<string>"
    ],
    "sku": "<string>",
    "price": 123,
    "currency": "<string>",
    "url": "<string>",
    "category": "<string>",
    "image_url": "<string>"
  },
  "key_metadata": {
    "credits_consumed": 123,
    "credits_remaining": 123
  }
}
```

POST

/

brand

/

ai

/

product

JavaScript

```
import ContextDev from 'context.dev';

const client = new ContextDev({
  apiKey: process.env['CONTEXT_DEV_API_KEY'], // This is the default and can be omitted
});

const response = await client.ai.extractProduct({ url: 'https://example.com' });

console.log(response.is_product_page);
```

```
{
  "is_product_page": true,
  "product": {
    "name": "<string>",
    "description": "<string>",
    "features": [
      "<string>"
    ],
    "target_audience": [
      "<string>"
    ],
    "tags": [
      "<string>"
    ],
    "images": [
      "<string>"
    ],
    "sku": "<string>",
    "price": 123,
    "currency": "<string>",
    "url": "<string>",
    "category": "<string>",
    "image_url": "<string>"
  },
  "key_metadata": {
    "credits_consumed": 123,
    "credits_remaining": 123
  }
}
```

The product page URL to extract product data from.

[​](#body-max-age-ms)

maxAgeMs

integer

default:604800000

Return a cached result if a prior scrape for the same parameters exists and is younger than this many milliseconds. Defaults to 7 days (604800000 ms) when omitted. Max is 30 days (2592000000 ms). Set to 0 to always scrape fresh.

Required range: `0 <= x <= 2592000000`

[​](#response-is-product-page)

is\_product\_page

boolean

Whether the given URL is a product detail page

[​](#response-platform-one-of-0)

platform

enum\<string> | null

The detected ecommerce platform, or null if not a product page

Available options:

`amazon`,

`tiktok_shop`,

`etsy`,

`generic`

[​](#response-product-one-of-0)

product

object

The extracted product data, or null if not a product page

[Classify SIC industries](/api-reference/web-extraction/classify-sic-industries)

[Previous](/api-reference/web-extraction/classify-sic-industries)

[Extract products from a brand's website](/api-reference/web-extraction/extract-products-from-a-brands-website)

[Next](/api-reference/web-extraction/extract-products-from-a-brands-website)

Ctrl+I

Assistant

Responses are generated using AI and may contain mistakes.

[Contact support](mailto:founders@context.dev)

----
url: https://docs.context.dev/api-reference/utility/prefetch-brand-data-by-email
----

> ## Documentation Index
>
> Fetch the complete documentation index at: [/llms.txt](/llms.txt)
>
> Use this file to discover all available pages before exploring further.

[Skip to main content](#content-area)

JavaScript

```
import ContextDev from 'context.dev';

const client = new ContextDev({
  apiKey: process.env['CONTEXT_DEV_API_KEY'], // This is the default and can be omitted
});

const response = await client.utility.prefetchByEmail({ email: 'dev@stainless.com' });

console.log(response.domain);
```

```
{
  "status": "<string>",
  "message": "<string>",
  "domain": "<string>",
  "key_metadata": {
    "credits_consumed": 123,
    "credits_remaining": 123
  }
}
```

POST

/

brand

/

prefetch-by-email

JavaScript

```
import ContextDev from 'context.dev';

const client = new ContextDev({
  apiKey: process.env['CONTEXT_DEV_API_KEY'], // This is the default and can be omitted
});

const response = await client.utility.prefetchByEmail({ email: 'dev@stainless.com' });

console.log(response.domain);
```

```
{
  "status": "<string>",
  "message": "<string>",
  "domain": "<string>",
  "key_metadata": {
    "credits_consumed": 123,
    "credits_remaining": 123
  }
}
```

0 Credits Only for Subscribers

[​](#body-email)

email

string\<email>

required

Email address to prefetch brand data for. The domain will be extracted from the email. Free email providers (gmail.com, yahoo.com, etc.) and disposable email addresses are not allowed.

[Prefetch brand data for a domain](/api-reference/utility/prefetch-brand-data-for-a-domain)

[Previous](/api-reference/utility/prefetch-brand-data-for-a-domain)

Ctrl+I

Assistant

Responses are generated using AI and may contain mistakes.

[Contact support](mailto:founders@context.dev)

----
url: https://docs.context.dev/
----

> ## Documentation Index
>
> Fetch the complete documentation index at: [/llms.txt](/llms.txt)
>
> Use this file to discover all available pages before exploring further.

[Skip to main content](#content-area)

# Build With{Context.dev}

Turn any domain into structured, AI-ready data with a single API.

[Quickstart→](/quickstart)[Give it to your Agent](/agent-quickstart)

***

domain"apple.com"

company name"Apple Inc."

work email"tim\@apple.com"

stock ticker"AAPL"

txn descriptor"APL\*APPLE TV CA"

Click to switch

logos"apple.svg" …

colors…

company"Apple Inc."

socials"@apple" …

address"Cupertino"

stock$AAPL NASDAQ

industry"Electronics"

***

USE CASES

## Built For Every Workflow

Get structured data, ready to embed in your application or workflow[VIEW ALL USE CASES→](/introduction)

[Retrieve Brand](/guides/get-brand-data)

/brand

### Retrieve Brand

Turn any domain into logos, colors, fonts, and company data with one API call.

klarna.com

Company NameKlarna

IndustryFinTech

Brand Color#FFA8CD

DescriptionKlarna is a global payments company

LogoKlarna-logo.svg

[Build a RAG knowledge base](/use-cases/build-rag-from-websites)

/web/crawl

### Build a RAG Knowledge Base

Crawl any marketing or docs site and turn every page into clean Markdown ready for embeddings.

docs.stripe.com

Getting startedmarkdown ready

[Auto-enrich CRM leads](/use-cases/lead-enrichment)

/web/naics|/web/sic|/brand|/extract

### Auto-Enrich CRM Leads

Auto-enrich new CRM leads with firmographic and brand data from just a domain. Useful for routing, scoring, and personalization workflows.

Shopify

www\.shopify.com

Ontario, Canada

ENRICHED INFO:E-Commerce Software3,000 employeesSIC 5961

[Enrich any transaction](/guides/enrich-transaction-codes)

/brand/transaction\_identifier

### Enrich any transaction

Drop a raw bank descriptor in and get back a clean merchant name, logo, and brand profile, instantly. Built for expense tools, fintech dashboards, and reconciliation pipelines.

RAW

APPLE.COM/BILL 800-275-2273 CA 28 MAY 26

APPLE.COM/BILL 800-275-2273 CA 28 MAY 26

**Apple**Consumer Electronics

***

GET STARTED FOR FREE

## Ship an agent that actually knows things.

Free tier, 10-minute integration, and the same API powering agents at Mintlify, daily.dev, and Propane. No credit card to start.

[Quickstart→](/quickstart)

API

[](/nocode/make)[](/nocode/zapier)[](/nocode/google-sheets)[](/nocode/microsoft-excel)

***

Context

***

© 2026 Context.dev

[](https://github.com/context-dot-dev)[](https://x.com/getcontextdev)[](https://www.linkedin.com/company/contextdev/)

Ctrl+I

Assistant

Responses are generated using AI and may contain mistakes.

[Contact support](mailto:founders@context.dev)

----
url: https://docs.context.dev/optimization/prefetching
----

> ## Documentation Index
>
> Fetch the complete documentation index at: [/llms.txt](/llms.txt)
>
> Use this file to discover all available pages before exploring further.

[Skip to main content](#content-area)

A Brand lookup for a domain Context.dev hasn’t seen before triggers a full crawl of the website and socials, which typically takes around 7s, up to a minute at p99, with a hard platform cap of 5 minutes. Once cached, the same lookup returns in under a second, and about 60% of all Brand API calls already hit that warm cache (full breakdown in the [latency table](#latency) below). Prefetching warms the cache ahead of time. Call a prefetch endpoint as soon as you know the domain or email, and the user-facing `/brand/retrieve` lands on a warm cache:

* `/brand/prefetch` if you have a domain.
* `/brand/prefetch-by-email` if you have a work email.

The canonical case is a signup or onboarding form: fire a prefetch the moment the email field validates, and by the time the user submits, `/brand/retrieve` returns instantly. 0 Credits on both. No rate limit. Subscriber-only.

```
# 1. As soon as the email field validates, fire a prefetch.
curl -X POST https://api.context.dev/v1/brand/prefetch-by-email \
  -H "Authorization: Bearer $CONTEXT_DEV_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"email": "founder@acme.com"}'

# 2. On submit, the real call hits a warm cache.
curl -G https://api.context.dev/v1/brand/retrieve \
  -H "Authorization: Bearer $CONTEXT_DEV_API_KEY" \
  --data-urlencode "domain=acme.com"
```

## [​](#how-the-cache-works)How the cache works

* **Cache TTL is up to 3 months.** After that, the next call triggers a refresh in the background.
* **The cache is shared across the account.** A prefetch from a backend job warms the cache for a user-facing call seconds later.
* **Prefetch is fire-and-forget.** Both endpoints return immediately after queuing the work. You do not wait for the prefetch before calling `/brand/retrieve`.
* **Prefetch by email skips known free/disposable providers.** Calls against `gmail.com`, `yahoo.com`, `outlook.com`, and the 10,000+ disposable services return an error you can safely ignore.

## [​](#latency)Latency

| Pattern                                                | p50 | p90 | p99     |
| ------------------------------------------------------ | --- | --- | ------- |
| Cold `/brand/retrieve` (no prefetch)                   | 7s  | 18s | \~1 min |
| Cached `/brand/retrieve` (after prefetch or prior hit) | <1s | <1s | <1s     |

Every second of prefetch lead time turns a multi-second (sometimes minute-long) cold wait into a sub-second user-facing call.

## [​](#what-prefetch-does-not-do)What prefetch does not do

* **It does not speed up scraping endpoints.** `/web/scrape/*`, `/web/crawl`, `/web/screenshot`, and `/brand/ai/*` are not affected by the brand cache. Each call fetches the target URL.
* **It does not preempt rate limits.** Prefetch itself is rate-limit-free, but the eventual `/brand/retrieve` call still counts against your plan’s per-minute rate limit.
* **It does not return brand data.** The endpoint queues the work and returns `{ status, message, domain }`. To read the brand, call `/brand/retrieve` separately.

## [​](#related-resources)Related resources

## [Rate limits](/optimization/rate-limits)

[How the per-plan per-minute limits interact with cached and prefetched calls.](/optimization/rate-limits)

## [Best practices](/optimization/best-practices)

[Where prefetching fits in the broader integration pattern.](/optimization/best-practices)

## [Troubleshooting](/optimization/troubleshooting)

[Cold-hit timeouts and how to handle them.](/optimization/troubleshooting)

## [Get brand data](/guides/get-brand-data)

[The endpoint prefetching warms.](/guides/get-brand-data)

Was this page helpful?

[SIC](/guides/classification/SIC)

[Previous](/guides/classification/SIC)

[Compression](/optimization/compression)

[Next](/optimization/compression)

Ctrl+I

Assistant

Responses are generated using AI and may contain mistakes.

[Contact support](mailto:founders@context.dev)

----
url: https://docs.context.dev/use-cases/faster-onboarding-flows
----

> ## Documentation Index
>
> Fetch the complete documentation index at: [/llms.txt](/llms.txt)
>
> Use this file to discover all available pages before exploring further.

[Skip to main content](#content-area)

Context.dev’s [Brand API](/guides/get-brand-data#look-up-by-work-email) takes a work email and returns the company’s logo, description, address, socials, and industry. You can use these values to prefill your B2B onboarding form. This guide wires that into a multi-step signup. A user types their work email on sign-up and by the time they reach the onboarding step, the logo, company name, description, and industry are already filled in. They just need to confirm it and move ahead. Here’s a demo for you to try:

Live demo

Onboarding

### About your company

**Prefilled from your work email:** alex\@stripe.com. Verify before continuing.

Company logo

stripe-icon.svgfrom stripe.com

Company name

Stripe

Description

Stripe is a global financial-infrastructure platform that helps businesses of all sizes accept payments, manage subscriptions, issue cards, and build custom revenue models.

Industry

Finance · Payments & Money Movement

Looks right · Continue

What you can prefill from a single work email:

| Signup field        | Brand response path                               |
| ------------------- | ------------------------------------------------- |
| Company Name        | `brand.title`                                     |
| Company Description | `brand.description`                               |
| Company Logo        | `brand.logos[].url`                               |
| Website             | `brand.domain`                                    |
| Address             | `brand.address.{street,city,country,postal_code}` |
| LinkedIn            | `brand.socials[type=linkedin].url`                |
| Industry            | `brand.industries.eic[0].industry`                |

If you also theme the onboarding UI, fetch `/web/styleguide` for the color palette. Use Brand API for logos and company/profile fields.

This cookbook takes you through how to build it in 4 steps:

1. Set up a backend proxy
2. Call the Brand API on email submission
3. Render the prefilled fields with edit controls
4. Add prefetch to keep the cache warm

Drop this prompt into your AI coding tool to wire up signup prefill.

## [​](#prerequisites)Prerequisites

* A [Context.dev](https://context.dev) API key
* The Context.dev SDK for your backend:

```
npm install context.dev
```

## [​](#step-1-set-up-a-backend-proxy)Step 1. Set up a backend proxy

The Brand API is authenticated with a secret key. Put that key in the browser and anyone who opens devtools can copy it and run up your bill. Every call from your signup form has to go through a backend route that holds the key server-side. A minimal proxy route accepts an email from your frontend, calls `/brand/retrieve-by-email`, and returns the brand payload:

```
// app/api/brand/route.ts
import ContextDev from "context.dev";

const client = new ContextDev({ apiKey: process.env.CONTEXT_DEV_API_KEY });

// Gmail and friends have no company brand, so skip the call and the credit.
const FREE_PROVIDERS = new Set([
  "gmail.com",
  "googlemail.com",
  "yahoo.com",
  "outlook.com",
  "hotmail.com",
  "icloud.com",
  "proton.me",
  "aol.com",
]);

export async function POST(req: Request) {
  const { email } = await req.json();
  const domain = email.split("@")[1]?.toLowerCase();
  if (!domain || FREE_PROVIDERS.has(domain)) {
    return Response.json({ brand: null });
  }
  try {
    const { brand } = await client.brand.retrieveByEmail({ email });
    return Response.json({ brand });
  } catch {
    // 422 free/disposable, 400 no brand, 408 cold-hit timeout: all survivable.
    return Response.json({ brand: null });
  }
}
```

Brand API · 10 credits per successful call The route reads the key from `CONTEXT_DEV_API_KEY`, calls Context.dev’s Brand API, and returns the brand object untouched; you pick fields in [step 3](#step-3-display-the-prefilled-values), so new fields land without a backend deploy. Anything that isn’t a clean hit (free email, unknown domain, cold-hit timeout, or a Gmail-class address caught before the call) comes back as `brand: null`, which the frontend reads as “nothing to prefill, so fall through to generic onboarding.”

## [​](#step-2-call-retrieve-on-email-submission)Step 2. Call retrieve on email submission

When the user submits the email page, hit the proxy and stash the result in form state. The next step reads from it.

```
// In your signup form, when the user submits step one.
async function onEmailSubmit(email: string) {
  const res = await fetch("/api/brand", {
    method: "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify({ email }),
  });
  const { brand } = await res.json(); // may be null
  setSignupState({ email, brand });
  advanceToStep(2);
}
```

Two things shape this call:

* **Free and disposable emails have no brand.** The proxy short-circuits the well-known free providers (Gmail, Yahoo, Outlook, ProtonMail, and friends) before spending a call; anything that slips past the list (disposable forwarders, lesser-known providers) returns a 422 the proxy swallows. Either way you get `brand: null` and render the generic form.
* **First-time domains are slow.** A domain Context.dev hasn’t crawled yet runs several seconds on the first hit: 7s at p50, up to a minute at p99 (see the [latency table](/optimization/prefetching#latency)). [Step 4](#step-4-prefetch-on-email-typing-optional) warms the cache so the call lands in under a second.

### [​](#understand-the-response)Understand the response

A successful retrieve returns `status`, `code`, and a `brand` object. Here’s a real response for `dev@stainless.com`:

```
{
  "status": "ok",
  "code": 200,
  "brand": {
    "domain": "stainless.com",
    "title": "Stainless",
    "description": "Stainless helps API teams deliver world-class developer interfaces...",
    "logos": [
      {
        "type": "icon",
        "mode": "has_opaque_background",
        "url": "https://media.brand.dev/c5e3...png"
      },
      {
        "type": "icon",
        "mode": "dark",
        "url": "https://media.brand.dev/0380...png"
      },
      {
        "type": "logo",
        "mode": "light",
        "url": "https://media.brand.dev/fe14...svg"
      }
    ],
    "colors": [{ "hex": "#adadad", "name": "Robo Master" }],
    "socials": [
      {
        "type": "linkedin",
        "url": "https://linkedin.com/company/stainless-api"
      },
      { "type": "x", "url": "https://x.com/StainlessAPI" }
    ],
    "address": {
      "street": "180 Varick St",
      "city": "New York",
      "country": "United States",
      "postal_code": "10014"
    },
    "industries": {
      "eic": [
        { "industry": "Technology", "subindustry": "Developer Tools & APIs" }
      ]
    }
  }
}
```

The fields this guide reads off `brand`:

| Field              | Type   | Notes                                                                                            |
| ------------------ | ------ | ------------------------------------------------------------------------------------------------ |
| `title`            | string | Company name                                                                                     |
| `description`      | string | One-paragraph summary                                                                            |
| `domain`           | string | Extracted from the email                                                                         |
| `logos[]`          | array  | Each has `url`, `type` (`logo` or `icon`), and `mode` (`light`, `dark`, `has_opaque_background`) |
| `colors[]`         | array  | Each has `hex` and `name`                                                                        |
| `socials[]`        | array  | Each has `type` (e.g. `linkedin`) and `url`                                                      |
| `address`          | object | `street`, `city`, `country`, `postal_code`, plus state and country codes                         |
| `industries.eic[]` | array  | Each has `industry` and `subindustry`                                                            |

**Structure your form to favor prefill.** Put fields the API *can* return *after* fields it can’t. The gap buys the retrieve a few seconds to land, so the response is usually waiting by the time the user reaches the company step:

1. **Email**: triggers retrieve.
2. **Password or OAuth**: the API can’t return this.
3. **User’s role at the company**: the API can’t return this either.
4. **Company logo, description, and socials**: prefilled.

## [​](#step-3-display-the-prefilled-values)Step 3. Display the prefilled values

On the prefilled step, render the response with editable inputs. The user’s job is to glance, fix anything wrong, and continue.

```
function CompanyStep({ brand, onSubmit }) {
  if (!brand) return <GenericCompanyStep onSubmit={onSubmit} />;

  // Rule 2: pick the logo variant for where you'll show it; fall back to the first.
  const logo =
    brand.logos?.find((l) => l.type === "logo" && l.mode === "light")?.url ??
    brand.logos?.[0]?.url;
  const linkedin = brand.socials?.find((s) => s.type === "linkedin")?.url;

  return (
    <form onSubmit={onSubmit}>
      {/* Rule 1: defaultValue (not value) fills blanks only, never clobbers typed input. */}
      <Field label="Company name" defaultValue={brand.title} />
      <Field label="Description" defaultValue={brand.description} multiline />
      <LogoField src={logo} alt={brand.title} onReplace={uploadLogo} />
      <Field label="LinkedIn" defaultValue={linkedin} />
      {/* Rule 3: public-facing data needs an explicit confirm before it's accepted. */}
      <label>
        <input type="checkbox" name="confirmed" required /> These details look
        right
      </label>
      <button>Continue</button>
    </form>
  );
}
```

Three rules apply to every prefilled field: **Fill blanks only.** If the user backtracked and typed a company name before retrieve resolved, leave their text alone. Use `defaultValue`, not `value`; React’s uncontrolled inputs do this correctly out of the box. **Pick the right logo variant.** `brand.logos[]` returns multiple variants, each with a `type` (`logo` or `icon`) and `mode` (`light`, `dark`, or `has_opaque_background`). Filter by where you’ll display it:

| Use case                             | Filter                                                   |
| ------------------------------------ | -------------------------------------------------------- |
| Logo on a white-background dashboard | `type === "logo"` and `mode === "light"`                 |
| Avatar bubble                        | `type === "icon"` and `mode === "has_opaque_background"` |
| Dark-mode app                        | `type === "logo"` and `mode === "dark"`                  |

When a brand only ships one mode, fall back to `logos[0]`. Always show a replace affordance. The API’s pick is a default, not a verdict. **Require an explicit confirm for public-facing data.** If the logo or company name will be visible to teammates or shown on a public profile, don’t auto-accept; gate it behind a “Looks right” click. The wrong logo on a competitor’s profile is worse than no logo at all.

## [​](#step-4-prefetch-on-email-typing-optional)Step 4. Prefetch on email typing (optional)

The basic version works, but the first hit on an uncrawled domain may take up to 60 seconds. To make the step transition feel instant, fire a free prefetch call while the user is still typing their email. `POST /brand/prefetch-by-email` queues the same crawl that retrieve would, then returns right away with `{ status, message, domain }`. It costs zero credits and is available on paid plans, so it’s safe to call on every email-field blur. Add a second proxy route:

```
// app/api/prefetch/route.ts
import ContextDev from "context.dev";

const client = new ContextDev({ apiKey: process.env.CONTEXT_DEV_API_KEY });

export async function POST(req: Request) {
  const { email } = await req.json();
  // Fire-and-forget. 422 for free emails is ignored.
  client.utility.prefetchByEmail({ email }).catch(() => {});
  return new Response(null, { status: 202 });
}
```

Prefetch · 0 credits Subscribers only Then wire it into the email field’s blur event:

```
function EmailField({ value, onChange }) {
  return (
    <input
      type="email"
      value={value}
      onChange={(e) => onChange(e.target.value)}
      onBlur={() => {
        if (!isValidEmail(value)) return;
        fetch("/api/prefetch", {
          method: "POST",
          headers: { "Content-Type": "application/json" },
          body: JSON.stringify({ email: value }),
        }); // intentionally not awaited
      }}
    />
  );
}
```

Now, by the time the user finishes step one and the retrieve in [step 2](#step-2-call-retrieve-on-email-submission) fires, the cache is warm and the response returns in under a second.

### [​](#handle-the-cold-hits-that-slip-through)Handle the cold hits that slip through

Even with prefetch, the occasional cold hit will outrun the user. Three options:

1. **Skeleton.** Render the prefilled step with a loading state, fill in when retrieve resolves. Best when the step has no other interactive elements.
2. **Fill on-arrive.** Render the editable form with blanks; when retrieve returns, fill empty fields without animating. Don’t overwrite anything the user typed in the meantime.
3. **Skip silently.** Show empty fields. Surface a soft “we couldn’t auto-fill this” notice if you care.

Option 2 is the most forgiving for a fast typist; option 1 looks more polished on a slow form.

## [​](#learn-more)Learn more

## [Brand API Guide](/guides/get-brand-data)

[How the Brand API works end to end, every lookup variant, and the full profile shape.](/guides/get-brand-data)

## [API Reference](/api-reference/brand-intelligence/retrieve-brand-data-by-email-address)

[The retrieve-by-email endpoint: parameters, response schema, and error codes.](/api-reference/brand-intelligence/retrieve-brand-data-by-email-address)

## [Prefetching](/optimization/prefetching)

[Latency curves, cache TTLs, and the mechanics behind the prefetch endpoint.](/optimization/prefetching)

## [Best Practices](/optimization/best-practices)

[Caching TTLs, override rules, never-expose-keys.](/optimization/best-practices)

Was this page helpful?

[Build an Agentic RAG System with Web Scraping](/use-cases/build-rag-from-websites)

[Next](/use-cases/build-rag-from-websites)

Ctrl+I

Assistant

Responses are generated using AI and may contain mistakes.

[Contact support](mailto:founders@context.dev)

----
url: https://docs.context.dev/api-reference/web-extraction/extract-structured-website-data
----

> ## Documentation Index
>
> Fetch the complete documentation index at: [/llms.txt](/llms.txt)
>
> Use this file to discover all available pages before exploring further.

[Skip to main content](#content-area)

JavaScript

```
import ContextDev from 'context.dev';

const client = new ContextDev({
  apiKey: process.env['CONTEXT_DEV_API_KEY'], // This is the default and can be omitted
});

const response = await client.web.extract({
  schema: {
    type: 'bar',
    properties: 'bar',
    required: 'bar',
    additionalProperties: 'bar',
  },
  url: 'https://example.com',
});

console.log(response.data);
```

```
{
  "status": "<string>",
  "url": "<string>",
  "urls_analyzed": [
    "<string>"
  ],
  "data": {},
  "metadata": {
    "numUrls": 123,
    "maxCrawlDepth": 123,
    "numSucceeded": 123,
    "numFailed": 123,
    "numSkipped": 123
  },
  "key_metadata": {
    "credits_consumed": 123,
    "credits_remaining": 123
  }
}
```

POST

/

web

/

extract

JavaScript

```
import ContextDev from 'context.dev';

const client = new ContextDev({
  apiKey: process.env['CONTEXT_DEV_API_KEY'], // This is the default and can be omitted
});

const response = await client.web.extract({
  schema: {
    type: 'bar',
    properties: 'bar',
    required: 'bar',
    additionalProperties: 'bar',
  },
  url: 'https://example.com',
});

console.log(response.data);
```

```
{
  "status": "<string>",
  "url": "<string>",
  "urls_analyzed": [
    "<string>"
  ],
  "data": {},
  "metadata": {
    "numUrls": 123,
    "maxCrawlDepth": 123,
    "numSucceeded": 123,
    "numFailed": 123,
    "numSkipped": 123
  },
  "key_metadata": {
    "credits_consumed": 123,
    "credits_remaining": 123
  }
}
```

The starting website URL to crawl and extract from. Must include http\:// or https\://.

[​](#body-schema)

schema

object

required

JSON Schema for the returned data object. TypeScript Zod users can pass a JSON Schema generated from a Zod object; Python users can pass the equivalent JSON Schema object.

Example:

```
{
  "type": "object",
  "properties": {
    "mission_statement": {
      "type": "string",
      "description": "The company's stated mission."
    },
    "case_studies": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "title": { "type": "string" },
          "url": { "type": "string" }
        },
        "required": ["title", "url"],
        "additionalProperties": false
      }
    }
  },
  "required": ["mission_statement", "case_studies"],
  "additionalProperties": false
}
```

[​](#body-instructions)

instructions

string

Optional extraction guidance, such as which facts to prioritize or how to interpret fields in the schema.

Maximum string length: `2000`

[​](#body-fact-check)

factCheck

boolean

default:false

When true, every returned value must be grounded in facts stated on the page; fields that cannot be supported by the page are returned as null/empty. When false (default), the model may make reasonable inferences and derivations from the page content (e.g. ideal customer, competitor analysis, recommendations) while keeping verifiable specifics (names, quotes, URLs, dates, metrics) faithful to the source.

[​](#body-follow-subdomains)

followSubdomains

boolean

default:false

When true, follow links on subdomains of the starting URL's domain.

[​](#body-max-pages)

maxPages

integer

default:5

Maximum number of pages to analyze for extraction. Hard cap: 50. Defaults to 5.

Required range: `1 <= x <= 50`

[​](#body-max-depth)

maxDepth

integer

Optional maximum link depth from the starting URL (0 = only the starting page). If omitted, there is no crawl depth limit.

Required range: `x >= 0`

[​](#body-pdf)

pdf

object

Show child attributes

[​](#body-include-frames)

includeFrames

boolean

default:false

When true, iframe contents are included in Markdown before extraction.

[​](#body-max-age-ms)

maxAgeMs

integer

default:604800000

Return cached scrape results if a prior scrape for the same parameters is younger than this many milliseconds. Defaults to 7 days (604800000 ms).

Required range: `0 <= x <= 2592000000`

[​](#body-wait-for-ms)

waitForMs

integer

Optional browser wait time in milliseconds after initial page load for each crawled page.

Required range: `0 <= x <= 30000`

[​](#body-stop-after-ms)

stopAfterMs

integer

default:80000

Soft time budget for the crawl in milliseconds. Min: 10000 (10s). Max: 110000 (110s). Default: 80000 (80s).

Required range: `10000 <= x <= 110000`

[​](#body-timeout-ms)

[​](#response-url)

url

string

required

The starting URL that was analyzed

[​](#response-urls-analyzed)

urls\_analyzed

string\[]

required

List of URLs whose Markdown was used for extraction

[​](#response-data)

data

object

required

Extracted data matching the request schema

[Scrape Screenshot](/api-reference/web-scraping/scrape-screenshot)

[Previous](/api-reference/web-scraping/scrape-screenshot)

[Scrape Styleguide](/api-reference/web-extraction/scrape-styleguide)

[Next](/api-reference/web-extraction/scrape-styleguide)

⌘I

Assistant

Responses are generated using AI and may contain mistakes.

[Contact support](mailto:founders@context.dev)

----
url: https://docs.context.dev/guides/classification/overview
----

> ## Documentation Index
>
> Fetch the complete documentation index at: [/llms.txt](/llms.txt)
>
> Use this file to discover all available pages before exploring further.

[Skip to main content](#content-area)

Context.dev supports three industry taxonomies:

* **EIC (Easy Industry Classification)** is Context.dev’s own taxonomy, optimized for modern digital businesses (SaaS, fintech, creator economy, etc.). It is returned **inline** on the full Brand response under `industries.eic`. It is not included on the simplified Brand response, which only returns the core visual fields (domain, title, logos, colors, and backdrops).
* **NAICS (North American Industry Classification System)** uses the 2022 NAICS taxonomy from the US Census Bureau. Available via a **dedicated endpoint**: [`GET /web/naics`](/api-reference/web-extraction/classify-naics-industries). Call it when you need NAICS codes for a domain or brand name.
* **SIC (Standard Industrial Classification)** covers the 1987 SIC taxonomy and the SEC EDGAR SIC list. Available via a **dedicated endpoint**: [`GET /web/sic`](/api-reference/web-extraction/classify-sic-industries) with a `type` parameter to choose between the two datasets.

EIC is generally a better fit for product categorization, segmentation, and routing. NAICS is the right choice for regulatory, compliance, or financial reporting systems. SIC remains useful for SEC filings, historical datasets, and any system that hasn’t migrated to NAICS.

EIC is included on every full Brand response with no extra call. NAICS and SIC are separate, opt-in endpoints with their own pricing: call them only when you specifically need those codes.

## [​](#choosing-between-eic-naics-and-sic)Choosing between EIC, NAICS, and SIC

| Use case                                               | Recommended taxonomy               |
| ------------------------------------------------------ | ---------------------------------- |
| Product segmentation, routing, marketing audiences     | **EIC** (free with any Brand call) |
| Modern digital business types (SaaS, fintech, creator) | **EIC**                            |
| Regulatory or compliance reporting                     | **NAICS**                          |
| Financial filings, government data integration         | **NAICS**                          |
| Matching SEC EDGAR filings or review offices           | **SIC** (`type=latest_sec`)        |
| Historical datasets that pre-date NAICS (pre-1997)     | **SIC** (`type=original_sic`)      |
| Aligning with existing CRM industry fields             | Match what your CRM already uses   |

You can use any combination: hit a Brand endpoint to get EIC inline, and call `/web/naics` or `/web/sic` separately when a record needs those codes.

## [​](#continue-reading)Continue reading

## [EIC: Easy Industry Classification](/guides/classification/EIC)

[Context.dev’s own taxonomy. 24 industries, 220 subindustries, returned inline on every full Brand response.](/guides/classification/EIC)

## [NAICS Classification](/guides/classification/NAICS)

[The 2022 NAICS taxonomy. 1,012 six-digit codes, available through a dedicated endpoint.](/guides/classification/NAICS)

## [SIC Classification](/guides/classification/SIC)

[The 1987 SIC and SEC EDGAR SIC lists. 1,004 original codes plus 430 SEC codes tagged with review office.](/guides/classification/SIC)

## [Brand API](/guides/get-brand-data)

[Full Brand response shape, including `industries.eic`.](/guides/get-brand-data)

Was this page helpful?

[Transaction Enrichment](/guides/enrich-transaction-codes)

[Previous](/guides/enrich-transaction-codes)

[EIC (Easy Industry Classification)](/guides/classification/EIC)

[Next](/guides/classification/EIC)

Ctrl+I

Assistant

Responses are generated using AI and may contain mistakes.

[Contact support](mailto:founders@context.dev)

----
url: https://docs.context.dev/optimization/best-practices
----

> ## Documentation Index
>
> Fetch the complete documentation index at: [/llms.txt](/llms.txt)
>
> Use this file to discover all available pages before exploring further.

[Skip to main content](#content-area)

If you’re building on top of Context.dev’s APIs and SDKs, this page contains some best practices to give your users a good experience.

## [​](#1-prefetch-as-soon-as-you-know-the-domain-or-email)1. Prefetch as soon as you know the domain or email

60% of Brand API requests return within 1 second. But for the other 40%, when Context.dev hasn’t seen the domain before, it can take up to a minute. Prefetching fixes this. It’s a free API that you can call a few moments before your app needs the brand data. It makes sure the results come back typically in under a second when you actually run the Brand API call. See [Prefetch for Faster Response](/optimization/prefetching) for the canonical pattern.

## [​](#2-cache-api-responses)2. Cache API responses

If you need brand or classification API outputs frequently, it’s a good idea to cache them in your DB or in the browser’s localStorage. This saves your rate limit quota and API credits usage. Brand records (logos, descriptions, addresses, classifications, etc.) change very infrequently. Context.dev itself only updates a brand in cache every 3 months. Some recommended TTLs:

| Data                         | Suggested TTL | Why                                                                      |
| ---------------------------- | ------------- | ------------------------------------------------------------------------ |
| Brand response               | 30 days       | Identity barely moves; Context.dev itself only refreshes every 3 months. |
| Product extractions          | 7 days        | Catalogs change more often than identity.                                |
| Industry codes (NAICS / SIC) | Indefinite    | Classification systems move on regulator timescales.                     |

## [​](#3-set-timeoutms-for-cold-hits)3. Set `timeoutMS` for cold hits

Warm domains come back in around 250ms. A domain Context.dev has never seen has to be crawled live, which can take up to 60 seconds. If your client timeout is set to something tight like 5 seconds, you’ll cut off the exact requests that needed the most patience. So on any path that can tolerate the wait, set a generous timeout. The `timeoutMS` parameter lets you say it explicitly:

```
const { brand } = await client.brand.retrieve({
  domain: "example.com",
  timeoutMS: 60000, // 60s of headroom for cold hits
});
```

`timeoutMS` tops out at 300,000ms (5 minutes); past that the server gives up and returns a 408. See [Troubleshooting](/optimization/troubleshooting) for how to handle a 408 when it does happen.

## [​](#4-run-bulk-jobs-in-the-background)4. Run bulk jobs in the background

Some calls are inherently slow. A full-site crawl (`/web/crawl`) or a storefront product sweep (`/brand/ai/products`) walks many pages, and on a large site that can run long. Don’t block a user’s request on it. Kick the work off, return immediately, and write the results back when they land.

```
const response = await client.web.webCrawlMd({
  url: "https://context.dev",
  maxPages: 50,
  maxDepth: 2,
});
console.log(`${response.results.length} pages crawled`);
```

Wrap that call in whatever worker queue you already run (like BullMQ, Sidekiq, Cloud Tasks, or a goroutine, etc.), show the user a status field while it runs, and notify them when the result is ready.

## [​](#5-retry-transient-failures-with-backoff)5. Retry transient failures with backoff

Three error classes are worth retrying: `429` (rate limit), `408` (cold-hit timeout), and `500` (transient server error). Everything else (a `401`, a `422`) is a bug in the request, and retrying it just wastes calls. The retry contract (honor the `Retry-After` header on 429s, otherwise doubling delay, capped attempts) and copy-paste implementations in every SDK live on the [Rate limits](/optimization/rate-limits) page. Use that pattern rather than rolling your own.

## [​](#6-skip-free-and-disposable-emails-before-you-look-them-up)6. Skip free and disposable emails before you look them up

A brand-by-email lookup against `gmail.com`, `yahoo.com`, `outlook.com`, and the 10,000+ disposable services out there will never resolve to a company: there’s no brand behind a personal inbox. `/brand/retrieve-by-email` returns a `422` for these. You can save the round trip by filtering the obvious ones up front:

```
const FREE_PROVIDERS = new Set([
  "gmail.com", "yahoo.com", "hotmail.com", "outlook.com",
  "aol.com", "icloud.com", "proton.me",
]);

function shouldEnrich(email: string): boolean {
  const domain = email.split("@")[1]?.toLowerCase();
  return Boolean(domain) && !FREE_PROVIDERS.has(domain);
}
```

**You don’t have to maintain the full disposable-domain list yourself**: `/brand/prefetch-by-email` already detects 10,000+ free and disposable providers and short-circuits them for you, so calling it skips the manual guard entirely. Read [how to prefetch](/optimization/prefetching).

## [​](#7-set-up-fallbacks-for-missing-datapoints)7. Set up fallbacks for missing datapoints

A `200` doesn’t promise a complete record. A private company has no stock ticker, a brand-new domain may have no logo on file yet, and any optional field can come back `null` or empty. Fall back to a default value instead of branching your whole layout around what’s present:

```
const primaryColor = brand.colors[0]?.hex ?? "#000000";
const logoUrl = brand.logos[0]?.url ?? "/placeholder-logo.svg";
const description = brand.description ?? `${brand.title} (description unavailable)`;
```

Defensive defaults keep the page from collapsing when the API hands back a sparse record.

## [​](#8-show-a-real-loading-state-on-cold-paths)8. Show a real loading state on cold paths

Cold brand calls and full-site crawls take seconds, not milliseconds, long enough that a frozen screen can seem “broken.” Some recommended UI fixes:

* Use skeleton boxes shaped like the content, not a generic spinner.
* Echo the user’s input back optimistically while the fetch runs.
* Have a graceful “we couldn’t find this one” state ready for 400 responses (`NOT_FOUND` or `WEBSITE_ACCESS_ERROR`) and sparse records.

Build it once and the wait stops feeling like a bug.

## [​](#9-keep-your-api-key-on-the-server)9. Keep your API key on the server

Your API key is a bearer credential: whoever holds it can spend your credits and burn your rate limit. Treat it exactly like a database password. That means it never ships in front-end code, where anyone with devtools can read it. The one exception is Logo Link, which uses a separate `publicClientId` credential built to be safe in the client-side browser. See [Get logos from a domain](/guides/get-logo-from-url).

## [​](#related-resources)Related resources

## [Prefetch](/optimization/prefetching)

[Warm the cache before the user-facing call.](/optimization/prefetching)

## [Rate limits](/optimization/rate-limits)

[Stay under the per-minute request cap.](/optimization/rate-limits)

## [Fair use](/optimization/fair-use)

[Responsible use of brand data and scraped content.](/optimization/fair-use)

## [Troubleshooting](/optimization/troubleshooting)

[Error codes and recovery patterns.](/optimization/troubleshooting)

Was this page helpful?

[Handle Rate Limits](/optimization/rate-limits)

[Previous](/optimization/rate-limits)

[Troubleshooting](/optimization/troubleshooting)

[Next](/optimization/troubleshooting)

Ctrl+I

Assistant

Responses are generated using AI and may contain mistakes.

[Contact support](mailto:founders@context.dev)

----
url: https://docs.context.dev/api-reference/web-scraping/web-search
----

> ## Documentation Index
>
> Fetch the complete documentation index at: [/llms.txt](/llms.txt)
>
> Use this file to discover all available pages before exploring further.

[Skip to main content](#content-area)

JavaScript

```
import ContextDev from 'context.dev';

const client = new ContextDev({
  apiKey: process.env['CONTEXT_DEV_API_KEY'], // This is the default and can be omitted
});

const response = await client.web.search({ query: 'x' });

console.log(response.query);
```

```
{
  "results": [
    {
      "url": "<string>",
      "title": "<string>",
      "description": "<string>",
      "markdown": {
        "markdown": "<string>"
      }
    }
  ],
  "query": "<string>",
  "key_metadata": {
    "credits_consumed": 123,
    "credits_remaining": 123
  }
}
```

POST

/

web

/

search

JavaScript

```
import ContextDev from 'context.dev';

const client = new ContextDev({
  apiKey: process.env['CONTEXT_DEV_API_KEY'], // This is the default and can be omitted
});

const response = await client.web.search({ query: 'x' });

console.log(response.query);
```

```
{
  "results": [
    {
      "url": "<string>",
      "title": "<string>",
      "description": "<string>",
      "markdown": {
        "markdown": "<string>"
      }
    }
  ],
  "query": "<string>",
  "key_metadata": {
    "credits_consumed": 123,
    "credits_remaining": 123
  }
}
```

1 Credit Per 10 Results

[​](#body-query)

query

string

required

Search query. Accepts natural language as well as Google-style search operators such as `site:`, `-site:`, `inurl:`, `intitle:`, quoted phrases, and `OR`.

Required string length: `1 - 500`

[​](#body-num-results)

numResults

integer

default:10

Number of results to request and return (10–100). Defaults to 10.

Required range: `10 <= x <= 100`

[​](#body-include-domains)

includeDomains

string\[]

Allowlist — only return results from these domains. Example: \["arxiv.org", "github.com"].

[​](#body-exclude-domains)

excludeDomains

string\[]

Blocklist — drop results from these domains. Example: \["pinterest.com", "reddit.com"].

[​](#body-freshness)

freshness

enum\<string>

Restrict results to content published within this window.

Available options:

`last_24_hours`,

`last_week`,

`last_month`,

`last_year`

[​](#body-country)

country

enum\<string>

Two-letter ISO 3166-1 alpha-2 country code to localize results to a specific country (maps to Google's `gl` parameter). Example: "us", "gb", "de".

Available options:

`af`,

`al`,

`dz`,

`as`,

`ad`,

`ao`,

`ai`,

`aq`,

`ag`,

`ar`,

`am`,

`aw`,

`au`,

`at`,

`az`,

`bs`,

`bh`,

`bd`,

`bb`,

`by`,

`be`,

`bz`,

`bj`,

`bm`,

`bt`,

`bo`,

`ba`,

`bw`,

`bv`,

`br`,

`io`,

`bn`,

`bg`,

`bf`,

`bi`,

`kh`,

`cm`,

`ca`,

`cv`,

`ky`,

`cf`,

`td`,

`cl`,

`cn`,

`cx`,

`cc`,

`co`,

`km`,

`cg`,

`cd`,

`ck`,

`cr`,

`ci`,

`hr`,

`cu`,

`cy`,

`cz`,

`dk`,

`dj`,

`dm`,

`do`,

`ec`,

`eg`,

`sv`,

`gq`,

`er`,

`ee`,

`et`,

`fk`,

`fo`,

`fj`,

`fi`,

`fr`,

`gf`,

`pf`,

`tf`,

`ga`,

`gm`,

`ge`,

`de`,

`gh`,

`gi`,

`gr`,

`gl`,

`gd`,

`gp`,

`gu`,

`gt`,

`gn`,

`gw`,

`gy`,

`ht`,

`hm`,

`va`,

`hn`,

`hk`,

`hu`,

`is`,

`in`,

`id`,

`ir`,

`iq`,

`ie`,

`il`,

`it`,

`jm`,

`jp`,

`jo`,

`kz`,

`ke`,

`ki`,

`kp`,

`kr`,

`kw`,

`kg`,

`la`,

`lv`,

`lb`,

`ls`,

`lr`,

`ly`,

`li`,

`lt`,

`lu`,

`mo`,

`mk`,

`mg`,

`mw`,

`my`,

`mv`,

`ml`,

`mt`,

`mh`,

`mq`,

`mr`,

`mu`,

`yt`,

`mx`,

`fm`,

`md`,

`mc`,

`mn`,

`ms`,

`ma`,

`mz`,

`mm`,

`na`,

`nr`,

`np`,

`nl`,

`an`,

`nc`,

`nz`,

`ni`,

`ne`,

`ng`,

`nu`,

`nf`,

`mp`,

`no`,

`om`,

`pk`,

`pw`,

`ps`,

`pa`,

`pg`,

`py`,

`pe`,

`ph`,

`pn`,

`pl`,

`pt`,

`pr`,

`qa`,

`re`,

`ro`,

`ru`,

`rw`,

`sh`,

`kn`,

`lc`,

`pm`,

`vc`,

`ws`,

`sm`,

`st`,

`sa`,

`sn`,

`rs`,

`sc`,

`sl`,

`sg`,

`sk`,

`si`,

`sb`,

`so`,

`za`,

`gs`,

`es`,

`lk`,

`sd`,

`sr`,

`sj`,

`sz`,

`se`,

`ch`,

`sy`,

`tw`,

`tj`,

`tz`,

`th`,

`tl`,

`tg`,

`tk`,

`to`,

`tt`,

`tn`,

`tr`,

`tm`,

`tc`,

`tv`,

`ug`,

`ua`,

`ae`,

`gb`,

`us`,

`um`,

`uy`,

`uz`,

`vu`,

`ve`,

`vn`,

`vg`,

`vi`,

`wf`,

`eh`,

`ye`,

`zm`,

`zw`

[​](#body-query-fanout)

queryFanout

boolean

Expand the query into multiple parallel variants for broader recall.

[​](#body-markdown-options)

markdownOptions

object

Inline Markdown scraping for each result. Set `enabled: true` to activate.

Search succeeded. Results are ordered by relevance.

[​](#response-results)

results

object\[]

required

Show child attributes

[​](#response-query)

query

string

required

Echo of the original query (useful when fanout was enabled).

[​](#response-key-metadata)

key\_metadata

object

Metadata about the API key used for the request. Included in every response whenever a valid API key is provided, even when the response status is not 200.

Show child attributes

Was this page helpful?

[Crawl Website & Scrape Markdown](/api-reference/web-scraping/crawl-website-&-scrape-markdown)

[Previous](/api-reference/web-scraping/crawl-website-&-scrape-markdown)

[Scrape Screenshot](/api-reference/web-scraping/scrape-screenshot)

[Next](/api-reference/web-scraping/scrape-screenshot)

⌘I

Assistant

Responses are generated using AI and may contain mistakes.

[Contact support](/cdn-cgi/l/email-protection#94f2fbe1faf0f1e6e7d4f7fbfae0f1ece0baf0f1e2)

----
url: https://docs.context.dev/use-cases/build-rag-from-websites
----

> ## Documentation Index
>
> Fetch the complete documentation index at: [/llms.txt](/llms.txt)
>
> Use this file to discover all available pages before exploring further.

[Skip to main content](#content-area)

Retrieval-augmented generation (RAG) is a system that answers a question by pulling the most relevant passages from your own content and handing them to an LLM as context. The agent’s response is only as good as the RAG output, which is only as good as the content in its index. Building this index usually means building an ingestion pipeline: scrape HTML from the internet, clean it up to get only the visible text, then process it. All this while evading geo-restrictions and bot detection, and handling messy client-rendered content. This is an unnecessary overhead you can avoid if you use Context.dev’s [Web Scraping API](/guides/scrape-websites-to-markdown). You give it one starting URL and it returns reachable pages as clean, LLM-ready Markdown, with no browser pool, no extractor to maintain, and no HTML to detangle. In this guide we will build a complete RAG implementation: crawl the website with Context.dev, embed with OpenAI’s `text-embedding-3-small`, and store and search in Pinecone. This RAG pipeline has four steps:

1. **Crawl** the site into Markdown.
2. **Chunk** each page into focused passages.
3. **Embed and store** the chunks in a vector index.
4. **Retrieve** the best chunks at query time.

Drop this prompt into your AI coding tool to build the ingestion pipeline.

## [​](#architecture)Architecture

The pipeline has two phases:

* **Ingestion** runs once during setup, then on a schedule: crawl the site, split each page into chunks, embed the chunks, and upsert them into the vector index.
* **Retrieval** runs at query time: embed the user’s question, pull the most similar chunks, and hand them to the LLM as context.

## [​](#prerequisites)Prerequisites

1. A [Context.dev](https://context.dev) API key.
2. A [Pinecone](https://www.pinecone.io) account with a serverless index of dimension `1536` (see Step 3).
3. An [OpenAI](https://platform.openai.com) API key for embeddings.
4. The root URL of the site you want to ingest.

Install the three clients for your language:

```
npm install context.dev openai @pinecone-database/pinecone
```

## [​](#step-1-crawl-the-site-into-markdown)Step 1: Crawl the site into Markdown

```
import ContextDev from "context.dev";

const client = new ContextDev({ apiKey: process.env.CONTEXT_DEV_API_KEY! });

const { results, metadata } = await client.web.webCrawlMd({
  url: "https://docs.example.com",
  maxPages: 200
});

console.log(`Crawled ${metadata.numSucceeded}/${metadata.numUrls} pages`);
```

This API call makes Context.dev start at the seed URL and follow same-domain links until it has covered reachable pages or hit `maxPages` (default 100, max 500). Context.dev automatically strips off everything except the main content and converts it into clean markdown you can use in the next step. Each successful page crawl costs 1 credit. Check the response’s `metadata.numSucceeded` to find exactly how much this call cost you. To scope a large site, pass a `urlRegex` like `^https?://[^/]+/docs/` so only matching paths are followed.

Preview the URL set (and your bill) first

To get an upper-bound estimate of the API cost of a website’s crawl, pull its sitemap using the [Sitemap API](/guides/scrape-websites-to-markdown#get-all-urls-of-a-domain). This call is 1 credit regardless of size and returns a `urls` array; `urls.length` is useful for planning, but the actual crawl can differ because it follows discovered links and respects `maxPages`, `maxDepth`, and `urlRegex`.

```
const { urls } = await client.web.webScrapeSitemap({ domain: "docs.example.com" });
console.log(`${urls.length} URLs, about ${urls.length} crawl credits`);
```

Need images?

By default the crawl drops images. Set `includeImages` to keep image references inline in the Markdown:

```
const { results } = await client.web.webCrawlMd({
  url: "https://docs.example.com",
  maxPages: 200,
  includeImages: true,
});
```

For structured image data (dimensions, a CDN-hosted copy with its MIME type, and an image-type classification), call the dedicated [image-scraping endpoint](/api-reference/web-scraping/scrape-images) on a single page instead.

## [​](#step-2-chunk-the-markdown)Step 2: Chunk the Markdown

Embedding models have a token ceiling per input (OpenAI’s `text-embedding-3-small` accepts about 8K tokens), and retrieval works better on focused passages than on whole pages. Split each crawled page into chunks of roughly 500–1500 tokens. Markdown makes this easy: split on heading boundaries first, then sub-split anything still over budget.

```
type Chunk = { url: string; heading: string; text: string };

function chunkByHeading(url: string, markdown: string): Chunk[] {
  return markdown.split(/\n(?=#{1,3} )/).map((section) => ({
    url,
    heading: section.split("\n")[0].replace(/^#+\s*/, ""),
    text: section.trim()
  }));
}
```

Run this over every crawled page, passing each record’s `metadata.url` and `markdown`. The split keeps each heading attached to the section it introduces and tags the chunk with its `url` and `heading` for later citations. Sections still over budget need a second split, where a sliding window over paragraphs works; because each chunk keeps its own heading line, it stays self-contained when shown to the model.

## [​](#step-3-embed-and-store)Step 3: Embed and store

You can choose any embedding model provider (OpenAI, Voyage, Cohere, a local model) and vector database (Pinecone, pgvector, Qdrant, Weaviate). The next steps remain similar: embed each chunk, attach `url` and `heading` as metadata, and upsert by a deterministic ID. We will use OpenAI’s `text-embedding-3-small` for embeddings and Pinecone serverless for storage.

```
import OpenAI from "openai";
import { Pinecone } from "@pinecone-database/pinecone";
import { createHash } from "crypto";

const openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY! });
const pinecone = new Pinecone({ apiKey: process.env.PINECONE_API_KEY! });
const index = pinecone.index("docs");

const idFor = (c: Chunk) => createHash("sha1").update(c.url + c.heading).digest("hex");

async function indexChunks(chunks: Chunk[]) {
  for (let i = 0; i < chunks.length; i += 100) {
    const batch = chunks.slice(i, i + 100);
    const { data } = await openai.embeddings.create({
      model: "text-embedding-3-small",
      input: batch.map((c) => c.text)
    });
    await index.upsert(
      batch.map((chunk, j) => ({
        id: idFor(chunk),
        values: data[j].embedding,
        metadata: { url: chunk.url, heading: chunk.heading, text: chunk.text }
      }))
    );
  }
}
```

Chunks embed in batches of 100 to stay under the OpenAI input cap. `text-embedding-3-small` returns 1536-dimensional vectors, so create the Pinecone index with dimension `1536`; it is cheap and accurate enough for documentation, and you only need `text-embedding-3-large` (3072 dimensions, a separate index) if an evaluation says so. The deterministic SHA-1 of `url + heading` makes a re-run upsert in place instead of duplicating, and the `text` you keep in metadata is what you hand back to the model at query time.

## [​](#step-4-retrieve-at-query-time)Step 4: Retrieve at query time

At runtime, your RAG system needs to:

1. Embed the user’s question with the **same model** used for indexing
2. Pull the top-K most similar chunks
3. Hand them to the LLM as context.

```
async function answer(question: string) {
  const { data } = await openai.embeddings.create({
    model: "text-embedding-3-small",
    input: [question]
  });

  const { matches } = await index.query({
    vector: data[0].embedding,
    topK: 6,
    includeMetadata: true
  });

  const context = matches
    .map((m) => `## ${m.metadata!.heading} (${m.metadata!.url})\n\n${m.metadata!.text}`)
    .join("\n\n---\n\n");

  return askLLM({ question, context });
}
```

`topK: 6` is a sensible default for documentation Q\&A; raise it if answers miss context, lower it if noise creeps in. The retrieved `text` is already Markdown and carries its `url`, so the model sees real structure and can return linkable citations if you add `Cite the URL of each section you used` to the system prompt.

## [​](#related-resources)Related resources

## [Scrape Websites to Clean Markdown](/guides/scrape-websites-to-markdown)

[The full Web Scraping API guide: Markdown, HTML, sitemaps, and image extraction with automatic proxy switching.](/guides/scrape-websites-to-markdown)

## [Extract structured website data](/guides/extract-structured-data-from-websites)

[Send a URL plus a JSON Schema when you need typed answers at inference time, not ingest time.](/guides/extract-structured-data-from-websites)

## [Web Crawl API](/api-reference/web-scraping/crawl-website-&-scrape-markdown)

[Full request and response schema for the crawl endpoint, including `maxPages`, `urlRegex`, and per-page metadata.](/api-reference/web-scraping/crawl-website-&-scrape-markdown)

## [Web Sitemap API](/api-reference/web-scraping/crawl-sitemap)

[Sitemap discovery for previewing a site’s URL set before a crawl.](/api-reference/web-scraping/crawl-sitemap)

Was this page helpful?

[Prefill Onboarding from a Work Email](/use-cases/faster-onboarding-flows)

[Previous](/use-cases/faster-onboarding-flows)

[Generate Branded Campaign Assets at Scale](/use-cases/branded-campaign-assets)

[Next](/use-cases/branded-campaign-assets)

Ctrl+I

Assistant

Responses are generated using AI and may contain mistakes.

[Contact support](mailto:founders@context.dev)

----
url: https://docs.context.dev/nocode/zapier
----

> ## Documentation Index
>
> Fetch the complete documentation index at: [/llms.txt](/llms.txt)
>
> Use this file to discover all available pages before exploring further.

[Skip to main content](#content-area)

[Zapier](https://zapier.com) connects Context.dev to 8,000+ apps. You bring the trigger (Typeform submission, new HubSpot contact, new Gmail email) and Context.dev provides the enrichment action.

## [Install the Context.dev Zapier app](https://zapier.com/apps/contextdev/integrations)

[Authorize Context.dev inside Zapier and connect your API key.](https://zapier.com/apps/contextdev/integrations)

## [​](#what-you-get)What you get

Context.dev’s Zapier app exposes **five actions**, all backed by the same endpoints used directly via the API:

| Action                         | Input                                    | Output                                                      | Endpoint                                                                  |
| ------------------------------ | ---------------------------------------- | ----------------------------------------------------------- | ------------------------------------------------------------------------- |
| **Retrieve Brand**             | Name, domain, or ticker                  | Brand record (logo, colors, description, socials, industry) | `/brand/retrieve`, `/brand/retrieve-by-name`, `/brand/retrieve-by-ticker` |
| **Identify Transaction**       | Descriptor + optional MCC, city, country | Brand record for the merchant                               | `/brand/transaction_identifier`                                           |
| **Fetch NAICS Classification** | Domain or company name                   | NAICS code(s) with confidence                               | `/web/naics`                                                              |
| **Fetch Screenshot**           | URL + viewport / full-page               | PNG image URL                                               | `/web/screenshot`                                                         |
| **Fetch Styleguide**           | URL                                      | Fonts, colors, spacing, shadows                             | `/web/styleguide`                                                         |

There are no Context.dev-provided triggers: you bring the trigger from another app and chain a Context.dev action after it.

## [​](#common-trigger-pairings)Common trigger pairings

| Trigger source                      | Typical pairing                                     |
| ----------------------------------- | --------------------------------------------------- |
| Typeform “New Form Entry”           | Enrich the submitted email or domain                |
| HubSpot “New Contact”               | Enrich the contact with logo, industry, and socials |
| Google Sheets “New Spreadsheet Row” | Bulk-enrich a list of domains                       |
| Gmail “New Email” or Email Parser   | Pull the sender’s domain and enrich                 |
| Webflow / Tally                     | Capture a domain from a form                        |
| Email by Zapier                     | Quickest manual-trigger setup for testing           |

## [​](#setup-walkthrough)Setup walkthrough

Trigger fires, Context.dev resolves a brand, the response flows into the destination app.

### [​](#prerequisites)Prerequisites

* A Zapier account (free tier works for testing)
* A [Context.dev](https://context.dev) account and an API key from the [dashboard](https://context.dev/dashboard) (prefix `ctxt_secret_`)
* A Zapier-supported trigger source (for testing, **Email by Zapier** works without external setup)

### [​](#1-install-the-context-dev-zapier-app)1. Install the Context.dev Zapier app

Open the [Context.dev Zapier listing](https://zapier.com/apps/contextdev/integrations) and click **Connect**. Zapier prompts for the API key. Paste your `ctxt_secret_*` key from the [Context.dev dashboard](https://context.dev/dashboard), then give the connection a name (e.g. “Context.dev (production)”) so you can distinguish it from staging keys later. You only do this once per Context.dev account. Every Zap that uses Context.dev re-uses the saved connection.

### [​](#2-add-a-trigger)2. Add a trigger

Create a new Zap and pick a trigger that fires on the event you care about. For testing without any other integration, use **Email by Zapier > New Inbound Email**:

1. Pick **Email by Zapier** as the trigger app.
2. Pick **New Inbound Email** as the trigger event.
3. Zapier generates an inbox address like `xyz123@zapiermail.com`. Note it.
4. Click **Test trigger**. Zapier waits for an inbound message.
5. Send an email to the Zapier inbox address from step 3 with a domain in the subject line (e.g. `test stripe.com`). Zapier should detect it.

For production, swap in a real trigger: Typeform “New Submission”, HubSpot “New Contact”, Google Sheets “New Spreadsheet Row”, whatever fires on the event you want to enrich.

### [​](#3-add-the-context-dev-action)3. Add the Context.dev action

After the trigger, click **+** and add an action. Search for **Context.dev** and pick the action that matches what you want to extract. For **Retrieve Brand**, configure:

* **Input Type:** Name, Domain, or Ticker
* **Input Value:** Map the value from the trigger (e.g. the domain parsed from a Typeform submission)

Click **Test step**. Zapier hits Context.dev and shows the parsed response. The first call on a cold domain takes around 7 seconds at the median (and can take up to a minute at p99); subsequent calls return in \~250 ms.

### [​](#4-test-and-publish)4. Test and publish

Click **Test & Review** to run the whole Zap end-to-end. Verify every step turns green, then give the Zap a descriptive name and toggle it **On**. Watch the first few real runs in **Zap History**: it’s the fastest way to spot mapping mistakes before they pile up.

## [​](#sample-response)Sample response

Every brand action returns the standard `brand` envelope. Downstream Zap steps reference fields by path (e.g. `2. Retrieve Brand: Brand Title`):

```
{
  "status": "ok",
  "code": 200,
  "brand": {
    "domain": "loom.com",
    "title": "Loom",
    "description": "Loom is a video messaging platform that enables users to record their screen, camera, or both, to communicate more effectively. Now part of Atlassian.",
    "slogan": "Empowering everyone to communicate more effectively, wherever they are",
    "colors": [
      { "hex": "#040404", "name": "Armor Wash" },
      { "hex": "#655ef3", "name": "Blue Hepatica" }
    ],
    "logos": [
      {
        "url": "https://media.brand.dev/660ae867-d4a1-4c38-a815-6dbc1ceb33d5.svg",
        "mode": "light",
        "type": "logo",
        "resolution": { "width": 150, "height": 48, "aspect_ratio": 3.13 }
      }
    ],
    "socials": [
      { "type": "linkedin", "url": "https://linkedin.com/company/useloom" },
      { "type": "x", "url": "https://x.com/loom" }
    ],
    "industries": {
      "eic": [{ "industry": "Technology", "subindustry": "Software (B2B)" }]
    },
    "links": {
      "blog": "https://loom.com/newsroom",
      "pricing": "https://loom.com/pricing",
      "contact": "https://loom.com/connect/enterprise"
    },
    "address": {
      "street": "140 2nd Street",
      "city": "San Francisco",
      "country_code": "US",
      "postal_code": "94105"
    }
  }
}
```

## [​](#reshape-responses-with-code-by-zapier)Reshape responses with Code by Zapier

Most destination apps want flat fields. Add a **Code by Zapier > Run Python** step between the Context.dev action and the destination action.

### [​](#one-shot-flatten-most-used)One-shot flatten (most-used)

When you want every common field as a flat output:

```
import json

status = input_data.get("status", "")
brand = json.loads(input_data.get("brand") or "{}")

logos   = brand.get("logos", []) or []
colors  = brand.get("colors", []) or []
socials = brand.get("socials", []) or []
links   = brand.get("links", {}) or {}
stock   = brand.get("stock", {}) or {}
address = brand.get("address", {}) or {}
eic     = brand.get("industries", {}).get("eic", []) or []

socials_by_type = {s.get("type", "").lower(): s.get("url", "") for s in socials}
light_logo = next((l.get("url") for l in logos if l.get("mode") == "light"), None)
icon_logo  = next((l.get("url") for l in logos if l.get("type") == "icon"), None)

output = {
    "company_name":  brand.get("title", ""),
    "domain":        brand.get("domain", ""),
    "description":   brand.get("description", ""),
    "logo_url":      light_logo or (logos[0].get("url") if logos else ""),
    "icon_url":      icon_logo or "",
    "primary_color": colors[0].get("hex", "") if colors else "",
    "linkedin":      socials_by_type.get("linkedin", ""),
    "twitter":       socials_by_type.get("x", ""),
    "industry":      eic[0].get("industry", "") if eic else "",
    "subindustry":   eic[0].get("subindustry", "") if eic else "",
    "ticker":        stock.get("ticker", "") or "",
    "city":          address.get("city", "") or "",
    "country_code":  address.get("country_code", "") or "",
    "pricing_url":   links.get("pricing", "") or "",
}
output["enrichment_ok"] = status == "ok" and bool(brand.get("title"))
```

### [​](#best-logo-for-a-given-ui)Best logo for a given UI

`brand.logos[]` is an array of variants. Pick one by `type` (icon vs. full wordmark) and `mode` (light, dark, opaque):

```
import json

brand = json.loads(input_data.get("brand") or "{}")
logos = brand.get("logos", [])

def find(type_, mode):
    return next((l.get("url") for l in logos
                 if l.get("type") == type_ and l.get("mode") == mode), None)

output = {
    "logo_light": find("logo", "light"),
    "logo_dark":  find("logo", "dark"),
    "icon_light": find("icon", "light"),
    "icon_dark":  find("icon", "dark"),
    "logo_any":   logos[0].get("url") if logos else None,
}
```

| Destination                     | Use                           |
| ------------------------------- | ----------------------------- |
| White-background email template | `logo_light`                  |
| Dark Slack notification         | `logo_dark`                   |
| Round avatar bubble in a CRM    | `icon_light` (or `icon_dark`) |
| Anything else                   | `logo_any`                    |

### [​](#detect-a-missing-or-weak-response)Detect a missing or weak response

A no-brand result (HTTP 400, `error_code: "NOT_FOUND"` or `"WEBSITE_ACCESS_ERROR"`) or a server error (HTTP 500) comes back without a usable `brand`. Branch on it before writing to the destination:

```
import json

status = input_data.get("status", "")
brand = json.loads(input_data.get("brand") or "{}")

output = {
    "enrichment_ok": status == "ok" and bool(brand.get("title")),
    "status":        status,
    "has_logo":      bool(brand.get("logos")),
    "has_industry":  bool(brand.get("industries", {}).get("eic")),
    "company_name":  brand.get("title", ""),
}
```

Add a **Filter by Zapier** step after this: “Only continue if `enrichment_ok` is true.” The Zap silently skips records that didn’t enrich.

## [​](#example-automations)Example automations

### [​](#enrich-a-new-hubspot-contact)Enrich a new HubSpot contact

1. **Trigger:** HubSpot “New Contact”
2. **Action:** Context.dev “Retrieve Brand” with the email domain
3. **Code by Zapier:** [One-shot flatten](#one-shot-flatten-most-used)
4. **Filter:** Continue only if `enrichment_ok` is true
5. **Action:** HubSpot “Update Contact” with logo, industry, LinkedIn, and address fields

### [​](#slack-notification-with-brand-context)Slack notification with brand context

1. **Trigger:** Stripe “New Customer”
2. **Action:** Context.dev “Retrieve Brand” by email domain
3. **Code by Zapier:** [Best logo for a given UI](#best-logo-for-a-given-ui) (use `logo_dark` for dark Slack themes)
4. **Action:** Slack “Send Channel Message” with company name in the title, dark logo as icon, industry in attachment text

### [​](#bulk-enrich-a-google-sheet)Bulk-enrich a Google Sheet

1. **Trigger:** Google Sheets “New Spreadsheet Row” with a `domain` column
2. **Action:** Context.dev “Retrieve Brand”
3. **Code by Zapier:** [One-shot flatten](#one-shot-flatten-most-used)
4. **Action:** Google Sheets “Update Spreadsheet Row” with logo, industry, LinkedIn, and pricing-page columns

### [​](#naics-tag-a-crm-lead)NAICS-tag a CRM lead

1. **Trigger:** Salesforce “New Lead”
2. **Action:** Context.dev “Fetch NAICS Classification” with the lead’s domain
3. **Code by Zapier:** Pull `codes[0].code` for the highest-confidence NAICS
4. **Action:** Salesforce “Update Lead” with the NAICS code in a custom field

### [​](#visual-transaction-enrichment)Visual transaction enrichment

1. **Trigger:** Plaid webhook
2. **Action:** Context.dev “Identify Transaction” with the raw descriptor + optional MCC
3. **Code by Zapier:** Pull brand name + logo
4. **Action:** Notion “Create Page” with merchant logo, name, and category

## [​](#troubleshooting)Troubleshooting

* **“Authentication failed.”** The API key was rejected. Re-paste it in Zapier’s **My Apps > Context.dev** connection settings; confirm the `ctxt_secret_` prefix.
* **Action returns 408 (“timeout”).** Cold-hit timeout on a domain Context.dev hadn’t crawled before. Re-run; the second hit will be warm.
* **No logo in the response.** A few brands haven’t published a logo Context.dev could capture. Use Logo Link as a fallback (`https://logos.context.dev/?publicClientId=brandLL_xxx&domain=...`) for a generated monogram.

## [​](#next-steps)Next steps

## [Make integration](/nocode/make)

[The Zapier alternative when you need branching logic and built-in error handling.](/nocode/make)

## [Brand API reference](/api-reference/brand-intelligence/retrieve-brand-data-by-domain)

[The underlying endpoints. Useful when reading Zap test responses.](/api-reference/brand-intelligence/retrieve-brand-data-by-domain)

## [Industry classification](/guides/classification/overview)

[EIC vs NAICS vs SIC: when each one fits.](/guides/classification/overview)

## [Troubleshooting](/optimization/troubleshooting)

[HTTP status codes, retry strategies, and common error patterns.](/optimization/troubleshooting)

Need help implementing a specific Zap? [Email us](mailto:hello@context.dev) and we’ll walk through it with you.

Was this page helpful?

[Make](/nocode/make)

[Previous](/nocode/make)

[Google Sheets](/nocode/google-sheets)

[Next](/nocode/google-sheets)

Ctrl+I

Assistant

Responses are generated using AI and may contain mistakes.

[Contact support](mailto:founders@context.dev)

----
url: https://docs.context.dev/use-cases/lead-enrichment
----

> ## Documentation Index
>
> Fetch the complete documentation index at: [/llms.txt](/llms.txt)
>
> Use this file to discover all available pages before exploring further.

[Skip to main content](#content-area)

When adding new leads to your CRM, you’ll need to search and find their company’s profile: name, description, industry classification, slogan, social profiles, and more. This guide shows how to automate that with Context.dev’s [Brand API](/guides/get-brand-data#look-up-by-work-email).

Live demo

About

Mintlify is an intelligent documentation platform that empowers millions of developers by providing AI-native, visually appealing documentation. Their platform is used by over 10,000 companies and reaches more than 100 m…

Industry

Technology · Developer Tools & APIs

HQ

San Francisco, California, United States

Phone

(415) 555-0132

Socials

[LinkedIn](https://linkedin.com/company/mintlify)[X](https://x.com/mintlify)

Drop this prompt into your AI coding tool to wire up CRM lead enrichment.

## [​](#prerequisites)Prerequisites

* **A Context.dev API key.** Sign up at [context.dev](https://context.dev), copy it from the dashboard, and save it to `.env` (make sure `.env` is in `.gitignore`).

  ```
  export CONTEXT_DEV_API_KEY="ctxt_secret_..."
  ```

* **Admin access to your CRM** to create a webhook on new leads and write fields back.

* **The Context.dev SDK** for your backend, or call the API directly with `curl` (no install required):

  ```
  npm install context.dev
  ```

## [​](#architecture)Architecture

The pipeline has two jobs:

1. **Enrich** a lead’s company profile by saving the Brand API response in your CRM’s fields.
2. **Listen** for new-lead events and run that enrichment on each one.

## [​](#step-1-enrich-with-the-brand-api)Step 1. Enrich with the Brand API

Here’s what the Brand API gives you:

| Field                    | What it is                                                                                   |
| ------------------------ | -------------------------------------------------------------------------------------------- |
| `brand.title`            | Company name.                                                                                |
| `brand.description`      | One-paragraph company description.                                                           |
| `brand.slogan`           | Marketing tagline, when available.                                                           |
| `brand.domain`           | Canonical company domain.                                                                    |
| `brand.logos[]`          | Image source URLs for all variants of the logo and icon.                                     |
| `brand.colors[]`         | Hex codes for every color in the brand palette.                                              |
| `brand.backdrops[]`      | Hero and background imagery.                                                                 |
| `brand.socials[]`        | Links to their social profiles.                                                              |
| `brand.address`          | HQ address: street, city, state/province, country, and postal code.                          |
| `brand.phone`            | Public contact phone, when available.                                                        |
| `brand.email`            | Public contact email, when available.                                                        |
| `brand.industries.eic[]` | Industry and subindustry classification. ([Read more about EIC](/guides/classification/EIC)) |
| `brand.stock`            | Stock ticker and the name of the exchange for public companies, otherwise null.              |
| `brand.primary_language` | Detected language of the brand’s site.                                                       |

Exactly which field each value maps to depends on what CRM you’re using. Read their documentation to find this. Here’s the code for the server that works for HubSpot, Salesforce, Zoho, Pipedrive, and monday.com.

```
import express from "express";
import ContextDev from "context.dev";

const app = express();
app.use(express.json());
const client = new ContextDev({ apiKey: process.env.CONTEXT_DEV_API_KEY });

// One endpoint for every CRM. Point each CRM's webhook at /webhooks/<crm>.
app.post("/webhooks/:crm", async (req, res) => {
  res.sendStatus(200); // ack fast; CRMs retry slow endpoints

  const { email, recordId } = extractLead(req.params.crm, req.body);
  if (!email) return;

  const fields = await enrichLead(email);
  if (fields) await writeBack(req.params.crm, recordId, fields);
});

// Call the Brand API and map the response to the fields you store.
async function enrichLead(email: string) {
  try {
    const { brand } = await client.brand.retrieveByEmail({ email, timeoutMS: 8000 });
    return {
      companyName: brand.title,
      description: brand.description,
      phone: brand.phone,
      website: brand.domain,
      logo: brand.logos?.find((l) => l.mode === "light")?.url ?? brand.logos?.[0]?.url ?? null,
      industry: brand.industries?.eic?.[0]?.industry ?? null,
      linkedin: brand.socials?.find((s) => s.type === "linkedin")?.url ?? null,
    };
  } catch {
    return null; // 422 free email, 400 no brand, 408 timeout: keep the rep's input
  }
}

// CRM-specific: read the email + record id from each payload shape.
function extractLead(crm: string, body: any): { email?: string; recordId?: string } {
  switch (crm) {
    case "hubspot":    return { email: body[0]?.propertyValue, recordId: body[0]?.objectId };
    case "salesforce": return { email: body.Lead?.Email, recordId: body.Lead?.Id };
    case "zoho":       return { email: body.email, recordId: body.id };
    case "pipedrive":  return { email: body.data?.email?.[0]?.value, recordId: body.data?.id };
    case "monday":     return { email: body.event?.columnValues?.email?.email, recordId: body.event?.pulseId };
    default:           return {};
  }
}

// CRM-specific: write the mapped fields back, filling blanks only.
async function writeBack(crm: string, recordId: string | undefined, fields: object) {
  // HubSpot CRM API, Salesforce sObject update, Zoho Records API,
  // Pipedrive Persons, monday change_multiple_column_values.
}

app.listen(3000);
```

10 credits per successful call Host this on something like Vercel, and use the URL it’s hosted on as the webhook URL in [Step 2](#step-2-listen-for-new-leads). This server follows these best practices:

* **Free and personal email filtering is built in.** Brand API rejects Gmail, Yahoo, and 10,000+ free or disposable providers with a 422 error code. Keep placeholders for when data can’t be found.
* **Set a timeout.** Pass `timeoutMS` so a cold lookup can’t hang your handler. A first-time domain can take a few seconds; warm lookups return in about 250ms.
* **Cache by domain.** Enrich once per company and store the result in your own database keyed by domain. Since brand details don’t change often, this will save your API credits.

## [​](#step-2-listen-for-new-leads)Step 2. Listen for new leads

Every major CRM platform lets you set up webhooks. When set up, every time you add a new lead, the CRM app will send a POST request to the configured endpoint. You’ll need to create a backend server which serves this route by using the work email field to pull data from Context.dev’s Brand API and then write the brand profile data back to the CRM.

| CRM            | How to set up a webhook on new leads                                                                               | Docs                                                                                                                           |
| -------------- | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ |
| **HubSpot**    | Subscribe a private app to the `contact.creation` event (Settings → Integrations → Private Apps → Webhooks).       | [Private app webhooks](https://developers.hubspot.com/docs/guides/crm/private-apps/webhooks)                                   |
| **Salesforce** | A record-triggered Flow on **Lead → created**, with an HTTP Callout (or Outbound Message) action to your endpoint. | [Configure an HTTP Callout](https://help.salesforce.com/s/articleView?id=platform.flow_http_callout_configure.htm\&type=5)     |
| **Zoho CRM**   | A workflow rule on the **Leads** module with a Webhook action, or the Webhook API.                                 | [Webhooks in workflows](https://help.zoho.com/portal/en/kb/crm/automate-business-processes/actions/articles/webhooks-workflow) |
| **Pipedrive**  | A Webhooks v2 subscription for `create.person` (or `create.lead`).                                                 | [Guide for Webhooks v2](https://pipedrive.readme.io/docs/guide-for-webhooks-v2)                                                |
| **monday.com** | A `create_item` webhook on your leads board, via the API or the board integration.                                 | [Webhooks reference](https://developer.monday.com/api-reference/reference/webhooks)                                            |

When you set up the webhook, point its URL at wherever your backend server is hosted (for example `https://api.example.com/webhooks/hubspot`). Step 1 describes how to actually build this server.

## [​](#optional-get-specific-information-about-leads)(Optional) Get specific information about leads

When you need a specific data point your sales team cares about but isn’t included in the Brand API’s response, use the [Extract API](/guides/extract-structured-data-from-websites). It crawls the company’s website, runs an LLM over the pages, and returns values matching a JSON Schema you provide: describe each field you need (e.g., “Do they have referral rewards?”) and get typed answers in response. Add this to your server, right after the Brand API enrichment:

```
// After enrichLead() returns: pull a custom datapoint and attach it to the write-back.
const { data } = await client.web.extract({
  url: `https://${fields.website}`,
  schema: {
    type: "object",
    properties: {
      pricing_model: {
        type: "string",
        description: "How the product is priced: per-seat, usage-based, or flat-rate.",
      },
    },
    required: ["pricing_model"],
    additionalProperties: false,
  },
});

fields.pricingModel = data.pricing_model ?? null;
```

10 credits per successful call

## [​](#best-practices)Best practices

### [​](#enrich-on-create-not-on-read)Enrich on create, not on read

Trigger enrichment when a lead is created or explicitly re-enriched, never on every record view. A view should read your cached columns, not fire an API call.

### [​](#prefetch-for-faster-response)Prefetch for faster response

Context.dev provides a prefetch endpoint that starts the scraping for building the brand profiles when a new brand comes in that isn’t already in Context.dev’s database.

```
// Fire and forget at the top of the handler, before other work.
client.utility.prefetchByEmail({ email }).catch(() => {});
// ... later, when you need the data:
const data = await enrichLead(email);
```

See [Prefetch for Faster Response](/optimization/prefetching) for the full pattern.

### [​](#handle-the-misses)Handle the misses

Common failure situations:

1. **Free or disposable email (HTTP 422).** Expected. Don’t retry; you have no company domain to look up. Fall back to the rep’s typed company name.
2. **No brand found (HTTP 400, `error_code: "NOT_FOUND"`).** The domain isn’t in Context.dev’s index. Log it and show a “could not enrich” badge; reps like to know.
3. **Cold-hit timeout (HTTP 408).** Rare. Retry once with backoff, or let it fall through; the next call against that domain hits the now-warm cache.

## [​](#next-steps)Next steps

## [Retrieve by Email](/api-reference/brand-intelligence/retrieve-brand-data-by-email-address)

[Endpoint reference for the call this guide uses.](/api-reference/brand-intelligence/retrieve-brand-data-by-email-address)

## [Prefetch for Faster Response](/optimization/prefetching)

[Hide cold-hit latency from your create-record handler.](/optimization/prefetching)

## [Onboarding Flows](/use-cases/faster-onboarding-flows)

[The same enrichment pattern, applied to in-product signup forms.](/use-cases/faster-onboarding-flows)

## [Classify Brands by Industry](/guides/classification/overview)

[Choosing between EIC, NAICS, and SIC for lead segmentation.](/guides/classification/overview)

Was this page helpful?

[Build Branded Email Templates](/use-cases/custom-email-templates)

[Previous](/use-cases/custom-email-templates)

Ctrl+I

Assistant

Responses are generated using AI and may contain mistakes.

[Contact support](mailto:founders@context.dev)

----
url: https://docs.context.dev/use-cases/branded-campaign-assets
----

> ## Documentation Index
>
> Fetch the complete documentation index at: [/llms.txt](/llms.txt)
>
> Use this file to discover all available pages before exploring further.

[Skip to main content](#content-area)

Designing eye-catching social media creatives using an AI agent requires it to have a lot of context: your product features, voice, target audience, and design tokens. Your agent needs to crawl your marketing site, distill its positioning and design system, then generate on-brand campaign ideas, copy, and social creatives for every platform. In this guide, we build a pipeline that does this at scale using Context.dev’s APIs and some popular agent skills. Try it: drop a domain in and render three example artboards — square post, landscape, and hero banner — using the brand’s website styleguide palette.

Live demo

**Airbnb** · airbnb.com

Drop this prompt into your AI coding tool to build the campaign pipeline.

## [​](#architecture)Architecture

The pipeline runs in four phases. The leverage is grounding every phase in the brand’s real site instead of a blank prompt.

1. **Gather** crawls the whole marketing site to Markdown ([Web Scraping API](/guides/scrape-websites-to-markdown#crawl-a-whole-site)) and pulls the brand kit ([Brand API](/guides/get-brand-data)) and design tokens ([Styleguide API](/guides/extract-design-system-from-website#extract-the-full-styleguide)).
2. **Distill** runs the [product-marketing-context](https://www.skills.sh/coreyhaines31/marketingskills/product-marketing-context) skill over the crawl to capture positioning, audience, and voice, turns the brand kit into a design guide, and generates net-new campaign ideas grounded in that positioning.
3. **Write** runs the [copywriting](https://www.skills.sh/coreyhaines31/marketingskills/copywriting) skill on the chosen idea for an on-brand headline, supporting line, and CTA.
4. **Render** lays out the creative from the design guide and copy, then rasterizes it to each platform size.

Phases 2 and 3 run in your coding agent through the two skills; the rest is code. Gather once per brand and reuse the corpus, positioning, and design guide across every idea, creative, and size.

## [​](#prerequisites)Prerequisites

* **A Context.dev API key.** Grab one from the [dashboard](https://context.dev/dashboard) and export it as `CONTEXT_DEV_API_KEY`.
* **An Anthropic API key** for the model calls in Steps 2 through 4. Export it as `ANTHROPIC_API_KEY`.
* **The Context.dev SDK** for your backend:

```
npm install context.dev
```

## [​](#step-1-gather-the-brand’s-site)Step 1. Gather the brand’s site

The first step is always to understand the product deeply. To do this, your AI agent needs context. It needs to know what your product does and who it’s for. You will also need your brand’s logos and styleguides. For this we’ll use:

1. The [**Brand API**](/guides/get-brand-data) to get brand name, description, slogans, backdrops, and all logo variants.
2. The [**Web Scraping API**](/guides/scrape-websites-to-markdown#crawl-a-whole-site) to crawl reachable marketing-site pages as clean Markdown.
3. The [**Styleguide API**](/guides/extract-design-system-from-website#extract-the-full-styleguide) to get exact colors, component CSS, spacing, fonts, shadows, etc.

```
import ContextDev from "context.dev";

const client = new ContextDev({ apiKey: process.env.CONTEXT_DEV_API_KEY! });

export async function gatherBrand(domain: string) {
  // The voice (whole-site crawl), the identity (brand), and the type (styleguide).
  const [{ results }, { brand }, { styleguide }] = await Promise.all([
    client.web.webCrawlMd({ url: `https://${domain}`, maxPages: 100 }),
    client.brand.retrieve({ domain }),
    client.web.extractStyleguide({ domain }),
  ]);
  if (!brand || !styleguide) throw new Error(`No brand or styleguide data for ${domain}`);

  const logos = brand.logos ?? [];
  const lightLogo =
    logos.find((l) => l.type === "logo" && l.mode === "light")?.url ?? logos[0]?.url;

  return {
    // The design guide: identity plus the look, everything the render step needs.
    designGuide: {
      name: brand.title,
      description: brand.description,
      slogan: brand.slogan,
      palette: [
        styleguide.colors?.accent,
        styleguide.colors?.background,
        styleguide.colors?.text,
      ].filter(Boolean),
      logos: logos.map((l) => ({ url: l.url, mode: l.mode, type: l.type })), // every variant
      lightLogo,
      headingFont: styleguide.typography.headings.h1?.fontFamily,
      bodyFont: styleguide.typography.p?.fontFamily,
      spacing: styleguide.elementSpacing,
      shadows: styleguide.shadows,
      components: styleguide.components,
    },
    // The marketing corpus: one entry per page.
    pages: results.map((r) => ({ url: r.metadata.url, markdown: r.markdown })),
  };
}
```

Brand · 10 credits Styleguide · 10 credits Crawl · 1 credit per page The crawl bills 1 credit per page, so cost depends on how big the marketing site is. Use [`maxPages`](/guides/scrape-websites-to-markdown#crawl-a-whole-site) (default 100, max 500) and [`urlRegex`](/guides/scrape-websites-to-markdown#crawl-a-whole-site) to crawl fewer, more specific pages.

## [​](#step-2-distill-positioning-and-generate-ideas)Step 2. Distill positioning and generate ideas

Next, we need the agent to come up with campaign ideas. Instead of trying to engineer the perfect prompt, we recommend using a skill. Run Corey Haines’ [product-marketing-context](https://www.skills.sh/coreyhaines31/marketingskills/product-marketing-context) on your coding agent with access to all the context we gathered in the last step. Make sure to specifically prompt it to generate 10 ideas for social media campaigns.

```
// ideate.ts
import Anthropic from "@anthropic-ai/sdk";

const anthropic = new Anthropic(); // reads ANTHROPIC_API_KEY
const MODEL = "claude-opus-4-8";   // Opus 4.8 for quality; Sonnet 4.6 for cheaper drafts

// Corey Haines' product-marketing-context skill, loaded straight from its repo.
const SKILL_URL =
  "https://raw.githubusercontent.com/coreyhaines31/marketingskills/refs/heads/main/skills/product-marketing/SKILL.md";

type Gathered = {
  designGuide: { name: string; slogan?: string; description?: string };
  pages: { url: string; markdown: string }[];
};

// Pass in everything gathered in Step 1; no extra Context.dev calls here.
export async function generateIdeas({ designGuide, pages }: Gathered): Promise<string> {
  const skill = await fetch(SKILL_URL).then((r) => r.text());

  const context = [
    `Brand: ${designGuide.name} (${designGuide.slogan})`,
    designGuide.description,
    ...pages.map((p) => `## ${p.url}\n${p.markdown}`),
  ].join("\n\n");

  const message = await anthropic.messages.create({
    model: MODEL,
    max_tokens: 2000,
    system: skill, // run the skill: it tells Claude how to build product-marketing context
    messages: [
      {
        role: "user",
        content: `${context}\n\nUsing the product-marketing context above, generate 10 distinct ideas for social media campaigns. One per line: the hook, then the angle.`,
      },
    ],
  });

  return message.content.find((b) => b.type === "text")?.text ?? "";
}
```

## [​](#step-3-write-the-copy)Step 3. Write the copy

Now you need to pick the ideas you like best. You can also fix or add new ideas. Then run Corey Haines’ [copywriting](https://www.skills.sh/coreyhaines31/marketingskills/copywriting) skill on it, with a prompt specifying how you want the output.

```
// copy.ts
import Anthropic from "@anthropic-ai/sdk";

const anthropic = new Anthropic(); // reads ANTHROPIC_API_KEY
const MODEL = "claude-opus-4-8";

// Corey Haines' copywriting skill, loaded straight from its repo.
const SKILL_URL =
  "https://raw.githubusercontent.com/coreyhaines31/marketingskills/refs/heads/main/skills/copywriting/SKILL.md";

export type Copy = { headline: string; subhead: string; cta: string };

type Gathered = {
  designGuide: { name: string; slogan?: string; description?: string };
  pages: { url: string; markdown: string }[];
};

export async function writeCopy(idea: string, { designGuide, pages }: Gathered): Promise<Copy> {
  const skill = await fetch(SKILL_URL).then((r) => r.text());

  const context = [
    `Brand: ${designGuide.name} (${designGuide.slogan})`,
    designGuide.description,
    ...pages.map((p) => `## ${p.url}\n${p.markdown}`),
  ].join("\n\n");

  const message = await anthropic.messages.create({
    model: MODEL,
    max_tokens: 1000,
    system: skill, // run the skill: it writes on-brand copy from the context
    messages: [
      {
        role: "user",
        content: `${context}\n\nWrite a social ad for this campaign idea: "${idea}". Return only a JSON object with keys "headline", "subhead", and "cta".`,
      },
    ],
  });

  const text = message.content.find((b) => b.type === "text")?.text ?? "{}";
  return JSON.parse(text) as Copy;
}
```

## [​](#step-4-render-the-creative-across-sizes)Step 4. Render the creative across sizes

Before we get an LLM to render the images, we need to specify the sizes. This script contains 6 of the most popular social media post sizes:

* Instagram Story
* Instagram Square Post
* Instagram Portrait Post
* X image card
* LinkedIn Banner
* YouTube video thumbnail

Edit this to include all the variants you want.

```
// variants.ts
export type Variant = {
  id: string;
  platform: string;
  width: number;
  height: number;
  layout: "square" | "portrait" | "wide";
};

export const VARIANTS: Variant[] = [
  { id: "ig-square", platform: "Instagram feed", width: 1080, height: 1080, layout: "square" },
  { id: "ig-portrait", platform: "Instagram portrait", width: 1080, height: 1350, layout: "portrait" },
  { id: "ig-story", platform: "Instagram story", width: 1080, height: 1920, layout: "portrait" },
  { id: "x-card", platform: "X card", width: 1200, height: 675, layout: "wide" },
  { id: "li-banner", platform: "LinkedIn banner", width: 1584, height: 396, layout: "wide" },
  { id: "yt-thumbnail", platform: "YouTube thumbnail", width: 1280, height: 720, layout: "wide" },
];
```

This pipeline designs the creatives in HTML/CSS/JS instead of using an image model because this way is cheaper, leads to fewer hallucinations, can be customized easily, and the text stays crisp and editable. So we will fan out one agent per idea, in parallel, handing each the design guide, the full set of sizes, and its idea. Each returns a single self-contained mockup that lays out every platform size, with a Download PNG button under each artboard that exports it to an image in the browser.

System prompt for the creative designer

```
// render.ts
import Anthropic from "@anthropic-ai/sdk";
import { VARIANTS } from "./variants";

const anthropic = new Anthropic(); // reads ANTHROPIC_API_KEY
const MODEL = "claude-opus-4-8";

type Gathered = {
  designGuide: {
    name: string;
    slogan?: string;
    description?: string;
    palette: string[];
    lightLogo?: string;
    headingFont: string;
    bodyFont: string;
  };
};

const SYSTEM_PROMPT = `You are a senior brand designer. Build ONE self-contained HTML document that mocks up a social campaign across every artboard size provided.
- Render one artboard per size at its exact width and height, labeled with the platform name.
- Use ONLY the styleguide palette, fonts, and Brand API logo from the design guide. Inline all CSS and load nothing external except the logo URL and the html-to-image library.
- Write short, on-brand copy for the idea: a headline, a supporting line, and a CTA. Lead with the styleguide accent color and heading font.
- Give each artboard a "Download PNG" button that exports it at its exact size with html-to-image (https://cdn.jsdelivr.net/npm/html-to-image) and triggers a download.
Return only the HTML document, with no commentary or code fences.`;

// One agent per idea: lays out every size as an HTML/CSS/JS mockup.
export async function designMockup(idea: string, { designGuide }: Gathered): Promise<string> {
  const message = await anthropic.messages.create({
    model: MODEL,
    max_tokens: 16000,
    system: SYSTEM_PROMPT,
    messages: [
      {
        role: "user",
        content: [
          `Brand: ${designGuide.name} (${designGuide.slogan}). ${designGuide.description}`,
          `Palette (primary first): ${designGuide.palette.join(", ")}`,
          `Heading font: ${designGuide.headingFont}. Body font: ${designGuide.bodyFont}. Logo: ${designGuide.lightLogo}`,
          `Campaign idea: ${idea}`,
          `Artboards (build one of each, at its exact size): ${JSON.stringify(VARIANTS)}`,
        ].join("\n"),
      },
    ],
  });

  return message.content.find((b) => b.type === "text")?.text ?? "";
}

// Fan out across every idea from Step 2 in parallel.
export async function renderCampaign(ideas: string[], gathered: Gathered) {
  return Promise.all(
    ideas.map(async (idea) => ({ idea, html: await designMockup(idea, gathered) })),
  );
}
```

## [​](#next-steps)Next steps

## [Web Scraping API](/guides/scrape-websites-to-markdown#crawl-a-whole-site)

[Crawl a whole site to clean Markdown, the corpus the positioning skill reads.](/guides/scrape-websites-to-markdown#crawl-a-whole-site)

## [Styleguide API](/guides/extract-design-system-from-website#extract-the-full-styleguide)

[Fonts, colors, and component CSS for the design guide.](/guides/extract-design-system-from-website#extract-the-full-styleguide)

## [product-marketing-context skill](https://www.skills.sh/coreyhaines31/marketingskills/product-marketing-context)

[Turns the crawl into positioning, audience, and brand voice.](https://www.skills.sh/coreyhaines31/marketingskills/product-marketing-context)

## [copywriting skill](https://www.skills.sh/coreyhaines31/marketingskills/copywriting)

[Writes on-brand copy from that positioning.](https://www.skills.sh/coreyhaines31/marketingskills/copywriting)

Was this page helpful?

[Build an Agentic RAG System with Web Scraping](/use-cases/build-rag-from-websites)

[Previous](/use-cases/build-rag-from-websites)

[Build Branded Email Templates](/use-cases/custom-email-templates)

[Next](/use-cases/custom-email-templates)

Ctrl+I

Assistant

Responses are generated using AI and may contain mistakes.

[Contact support](mailto:founders@context.dev)

----
url: https://docs.context.dev/api-reference/web-extraction/extract-products-from-a-brands-website
----

> ## Documentation Index
>
> Fetch the complete documentation index at: [/llms.txt](/llms.txt)
>
> Use this file to discover all available pages before exploring further.

[Skip to main content](#content-area)

JavaScript

```
import ContextDev from 'context.dev';

const client = new ContextDev({
  apiKey: process.env['CONTEXT_DEV_API_KEY'], // This is the default and can be omitted
});

const response = await client.ai.extractProducts({ domain: 'domain' });

console.log(response.key_metadata);
```

```
{
  "products": [
    {
      "name": "<string>",
      "description": "<string>",
      "features": [
        "<string>"
      ],
      "target_audience": [
        "<string>"
      ],
      "tags": [
        "<string>"
      ],
      "images": [
        "<string>"
      ],
      "sku": "<string>",
      "price": 123,
      "currency": "<string>",
      "url": "<string>",
      "category": "<string>",
      "image_url": "<string>"
    }
  ],
  "key_metadata": {
    "credits_consumed": 123,
    "credits_remaining": 123
  }
}
```

POST

/

brand

/

ai

/

products

JavaScript

```
import ContextDev from 'context.dev';

const client = new ContextDev({
  apiKey: process.env['CONTEXT_DEV_API_KEY'], // This is the default and can be omitted
});

const response = await client.ai.extractProducts({ domain: 'domain' });

console.log(response.key_metadata);
```

```
{
  "products": [
    {
      "name": "<string>",
      "description": "<string>",
      "features": [
        "<string>"
      ],
      "target_audience": [
        "<string>"
      ],
      "tags": [
        "<string>"
      ],
      "images": [
        "<string>"
      ],
      "sku": "<string>",
      "price": 123,
      "currency": "<string>",
      "url": "<string>",
      "category": "<string>",
      "image_url": "<string>"
    }
  ],
  "key_metadata": {
    "credits_consumed": 123,
    "credits_remaining": 123
  }
}
```

10 Credits Beta Feature

* By Domain
* By Direct URL

[​](#body-one-of-0-domain)

domain

string

required

The domain name to analyze.

[​](#body-one-of-0-max-products)

maxProducts

integer

Maximum number of products to extract.

Required range: `1 <= x <= 12`

[​](#body-one-of-0-max-age-ms)

maxAgeMs

integer

default:604800000

Return a cached result if a prior scrape for the same parameters exists and is younger than this many milliseconds. Defaults to 7 days (604800000 ms) when omitted. Max is 30 days (2592000000 ms). Set to 0 to always scrape fresh.

Required range: `0 <= x <= 2592000000`

[​](#body-one-of-0-timeout-ms)

timeoutMS

integer

Optional timeout in milliseconds for the request. If the request takes longer than this value, it will be aborted with a 408 status code. Maximum allowed value is 300000ms (5 minutes).

Required range: `1000 <= x <= 300000`

#### Response

Successful response

[​](#response-products)

products

object\[]

Array of products extracted from the website

[Extract a single product from a URL](/api-reference/web-extraction/extract-a-single-product-from-a-url)

[Previous](/api-reference/web-extraction/extract-a-single-product-from-a-url)

[Retrieve brand data by domain](/api-reference/brand-intelligence/retrieve-brand-data-by-domain)

[Next](/api-reference/brand-intelligence/retrieve-brand-data-by-domain)

Ctrl+I

Assistant

Responses are generated using AI and may contain mistakes.

[Contact support](mailto:founders@context.dev)

----
url: https://docs.context.dev/api-reference/web-scraping/scrape-html
----

> ## Documentation Index
>
> Fetch the complete documentation index at: [/llms.txt](/llms.txt)
>
> Use this file to discover all available pages before exploring further.

[Skip to main content](#content-area)

JavaScript

```
import ContextDev from 'context.dev';

const client = new ContextDev({
  apiKey: process.env['CONTEXT_DEV_API_KEY'], // This is the default and can be omitted
});

const response = await client.web.webScrapeHTML({ url: 'https://example.com' });

console.log(response.html);
```

```
{
  "success": true,
  "html": "<string>",
  "url": "<string>",
  "metadata": {
    "sourceUrl": "<string>",
    "finalUrl": "<string>",
    "title": "<string>",
    "description": "<string>",
    "language": "<string>",
    "keywords": [
      "<string>"
    ],
    "canonicalUrl": "<string>",
    "author": "<string>",
    "siteName": "<string>",
    "image": "<string>",
    "favicon": "<string>",
    "publishedTime": "<string>",
    "modifiedTime": "<string>",
    "robots": "<string>",
    "openGraph": {},
    "twitter": {},
    "alternates": [
      {
        "href": "<string>",
        "hreflang": "<string>",
        "type": "<string>",
        "title": "<string>"
      }
    ],
    "jsonLd": [
      {}
    ],
    "additionalMeta": {}
  },
  "key_metadata": {
    "credits_consumed": 123,
    "credits_remaining": 123
  }
}
```

GET

/

web

/

scrape

/

html

JavaScript

```
import ContextDev from 'context.dev';

const client = new ContextDev({
  apiKey: process.env['CONTEXT_DEV_API_KEY'], // This is the default and can be omitted
});

const response = await client.web.webScrapeHTML({ url: 'https://example.com' });

console.log(response.html);
```

```
{
  "success": true,
  "html": "<string>",
  "url": "<string>",
  "metadata": {
    "sourceUrl": "<string>",
    "finalUrl": "<string>",
    "title": "<string>",
    "description": "<string>",
    "language": "<string>",
    "keywords": [
      "<string>"
    ],
    "canonicalUrl": "<string>",
    "author": "<string>",
    "siteName": "<string>",
    "image": "<string>",
    "favicon": "<string>",
    "publishedTime": "<string>",
    "modifiedTime": "<string>",
    "robots": "<string>",
    "openGraph": {},
    "twitter": {},
    "alternates": [
      {
        "href": "<string>",
        "hreflang": "<string>",
        "type": "<string>",
        "title": "<string>"
      }
    ],
    "jsonLd": [
      {}
    ],
    "additionalMeta": {}
  },
  "key_metadata": {
    "credits_consumed": 123,
    "credits_remaining": 123
  }
}
```

Full URL to scrape (must include http\:// or https\:// protocol)

When true, iframes are rendered inline into the returned HTML.

[​](#parameter-use-main-content-only)

useMainContentOnly

boolean

default:false

When true, return only the page's main content in the HTML response, excluding headers, footers, sidebars, and navigation when detectable.

[​](#parameter-include-selectors)

includeSelectors

string\[]

CSS selectors. When provided, only matching subtrees (and their descendants) are kept and everything else is dropped. When omitted, the entire document is kept. Examples: "article.main", "#content", "\[role=main]".

Maximum array length: `50`

Maximum string length: `2048`

[​](#parameter-exclude-selectors)

excludeSelectors

string\[]

CSS selectors to remove from the result. Applied after includeSelectors. Exclusion takes precedence: an element matching both is removed. Examples: "nav", "footer", ".ad-banner", "\[aria-hidden=true]".

Optional browser wait time in milliseconds after initial page load. Min: 0. Max: 30000 (30 seconds).

[​](#response-html)

html

string

required

The scraped content of the page. For normal pages this is the raw HTML. When the page is a sitemap or feed served behind an XSL stylesheet (which browsers render into HTML), this is the underlying XML instead — see the `type` field.

[​](#response-url)

url

string

required

The URL that was scraped

[​](#response-type)

type

enum\<string>

required

Detected content type of the returned `html` field. Sitemaps and feeds are surfaced as `xml`; ordinary pages are `html`.

Available options:

`html`,

`xml`,

`json`,

`text`,

`csv`,

`markdown`,

`svg`,

`pdf`,

`docx`,

`doc`

[Scrape Markdown](/api-reference/web-scraping/scrape-markdown)

[Next](/api-reference/web-scraping/scrape-markdown)

⌘I

Assistant

Responses are generated using AI and may contain mistakes.

[Contact support](/cdn-cgi/l/email-protection#3751584259535245447754585943524f4319535241)

----
url: https://docs.context.dev/api-reference/brand-intelligence/retrieve-brand-data-by-company-name
----

> ## Documentation Index
>
> Fetch the complete documentation index at: [/llms.txt](/llms.txt)
>
> Use this file to discover all available pages before exploring further.

[Skip to main content](#content-area)

JavaScript

```
import ContextDev from 'context.dev';

const client = new ContextDev({
  apiKey: process.env['CONTEXT_DEV_API_KEY'], // This is the default and can be omitted
});

const response = await client.brand.retrieveByName({ name: 'xxx' });

console.log(response.brand);
```

```
{
  "status": "<string>",
  "brand": {
    "domain": "<string>",
    "title": "<string>",
    "description": "<string>",
    "slogan": "<string>",
    "colors": [
      {
        "hex": "<string>",
        "name": "<string>"
      }
    ],
    "logos": [
      {
        "url": "<string>",
        "colors": [
          {
            "hex": "<string>",
            "name": "<string>"
          }
        ],
        "resolution": {
          "width": 123,
          "height": 123,
          "aspect_ratio": 123
        }
      }
    ],
    "backdrops": [
      {
        "url": "<string>",
        "colors": [
          {
            "hex": "<string>",
            "name": "<string>"
          }
        ],
        "resolution": {
          "width": 123,
          "height": 123,
          "aspect_ratio": 123
        }
      }
    ],
    "socials": [
      {
        "url": "<string>"
      }
    ],
    "address": {
      "street": "<string>",
      "city": "<string>",
      "country": "<string>",
      "country_code": "<string>",
      "state_province": "<string>",
      "state_code": "<string>",
      "postal_code": "<string>"
    },
    "stock": {
      "ticker": "<string>",
      "exchange": "<string>"
    },
    "is_nsfw": true,
    "email": "<string>",
    "phone": "<string>",
    "industries": {
      "eic": [
        {}
      ]
    },
    "links": {
      "careers": "<string>",
      "privacy": "<string>",
      "terms": "<string>",
      "contact": "<string>",
      "blog": "<string>",
      "pricing": "<string>"
    }
  },
  "code": 123,
  "key_metadata": {
    "credits_consumed": 123,
    "credits_remaining": 123
  }
}
```

GET

/

brand

/

retrieve-by-name

JavaScript

```
import ContextDev from 'context.dev';

const client = new ContextDev({
  apiKey: process.env['CONTEXT_DEV_API_KEY'], // This is the default and can be omitted
});

const response = await client.brand.retrieveByName({ name: 'xxx' });

console.log(response.brand);
```

```
{
  "status": "<string>",
  "brand": {
    "domain": "<string>",
    "title": "<string>",
    "description": "<string>",
    "slogan": "<string>",
    "colors": [
      {
        "hex": "<string>",
        "name": "<string>"
      }
    ],
    "logos": [
      {
        "url": "<string>",
        "colors": [
          {
            "hex": "<string>",
            "name": "<string>"
          }
        ],
        "resolution": {
          "width": 123,
          "height": 123,
          "aspect_ratio": 123
        }
      }
    ],
    "backdrops": [
      {
        "url": "<string>",
        "colors": [
          {
            "hex": "<string>",
            "name": "<string>"
          }
        ],
        "resolution": {
          "width": 123,
          "height": 123,
          "aspect_ratio": 123
        }
      }
    ],
    "socials": [
      {
        "url": "<string>"
      }
    ],
    "address": {
      "street": "<string>",
      "city": "<string>",
      "country": "<string>",
      "country_code": "<string>",
      "state_province": "<string>",
      "state_code": "<string>",
      "postal_code": "<string>"
    },
    "stock": {
      "ticker": "<string>",
      "exchange": "<string>"
    },
    "is_nsfw": true,
    "email": "<string>",
    "phone": "<string>",
    "industries": {
      "eic": [
        {}
      ]
    },
    "links": {
      "careers": "<string>",
      "privacy": "<string>",
      "terms": "<string>",
      "contact": "<string>",
      "blog": "<string>",
      "pricing": "<string>"
    }
  },
  "code": 123,
  "key_metadata": {
    "credits_consumed": 123,
    "credits_remaining": 123
  }
}
```

[​](#parameter-name)

name

string

required

Company name to retrieve brand data for (e.g., 'Apple Inc', 'Microsoft Corporation'). Must be 3-30 characters.

Required string length: `3 - 30`

[​](#parameter-country-gl)

country\_gl

enum\<string>

Optional country code hint (GL parameter) to specify the country for the company name.

[Retrieve brand data by domain](/api-reference/brand-intelligence/retrieve-brand-data-by-domain)

[Previous](/api-reference/brand-intelligence/retrieve-brand-data-by-domain)

[Retrieve brand data by email address](/api-reference/brand-intelligence/retrieve-brand-data-by-email-address)

[Next](/api-reference/brand-intelligence/retrieve-brand-data-by-email-address)

Ctrl+I

Assistant

Responses are generated using AI and may contain mistakes.

[Contact support](mailto:founders@context.dev)

----
url: https://docs.context.dev/api-reference/web-scraping/scrape-markdown
----

> ## Documentation Index
>
> Fetch the complete documentation index at: [/llms.txt](/llms.txt)
>
> Use this file to discover all available pages before exploring further.

[Skip to main content](#content-area)

JavaScript

```
import ContextDev from 'context.dev';

const client = new ContextDev({
  apiKey: process.env['CONTEXT_DEV_API_KEY'], // This is the default and can be omitted
});

const response = await client.web.webScrapeMd({ url: 'https://example.com' });

console.log(response.markdown);
```

```
{
  "success": true,
  "markdown": "<string>",
  "url": "<string>",
  "metadata": {
    "sourceUrl": "<string>",
    "finalUrl": "<string>",
    "title": "<string>",
    "description": "<string>",
    "language": "<string>",
    "keywords": [
      "<string>"
    ],
    "canonicalUrl": "<string>",
    "author": "<string>",
    "siteName": "<string>",
    "image": "<string>",
    "favicon": "<string>",
    "publishedTime": "<string>",
    "modifiedTime": "<string>",
    "robots": "<string>",
    "openGraph": {},
    "twitter": {},
    "alternates": [
      {
        "href": "<string>",
        "hreflang": "<string>",
        "type": "<string>",
        "title": "<string>"
      }
    ],
    "jsonLd": [
      {}
    ],
    "additionalMeta": {}
  },
  "key_metadata": {
    "credits_consumed": 123,
    "credits_remaining": 123
  }
}
```

GET

/

web

/

scrape

/

markdown

JavaScript

```
import ContextDev from 'context.dev';

const client = new ContextDev({
  apiKey: process.env['CONTEXT_DEV_API_KEY'], // This is the default and can be omitted
});

const response = await client.web.webScrapeMd({ url: 'https://example.com' });

console.log(response.markdown);
```

```
{
  "success": true,
  "markdown": "<string>",
  "url": "<string>",
  "metadata": {
    "sourceUrl": "<string>",
    "finalUrl": "<string>",
    "title": "<string>",
    "description": "<string>",
    "language": "<string>",
    "keywords": [
      "<string>"
    ],
    "canonicalUrl": "<string>",
    "author": "<string>",
    "siteName": "<string>",
    "image": "<string>",
    "favicon": "<string>",
    "publishedTime": "<string>",
    "modifiedTime": "<string>",
    "robots": "<string>",
    "openGraph": {},
    "twitter": {},
    "alternates": [
      {
        "href": "<string>",
        "hreflang": "<string>",
        "type": "<string>",
        "title": "<string>"
      }
    ],
    "jsonLd": [
      {}
    ],
    "additionalMeta": {}
  },
  "key_metadata": {
    "credits_consumed": 123,
    "credits_remaining": 123
  }
}
```

Full URL to scrape into LLM usable Markdown (must include http\:// or https\:// protocol)

[​](#parameter-include-links)

includeLinks

boolean

default:true

Preserve hyperlinks in Markdown output

[​](#parameter-include-images)

includeImages

boolean

default:false

Include image references in Markdown output

[​](#parameter-shorten-base64-images)

shortenBase64Images

boolean

default:true

Shorten base64-encoded image data in the Markdown output

[​](#parameter-use-main-content-only)

useMainContentOnly

boolean

default:false

Extract only the main content of the page, excluding headers, footers, sidebars, and navigation

When true, the contents of iframes are rendered to Markdown.

[​](#parameter-include-selectors)

includeSelectors

string\[]

CSS selectors. When provided, only matching HTML subtrees (and their descendants) are kept before conversion to Markdown. When omitted, the entire document is kept. Examples: "article.main", "#content", "\[role=main]".

Maximum array length: `50`

Maximum string length: `2048`

[​](#parameter-exclude-selectors)

excludeSelectors

string\[]

CSS selectors to remove before conversion to Markdown. Applied after includeSelectors. Exclusion takes precedence: an element matching both is removed. Examples: "nav", "footer", ".ad-banner", "\[aria-hidden=true]".

Optional browser wait time in milliseconds after initial page load before converting the page to Markdown. Min: 0. Max: 30000 (30 seconds).

[​](#response-markdown)

markdown

string

required

Page content converted to GitHub Flavored Markdown

[​](#response-url)

url

string

required

The URL that was scraped

[Scrape HTML](/api-reference/web-scraping/scrape-html)

[Previous](/api-reference/web-scraping/scrape-html)

[Scrape Images](/api-reference/web-scraping/scrape-images)

[Next](/api-reference/web-scraping/scrape-images)

⌘I

Assistant

Responses are generated using AI and may contain mistakes.

[Contact support](mailto:founders@context.dev)

----
url: https://docs.context.dev/guides/classification/EIC
----

> ## Documentation Index
>
> Fetch the complete documentation index at: [/llms.txt](/llms.txt)
>
> Use this file to discover all available pages before exploring further.

[Skip to main content](#content-area)

EIC is Context.dev’s industry taxonomy, designed to reflect how modern companies actually describe themselves. It uses a simple two-level structure: a top-level **industry** and a more specific **subindustry**. EIC ships **inline** on every full Brand response under `industries.eic`. There is no dedicated endpoint and no extra cost beyond the Brand call itself: any call to `/brand/retrieve` (or any other resolver that returns the full Brand shape) already includes it.

## [​](#prerequisites)Prerequisites

* **A Context.dev API key.** Sign up at [context.dev/signup](https://context.dev/signup), copy the key from the [dashboard](https://context.dev/dashboard) (prefix `ctxt_secret_`), and export it:

  ```
  export CONTEXT_DEV_API_KEY="ctxt_secret_..."
  ```

* **An SDK (optional).** Install for your language, or skip the install and call directly with `curl`:

  ```
  npm install context.dev
  ```

## [​](#get-eic-data)Get EIC data

Hit any full Brand endpoint and read `brand.industries.eic`. The simplified endpoint (`/brand/retrieve-simplified`) does **not** include EIC.

```
curl -G https://api.context.dev/v1/brand/retrieve \
  -H "Authorization: Bearer $CONTEXT_DEV_API_KEY" \
  --data-urlencode "domain=stripe.com"
```

10 credits per successful call The 10 credits are the standard cost of the Brand API call itself; the EIC data is included with it at no additional charge.

## [​](#response-shape)Response shape

EIC data appears on the Brand response under `industries.eic` as an array of `{industry, subindustry}` objects. Both fields are required on every entry:

```
{
  "brand": {
    "industries": {
      "eic": [
        {
          "industry": "Technology",
          "subindustry": "Developer Tools & APIs"
        },
        {
          "industry": "Technology",
          "subindustry": "Artificial Intelligence & Machine Learning"
        }
      ]
    }
  }
}
```

Each object contains:

* **`industry`**: one of the 24 top-level industries listed below (exact string match).
* **`subindustry`**: one of the subindustries **allowed for that industry** (exact string match).

A brand can have multiple `(industry, subindustry)` pairs when more than one applies.

## [​](#rules-and-constraints)Rules and constraints

* Both `industry` and `subindustry` are returned as **exact strings**: match them verbatim if you’re using them as keys, enums, or routing rules.
* **Almost every subindustry is tied to a single top-level industry.** The one exception is **“Advertising, Adtech & Media Buying”**, which is valid under both **Entertainment** and **News & Media**.
* This means there are **221 valid `(industry, subindustry)` pairs**, but only **220 distinct subindustry strings**.

If you’re storing EIC values in your own database, use the **exact string** as the key. Both `industry` and `subindustry` are typed enums in the API spec, so any change to the label set is a schema change you can detect.

## [​](#top-level-industries)Top-level industries

There are 24 top-level industries. Expand any section below to see the subindustries allowed under each.

Aerospace & Defense

* Defense Systems & Military Hardware
* Aerospace Manufacturing
* Avionics & Navigation Technology
* Subsea & Naval Defense Systems
* Space & Satellite Technology
* Defense IT & Systems Integration

Technology

* Software (B2B)
* Software (B2C)
* Cloud Infrastructure & DevOps
* Cybersecurity
* Artificial Intelligence & Machine Learning
* Data Infrastructure & Analytics
* Hardware & Semiconductors
* Fintech Infrastructure
* eCommerce & Marketplace Platforms
* Developer Tools & APIs
* Web3 & Blockchain
* XR & Spatial Computing

Finance

* Banking & Lending
* Investment Management & WealthTech
* Insurance & InsurTech
* Payments & Money Movement
* Accounting, Tax & Financial Planning Tools
* Capital Markets & Trading Platforms
* Financial Infrastructure & APIs
* Credit Scoring & Risk Management
* Cryptocurrency & Digital Assets
* BNPL & Alternative Financing

Healthcare

* Healthcare Providers & Services
* Pharmaceuticals & Drug Development
* Medical Devices & Diagnostics
* Biotechnology & Genomics
* Digital Health & Telemedicine
* Health Insurance & Benefits Tech
* Clinical Trials & Research Platforms
* Mental Health & Wellness
* Healthcare IT & EHR Systems
* Consumer Health & Wellness Products

Retail & E-commerce

* Online Marketplaces
* Direct-to-Consumer (DTC) Brands
* Retail Tech & Point-of-Sale Systems
* Omnichannel & In-Store Retail
* E-commerce Enablement & Infrastructure
* Subscription & Membership Commerce
* Social Commerce & Influencer Platforms
* Fashion & Apparel Retail
* Food, Beverage & Grocery E-commerce

Entertainment

* Streaming Platforms (Video, Music, Audio)
* Gaming & Interactive Entertainment
* Creator Economy & Influencer Platforms
* Advertising, Adtech & Media Buying
* Film, TV & Production Studios
* Events, Venues & Live Entertainment
* Virtual Worlds & Metaverse Experiences

Education

* K-12 Education Platforms & Tools
* Higher Education & University Tech
* Online Learning & MOOCs
* Test Prep & Certification
* Corporate Training & Upskilling
* Tutoring & Supplemental Learning
* Education Management Systems (LMS/SIS)
* Language Learning
* Creator-Led & Cohort-Based Courses
* Special Education & Accessibility Tools

Government & Nonprofit

* Government Technology & Digital Services
* Civic Engagement & Policy Platforms
* International Development & Humanitarian Aid
* Philanthropy & Grantmaking
* Nonprofit Operations & Fundraising Tools
* Public Health & Social Services
* Education & Youth Development Programs
* Environmental & Climate Action Organizations
* Legal Aid & Social Justice Advocacy
* Municipal & Infrastructure Services

Industrial & Energy

* Manufacturing & Industrial Automation
* Energy Production (Oil, Gas, Nuclear)
* Renewable Energy & Cleantech
* Utilities & Grid Infrastructure
* Industrial IoT & Monitoring Systems
* Construction & Heavy Equipment
* Mining & Natural Resources
* Environmental Engineering & Sustainability
* Energy Storage & Battery Technology

Automotive & Transportation

* Automotive OEMs & Vehicle Manufacturing
* Electric Vehicles (EVs) & Charging Infrastructure
* Mobility-as-a-Service (MaaS)
* Fleet Management
* Public Transit & Urban Mobility
* Autonomous Vehicles & ADAS
* Aftermarket Parts & Services
* Telematics & Vehicle Connectivity
* Aviation & Aerospace Transport
* Maritime Shipping

Lifestyle & Leisure

* Fitness & Wellness
* Beauty & Personal Care
* Home & Living
* Dating & Relationships
* Hobbies, Crafts & DIY
* Outdoor & Recreational Gear
* Events, Experiences & Ticketing Platforms

Luxury & Fashion

* Designer & Luxury Apparel
* Accessories, Jewelry & Watches
* Footwear & Leather Goods
* Beauty, Fragrance & Skincare
* Fashion Marketplaces & Retail Platforms
* Sustainable & Ethical Fashion
* Resale, Vintage & Circular Fashion
* Fashion Tech & Virtual Try-Ons
* Streetwear & Emerging Luxury
* Couture & Made-to-Measure

News & Media

* News Publishing & Journalism
* Advertising, Adtech & Media Buying
* Digital Media & Content Platforms
* Broadcasting (TV & Radio)
* Podcasting & Audio Media
* News Aggregators & Curation Tools
* Independent & Creator-Led Media
* Newsletters & Substack-Style Platforms
* Political & Investigative Media
* Trade & Niche Publications
* Media Monitoring & Analytics

Sports

* Professional Teams & Leagues
* Sports Media & Broadcasting
* Sports Betting & Fantasy Sports
* Fitness & Athletic Training Platforms
* Sportswear & Equipment
* Esports & Competitive Gaming
* Sports Venues & Event Management
* Athlete Management & Talent Agencies
* Sports Tech & Performance Analytics
* Youth, Amateur & Collegiate Sports

Real Estate & PropTech

* Real Estate Marketplaces
* Property Management Software
* Rental Platforms
* Mortgage & Lending Tech
* Real Estate Investment Platforms

Legal & Compliance

* Law Firms & Legal Services
* Legal Tech & Automation
* Regulatory Compliance
* E-Discovery & Litigation Tools
* Contract Management
* Governance, Risk & Compliance (GRC)
* IP & Trademark Management
* Legal Research & Intelligence
* Compliance Training & Certification
* Whistleblower & Ethics Reporting

Telecommunications

* Mobile & Wireless Networks (3G/4G/5G)
* Broadband & Fiber Internet
* Satellite & Space-Based Communications
* Network Equipment & Infrastructure
* Telecom Billing & OSS/BSS Systems
* VoIP & Unified Communications
* Internet Service Providers (ISPs)
* Edge Computing & Network Virtualization
* IoT Connectivity Platforms

Agriculture & Food

* Precision Agriculture & AgTech
* Crop & Livestock Production
* Food & Beverage Manufacturing & Processing
* Food Distribution
* Restaurants & Food Service
* Agricultural Inputs & Equipment
* Sustainable & Regenerative Agriculture
* Seafood & Aquaculture

Professional Services & Agencies

* Management Consulting
* Marketing & Advertising Agencies
* Design, Branding & Creative Studios
* IT Services & Managed Services
* Staffing, Recruiting & Talent
* Accounting & Tax Firms
* Public Relations & Communications
* Business Process Outsourcing (BPO)
* Professional Training & Coaching

Chemicals & Materials

* Specialty Chemicals
* Commodity & Petrochemicals
* Polymers, Plastics & Rubber
* Coatings, Adhesives & Sealants
* Industrial Gases
* Advanced Materials & Composites
* Battery Materials & Energy Storage
* Electronic Materials & Semiconductor Chemicals
* Agrochemicals & Fertilizers

Logistics & Supply Chain

* Freight & Transportation Tech
* Last-Mile Delivery
* Warehouse Automation
* Supply Chain Visibility Platforms
* Logistics Marketplaces
* Shipping & Freight Forwarding
* Cold Chain Logistics
* Reverse Logistics & Returns
* Cross-Border Trade Tech
* Transportation Management Systems (TMS)

Hospitality & Tourism

* Hotels & Accommodation
* Vacation Rentals & Short-Term Stays
* Restaurant Tech & Management
* Travel Booking Platforms
* Tourism Experiences & Activities
* Cruise Lines & Marine Tourism
* Hospitality Management Systems
* Event & Venue Management
* Corporate Travel Management
* Travel Insurance & Protection

Construction & Built Environment

* Construction Management Software
* BIM/CAD & Design Tools
* Construction Marketplaces
* Equipment Rental & Management
* Building Materials & Procurement
* Construction Workforce Management
* Project Estimation & Bidding
* Modular & Prefab Construction
* Construction Safety & Compliance
* Smart Building Technology

Consumer Packaged Goods (CPG)

* Food & Beverage CPG
* Home & Personal Care CPG
* CPG Analytics & Insights
* Direct-to-Consumer CPG Brands
* CPG Supply Chain & Distribution
* Private Label Manufacturing
* CPG Retail Intelligence
* Sustainable CPG & Packaging
* Beauty & Cosmetics CPG
* Health & Wellness CPG

## [​](#enum-values)Enum values

Copy-pasteable enums for both fields. Choose your preferred format.

### [​](#industry-24-values)`Industry` (24 values)

```
export enum Industry {
  AEROSPACE_DEFENSE = "Aerospace & Defense",
  TECHNOLOGY = "Technology",
  FINANCE = "Finance",
  HEALTHCARE = "Healthcare",
  RETAIL_ECOMMERCE = "Retail & E-commerce",
  ENTERTAINMENT = "Entertainment",
  EDUCATION = "Education",
  GOVERNMENT_NONPROFIT = "Government & Nonprofit",
  INDUSTRIAL_ENERGY = "Industrial & Energy",
  AUTOMOTIVE_TRANSPORTATION = "Automotive & Transportation",
  LIFESTYLE_LEISURE = "Lifestyle & Leisure",
  LUXURY_FASHION = "Luxury & Fashion",
  NEWS_MEDIA = "News & Media",
  SPORTS = "Sports",
  REAL_ESTATE_PROPTECH = "Real Estate & PropTech",
  LEGAL_COMPLIANCE = "Legal & Compliance",
  TELECOMMUNICATIONS = "Telecommunications",
  AGRICULTURE_FOOD = "Agriculture & Food",
  PROFESSIONAL_SERVICES_AGENCIES = "Professional Services & Agencies",
  CHEMICALS_MATERIALS = "Chemicals & Materials",
  LOGISTICS_SUPPLY_CHAIN = "Logistics & Supply Chain",
  HOSPITALITY_TOURISM = "Hospitality & Tourism",
  CONSTRUCTION_BUILT_ENVIRONMENT = "Construction & Built Environment",
  CONSUMER_PACKAGED_GOODS = "Consumer Packaged Goods (CPG)",
}
```

### [​](#subindustry-220-distinct-values)`Subindustry` (220 distinct values)

```
export enum Subindustry {
  // Aerospace & Defense
  DEFENSE_SYSTEMS_MILITARY_HARDWARE = "Defense Systems & Military Hardware",
  AEROSPACE_MANUFACTURING = "Aerospace Manufacturing",
  AVIONICS_NAVIGATION_TECHNOLOGY = "Avionics & Navigation Technology",
  SUBSEA_NAVAL_DEFENSE_SYSTEMS = "Subsea & Naval Defense Systems",
  SPACE_SATELLITE_TECHNOLOGY = "Space & Satellite Technology",
  DEFENSE_IT_SYSTEMS_INTEGRATION = "Defense IT & Systems Integration",

  // Technology
  SOFTWARE_B2B = "Software (B2B)",
  SOFTWARE_B2C = "Software (B2C)",
  CLOUD_INFRASTRUCTURE_DEVOPS = "Cloud Infrastructure & DevOps",
  CYBERSECURITY = "Cybersecurity",
  ARTIFICIAL_INTELLIGENCE_MACHINE_LEARNING = "Artificial Intelligence & Machine Learning",
  DATA_INFRASTRUCTURE_ANALYTICS = "Data Infrastructure & Analytics",
  HARDWARE_SEMICONDUCTORS = "Hardware & Semiconductors",
  FINTECH_INFRASTRUCTURE = "Fintech Infrastructure",
  ECOMMERCE_MARKETPLACE_PLATFORMS = "eCommerce & Marketplace Platforms",
  DEVELOPER_TOOLS_APIS = "Developer Tools & APIs",
  WEB3_BLOCKCHAIN = "Web3 & Blockchain",
  XR_SPATIAL_COMPUTING = "XR & Spatial Computing",

  // Finance
  BANKING_LENDING = "Banking & Lending",
  INVESTMENT_MANAGEMENT_WEALTHTECH = "Investment Management & WealthTech",
  INSURANCE_INSURTECH = "Insurance & InsurTech",
  PAYMENTS_MONEY_MOVEMENT = "Payments & Money Movement",
  ACCOUNTING_TAX_FINANCIAL_PLANNING_TOOLS = "Accounting, Tax & Financial Planning Tools",
  CAPITAL_MARKETS_TRADING_PLATFORMS = "Capital Markets & Trading Platforms",
  FINANCIAL_INFRASTRUCTURE_APIS = "Financial Infrastructure & APIs",
  CREDIT_SCORING_RISK_MANAGEMENT = "Credit Scoring & Risk Management",
  CRYPTOCURRENCY_DIGITAL_ASSETS = "Cryptocurrency & Digital Assets",
  BNPL_ALTERNATIVE_FINANCING = "BNPL & Alternative Financing",

  // Healthcare
  HEALTHCARE_PROVIDERS_SERVICES = "Healthcare Providers & Services",
  PHARMACEUTICALS_DRUG_DEVELOPMENT = "Pharmaceuticals & Drug Development",
  MEDICAL_DEVICES_DIAGNOSTICS = "Medical Devices & Diagnostics",
  BIOTECHNOLOGY_GENOMICS = "Biotechnology & Genomics",
  DIGITAL_HEALTH_TELEMEDICINE = "Digital Health & Telemedicine",
  HEALTH_INSURANCE_BENEFITS_TECH = "Health Insurance & Benefits Tech",
  CLINICAL_TRIALS_RESEARCH_PLATFORMS = "Clinical Trials & Research Platforms",
  MENTAL_HEALTH_WELLNESS = "Mental Health & Wellness",
  HEALTHCARE_IT_EHR_SYSTEMS = "Healthcare IT & EHR Systems",
  CONSUMER_HEALTH_WELLNESS_PRODUCTS = "Consumer Health & Wellness Products",

  // Retail & E-commerce
  ONLINE_MARKETPLACES = "Online Marketplaces",
  DIRECT_TO_CONSUMER_DTC_BRANDS = "Direct-to-Consumer (DTC) Brands",
  RETAIL_TECH_POINT_OF_SALE_SYSTEMS = "Retail Tech & Point-of-Sale Systems",
  OMNICHANNEL_IN_STORE_RETAIL = "Omnichannel & In-Store Retail",
  ECOMMERCE_ENABLEMENT_INFRASTRUCTURE = "E-commerce Enablement & Infrastructure",
  SUBSCRIPTION_MEMBERSHIP_COMMERCE = "Subscription & Membership Commerce",
  SOCIAL_COMMERCE_INFLUENCER_PLATFORMS = "Social Commerce & Influencer Platforms",
  FASHION_APPAREL_RETAIL = "Fashion & Apparel Retail",
  FOOD_BEVERAGE_GROCERY_ECOMMERCE = "Food, Beverage & Grocery E-commerce",

  // Entertainment
  STREAMING_PLATFORMS_VIDEO_MUSIC_AUDIO = "Streaming Platforms (Video, Music, Audio)",
  GAMING_INTERACTIVE_ENTERTAINMENT = "Gaming & Interactive Entertainment",
  CREATOR_ECONOMY_INFLUENCER_PLATFORMS = "Creator Economy & Influencer Platforms",
  ADVERTISING_ADTECH_MEDIA_BUYING = "Advertising, Adtech & Media Buying",
  FILM_TV_PRODUCTION_STUDIOS = "Film, TV & Production Studios",
  EVENTS_VENUES_LIVE_ENTERTAINMENT = "Events, Venues & Live Entertainment",
  VIRTUAL_WORLDS_METAVERSE_EXPERIENCES = "Virtual Worlds & Metaverse Experiences",

  // Education
  K12_EDUCATION_PLATFORMS_TOOLS = "K-12 Education Platforms & Tools",
  HIGHER_EDUCATION_UNIVERSITY_TECH = "Higher Education & University Tech",
  ONLINE_LEARNING_MOOCS = "Online Learning & MOOCs",
  TEST_PREP_CERTIFICATION = "Test Prep & Certification",
  CORPORATE_TRAINING_UPSKILLING = "Corporate Training & Upskilling",
  TUTORING_SUPPLEMENTAL_LEARNING = "Tutoring & Supplemental Learning",
  EDUCATION_MANAGEMENT_SYSTEMS_LMS_SIS = "Education Management Systems (LMS/SIS)",
  LANGUAGE_LEARNING = "Language Learning",
  CREATOR_LED_COHORT_BASED_COURSES = "Creator-Led & Cohort-Based Courses",
  SPECIAL_EDUCATION_ACCESSIBILITY_TOOLS = "Special Education & Accessibility Tools",

  // Government & Nonprofit
  GOVERNMENT_TECHNOLOGY_DIGITAL_SERVICES = "Government Technology & Digital Services",
  CIVIC_ENGAGEMENT_POLICY_PLATFORMS = "Civic Engagement & Policy Platforms",
  INTERNATIONAL_DEVELOPMENT_HUMANITARIAN_AID = "International Development & Humanitarian Aid",
  PHILANTHROPY_GRANTMAKING = "Philanthropy & Grantmaking",
  NONPROFIT_OPERATIONS_FUNDRAISING_TOOLS = "Nonprofit Operations & Fundraising Tools",
  PUBLIC_HEALTH_SOCIAL_SERVICES = "Public Health & Social Services",
  EDUCATION_YOUTH_DEVELOPMENT_PROGRAMS = "Education & Youth Development Programs",
  ENVIRONMENTAL_CLIMATE_ACTION_ORGANIZATIONS = "Environmental & Climate Action Organizations",
  LEGAL_AID_SOCIAL_JUSTICE_ADVOCACY = "Legal Aid & Social Justice Advocacy",
  MUNICIPAL_INFRASTRUCTURE_SERVICES = "Municipal & Infrastructure Services",

  // Industrial & Energy
  MANUFACTURING_INDUSTRIAL_AUTOMATION = "Manufacturing & Industrial Automation",
  ENERGY_PRODUCTION_OIL_GAS_NUCLEAR = "Energy Production (Oil, Gas, Nuclear)",
  RENEWABLE_ENERGY_CLEANTECH = "Renewable Energy & Cleantech",
  UTILITIES_GRID_INFRASTRUCTURE = "Utilities & Grid Infrastructure",
  INDUSTRIAL_IOT_MONITORING_SYSTEMS = "Industrial IoT & Monitoring Systems",
  CONSTRUCTION_HEAVY_EQUIPMENT = "Construction & Heavy Equipment",
  MINING_NATURAL_RESOURCES = "Mining & Natural Resources",
  ENVIRONMENTAL_ENGINEERING_SUSTAINABILITY = "Environmental Engineering & Sustainability",
  ENERGY_STORAGE_BATTERY_TECHNOLOGY = "Energy Storage & Battery Technology",

  // Automotive & Transportation
  AUTOMOTIVE_OEMS_VEHICLE_MANUFACTURING = "Automotive OEMs & Vehicle Manufacturing",
  ELECTRIC_VEHICLES_EVS_CHARGING_INFRASTRUCTURE = "Electric Vehicles (EVs) & Charging Infrastructure",
  MOBILITY_AS_A_SERVICE_MAAS = "Mobility-as-a-Service (MaaS)",
  FLEET_MANAGEMENT = "Fleet Management",
  PUBLIC_TRANSIT_URBAN_MOBILITY = "Public Transit & Urban Mobility",
  AUTONOMOUS_VEHICLES_ADAS = "Autonomous Vehicles & ADAS",
  AFTERMARKET_PARTS_SERVICES = "Aftermarket Parts & Services",
  TELEMATICS_VEHICLE_CONNECTIVITY = "Telematics & Vehicle Connectivity",
  AVIATION_AEROSPACE_TRANSPORT = "Aviation & Aerospace Transport",
  MARITIME_SHIPPING = "Maritime Shipping",

  // Lifestyle & Leisure
  FITNESS_WELLNESS = "Fitness & Wellness",
  BEAUTY_PERSONAL_CARE = "Beauty & Personal Care",
  HOME_LIVING = "Home & Living",
  DATING_RELATIONSHIPS = "Dating & Relationships",
  HOBBIES_CRAFTS_DIY = "Hobbies, Crafts & DIY",
  OUTDOOR_RECREATIONAL_GEAR = "Outdoor & Recreational Gear",
  EVENTS_EXPERIENCES_TICKETING_PLATFORMS = "Events, Experiences & Ticketing Platforms",

  // Luxury & Fashion
  DESIGNER_LUXURY_APPAREL = "Designer & Luxury Apparel",
  ACCESSORIES_JEWELRY_WATCHES = "Accessories, Jewelry & Watches",
  FOOTWEAR_LEATHER_GOODS = "Footwear & Leather Goods",
  BEAUTY_FRAGRANCE_SKINCARE = "Beauty, Fragrance & Skincare",
  FASHION_MARKETPLACES_RETAIL_PLATFORMS = "Fashion Marketplaces & Retail Platforms",
  SUSTAINABLE_ETHICAL_FASHION = "Sustainable & Ethical Fashion",
  RESALE_VINTAGE_CIRCULAR_FASHION = "Resale, Vintage & Circular Fashion",
  FASHION_TECH_VIRTUAL_TRY_ONS = "Fashion Tech & Virtual Try-Ons",
  STREETWEAR_EMERGING_LUXURY = "Streetwear & Emerging Luxury",
  COUTURE_MADE_TO_MEASURE = "Couture & Made-to-Measure",

  // News & Media (note: ADVERTISING_ADTECH_MEDIA_BUYING above is also valid here)
  NEWS_PUBLISHING_JOURNALISM = "News Publishing & Journalism",
  DIGITAL_MEDIA_CONTENT_PLATFORMS = "Digital Media & Content Platforms",
  BROADCASTING_TV_RADIO = "Broadcasting (TV & Radio)",
  PODCASTING_AUDIO_MEDIA = "Podcasting & Audio Media",
  NEWS_AGGREGATORS_CURATION_TOOLS = "News Aggregators & Curation Tools",
  INDEPENDENT_CREATOR_LED_MEDIA = "Independent & Creator-Led Media",
  NEWSLETTERS_SUBSTACK_STYLE_PLATFORMS = "Newsletters & Substack-Style Platforms",
  POLITICAL_INVESTIGATIVE_MEDIA = "Political & Investigative Media",
  TRADE_NICHE_PUBLICATIONS = "Trade & Niche Publications",
  MEDIA_MONITORING_ANALYTICS = "Media Monitoring & Analytics",

  // Sports
  PROFESSIONAL_TEAMS_LEAGUES = "Professional Teams & Leagues",
  SPORTS_MEDIA_BROADCASTING = "Sports Media & Broadcasting",
  SPORTS_BETTING_FANTASY_SPORTS = "Sports Betting & Fantasy Sports",
  FITNESS_ATHLETIC_TRAINING_PLATFORMS = "Fitness & Athletic Training Platforms",
  SPORTSWEAR_EQUIPMENT = "Sportswear & Equipment",
  ESPORTS_COMPETITIVE_GAMING = "Esports & Competitive Gaming",
  SPORTS_VENUES_EVENT_MANAGEMENT = "Sports Venues & Event Management",
  ATHLETE_MANAGEMENT_TALENT_AGENCIES = "Athlete Management & Talent Agencies",
  SPORTS_TECH_PERFORMANCE_ANALYTICS = "Sports Tech & Performance Analytics",
  YOUTH_AMATEUR_COLLEGIATE_SPORTS = "Youth, Amateur & Collegiate Sports",

  // Real Estate & PropTech
  REAL_ESTATE_MARKETPLACES = "Real Estate Marketplaces",
  PROPERTY_MANAGEMENT_SOFTWARE = "Property Management Software",
  RENTAL_PLATFORMS = "Rental Platforms",
  MORTGAGE_LENDING_TECH = "Mortgage & Lending Tech",
  REAL_ESTATE_INVESTMENT_PLATFORMS = "Real Estate Investment Platforms",

  // Legal & Compliance
  LAW_FIRMS_LEGAL_SERVICES = "Law Firms & Legal Services",
  LEGAL_TECH_AUTOMATION = "Legal Tech & Automation",
  REGULATORY_COMPLIANCE = "Regulatory Compliance",
  E_DISCOVERY_LITIGATION_TOOLS = "E-Discovery & Litigation Tools",
  CONTRACT_MANAGEMENT = "Contract Management",
  GOVERNANCE_RISK_COMPLIANCE_GRC = "Governance, Risk & Compliance (GRC)",
  IP_TRADEMARK_MANAGEMENT = "IP & Trademark Management",
  LEGAL_RESEARCH_INTELLIGENCE = "Legal Research & Intelligence",
  COMPLIANCE_TRAINING_CERTIFICATION = "Compliance Training & Certification",
  WHISTLEBLOWER_ETHICS_REPORTING = "Whistleblower & Ethics Reporting",

  // Telecommunications
  MOBILE_WIRELESS_NETWORKS_3G_4G_5G = "Mobile & Wireless Networks (3G/4G/5G)",
  BROADBAND_FIBER_INTERNET = "Broadband & Fiber Internet",
  SATELLITE_SPACE_BASED_COMMUNICATIONS = "Satellite & Space-Based Communications",
  NETWORK_EQUIPMENT_INFRASTRUCTURE = "Network Equipment & Infrastructure",
  TELECOM_BILLING_OSS_BSS_SYSTEMS = "Telecom Billing & OSS/BSS Systems",
  VOIP_UNIFIED_COMMUNICATIONS = "VoIP & Unified Communications",
  INTERNET_SERVICE_PROVIDERS_ISPS = "Internet Service Providers (ISPs)",
  EDGE_COMPUTING_NETWORK_VIRTUALIZATION = "Edge Computing & Network Virtualization",
  IOT_CONNECTIVITY_PLATFORMS = "IoT Connectivity Platforms",

  // Agriculture & Food
  PRECISION_AGRICULTURE_AGTECH = "Precision Agriculture & AgTech",
  CROP_LIVESTOCK_PRODUCTION = "Crop & Livestock Production",
  FOOD_BEVERAGE_MANUFACTURING_PROCESSING = "Food & Beverage Manufacturing & Processing",
  FOOD_DISTRIBUTION = "Food Distribution",
  RESTAURANTS_FOOD_SERVICE = "Restaurants & Food Service",
  AGRICULTURAL_INPUTS_EQUIPMENT = "Agricultural Inputs & Equipment",
  SUSTAINABLE_REGENERATIVE_AGRICULTURE = "Sustainable & Regenerative Agriculture",
  SEAFOOD_AQUACULTURE = "Seafood & Aquaculture",

  // Professional Services & Agencies
  MANAGEMENT_CONSULTING = "Management Consulting",
  MARKETING_ADVERTISING_AGENCIES = "Marketing & Advertising Agencies",
  DESIGN_BRANDING_CREATIVE_STUDIOS = "Design, Branding & Creative Studios",
  IT_SERVICES_MANAGED_SERVICES = "IT Services & Managed Services",
  STAFFING_RECRUITING_TALENT = "Staffing, Recruiting & Talent",
  ACCOUNTING_TAX_FIRMS = "Accounting & Tax Firms",
  PUBLIC_RELATIONS_COMMUNICATIONS = "Public Relations & Communications",
  BUSINESS_PROCESS_OUTSOURCING_BPO = "Business Process Outsourcing (BPO)",
  PROFESSIONAL_TRAINING_COACHING = "Professional Training & Coaching",

  // Chemicals & Materials
  SPECIALTY_CHEMICALS = "Specialty Chemicals",
  COMMODITY_PETROCHEMICALS = "Commodity & Petrochemicals",
  POLYMERS_PLASTICS_RUBBER = "Polymers, Plastics & Rubber",
  COATINGS_ADHESIVES_SEALANTS = "Coatings, Adhesives & Sealants",
  INDUSTRIAL_GASES = "Industrial Gases",
  ADVANCED_MATERIALS_COMPOSITES = "Advanced Materials & Composites",
  BATTERY_MATERIALS_ENERGY_STORAGE = "Battery Materials & Energy Storage",
  ELECTRONIC_MATERIALS_SEMICONDUCTOR_CHEMICALS = "Electronic Materials & Semiconductor Chemicals",
  AGROCHEMICALS_FERTILIZERS = "Agrochemicals & Fertilizers",

  // Logistics & Supply Chain
  FREIGHT_TRANSPORTATION_TECH = "Freight & Transportation Tech",
  LAST_MILE_DELIVERY = "Last-Mile Delivery",
  WAREHOUSE_AUTOMATION = "Warehouse Automation",
  SUPPLY_CHAIN_VISIBILITY_PLATFORMS = "Supply Chain Visibility Platforms",
  LOGISTICS_MARKETPLACES = "Logistics Marketplaces",
  SHIPPING_FREIGHT_FORWARDING = "Shipping & Freight Forwarding",
  COLD_CHAIN_LOGISTICS = "Cold Chain Logistics",
  REVERSE_LOGISTICS_RETURNS = "Reverse Logistics & Returns",
  CROSS_BORDER_TRADE_TECH = "Cross-Border Trade Tech",
  TRANSPORTATION_MANAGEMENT_SYSTEMS = "Transportation Management Systems (TMS)",

  // Hospitality & Tourism
  HOTELS_ACCOMMODATION = "Hotels & Accommodation",
  VACATION_RENTALS_SHORT_TERM_STAYS = "Vacation Rentals & Short-Term Stays",
  RESTAURANT_TECH_MANAGEMENT = "Restaurant Tech & Management",
  TRAVEL_BOOKING_PLATFORMS = "Travel Booking Platforms",
  TOURISM_EXPERIENCES_ACTIVITIES = "Tourism Experiences & Activities",
  CRUISE_LINES_MARINE_TOURISM = "Cruise Lines & Marine Tourism",
  HOSPITALITY_MANAGEMENT_SYSTEMS = "Hospitality Management Systems",
  EVENT_VENUE_MANAGEMENT = "Event & Venue Management",
  CORPORATE_TRAVEL_MANAGEMENT = "Corporate Travel Management",
  TRAVEL_INSURANCE_PROTECTION = "Travel Insurance & Protection",

  // Construction & Built Environment
  CONSTRUCTION_MANAGEMENT_SOFTWARE = "Construction Management Software",
  BIM_CAD_DESIGN_TOOLS = "BIM/CAD & Design Tools",
  CONSTRUCTION_MARKETPLACES = "Construction Marketplaces",
  EQUIPMENT_RENTAL_MANAGEMENT = "Equipment Rental & Management",
  BUILDING_MATERIALS_PROCUREMENT = "Building Materials & Procurement",
  CONSTRUCTION_WORKFORCE_MANAGEMENT = "Construction Workforce Management",
  PROJECT_ESTIMATION_BIDDING = "Project Estimation & Bidding",
  MODULAR_PREFAB_CONSTRUCTION = "Modular & Prefab Construction",
  CONSTRUCTION_SAFETY_COMPLIANCE = "Construction Safety & Compliance",
  SMART_BUILDING_TECHNOLOGY = "Smart Building Technology",

  // Consumer Packaged Goods (CPG)
  FOOD_BEVERAGE_CPG = "Food & Beverage CPG",
  HOME_PERSONAL_CARE_CPG = "Home & Personal Care CPG",
  CPG_ANALYTICS_INSIGHTS = "CPG Analytics & Insights",
  DIRECT_TO_CONSUMER_CPG_BRANDS = "Direct-to-Consumer CPG Brands",
  CPG_SUPPLY_CHAIN_DISTRIBUTION = "CPG Supply Chain & Distribution",
  PRIVATE_LABEL_MANUFACTURING = "Private Label Manufacturing",
  CPG_RETAIL_INTELLIGENCE = "CPG Retail Intelligence",
  SUSTAINABLE_CPG_PACKAGING = "Sustainable CPG & Packaging",
  BEAUTY_COSMETICS_CPG = "Beauty & Cosmetics CPG",
  HEALTH_WELLNESS_CPG = "Health & Wellness CPG",
}
```

The JSON list contains exactly **220** distinct subindustry strings. The 221st valid pair comes from `"Advertising, Adtech & Media Buying"` being allowed under both **Entertainment** and **News & Media**.

## [​](#industry-→-subindustry-map-json)Industry → subindustry map (JSON)

The full `industry → subindustry[]` map. Use the copy button on the code block to grab the entire object in one click: drop it straight into your codebase as an enum source, validation map, or routing table.

View full industry → subindustry JSON (click to expand)

eic.json

```
{
  "Aerospace & Defense": [
    "Defense Systems & Military Hardware",
    "Aerospace Manufacturing",
    "Avionics & Navigation Technology",
    "Subsea & Naval Defense Systems",
    "Space & Satellite Technology",
    "Defense IT & Systems Integration"
  ],
  "Technology": [
    "Software (B2B)",
    "Software (B2C)",
    "Cloud Infrastructure & DevOps",
    "Cybersecurity",
    "Artificial Intelligence & Machine Learning",
    "Data Infrastructure & Analytics",
    "Hardware & Semiconductors",
    "Fintech Infrastructure",
    "eCommerce & Marketplace Platforms",
    "Developer Tools & APIs",
    "Web3 & Blockchain",
    "XR & Spatial Computing"
  ],
  "Finance": [
    "Banking & Lending",
    "Investment Management & WealthTech",
    "Insurance & InsurTech",
    "Payments & Money Movement",
    "Accounting, Tax & Financial Planning Tools",
    "Capital Markets & Trading Platforms",
    "Financial Infrastructure & APIs",
    "Credit Scoring & Risk Management",
    "Cryptocurrency & Digital Assets",
    "BNPL & Alternative Financing"
  ],
  "Healthcare": [
    "Healthcare Providers & Services",
    "Pharmaceuticals & Drug Development",
    "Medical Devices & Diagnostics",
    "Biotechnology & Genomics",
    "Digital Health & Telemedicine",
    "Health Insurance & Benefits Tech",
    "Clinical Trials & Research Platforms",
    "Mental Health & Wellness",
    "Healthcare IT & EHR Systems",
    "Consumer Health & Wellness Products"
  ],
  "Retail & E-commerce": [
    "Online Marketplaces",
    "Direct-to-Consumer (DTC) Brands",
    "Retail Tech & Point-of-Sale Systems",
    "Omnichannel & In-Store Retail",
    "E-commerce Enablement & Infrastructure",
    "Subscription & Membership Commerce",
    "Social Commerce & Influencer Platforms",
    "Fashion & Apparel Retail",
    "Food, Beverage & Grocery E-commerce"
  ],
  "Entertainment": [
    "Streaming Platforms (Video, Music, Audio)",
    "Gaming & Interactive Entertainment",
    "Creator Economy & Influencer Platforms",
    "Advertising, Adtech & Media Buying",
    "Film, TV & Production Studios",
    "Events, Venues & Live Entertainment",
    "Virtual Worlds & Metaverse Experiences"
  ],
  "Education": [
    "K-12 Education Platforms & Tools",
    "Higher Education & University Tech",
    "Online Learning & MOOCs",
    "Test Prep & Certification",
    "Corporate Training & Upskilling",
    "Tutoring & Supplemental Learning",
    "Education Management Systems (LMS/SIS)",
    "Language Learning",
    "Creator-Led & Cohort-Based Courses",
    "Special Education & Accessibility Tools"
  ],
  "Government & Nonprofit": [
    "Government Technology & Digital Services",
    "Civic Engagement & Policy Platforms",
    "International Development & Humanitarian Aid",
    "Philanthropy & Grantmaking",
    "Nonprofit Operations & Fundraising Tools",
    "Public Health & Social Services",
    "Education & Youth Development Programs",
    "Environmental & Climate Action Organizations",
    "Legal Aid & Social Justice Advocacy",
    "Municipal & Infrastructure Services"
  ],
  "Industrial & Energy": [
    "Manufacturing & Industrial Automation",
    "Energy Production (Oil, Gas, Nuclear)",
    "Renewable Energy & Cleantech",
    "Utilities & Grid Infrastructure",
    "Industrial IoT & Monitoring Systems",
    "Construction & Heavy Equipment",
    "Mining & Natural Resources",
    "Environmental Engineering & Sustainability",
    "Energy Storage & Battery Technology"
  ],
  "Automotive & Transportation": [
    "Automotive OEMs & Vehicle Manufacturing",
    "Electric Vehicles (EVs) & Charging Infrastructure",
    "Mobility-as-a-Service (MaaS)",
    "Fleet Management",
    "Public Transit & Urban Mobility",
    "Autonomous Vehicles & ADAS",
    "Aftermarket Parts & Services",
    "Telematics & Vehicle Connectivity",
    "Aviation & Aerospace Transport",
    "Maritime Shipping"
  ],
  "Lifestyle & Leisure": [
    "Fitness & Wellness",
    "Beauty & Personal Care",
    "Home & Living",
    "Dating & Relationships",
    "Hobbies, Crafts & DIY",
    "Outdoor & Recreational Gear",
    "Events, Experiences & Ticketing Platforms"
  ],
  "Luxury & Fashion": [
    "Designer & Luxury Apparel",
    "Accessories, Jewelry & Watches",
    "Footwear & Leather Goods",
    "Beauty, Fragrance & Skincare",
    "Fashion Marketplaces & Retail Platforms",
    "Sustainable & Ethical Fashion",
    "Resale, Vintage & Circular Fashion",
    "Fashion Tech & Virtual Try-Ons",
    "Streetwear & Emerging Luxury",
    "Couture & Made-to-Measure"
  ],
  "News & Media": [
    "News Publishing & Journalism",
    "Advertising, Adtech & Media Buying",
    "Digital Media & Content Platforms",
    "Broadcasting (TV & Radio)",
    "Podcasting & Audio Media",
    "News Aggregators & Curation Tools",
    "Independent & Creator-Led Media",
    "Newsletters & Substack-Style Platforms",
    "Political & Investigative Media",
    "Trade & Niche Publications",
    "Media Monitoring & Analytics"
  ],
  "Sports": [
    "Professional Teams & Leagues",
    "Sports Media & Broadcasting",
    "Sports Betting & Fantasy Sports",
    "Fitness & Athletic Training Platforms",
    "Sportswear & Equipment",
    "Esports & Competitive Gaming",
    "Sports Venues & Event Management",
    "Athlete Management & Talent Agencies",
    "Sports Tech & Performance Analytics",
    "Youth, Amateur & Collegiate Sports"
  ],
  "Real Estate & PropTech": [
    "Real Estate Marketplaces",
    "Property Management Software",
    "Rental Platforms",
    "Mortgage & Lending Tech",
    "Real Estate Investment Platforms"
  ],
  "Legal & Compliance": [
    "Law Firms & Legal Services",
    "Legal Tech & Automation",
    "Regulatory Compliance",
    "E-Discovery & Litigation Tools",
    "Contract Management",
    "Governance, Risk & Compliance (GRC)",
    "IP & Trademark Management",
    "Legal Research & Intelligence",
    "Compliance Training & Certification",
    "Whistleblower & Ethics Reporting"
  ],
  "Telecommunications": [
    "Mobile & Wireless Networks (3G/4G/5G)",
    "Broadband & Fiber Internet",
    "Satellite & Space-Based Communications",
    "Network Equipment & Infrastructure",
    "Telecom Billing & OSS/BSS Systems",
    "VoIP & Unified Communications",
    "Internet Service Providers (ISPs)",
    "Edge Computing & Network Virtualization",
    "IoT Connectivity Platforms"
  ],
  "Agriculture & Food": [
    "Precision Agriculture & AgTech",
    "Crop & Livestock Production",
    "Food & Beverage Manufacturing & Processing",
    "Food Distribution",
    "Restaurants & Food Service",
    "Agricultural Inputs & Equipment",
    "Sustainable & Regenerative Agriculture",
    "Seafood & Aquaculture"
  ],
  "Professional Services & Agencies": [
    "Management Consulting",
    "Marketing & Advertising Agencies",
    "Design, Branding & Creative Studios",
    "IT Services & Managed Services",
    "Staffing, Recruiting & Talent",
    "Accounting & Tax Firms",
    "Public Relations & Communications",
    "Business Process Outsourcing (BPO)",
    "Professional Training & Coaching"
  ],
  "Chemicals & Materials": [
    "Specialty Chemicals",
    "Commodity & Petrochemicals",
    "Polymers, Plastics & Rubber",
    "Coatings, Adhesives & Sealants",
    "Industrial Gases",
    "Advanced Materials & Composites",
    "Battery Materials & Energy Storage",
    "Electronic Materials & Semiconductor Chemicals",
    "Agrochemicals & Fertilizers"
  ],
  "Logistics & Supply Chain": [
    "Freight & Transportation Tech",
    "Last-Mile Delivery",
    "Warehouse Automation",
    "Supply Chain Visibility Platforms",
    "Logistics Marketplaces",
    "Shipping & Freight Forwarding",
    "Cold Chain Logistics",
    "Reverse Logistics & Returns",
    "Cross-Border Trade Tech",
    "Transportation Management Systems (TMS)"
  ],
  "Hospitality & Tourism": [
    "Hotels & Accommodation",
    "Vacation Rentals & Short-Term Stays",
    "Restaurant Tech & Management",
    "Travel Booking Platforms",
    "Tourism Experiences & Activities",
    "Cruise Lines & Marine Tourism",
    "Hospitality Management Systems",
    "Event & Venue Management",
    "Corporate Travel Management",
    "Travel Insurance & Protection"
  ],
  "Construction & Built Environment": [
    "Construction Management Software",
    "BIM/CAD & Design Tools",
    "Construction Marketplaces",
    "Equipment Rental & Management",
    "Building Materials & Procurement",
    "Construction Workforce Management",
    "Project Estimation & Bidding",
    "Modular & Prefab Construction",
    "Construction Safety & Compliance",
    "Smart Building Technology"
  ],
  "Consumer Packaged Goods (CPG)": [
    "Food & Beverage CPG",
    "Home & Personal Care CPG",
    "CPG Analytics & Insights",
    "Direct-to-Consumer CPG Brands",
    "CPG Supply Chain & Distribution",
    "Private Label Manufacturing",
    "CPG Retail Intelligence",
    "Sustainable CPG & Packaging",
    "Beauty & Cosmetics CPG",
    "Health & Wellness CPG"
  ]
}
```

Was this page helpful?

[Overview](/guides/classification/overview)

[Previous](/guides/classification/overview)

[NAICS](/guides/classification/NAICS)

[Next](/guides/classification/NAICS)

Ctrl+I

Assistant

Responses are generated using AI and may contain mistakes.

[Contact support](mailto:founders@context.dev)

----
url: https://docs.context.dev/agent-quickstart
----

> ## Documentation Index
>
> Fetch the complete documentation index at: [/llms.txt](/llms.txt)
>
> Use this file to discover all available pages before exploring further.

[Skip to main content](#content-area)

If you are an agent, sign up for your user with [auth.md](https://context.dev/auth.md) to get an API key.

Get an API key, then paste the prompt below into your coding agent. It briefs the agent on every Context.dev endpoint, installs the MCP server and the skill, scans your repo for places Context.dev would help, and proposes project ideas tailored to you.

## [​](#get-your-api-key)Get your API key

1

[](#)

Sign up

Create an account at [context.dev/signup](https://context.dev/signup). The free tier gives you 500 one-time credits. No credit card required.

The SDKs, MCP server, and `curl` examples read `CONTEXT_DEV_API_KEY` from the environment:

terminal

```
export CONTEXT_DEV_API_KEY="ctxt_secret_..."
```

The official SDKs read `CONTEXT_DEV_API_KEY` first and fall back to `CONTEXT_API_KEY` if it isn’t set, so exporting `CONTEXT_DEV_API_KEY` alone is enough. It’s also the doc standard and what the MCP server and `curl` examples use.

Never call the Context.dev API directly from a browser. The key would be visible to anyone with devtools. Always proxy through your backend.

## [​](#copy-the-prompt)Copy the prompt

Run your agent in the directory where your application code is located and paste this prompt:

Paste this into your agent's chat, system prompt, or CLAUDE.md.

Was this page helpful?

[Quickstart](/quickstart)

[Previous](/quickstart)

[Install the Context.dev skill](/install-skill)

[Next](/install-skill)

Ctrl+I

Assistant

Responses are generated using AI and may contain mistakes.

[Contact support](mailto:founders@context.dev)

----
url: https://docs.context.dev/llms.txt
----

```
# Context.dev

## Docs

- [Agent Quickstart](https://docs.context.dev/agent-quickstart.md): One prompt for your agent to set up and integrate Context.dev into your application
- [Identify brand from transaction data](https://docs.context.dev/api-reference/brand-intelligence/identify-brand-from-transaction-data.md): Endpoint specially designed for platforms that want to identify transaction data by the transaction title.
- [Retrieve brand data by company name](https://docs.context.dev/api-reference/brand-intelligence/retrieve-brand-data-by-company-name.md): Retrieve brand information using a company name.
- [Retrieve brand data by domain](https://docs.context.dev/api-reference/brand-intelligence/retrieve-brand-data-by-domain.md): Retrieve logos, backdrops, colors, industry, description, and more from any domain
- [Retrieve brand data by email address](https://docs.context.dev/api-reference/brand-intelligence/retrieve-brand-data-by-email-address.md): Retrieve brand information using an email address while detecting disposable and free email addresses. Disposable and free email addresses (like gmail.com, yahoo.com) will throw a 422 error.
- [Retrieve brand data by stock ticker](https://docs.context.dev/api-reference/brand-intelligence/retrieve-brand-data-by-stock-ticker.md): Retrieve brand information using a stock ticker symbol.
- [Retrieve simplified brand data by domain](https://docs.context.dev/api-reference/brand-intelligence/retrieve-simplified-brand-data-by-domain.md): Returns a simplified version of brand data containing only essential information: domain, title, colors, logos, and backdrops. Optimized for faster responses and reduced data transfer.
- [Prefetch brand data by email](https://docs.context.dev/api-reference/utility/prefetch-brand-data-by-email.md): Signal that you may fetch brand data for a particular domain soon to improve latency. This endpoint accepts an email address, extracts the domain from it, validates that it's not a disposable or free email provider, and queues the domain for prefetching.
- [Prefetch brand data for a domain](https://docs.context.dev/api-reference/utility/prefetch-brand-data-for-a-domain.md): Signal that you may fetch brand data for a particular domain soon to improve latency.
- [Classify NAICS industries](https://docs.context.dev/api-reference/web-extraction/classify-naics-industries.md): Classify any brand into 2022 NAICS industry codes from its domain or name.
- [Classify SIC industries](https://docs.context.dev/api-reference/web-extraction/classify-sic-industries.md): Classify any brand into Standard Industrial Classification (SIC) codes from its domain or name. Choose between the original SIC system (`original_sic`) or the latest SIC list maintained by the SEC (`latest_sec`).
- [Extract a single product from a URL](https://docs.context.dev/api-reference/web-extraction/extract-a-single-product-from-a-url.md): Given a single URL, determines if it is a product page and extracts the product information.
- [Extract products from a brand's website](https://docs.context.dev/api-reference/web-extraction/extract-products-from-a-brands-website.md): Extract product information from a brand's website. We will analyze the website and return a list of products with details such as name, description, image, pricing, features, and more.
- [Extract Structured Website Data](https://docs.context.dev/api-reference/web-extraction/extract-structured-website-data.md): Crawl a website, use the provided JSON Schema and instructions to prioritize relevant internal links, and extract structured data from the selected pages.
- [Scrape Fonts](https://docs.context.dev/api-reference/web-extraction/scrape-fonts.md): Scrape font information from a website including font families, usage statistics, fallbacks, and element/word counts.
- [Scrape Styleguide](https://docs.context.dev/api-reference/web-extraction/scrape-styleguide.md): Extract a comprehensive design system from a website including colors, typography, spacing, shadows, and UI components.
- [Crawl Sitemap](https://docs.context.dev/api-reference/web-scraping/crawl-sitemap.md): Crawl an entire website's sitemap and return all discovered page URLs.
- [Crawl Website & Scrape Markdown](https://docs.context.dev/api-reference/web-scraping/crawl-website-&-scrape-markdown.md): Performs a crawl starting from a given URL, extracts page content as Markdown, and returns results for all crawled pages.
- [Scrape HTML](https://docs.context.dev/api-reference/web-scraping/scrape-html.md): Scrapes the given URL and returns the raw HTML content of the page.
- [Scrape Images](https://docs.context.dev/api-reference/web-scraping/scrape-images.md): Extract image assets from a web page, including standard URLs, inline SVGs, data URIs, responsive image sources, metadata, CSS backgrounds, video posters, and embeds. The base request costs 1 credit. When enrichment is enabled, the entire call costs 5 credits.
- [Scrape Markdown](https://docs.context.dev/api-reference/web-scraping/scrape-markdown.md): Scrapes the given URL into LLM usable Markdown.
- [Scrape Screenshot](https://docs.context.dev/api-reference/web-scraping/scrape-screenshot.md): Capture a screenshot of a website.
- [Web Search](https://docs.context.dev/api-reference/web-scraping/web-search.md): Search the web and optionally scrape each result to Markdown in one round-trip.
- [EIC (Easy Industry Classification)](https://docs.context.dev/guides/classification/EIC.md): Context.dev's industry taxonomy: 24 top-level industries, 220 subindustries
- [NAICS](https://docs.context.dev/guides/classification/NAICS.md): Classify brands using the 2022 NAICS taxonomy via the /web/naics endpoint
- [SIC](https://docs.context.dev/guides/classification/SIC.md): Classify brands using the Standard Industrial Classification (SIC) taxonomy via the /web/sic endpoint
- [Overview](https://docs.context.dev/guides/classification/overview.md): Pick the right classification scheme for Context.dev's Classification APIs.
- [Transaction Enrichment](https://docs.context.dev/guides/enrich-transaction-codes.md): Turn raw card and bank statement descriptors into a full structured company profile with logos, colors, industry, and socials.
- [Extract a Website's Design System](https://docs.context.dev/guides/extract-design-system-from-website.md): Pull colors, typography, spacing, shadows, and component styles from a single API call
- [Extract Product Data from Webpages](https://docs.context.dev/guides/extract-product-from-websites.md): Detect product pages and extract a normalized product record: name, description, price, billing frequency, pricing model, features, category, target audience, tags, images, and SKU.
- [Extract Structured Data from Websites](https://docs.context.dev/guides/extract-structured-data-from-websites.md): Extract structured data from any website with a single JSON Schema.
- [Get Brand Data](https://docs.context.dev/guides/get-brand-data.md): Turn a domain, name, email, stock ticker, or ISIN into a full brand profile with logos, colors, socials, address, and industry.
- [Get Logos from a Domain](https://docs.context.dev/guides/get-logo-from-url.md): Use Logo Link to embed any company logo in your UI
- [Scrape Websites](https://docs.context.dev/guides/scrape-websites-to-markdown.md): Get clean Markdown, HTML, sitemaps, and images from websites
- [Capture Webpage Screenshots](https://docs.context.dev/guides/take-webpage-screenshot.md): Get a screenshot PNG of a webpage in a desktop viewport or as a full-page capture
- [Context.dev](https://docs.context.dev/index.md): Turn any domain into structured, AI-ready data with a single API: logos, colors, company metadata, web scraping, product extraction, and industry classification.
- [Install the CLI](https://docs.context.dev/install-cli.md): Install the context-dev CLI so you — or your agent — can call every Context.dev API from the terminal.
- [Install MCP](https://docs.context.dev/install-mcp.md): Connect Claude Code, Cursor, VS Code, or any MCP client to Context.dev's MCP server.
- [Install the Context.dev skill](https://docs.context.dev/install-skill.md): Install the Context.dev skill so your coding agent knows when and how to use the correct APIs.
- [Introduction](https://docs.context.dev/introduction.md): What Context.dev is, the APIs it offers, and how it performs.
- [Google Sheets](https://docs.context.dev/nocode/google-sheets.md): Drop company logos into Google Sheets cells with Logo Link and the built-in IMAGE() formula. No code, no scripts.
- [Make](https://docs.context.dev/nocode/make.md): Drop Context.dev brand lookups, screenshots, styleguide extractions, and product extractions into any Make scenario via the native integration or the HTTP module.
- [Microsoft Excel](https://docs.context.dev/nocode/microsoft-excel.md): Drop company logos into Excel cells with Logo Link and the IMAGE() function. Works in Excel for Microsoft 365 and Excel for the web.
- [Zapier](https://docs.context.dev/nocode/zapier.md): Connect Context.dev's brand data, NAICS classification, transaction enrichment, screenshots, and styleguide endpoints to 8,000+ Zapier apps. No code.
- [Integration Best Practices](https://docs.context.dev/optimization/best-practices.md): Integration patterns that keep Context.dev fast, reliable, and within your plan's limits.
- [Compression](https://docs.context.dev/optimization/compression.md): Use gzip response compression to reduce transfer size and improve latency on large Context.dev responses.
- [Fair Use](https://docs.context.dev/optimization/fair-use.md): Guidance on fair use of brand data and responsible practices.
- [Prefetch for Faster Response](https://docs.context.dev/optimization/prefetching.md): Warm the Context.dev cache before the user-facing call so your Brand API call returns in milliseconds.
- [Handle Rate Limits](https://docs.context.dev/optimization/rate-limits.md): Stay under your plan's per-minute request cap with client caching, exponential backoff, prefetching, and graceful fallbacks.
- [Troubleshooting](https://docs.context.dev/optimization/troubleshooting.md): Status codes, common failures, and recovery patterns for the Context.dev API.
- [Quickstart](https://docs.context.dev/quickstart.md): Get an API key, install an SDK, and make your first Context.dev call in under five minutes.
- [Generate Branded Campaign Assets at Scale](https://docs.context.dev/use-cases/branded-campaign-assets.md): Run an automated marketing pipeline that generates social media campaigns from just a domain name
- [Build an Agentic RAG System with Web Scraping](https://docs.context.dev/use-cases/build-rag-from-websites.md): Crawl a website into clean Markdown, then build a retrieval-augmented generation setup on its data.
- [Build Branded Email Templates](https://docs.context.dev/use-cases/custom-email-templates.md): Fetch logos, design systems, images, and live screenshots from a domain, then have an LLM generate an on-brand HTML email.
- [Prefill Onboarding from a Work Email](https://docs.context.dev/use-cases/faster-onboarding-flows.md): Cut signup friction. Take a work email at step one and have the company logo, description, and socials waiting at step two.
- [Auto-Enrich Leads in Your CRM](https://docs.context.dev/use-cases/lead-enrichment.md): The moment a lead is created in any CRM, turn its work email into a full company profile with logo, industry, phone, address, and socials, written back before a rep opens the record.

## OpenAPI Specs

- [openapi.documented](https://app.stainless.com/api/spec/documented/context.dev/openapi.documented.yml)
```

----
url: https://docs.context.dev/guides/extract-design-system-from-website
----

> ## Documentation Index
>
> Fetch the complete documentation index at: [/llms.txt](/llms.txt)
>
> Use this file to discover all available pages before exploring further.

[Skip to main content](#content-area)

Context.dev’s Styleguide API returns a website’s full styleguide:

* `mode`: `light` or `dark`
* `colors`: `accent`, `background`, `text` (hex)
* `typography`: detected headings (`h1`–`h4`) and `p` with `fontFamily`, `fontFallbacks`, `fontSize`, `fontWeight`, `lineHeight`, `letterSpacing`
* `elementSpacing`: `xs`, `sm`, `md`, `lg`, `xl`
* `shadows`: `sm`, `md`, `lg`, `xl`, `inner`
* `components`: detected button variants (`primary`, `secondary`, `link`) and `card` with full computed CSS
* `fontLinks`: Google or `@font-face` font files keyed by family, with downloadable URLs per weight

A separate fonts-only endpoint returns the typography subset for a fraction of the cost.

Integrate Context.dev's Design System API in your app

[Open in Cursor](https://cursor.com/link/prompt?text=I'm%20integrating%20Context.dev's%20Design%20System%20API%20into%20my%20app.%20Help%20me%3A%0A%0A1.%20Install%20the%20official%20SDK%20for%20my%20language%20\(%60context.dev%60%20on%20npm%20%2F%20PyPI%20%2F%20RubyGems%2C%20%60context-dev%2Fcontext-dev-php%60%20on%20Packagist%2C%20%60github.com%2Fcontext-dot-dev%2Fcontext-go-sdk%60%20for%20Go\).%0A2.%20Read%20the%20API%20key%20from%20the%20%60CONTEXT_DEV_API_KEY%60%20environment%20variable.%20Never%20hardcode%20it.%0A3.%20Call%20%60%2Fweb%2Fstyleguide%60%20with%20either%20%60domain%60%20or%20%60directUrl%60%20\(not%20both\)%20to%20extract%20%60mode%60%2C%20%60colors%60%2C%20%60typography%60%2C%20%60elementSpacing%60%2C%20%60shadows%60%2C%20%60components%60%2C%20and%20%60fontLinks%60.%20Use%20%60%2Fweb%2Ffonts%60%20instead%20when%20I%20only%20need%20the%20typography%20subset.%0A4.%20The%20methods%20live%20on%20%60client.web.extractStyleguide%60%20%2F%20%60client.web.extractFonts%60%20\(snake%5C_case%20%60extract_styleguide%60%20%2F%20%60extract_fonts%60%20in%20Python%20and%20Ruby\).%0A5.%20Map%20the%20response%20onto%20my%20theme%3A%20%60styleguide.colors%60%20to%20a%20palette%2C%20%60typography.headings.h1.fontFallbacks%60%20to%20a%20font%20stack%2C%20%60elementSpacing%60%20to%20a%20spacing%20ramp%2C%20%60shadows%60%20to%20elevation%20tokens%2C%20%60fontLinks%5B%3Cfamily%3E%5D.files%60%20to%20%60%40font-face%60%20URLs.%0A6.%20Wrap%20calls%20with%20retry%20logic%20for%20HTTP%20408%20\(timeout\)%20and%20429%20\(rate%20limit\)%20using%20exponential%20backoff.%0A%0ADocs%3A%20%5Bhttps%3A%2F%2Fdocs.context.dev%2Fguides%2Fextract-design-system-from-website%5D\(https%3A%2F%2Fdocs.context.dev%2Fguides%2Fextract-design-system-from-website\))

## [​](#prerequisites)Prerequisites

* **A Context.dev API key.** Sign up at [context.dev/signup](https://context.dev/signup), copy the key from the [dashboard](https://context.dev/dashboard) (prefix `ctxt_secret_`), and export it:

  ```
  export CONTEXT_DEV_API_KEY="ctxt_secret_..."
  ```

* **An SDK (optional).** Install for your language, or skip the install and call directly with `curl`:

  ```
  npm install context.dev
  ```

## [​](#extract-the-full-styleguide)Extract the full styleguide

`GET /web/styleguide` takes in a domain (or a webpage URL) and returns the website’s full design system.

```
curl -G https://api.context.dev/v1/web/styleguide \
  -H "Authorization: Bearer $CONTEXT_DEV_API_KEY" \
  --data-urlencode "domain=vercel.com"
```

10 credits per successful call

### [​](#request-parameters)Request Parameters

Either `domain` or `directUrl` must be provided, but not both.

| Parameter   | Type                  | Description                                                                                                                     |
| ----------- | --------------------- | ------------------------------------------------------------------------------------------------------------------------------- |
| `domain`    | string                | Domain to extract the styleguide from (e.g. `vercel.com`).                                                                      |
| `directUrl` | string                | A specific URL to fetch the styleguide from directly, bypassing domain resolution (e.g. `https://stripe.com/pricing`).          |
| `maxAgeMs`  | integer               | Max cache age before a hard refresh. Defaults to `7776000000` (90 days). Clamped to `[86400000, 31536000000]` (1 day – 1 year). |
| `timeoutMS` | integer (1000–300000) | Abort with a 408 if the request exceeds this many milliseconds. Max `300000` (5 min).                                           |

### [​](#response)Response

```
{
  "status": "ok",
  "domain": "vercel.com",
  "code": 200,
  "styleguide": {
    "mode": "light",
    "colors": {
      "accent": "#000000",
      "background": "#fafafa",
      "text": "#171717"
    },
    "typography": {
      "headings": {
        "h1": {
          "fontFamily": "Geist",
          "fontFallbacks": ["Geist", "Arial", "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"],
          "fontSize": "35px",
          "fontWeight": 600,
          "lineHeight": "46.0687px",
          "letterSpacing": "-1.945px"
        }
      },
      "p": {
        "fontFamily": "Geist",
        "fontFallbacks": ["Geist", "Arial", "system-ui", "-apple-system", "Segoe UI", "Roboto", "Helvetica Neue", "sans-serif"],
        "fontSize": "16px",
        "fontWeight": 400,
        "lineHeight": "24px",
        "letterSpacing": "0px"
      }
    },
    "elementSpacing": {
      "xs": "2px",
      "sm": "6px",
      "md": "16px",
      "lg": "22px",
      "xl": "40px"
    },
    "shadows": {
      "sm": "rgba(0, 0, 0, 0.08) 0px 0px 0px 1px, rgba(0, 0, 0, 0.04) 0px 2px 2px 0px, rgba(0, 0, 0, 0.04) 0px 8px 8px -8px",
      "md": "none",
      "lg": "none",
      "xl": "none",
      "inner": "none"
    },
    "fontLinks": {
      "Geist": {
        "type": "google",
        "category": "sans-serif",
        "files": {
          "400": "https://fonts.gstatic.com/s/geist/v4/gyBhhwUxId8gMGYQMKR3pzfaWI_RnOM4nZPby1QNtA.ttf",
          "500": "https://fonts.gstatic.com/s/geist/v4/gyBhhwUxId8gMGYQMKR3pzfaWI_RruM4nZPby1QNtA.ttf",
          "600": "https://fonts.gstatic.com/s/geist/v4/gyBhhwUxId8gMGYQMKR3pzfaWI_RQuQ4nZPby1QNtA.ttf",
          "700": "https://fonts.gstatic.com/s/geist/v4/gyBhhwUxId8gMGYQMKR3pzfaWI_Re-Q4nZPby1QNtA.ttf"
        }
      }
    },
    "components": {
      "button": {
        "primary": {
          "backgroundColor": "#171717",
          "color": "#ffffff",
          "borderColor": "#ffffff",
          "borderRadius": "100px",
          "borderWidth": "0px",
          "borderStyle": "none",
          "padding": "13px 14px",
          "minWidth": "181px",
          "minHeight": "40px",
          "fontFamily": "Geist",
          "fontSize": "14px",
          "fontWeight": 500,
          "textDecoration": "none",
          "boxShadow": "none",
          "css": "background-color: #171717; color: #ffffff; border-radius: 100px; padding: 13px 14px; font-family: Geist; font-size: 14px; font-weight: 500;"
        }
      },
      "card": {
        "backgroundColor": "#fafafa",
        "textColor": "#171717",
        "borderColor": "#e5e7eb",
        "borderRadius": "8px",
        "borderWidth": "1px",
        "borderStyle": "solid",
        "padding": "16px",
        "boxShadow": "none",
        "css": "background-color: #fafafa; color: #171717; border: 1px solid #e5e7eb; border-radius: 8px; padding: 16px;"
      }
    }
  }
}
```

| Field                            | Type    | Description                                                                                                                                                                                                                                                                                                                                                            |
| -------------------------------- | ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `status`                         | string  | `"ok"` on success.                                                                                                                                                                                                                                                                                                                                                     |
| `domain`                         | string  | Normalized domain that was processed.                                                                                                                                                                                                                                                                                                                                  |
| `code`                           | integer | HTTP status code.                                                                                                                                                                                                                                                                                                                                                      |
| `styleguide.mode`                | string  | `"light"` or `"dark"`: the page’s primary color mode.                                                                                                                                                                                                                                                                                                                  |
| `styleguide.colors`              | object  | `accent`, `background`, `text`: all hex strings.                                                                                                                                                                                                                                                                                                                       |
| `styleguide.typography.headings` | object  | `h1`, `h2`, `h3`, `h4`: each has `fontFamily`, `fontFallbacks[]`, `fontSize`, `fontWeight`, `lineHeight`, `letterSpacing`.                                                                                                                                                                                                                                             |
| `styleguide.typography.p`        | object  | Body text: same shape as a heading entry.                                                                                                                                                                                                                                                                                                                              |
| `styleguide.elementSpacing`      | object  | `xs`, `sm`, `md`, `lg`, `xl`: CSS length strings (typically `px`).                                                                                                                                                                                                                                                                                                     |
| `styleguide.shadows`             | object  | `sm`, `md`, `lg`, `xl`, `inner`: full `box-shadow` declarations. `"none"` when no shadow at that tier.                                                                                                                                                                                                                                                                 |
| `styleguide.fontLinks`           | object  | Keyed by font family name. Each entry has `type` (`google` or `custom`), `files` (weight → URL), optional `category` (Google only), optional `displayName` (custom only). Omitted when no family resolves to Google or `@font-face` URLs.                                                                                                                              |
| `styleguide.components.button`   | object  | Three variants: `primary`, `secondary`, `link`. Each variant has:- `backgroundColor`
- `color`
- `borderColor`
- `borderRadius`
- `borderWidth`
- `borderStyle`
- `padding`
- `minWidth`
- `minHeight`
- `fontFamily`
- `fontFallbacks`
- `fontSize`
- `fontWeight`
- `textDecoration`
- `textDecorationColor`
- `boxShadow`
- `css`: ready-to-paste declaration block |
| `styleguide.components.card`     | object  | * `backgroundColor`
* `textColor`
* `borderColor`
* `borderRadius`
* `borderWidth`
* `borderStyle`
* `padding`
* `boxShadow`
* `css`: ready-to-paste declaration block                                                                                                                                                                                                 |

## [​](#extract-just-the-fonts)Extract just the fonts

`GET /web/fonts` takes a domain (or a direct URL) and returns only the typography subset: every font family the site uses, with weights, fallbacks, usage counts, and downloadable file URLs.

```
curl -G https://api.context.dev/v1/web/fonts \
  -H "Authorization: Bearer $CONTEXT_DEV_API_KEY" \
  --data-urlencode "domain=vercel.com"
```

5 credits per successful call

### [​](#request-parameters-2)Request Parameters

Either `domain` or `directUrl` must be provided, but not both.

| Parameter   | Type                  | Description                                                                                                                     |
| ----------- | --------------------- | ------------------------------------------------------------------------------------------------------------------------------- |
| `domain`    | string                | Domain to extract fonts from (e.g. `vercel.com`). Normalized automatically.                                                     |
| `directUrl` | string (URI)          | A specific URL to fetch fonts from directly, bypassing domain resolution.                                                       |
| `maxAgeMs`  | integer               | Max cache age before a hard refresh. Defaults to `7776000000` (90 days). Clamped to `[86400000, 31536000000]` (1 day – 1 year). |
| `timeoutMS` | integer (1000–300000) | Abort with a 408 if the request exceeds this many milliseconds. Max `300000` (5 min).                                           |

### [​](#response-2)Response

```
{
  "status": "ok",
  "domain": "vercel.com",
  "code": 200,
  "fonts": [
    {
      "font": "Geist",
      "uses": ["body", "div", "header", "nav", "h1", "h2", "h3", "p", "button"],
      "fallbacks": ["Arial", "system-ui", "-apple-system", "Segoe UI", "Roboto", "sans-serif"],
      "num_elements": 534,
      "num_words": 9320,
      "percent_elements": 91,
      "percent_words": 99
    },
    {
      "font": "Geist Mono",
      "uses": ["code", "pre", "kbd"],
      "fallbacks": ["ui-monospace", "SFMono-Regular", "Menlo", "monospace"],
      "num_elements": 55,
      "num_words": 94,
      "percent_elements": 9,
      "percent_words": 1
    }
  ],
  "fontLinks": {
    "Geist": {
      "type": "google",
      "category": "sans-serif",
      "files": {
        "400": "https://fonts.gstatic.com/s/geist/v4/gyBhhwUxId8gMGYQMKR3pzfaWI_RnOM4nZPby1QNtA.ttf",
        "500": "https://fonts.gstatic.com/s/geist/v4/gyBhhwUxId8gMGYQMKR3pzfaWI_RruM4nZPby1QNtA.ttf",
        "600": "https://fonts.gstatic.com/s/geist/v4/gyBhhwUxId8gMGYQMKR3pzfaWI_RQuQ4nZPby1QNtA.ttf",
        "700": "https://fonts.gstatic.com/s/geist/v4/gyBhhwUxId8gMGYQMKR3pzfaWI_Re-Q4nZPby1QNtA.ttf"
      }
    }
  }
}
```

| Field                      | Type    | Description                                                                                                                                                                                  |
| -------------------------- | ------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `status`                   | string  | `"ok"` on success.                                                                                                                                                                           |
| `domain`                   | string  | Normalized domain that was processed.                                                                                                                                                        |
| `code`                     | integer | HTTP status code.                                                                                                                                                                            |
| `fonts[]`                  | array   | One entry per font family on the page, ordered by usage.                                                                                                                                     |
| `fonts[].font`             | string  | Primary face (first family in the computed stack).                                                                                                                                           |
| `fonts[].uses[]`           | array   | CSS selectors or element types where this font is used.                                                                                                                                      |
| `fonts[].fallbacks[]`      | array   | Fallback families from the computed stack.                                                                                                                                                   |
| `fonts[].num_elements`     | number  | Element count using this font.                                                                                                                                                               |
| `fonts[].num_words`        | number  | Word count rendered in this font.                                                                                                                                                            |
| `fonts[].percent_elements` | number  | Share of all elements using this font.                                                                                                                                                       |
| `fonts[].percent_words`    | number  | Share of all words rendered in this font.                                                                                                                                                    |
| `fontLinks`                | object  | Optional. Same shape as `styleguide.fontLinks`: keyed by family with `type`, `files`, optional `category` and `displayName`. Omitted when no family resolves to Google or `@font-face` URLs. |

## [​](#handle-errors)Handle errors

A non-2xx response returns an `{ message, error_code, status }` envelope. The common ones:

| Status | `error_code`             | Meaning                                                      | What to do                                                |
| ------ | ------------------------ | ------------------------------------------------------------ | --------------------------------------------------------- |
| 400    | `INPUT_VALIDATION_ERROR` | Missing both `domain` and `directUrl`, or both were supplied | Pass exactly one.                                         |
| 401    | `UNAUTHORIZED`           | API key missing, invalid, or deleted                         | Re-check the env var and the dashboard.                   |
| 408    | `REQUEST_TIMEOUT`        | Page didn’t render before `timeoutMS` (or 5 min default)     | Retry once with backoff; the second hit usually succeeds. |
| 500    | `INTERNAL_ERROR`         | Transient server error                                       | Retry once with backoff; if it persists, contact support. |

A 400 from omitting both `domain` and `directUrl` looks like:

```
{
  "status": "error",
  "error_code": "INPUT_VALIDATION_ERROR",
  "message": [
    { "code": "custom", "message": "Either directUrl or domain must be provided, but not both", "path": [] }
  ]
}
```

For the full catalog of error codes, see [Troubleshooting](/optimization/troubleshooting).

## [​](#use-cases)Use cases

* [Build faster, brand-aware onboarding flows](/use-cases/faster-onboarding-flows)
* [Build branded email templates from a website](/use-cases/custom-email-templates)
* [Generate branded marketing assets at scale](/use-cases/branded-campaign-assets)

[Get Brand Data](/guides/get-brand-data)

[Previous](/guides/get-brand-data)

[Get Logos from a Domain](/guides/get-logo-from-url)

[Next](/guides/get-logo-from-url)

Ctrl+I

Assistant

Responses are generated using AI and may contain mistakes.

[Contact support](mailto:founders@context.dev)

----
url: https://docs.context.dev/guides/extract-structured-data-from-websites
----

> ## Documentation Index
>
> Fetch the complete documentation index at: [/llms.txt](/llms.txt)
>
> Use this file to discover all available pages before exploring further.

[Skip to main content](#content-area)

Context.dev’s Extract API takes a starting URL and a JSON Schema describing the data you want, crawls the most relevant pages on the site (following internal links and parsing PDFs along the way), and returns a typed response matching your schema. It’s an alternative to an entire pipeline that scrapes multiple pages into markdown and runs an LLM over it.

Integrate Context.dev's Extract API in your app

[Open in Cursor](https://cursor.com/link/prompt?text=I'm%20integrating%20Context.dev's%20Extract%20API%20\(%60POST%20%2Fweb%2Fextract%60\)%20into%20my%20app%20to%20extract%20structured%20data%20from%20websites.%20Help%20me%3A%0A%0A1.%20Install%20the%20official%20SDK%20for%20my%20language%20\(%60context.dev%60%20on%20npm%20%2F%20PyPI%20%2F%20RubyGems%2C%20%60context-dev%2Fcontext-dev-php%60%20on%20Packagist%2C%20%60github.com%2Fcontext-dot-dev%2Fcontext-go-sdk%60%20for%20Go\).%0A2.%20Read%20the%20API%20key%20from%20the%20%60CONTEXT_DEV_API_KEY%60%20environment%20variable.%20Never%20hardcode%20it.%0A3.%20Call%20%60client.web.extract\(%7B%20url%2C%20schema%20%7D\)%60%20with%20a%20starting%20URL%20and%20a%20JSON%20Schema%20describing%20the%20data%20I%20want%20back.%20If%20my%20project%20already%20has%20a%20schema%20library%2C%20generate%20the%20JSON%20Schema%20from%20it%20\(Zod's%20%60z.toJSONSchema\(\)%60%20in%20TypeScript%2C%20Pydantic's%20%60model_json_schema\(\)%60%20in%20Python\)%20and%20add%20%60description%60s%20to%20fields%20to%20tell%20the%20model%20what%20to%20look%20for.%0A4.%20Optionally%20pass%20%60instructions%60%20to%20steer%20the%20crawl%2C%20%60maxPages%60%20\(1%E2%80%9350%2C%20default%205\)%20and%20%60maxDepth%60%20to%20bound%20it%2C%20%60factCheck%3A%20true%60%20to%20forbid%20inferred%20values%2C%20and%20%60timeoutMS%60%20\(1000%E2%80%93300000\)%20to%20bound%20the%20request.%0A5.%20Read%20the%20result%20from%20%60response.data%60%20\(it%20matches%20my%20schema\)%20and%20the%20crawled%20pages%20from%20%60response.urls_analyzed%60.%20Validate%20%60data%60%20on%20the%20way%20out%20with%20the%20same%20schema%20I%20sent.%0A%0ADocs%3A%20%5Bhttps%3A%2F%2Fdocs.context.dev%2Fguides%2Fextract-structured-data-from-websites%5D\(https%3A%2F%2Fdocs.context.dev%2Fguides%2Fextract-structured-data-from-websites\))

## [​](#prerequisites)Prerequisites

* **A Context.dev API key.** Sign up at [context.dev/signup](https://context.dev/signup), copy the key from the [dashboard](https://context.dev/dashboard) (prefix `ctxt_secret_`), and export it:

  ```
  export CONTEXT_DEV_API_KEY="ctxt_secret_..."
  ```

* **An SDK (optional).** Install for your language, or skip the install and call directly with `curl`:

  ```
  npm install context.dev
  ```

## [​](#extract-data)Extract data

You describe the result you want as one JSON Schema. Property names become the keys of the response’s `data` object, and each property’s `description` tells the model what to look for:

```
curl -X POST https://api.context.dev/v1/web/extract \
  -H "Authorization: Bearer $CONTEXT_DEV_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://stripe.com",
    "schema": {
      "type": "object",
      "properties": {
        "founded_year": {
          "type": "number",
          "description": "The year the company was founded."
        }
      },
      "required": ["founded_year"],
      "additionalProperties": false
    }
  }'
```

10 credits per successful call

### [​](#request-parameters)Request parameters

| Parameter          | Type    | Description                                                                                                                                          |
| ------------------ | ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- |
| `url`              | string  | **Required.** Starting URL to crawl. Must include `http://` or `https://`.                                                                           |
| `schema`           | object  | **Required.** A JSON Schema describing the structure of the data you want back. Add `description`s to properties to tell the model what to look for. |
| `instructions`     | string  | Plain-language guidance for the crawl and extraction (max 2000 chars), e.g. `"Focus on the pricing page."`                                           |
| `factCheck`        | boolean | When `true`, only values stated on the crawled pages are returned. When `false` (default), the model may make reasonable inferences.                 |
| `followSubdomains` | boolean | Follow links to subdomains of the starting domain. Default `false`.                                                                                  |
| `maxPages`         | integer | Number of pages to analyze, `1`–`50`. Default `5`.                                                                                                   |
| `maxDepth`         | integer | Maximum link depth from the starting URL. Unlimited by default.                                                                                      |
| `pdf`              | object  | PDF handling: `shouldParse` (default `true`), plus `start` / `end` to limit parsing to a 1-based page range.                                         |
| `includeFrames`    | boolean | Include iframe contents in extraction. Default `false`.                                                                                              |
| `maxAgeMs`         | integer | Serve cached page content up to this old, `0`–`2592000000` ms. Default `604800000` (7 days).                                                         |
| `waitForMs`        | integer | Extra browser wait after page load, in milliseconds.                                                                                                 |
| `stopAfterMs`      | integer | Soft time budget for the crawl, `10000`–`110000` ms. Default `80000`.                                                                                |
| `timeoutMS`        | integer | Abort the request with a 408 if it exceeds this many milliseconds. Range `1000`–`300000` (5 min max).                                                |

## [​](#use-your-schema-library)Use your schema library

Because `schema` is standard JSON Schema, you don’t have to write it by hand: generate it from the schema library you already use, and validate `response.data` on the way out with the same model. Nested structures like arrays of objects come for free:

```
import ContextDev from "context.dev";
import { z } from "zod";

const PricingPage = z.object({
  pricing_tiers: z
    .array(
      z.object({
        name: z.string(),
        monthly_price_usd: z
          .number()
          .describe("Monthly USD price. Use 0 when pricing is custom."),
        is_custom_pricing: z.boolean(),
      }),
    )
    .describe("Every pricing tier listed on the pricing page."),
});

const client = new ContextDev({ apiKey: process.env.CONTEXT_DEV_API_KEY });

const response = await client.web.extract({
  url: "https://stripe.com/pricing",
  schema: z.toJSONSchema(PricingPage),
  instructions: "Focus on the pricing page and capture every tier, including enterprise plans.",
});

const pricing = PricingPage.parse(response.data);
console.log(pricing.pricing_tiers);
```

`z.toJSONSchema()` is built into Zod 4. On Zod 3, use the `zod-to-json-schema` package instead. The same pattern works with anything that emits JSON Schema in other languages, such as `dry-schema` in Ruby or `invopop/jsonschema` in Go.

## [​](#understand-the-response)Understand the response

A successful call returns the starting URL, the URLs the crawler actually used, your data in the shape of your schema, and crawl statistics:

sample response

```
{
  "status": "ok",
  "url": "https://stripe.com/pricing",
  "urls_analyzed": [
    "https://stripe.com/pricing",
    "https://stripe.com/payments"
  ],
  "data": {
    "pricing_tiers": [
      { "name": "Integrated", "monthly_price_usd": 0, "is_custom_pricing": false },
      { "name": "Customized", "monthly_price_usd": 0, "is_custom_pricing": true }
    ]
  },
  "metadata": {
    "numUrls": 2,
    "maxCrawlDepth": 1,
    "numSucceeded": 2,
    "numFailed": 0,
    "numSkipped": 0
  }
}
```

| Field                    | Type      | Description                                                |
| ------------------------ | --------- | ---------------------------------------------------------- |
| `status`                 | string    | `"ok"` on success.                                         |
| `url`                    | string    | The starting URL that was analyzed.                        |
| `urls_analyzed`          | string\[] | Every URL the crawler actually used to produce the answer. |
| `data`                   | object    | The extracted data. Matches the `schema` you sent.         |
| `metadata.numUrls`       | integer   | Total URLs attempted during the crawl.                     |
| `metadata.maxCrawlDepth` | integer   | Deepest link depth reached.                                |
| `metadata.numSucceeded`  | integer   | Pages fetched and analyzed successfully.                   |
| `metadata.numFailed`     | integer   | Pages that failed to fetch.                                |
| `metadata.numSkipped`    | integer   | Pages skipped as irrelevant to the schema.                 |

Error responses include an `error_code`. Common ones: `INPUT_VALIDATION_ERROR` (bad URL or schema) and `WEBSITE_ACCESS_ERROR` on 400, `UNAUTHORIZED` on 401 (missing or invalid API key), `REQUEST_TIMEOUT` on 408, `RATE_LIMITED` on 429, and `INTERNAL_ERROR` on 500.

## [​](#use-cases)Use cases

* **Lead enrichment**: extract `founded_year`, `employee_count`, `headquarters_city` etc. from a company’s site to enrich CRM records.
* **Hiring signal tracking**: extract an array of open roles (title, location, team) starting from a careers page for sourcing pipelines or competitor monitoring.
* **Compliance snapshots**: extract a structured summary of privacy policy or terms clauses on a schedule with `factCheck: true`, then diff against the last run.
* **Investor relations data**: extract revenue, ARR, headcount, or funding figures as typed numbers; PDF parsing picks up IR decks and annual reports automatically.

## [​](#next-steps)Next steps

## [Scrape Websites](/guides/scrape-websites-to-markdown)

[Get clean Markdown, HTML, or sitemap URLs from any page.](/guides/scrape-websites-to-markdown)

## [Extract Products](/guides/extract-product-from-websites)

[Typed product data: SKU, price, images, from any storefront.](/guides/extract-product-from-websites)

## [Best Practices](/optimization/best-practices)

[Caching, error handling, and key hygiene.](/optimization/best-practices)

## [Troubleshooting](/optimization/troubleshooting)

[Status codes, retry patterns, and common errors.](/optimization/troubleshooting)

Was this page helpful?

[Scrape Websites](/guides/scrape-websites-to-markdown)

[Previous](/guides/scrape-websites-to-markdown)

[Get Brand Data](/guides/get-brand-data)

[Next](/guides/get-brand-data)

Ctrl+I

Assistant

Responses are generated using AI and may contain mistakes.

[Contact support](mailto:founders@context.dev)

----
url: https://docs.context.dev/api-reference/brand-intelligence/retrieve-brand-data-by-domain
----

> ## Documentation Index
>
> Fetch the complete documentation index at: [/llms.txt](/llms.txt)
>
> Use this file to discover all available pages before exploring further.

[Skip to main content](#content-area)

JavaScript

```
import ContextDev from 'context.dev';

const client = new ContextDev({
  apiKey: process.env['CONTEXT_DEV_API_KEY'], // This is the default and can be omitted
});

const brand = await client.brand.retrieve({ domain: 'domain' });

console.log(brand.brand);
```

```
{
  "status": "<string>",
  "brand": {
    "domain": "<string>",
    "title": "<string>",
    "description": "<string>",
    "slogan": "<string>",
    "colors": [
      {
        "hex": "<string>",
        "name": "<string>"
      }
    ],
    "logos": [
      {
        "url": "<string>",
        "colors": [
          {
            "hex": "<string>",
            "name": "<string>"
          }
        ],
        "resolution": {
          "width": 123,
          "height": 123,
          "aspect_ratio": 123
        }
      }
    ],
    "backdrops": [
      {
        "url": "<string>",
        "colors": [
          {
            "hex": "<string>",
            "name": "<string>"
          }
        ],
        "resolution": {
          "width": 123,
          "height": 123,
          "aspect_ratio": 123
        }
      }
    ],
    "socials": [
      {
        "url": "<string>"
      }
    ],
    "address": {
      "street": "<string>",
      "city": "<string>",
      "country": "<string>",
      "country_code": "<string>",
      "state_province": "<string>",
      "state_code": "<string>",
      "postal_code": "<string>"
    },
    "stock": {
      "ticker": "<string>",
      "exchange": "<string>"
    },
    "is_nsfw": true,
    "email": "<string>",
    "phone": "<string>",
    "industries": {
      "eic": [
        {}
      ]
    },
    "links": {
      "careers": "<string>",
      "privacy": "<string>",
      "terms": "<string>",
      "contact": "<string>",
      "blog": "<string>",
      "pricing": "<string>"
    }
  },
  "code": 123,
  "key_metadata": {
    "credits_consumed": 123,
    "credits_remaining": 123
  }
}
```

GET

/

brand

/

retrieve

JavaScript

```
import ContextDev from 'context.dev';

const client = new ContextDev({
  apiKey: process.env['CONTEXT_DEV_API_KEY'], // This is the default and can be omitted
});

const brand = await client.brand.retrieve({ domain: 'domain' });

console.log(brand.brand);
```

```
{
  "status": "<string>",
  "brand": {
    "domain": "<string>",
    "title": "<string>",
    "description": "<string>",
    "slogan": "<string>",
    "colors": [
      {
        "hex": "<string>",
        "name": "<string>"
      }
    ],
    "logos": [
      {
        "url": "<string>",
        "colors": [
          {
            "hex": "<string>",
            "name": "<string>"
          }
        ],
        "resolution": {
          "width": 123,
          "height": 123,
          "aspect_ratio": 123
        }
      }
    ],
    "backdrops": [
      {
        "url": "<string>",
        "colors": [
          {
            "hex": "<string>",
            "name": "<string>"
          }
        ],
        "resolution": {
          "width": 123,
          "height": 123,
          "aspect_ratio": 123
        }
      }
    ],
    "socials": [
      {
        "url": "<string>"
      }
    ],
    "address": {
      "street": "<string>",
      "city": "<string>",
      "country": "<string>",
      "country_code": "<string>",
      "state_province": "<string>",
      "state_code": "<string>",
      "postal_code": "<string>"
    },
    "stock": {
      "ticker": "<string>",
      "exchange": "<string>"
    },
    "is_nsfw": true,
    "email": "<string>",
    "phone": "<string>",
    "industries": {
      "eic": [
        {}
      ]
    },
    "links": {
      "careers": "<string>",
      "privacy": "<string>",
      "terms": "<string>",
      "contact": "<string>",
      "blog": "<string>",
      "pricing": "<string>"
    }
  },
  "code": 123,
  "key_metadata": {
    "credits_consumed": 123,
    "credits_remaining": 123
  }
}
```

Domain name to retrieve brand data for (e.g., 'example.com', 'google.com'). Cannot be used with name or ticker parameters.

[​](#parameter-force-language)

force\_language

enum\<string>

Optional parameter to force the language of the retrieved brand data.

Available options:

`afrikaans`,

`albanian`,

`amharic`,

`arabic`,

`armenian`,

`assamese`,

`aymara`,

`azeri`,

`basque`,

`belarusian`,

`bengali`,

`bosnian`,

`bulgarian`,

`burmese`,

`cantonese`,

`catalan`,

`cebuano`,

`chinese`,

`corsican`,

`croatian`,

`czech`,

`danish`,

`dutch`,

`english`,

`esperanto`,

`estonian`,

`farsi`,

`fijian`,

`finnish`,

`french`,

`galician`,

`georgian`,

`german`,

`greek`,

`guarani`,

`gujarati`,

`haitian-creole`,

`hausa`,

`hawaiian`,

`hebrew`,

`hindi`,

`hmong`,

`hungarian`,

`icelandic`,

`igbo`,

`indonesian`,

`irish`,

`italian`,

`japanese`,

`javanese`,

`kannada`,

`kazakh`,

`khmer`,

`kinyarwanda`,

`korean`,

`kurdish`,

`kyrgyz`,

`lao`,

`latin`,

`latvian`,

`lingala`,

`lithuanian`,

`luxembourgish`,

`macedonian`,

`malagasy`,

`malay`,

`malayalam`,

`maltese`,

`maori`,

`marathi`,

`mongolian`,

`nepali`,

`norwegian`,

`odia`,

`oromo`,

`pashto`,

`pidgin`,

`polish`,

`portuguese`,

`punjabi`,

`quechua`,

`romanian`,

`russian`,

`samoan`,

`scottish-gaelic`,

`serbian`,

`sesotho`,

`shona`,

`sindhi`,

`sinhala`,

`slovak`,

`slovene`,

`somali`,

`spanish`,

`sundanese`,

`swahili`,

`swedish`,

`tagalog`,

`tajik`,

`tamil`,

`tatar`,

`telugu`,

`thai`,

`tibetan`,

`tigrinya`,

`tongan`,

`tswana`,

`turkish`,

`turkmen`,

`ukrainian`,

`urdu`,

`uyghur`,

`uzbek`,

`vietnamese`,

`welsh`,

`wolof`,

`xhosa`,

`yiddish`,

`yoruba`,

`zulu`

[​](#parameter-max-speed)

maxSpeed

boolean

Optional parameter to optimize the API call for maximum speed. When set to true, the API will skip time-consuming operations for faster response at the cost of less comprehensive data. Works with all three lookup methods.


[Extract products from a brand's website](/api-reference/web-extraction/extract-products-from-a-brands-website)

[Previous](/api-reference/web-extraction/extract-products-from-a-brands-website)

[Retrieve brand data by company name](/api-reference/brand-intelligence/retrieve-brand-data-by-company-name)

[Next](/api-reference/brand-intelligence/retrieve-brand-data-by-company-name)

⌘I

Assistant

Responses are generated using AI and may contain mistakes.

[Contact support](mailto:founders@context.dev)

----
url: https://docs.context.dev/quickstart
----

> ## Documentation Index
>
> Fetch the complete documentation index at: [/llms.txt](/llms.txt)
>
> Use this file to discover all available pages before exploring further.

[Skip to main content](#content-area)

If you are an agent, sign up for your user with [auth.md](https://context.dev/auth.md) to get an API key.

By the end of this guide you’ll have an API key, an installed SDK, and your first call to Context.dev’s Brand, Web, and Classification API endpoints.

Integrate Context.dev into my app

[Open in Cursor](https://cursor.com/link/prompt?text=undefined)

## [​](#0-pick-the-right-api-for-your-job)0. Pick the right API for your job

Context.dev has 4 products:

| API                 | Use-case                                                                                                                                |
| ------------------- | --------------------------------------------------------------------------------------------------------------------------------------- |
| Brand APIs          | [Look up a brand](/guides/get-brand-data) by name, domain, email, stock ticker, or ISIN                                                 |
|                     | [Extract a website’s styleguide](/guides/extract-design-system-from-website#extract-the-full-styleguide): fonts, spacing, shadows, etc. |
| Logo Link CDN       | [Get embeddable logo images](/guides/get-logo-from-url) from a domain                                                                   |
| Web APIs            | [Scrape any website](/guides/scrape-websites-to-markdown#scrape-a-single-page-to-markdown)into clean HTML/Markdown                      |
|                     | [Crawl a whole site](/guides/scrape-websites-to-markdown#crawl-a-whole-site)and get clean Markdown for every page                       |
|                     | [Crawl a sitemap](/guides/scrape-websites-to-markdown#get-all-urls-of-a-domain)to discover all URLs of a domain                         |
|                     | [Extract every image](/guides/scrape-websites-to-markdown#extract-every-image-on-a-page)on a webpage                                    |
|                     | [Capture a webpage screenshot](/guides/take-webpage-screenshot)                                                                         |
|                     | [Extract product details](/guides/extract-product-from-websites)(name, price, features) from a page                                     |
|                     | [Extract structured data](/guides/extract-structured-data-from-websites)from a website’s pages with a JSON Schema                       |
| Classification APIs | [Enrich a card-transaction descriptor](/guides/enrich-transaction-codes)to a brand                                                      |
|                     | [Classify a brand](/guides/classification/overview) into NAICS, SIC, or EIC industry codes                                              |

## [​](#1-get-an-api-key)1. Get an API key

1

[](#)

Sign up

Create an account at [context.dev/signup](https://context.dev/signup).

The SDKs and `curl` examples read `CONTEXT_DEV_API_KEY` from the environment. The SDKs read `CONTEXT_DEV_API_KEY` first and fall back to `CONTEXT_API_KEY` if it isn’t set, so exporting `CONTEXT_DEV_API_KEY` alone is enough:

terminal

```
export CONTEXT_DEV_API_KEY="ctxt_secret_..."
```

For local development, save the key to a `.env` file and make sure it’s listed in your `.gitignore`. For deployment, set the key in your platform’s environment variable store:

* **Vercel:** `vercel env add CONTEXT_DEV_API_KEY`
* **Heroku:** `heroku config:set CONTEXT_DEV_API_KEY=ctxt_secret_...`
* **Docker:** pass via `-e CONTEXT_DEV_API_KEY=ctxt_secret_...` at `docker run`
* **AWS Lambda:** store in Secrets Manager or Parameter Store; expose to the function via its environment config

Never call the Context.dev API directly from a browser. The key would be visible to anyone with devtools. Always proxy through your backend.

## [​](#2-install-an-sdk)2. Install an SDK

Context.dev publishes official SDKs for **TypeScript**, **Python**, **Ruby**, **Go**, and **PHP**. Pick the one for your stack.

```
npm install context.dev
```

You can also call the API directly with `curl`. No install required.

## [​](#3-make-your-first-call)3. Make your first call

All code snippets expect `CONTEXT_DEV_API_KEY` to be set. Depending on which API you chose:

* Brand API
* Web API
* Classification APIs

Retrieving a brand requires a brand identifier (name, domain, email, stock ticker, or ISIN code) and gives you its logo, name, slogan, description, address, social media handles, and more.[Read the full guide](/guides/get-brand-data)

```
curl -G https://api.context.dev/v1/brand/retrieve \
  -H "Authorization: Bearer $CONTEXT_DEV_API_KEY" \
  --data-urlencode "domain=airbnb.com"
```

10 credits per successful call

With Context.dev’s Web APIs, you can:

* [Scrape clean HTML/Markdown from URLs](/guides/scrape-websites-to-markdown#scrape-a-single-page-to-markdown)
* [Extract structured data](/guides/extract-structured-data-from-websites) from a website by passing a JSON Schema.
* [Extract every image on a page](/guides/scrape-websites-to-markdown#extract-every-image-on-a-page)
* [Capture webpage screenshots](/guides/take-webpage-screenshot)
* [Crawl a sitemap to discover all URLs of a domain](/guides/scrape-websites-to-markdown#get-all-urls-of-a-domain)
* [Crawl an entire website into per-page Markdown](/guides/scrape-websites-to-markdown#crawl-a-whole-site)
* [Pull a website’s styleguide](/guides/extract-design-system-from-website#extract-the-full-styleguide): fonts, typography, spacing, shadows, components, and colors
* [Extract product details](/guides/extract-product-from-websites) (name, price, features) from a product page.

Looking for embeddable logos? That’s [Logo Link](/guides/get-logo-from-url), Context.dev’s separate CDN product. It embeds a logo for any domain with one `src` URL, no API call required.For this quickstart, let’s use the webpage scraping endpoint. Pass in any URL and it returns clean, LLM-ready Markdown:

```
curl -G https://api.context.dev/v1/web/scrape/markdown \
  -H "Authorization: Bearer $CONTEXT_DEV_API_KEY" \
  --data-urlencode "url=https://airbnb.com"
```

1 credit per successful call

With Context.dev’s Classification APIs, you can:

* Get brand details from [a card transaction descriptor](/guides/enrich-transaction-codes)
* [Classify a brand into NAICS industry codes](/guides/classification/NAICS) (2022 NAICS hierarchy)
* [Classify a brand into SIC industry codes](/guides/classification/SIC) (1987 SIC or SEC EDGAR)
* Read [EIC industries](/guides/classification/EIC) (Context.dev’s own taxonomy). There’s no dedicated EIC endpoint; EIC ships inline under `industries.eic` on every full brand response at no extra cost

For this quickstart, let’s use the transaction identifier endpoint. Pass in a card transaction descriptor and it returns the resolved brand record:

```
curl -G https://api.context.dev/v1/brand/transaction_identifier \
  -H "Authorization: Bearer $CONTEXT_DEV_API_KEY" \
  --data-urlencode "transaction_info=STARBUCKS STORE 12345" \
  --data-urlencode "country_gl=us"
```

10 credits per successful call

## [​](#4-understand-the-response)4. Understand the response

Brand and Classification endpoints return JSON with `status`, `code`, and a `brand` object. The Web Markdown endpoint returns `success`, `url`, and `markdown`.

* Brand API
* Web API
* Classification APIs

Calling `/brand/retrieve` with `domain=airbnb.com` returns the brand record for Airbnb.

brand.retrieve response

```
{
  "status": "ok",
  "code": 200,
  "brand": {
    "domain": "airbnb.com",
    "title": "Airbnb",
    "description": "Airbnb is a global online community marketplace that connects hosts with guests...",
    "slogan": "Belong Anywhere",
    "colors": [
      { "hex": "#fc3c5c", "name": "Radical Red" },
      { "hex": "#fc9cb4", "name": "Saira Red" },
      { "hex": "#fb5c74", "name": "Ponceau" }
    ],
    "logos": [
      {
        "url": "https://media.brand.dev/4ae9a10b-ffde-45c8-b5c1-c1e7cef5b716.png",
        "mode": "light",
        "type": "icon",
        "colors": [{ "hex": "#fc3c5c", "name": "Radical Red" }],
        "resolution": { "width": 250, "height": 250, "aspect_ratio": 1 }
      }
    ],
    "backdrops": [
      {
        "url": "https://media.brand.dev/example-backdrop.png",
        "colors": [{ "hex": "#fc3c5c", "name": "Radical Red" }],
        "resolution": { "width": 1200, "height": 630, "aspect_ratio": 1.9 }
      }
    ],
    "address": {
      "street": "888 Brannan Street",
      "city": "San Francisco",
      "state_province": "California",
      "state_code": "CA",
      "country": "United States",
      "country_code": "US",
      "postal_code": "94103"
    },
    "socials": [
      { "type": "x",         "url": "https://x.com/airbnb" },
      { "type": "facebook",  "url": "https://facebook.com/airbnb" },
      { "type": "linkedin",  "url": "https://linkedin.com/company/airbnb" },
      { "type": "instagram", "url": "https://instagram.com/airbnb" }
    ],
    "stock": { "ticker": "ABNB", "exchange": "NASDAQ" },
    "phone": "+1-415-555-0100",
    "is_nsfw": false,
    "industries": {
      "eic": [
        { "industry": "Hospitality & Tourism", "subindustry": "Vacation Rentals & Short-Term Stays" },
        { "industry": "Technology",            "subindustry": "eCommerce & Marketplace Platforms" }
      ]
    },
    "links": { "blog": null, "careers": null, "privacy": null, "terms": null, "contact": null, "pricing": null },
    "primary_language": "english"
  }
}
```

| Field                    | Type    | Description                                                                                                                                                |
| ------------------------ | ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `brand.title`            | string  | Company name.                                                                                                                                              |
| `brand.domain`           | string  | Canonical domain.                                                                                                                                          |
| `brand.description`      | string  | Brief description of the brand.                                                                                                                            |
| `brand.slogan`           | string  | The brand’s slogan.                                                                                                                                        |
| `brand.colors[]`         | array   | Brand colors. Each has `hex` and `name`.                                                                                                                   |
| `brand.logos[]`          | array   | Logos associated with the brand. Each has `url`, `mode` (`light`, `dark`, `has_opaque_background`), `type` (`icon`, `logo`), `colors[]`, and `resolution`. |
| `brand.backdrops[]`      | array   | Backdrop images for the brand. Each has `url`, `colors[]`, and `resolution`.                                                                               |
| `brand.address`          | object  | `street`, `city`, `state_province`, `state_code`, `country`, `country_code`, `postal_code`.                                                                |
| `brand.socials[]`        | array   | Social profile URLs. Each has `type` (`x`, `facebook`, `linkedin`, `instagram`, …) and `url`.                                                              |
| `brand.stock`            | object  | `ticker` and `exchange`. `null` for private companies.                                                                                                     |
| `brand.phone`            | string  | Company phone number.                                                                                                                                      |
| `brand.is_nsfw`          | boolean | Indicates whether the brand content is not safe for work (NSFW).                                                                                           |
| `brand.industries.eic[]` | array   | Easy Industry Classification industry and subindustry pairs.                                                                                               |
| `brand.links`            | object  | Important website links (`careers`, `privacy`, `terms`, `contact`, `blog`, `pricing`); fields may be `null` when not found.                                |
| `brand.primary_language` | string  | Primary language of the brand’s website content, or `null` when not detected.                                                                              |

Calling `/web/scrape/markdown` with `url=https://airbnb.com` returns clean Markdown:

webScrapeMd response

```
{
  "success": true,
  "url": "https://airbnb.com",
  "markdown": "[Skip to content](https://airbnb.com/#site-content)\n\n# Airbnb homepage\n\n[HomesHomes](https://airbnb.com/homes) [ExperiencesExperiences, new](https://airbnb.com/experiences) [ServicesServices, new](https://airbnb.com/services)\n\nWhere\n\nWhen\n\nAdd dates\n\nWho\n\nAdd guests\n\n[Become a host](https://airbnb.com/#guest-header-become-a-host-menu)\n\n[Help Center](https://airbnb.com/help)\n\n..."
}
```

| Field      | Type    | Description                                                        |
| ---------- | ------- | ------------------------------------------------------------------ |
| `success`  | boolean | Indicates success. On a successful response this is always `true`. |
| `url`      | string  | The URL that was scraped.                                          |
| `markdown` | string  | Page content converted to GitHub Flavored Markdown.                |

Calling `/brand/transaction_identifier` with `transaction_info=STARBUCKS STORE 12345&country_gl=us` resolves the descriptor and returns the brand record for Starbucks:

brand.transaction\_identifier response

```
{
  "status": "ok",
  "code": 200,
  "brand": {
    "domain": "starbucks.com",
    "title": "Starbucks",
    "description": "Starbucks is a global coffee company that puts people at the heart of its business...",
    "slogan": "Inspiring and nurturing the human spirit — one person, one cup",
    "colors": [
      { "hex": "#0bac66", "name": "Secret Garden" },
      { "hex": "#7cd4b4", "name": "Seafoam Blue" },
      { "hex": "#307e63", "name": "Trans Tasman" }
    ],
    "logos": [
      {
        "url": "https://media.brand.dev/67dc7846-2ca2-4a7b-9877-6bb5a5e2c0e0.png",
        "mode": "has_opaque_background",
        "type": "icon",
        "colors": [
          { "hex": "#0bac66", "name": "Secret Garden" },
          { "hex": "#7cd4b4", "name": "Seafoam Blue" }
        ],
        "resolution": { "width": 180, "height": 180, "aspect_ratio": 1 }
      }
    ],
    "industries": {
      "eic": [
        { "industry": "Hospitality & Tourism", "subindustry": "Cafes & Coffee Shops" }
      ]
    },
    "socials": [
      { "type": "x", "url": "https://x.com/starbucks" },
      { "type": "instagram", "url": "https://instagram.com/starbucks" }
    ],
    "stock": { "ticker": "SBUX", "exchange": "NASDAQ" }
  }
}
```

| Field     | Type   | Description                                                                                     |
| --------- | ------ | ----------------------------------------------------------------------------------------------- |
| `status`  | string | `"ok"` on a confident match; `"error"` when not identified.                                     |
| `code`    | number | HTTP status mirror. `400` with `error_code: "NOT_FOUND"` when the descriptor can’t be resolved. |
| `brand.*` | object | Identical shape to `/brand/retrieve`; see the Brand API tab above for the full field reference. |

Pass `mcc`, `city`, and `country_gl` for higher confidence on ambiguous descriptors.

## [​](#5-handle-errors)5. Handle errors

A non-2xx response returns an `error` envelope. The common ones:

| Status | Meaning                                                    | What to do                                                                              |
| ------ | ---------------------------------------------------------- | --------------------------------------------------------------------------------------- |
| 401    | API key missing, invalid, or deleted                       | Re-check the env var and the dashboard.                                                 |
| 408    | Cold-hit timeout (rare; first crawl exceeded the deadline) | Retry once; the second hit is warm. Better: [prefetch](/optimization/prefetching).      |
| 422    | Disposable or free-email address on `retrieve-by-email`    | Skip the call for personal addresses.                                                   |
| 429    | Rate limit                                                 | Wait per the `Retry-After` header; see [Handle Rate Limits](/optimization/rate-limits). |
| 500    | Transient server error                                     | Retry once with backoff; if it persists, contact support.                               |

A retry pattern that covers 408 and 429:

```
import ContextDev from "context.dev";

const client = new ContextDev({ apiKey: process.env.CONTEXT_DEV_API_KEY });

async function retrieveWithRetry(domain: string, maxRetries = 3) {
  for (let i = 0; i < maxRetries; i++) {
    try {
      const { brand } = await client.brand.retrieve({ domain });
      return brand;
    } catch (err: any) {
      const retryable = err.status === 408 || err.status === 429;
      if (retryable && i < maxRetries - 1) {
        await new Promise((r) => setTimeout(r, 2 ** i * 1000));
        continue;
      }
      throw err;
    }
  }
  throw new Error("unreachable");
}
```

For the full catalog of error codes and remediations, see [Troubleshooting](/optimization/troubleshooting).

[Introduction](/introduction)

[Previous](/introduction)

[Agent Quickstart](/agent-quickstart)

[Next](/agent-quickstart)

⌘I

Assistant

Responses are generated using AI and may contain mistakes.

[Contact support](/cdn-cgi/l/email-protection#5630392338323324251635393822332e2278323320)

----
url: https://docs.context.dev/api-reference/web-extraction/scrape-styleguide
----

> ## Documentation Index
>
> Fetch the complete documentation index at: [/llms.txt](/llms.txt)
>
> Use this file to discover all available pages before exploring further.

[Skip to main content](#content-area)

JavaScript

```
import ContextDev from 'context.dev';

const client = new ContextDev({
  apiKey: process.env['CONTEXT_DEV_API_KEY'], // This is the default and can be omitted
});

const response = await client.web.extractStyleguide();

console.log(response.styleguide);
```

```
{
  "status": "<string>",
  "domain": "<string>",
  "styleguide": {
    "colors": {
      "accent": "<string>",
      "background": "<string>",
      "text": "<string>"
    },
    "typography": {
      "headings": {
        "h1": {
          "fontFamily": "<string>",
          "fontFallbacks": [
            "<string>"
          ],
          "fontSize": "<string>",
          "fontWeight": 123,
          "lineHeight": "<string>",
          "letterSpacing": "<string>"
        },
        "h2": {
          "fontFamily": "<string>",
          "fontFallbacks": [
            "<string>"
          ],
          "fontSize": "<string>",
          "fontWeight": 123,
          "lineHeight": "<string>",
          "letterSpacing": "<string>"
        },
        "h3": {
          "fontFamily": "<string>",
          "fontFallbacks": [
            "<string>"
          ],
          "fontSize": "<string>",
          "fontWeight": 123,
          "lineHeight": "<string>",
          "letterSpacing": "<string>"
        },
        "h4": {
          "fontFamily": "<string>",
          "fontFallbacks": [
            "<string>"
          ],
          "fontSize": "<string>",
          "fontWeight": 123,
          "lineHeight": "<string>",
          "letterSpacing": "<string>"
        }
      },
      "p": {
        "fontFamily": "<string>",
        "fontFallbacks": [
          "<string>"
        ],
        "fontSize": "<string>",
        "fontWeight": 123,
        "lineHeight": "<string>",
        "letterSpacing": "<string>"
      }
    },
    "elementSpacing": {
      "xs": "<string>",
      "sm": "<string>",
      "md": "<string>",
      "lg": "<string>",
      "xl": "<string>"
    },
    "shadows": {
      "sm": "<string>",
      "md": "<string>",
      "lg": "<string>",
      "xl": "<string>",
      "inner": "<string>"
    },
    "fontLinks": {},
    "components": {
      "button": {
        "primary": {
          "backgroundColor": "<string>",
          "color": "<string>",
          "borderColor": "<string>",
          "borderRadius": "<string>",
          "borderWidth": "<string>",
          "borderStyle": "<string>",
          "padding": "<string>",
          "minWidth": "<string>",
          "minHeight": "<string>",
          "fontSize": "<string>",
          "fontWeight": 123,
          "textDecoration": "<string>",
          "boxShadow": "<string>",
          "css": "<string>",
          "fontFamily": "<string>",
          "fontFallbacks": [
            "<string>"
          ],
          "textDecorationColor": "<string>"
        },
        "secondary": {
          "backgroundColor": "<string>",
          "color": "<string>",
          "borderColor": "<string>",
          "borderRadius": "<string>",
          "borderWidth": "<string>",
          "borderStyle": "<string>",
          "padding": "<string>",
          "minWidth": "<string>",
          "minHeight": "<string>",
          "fontSize": "<string>",
          "fontWeight": 123,
          "textDecoration": "<string>",
          "boxShadow": "<string>",
          "css": "<string>",
          "fontFamily": "<string>",
          "fontFallbacks": [
            "<string>"
          ],
          "textDecorationColor": "<string>"
        },
        "link": {
          "backgroundColor": "<string>",
          "color": "<string>",
          "borderColor": "<string>",
          "borderRadius": "<string>",
          "borderWidth": "<string>",
          "borderStyle": "<string>",
          "padding": "<string>",
          "minWidth": "<string>",
          "minHeight": "<string>",
          "fontSize": "<string>",
          "fontWeight": 123,
          "textDecoration": "<string>",
          "boxShadow": "<string>",
          "css": "<string>",
          "fontFamily": "<string>",
          "fontFallbacks": [
            "<string>"
          ],
          "textDecorationColor": "<string>"
        }
      },
      "card": {
        "backgroundColor": "<string>",
        "borderColor": "<string>",
        "borderRadius": "<string>",
        "borderWidth": "<string>",
        "borderStyle": "<string>",
        "padding": "<string>",
        "boxShadow": "<string>",
        "textColor": "<string>",
        "css": "<string>"
      }
    }
  },
  "code": 123,
  "key_metadata": {
    "credits_consumed": 123,
    "credits_remaining": 123
  }
}
```

GET

/

web

/

styleguide

JavaScript

```
import ContextDev from 'context.dev';

const client = new ContextDev({
  apiKey: process.env['CONTEXT_DEV_API_KEY'], // This is the default and can be omitted
});

const response = await client.web.extractStyleguide();

console.log(response.styleguide);
```

```
{
  "status": "<string>",
  "domain": "<string>",
  "styleguide": {
    "colors": {
      "accent": "<string>",
      "background": "<string>",
      "text": "<string>"
    },
    "typography": {
      "headings": {
        "h1": {
          "fontFamily": "<string>",
          "fontFallbacks": [
            "<string>"
          ],
          "fontSize": "<string>",
          "fontWeight": 123,
          "lineHeight": "<string>",
          "letterSpacing": "<string>"
        },
        "h2": {
          "fontFamily": "<string>",
          "fontFallbacks": [
            "<string>"
          ],
          "fontSize": "<string>",
          "fontWeight": 123,
          "lineHeight": "<string>",
          "letterSpacing": "<string>"
        },
        "h3": {
          "fontFamily": "<string>",
          "fontFallbacks": [
            "<string>"
          ],
          "fontSize": "<string>",
          "fontWeight": 123,
          "lineHeight": "<string>",
          "letterSpacing": "<string>"
        },
        "h4": {
          "fontFamily": "<string>",
          "fontFallbacks": [
            "<string>"
          ],
          "fontSize": "<string>",
          "fontWeight": 123,
          "lineHeight": "<string>",
          "letterSpacing": "<string>"
        }
      },
      "p": {
        "fontFamily": "<string>",
        "fontFallbacks": [
          "<string>"
        ],
        "fontSize": "<string>",
        "fontWeight": 123,
        "lineHeight": "<string>",
        "letterSpacing": "<string>"
      }
    },
    "elementSpacing": {
      "xs": "<string>",
      "sm": "<string>",
      "md": "<string>",
      "lg": "<string>",
      "xl": "<string>"
    },
    "shadows": {
      "sm": "<string>",
      "md": "<string>",
      "lg": "<string>",
      "xl": "<string>",
      "inner": "<string>"
    },
    "fontLinks": {},
    "components": {
      "button": {
        "primary": {
          "backgroundColor": "<string>",
          "color": "<string>",
          "borderColor": "<string>",
          "borderRadius": "<string>",
          "borderWidth": "<string>",
          "borderStyle": "<string>",
          "padding": "<string>",
          "minWidth": "<string>",
          "minHeight": "<string>",
          "fontSize": "<string>",
          "fontWeight": 123,
          "textDecoration": "<string>",
          "boxShadow": "<string>",
          "css": "<string>",
          "fontFamily": "<string>",
          "fontFallbacks": [
            "<string>"
          ],
          "textDecorationColor": "<string>"
        },
        "secondary": {
          "backgroundColor": "<string>",
          "color": "<string>",
          "borderColor": "<string>",
          "borderRadius": "<string>",
          "borderWidth": "<string>",
          "borderStyle": "<string>",
          "padding": "<string>",
          "minWidth": "<string>",
          "minHeight": "<string>",
          "fontSize": "<string>",
          "fontWeight": 123,
          "textDecoration": "<string>",
          "boxShadow": "<string>",
          "css": "<string>",
          "fontFamily": "<string>",
          "fontFallbacks": [
            "<string>"
          ],
          "textDecorationColor": "<string>"
        },
        "link": {
          "backgroundColor": "<string>",
          "color": "<string>",
          "borderColor": "<string>",
          "borderRadius": "<string>",
          "borderWidth": "<string>",
          "borderStyle": "<string>",
          "padding": "<string>",
          "minWidth": "<string>",
          "minHeight": "<string>",
          "fontSize": "<string>",
          "fontWeight": 123,
          "textDecoration": "<string>",
          "boxShadow": "<string>",
          "css": "<string>",
          "fontFamily": "<string>",
          "fontFallbacks": [
            "<string>"
          ],
          "textDecorationColor": "<string>"
        }
      },
      "card": {
        "backgroundColor": "<string>",
        "borderColor": "<string>",
        "borderRadius": "<string>",
        "borderWidth": "<string>",
        "borderStyle": "<string>",
        "padding": "<string>",
        "boxShadow": "<string>",
        "textColor": "<string>",
        "css": "<string>"
      }
    }
  },
  "code": 123,
  "key_metadata": {
    "credits_consumed": 123,
    "credits_remaining": 123
  }
}
```

10 Credits

Domain name to extract styleguide from (e.g., 'example.com', 'google.com'). The domain will be automatically normalized and validated. You must provide either 'domain' or 'directUrl', but not both.

[​](#parameter-direct-url)

directUrl

string\<uri>

A specific URL to fetch the styleguide from directly, bypassing domain resolution (e.g., '<https://example.com/design-system>'). When provided, the styleguide is extracted from this exact URL. You must provide either 'domain' or 'directUrl', but not both.

[​](#parameter-max-age-ms)

maxAgeMs

integer

default:7776000000

Maximum age in milliseconds for cached data before the API performs a hard refresh. Defaults to 3 months (7776000000 ms). Values below 1 day (86400000 ms) are clamped to 1 day; values above 1 year (31536000000 ms) are clamped to 1 year.

Required range: `86400000 <= x <= 31536000000`

[​](#parameter-color-scheme)

colorScheme

enum\<string>

Optional browser color scheme to emulate for websites that respond to prefers-color-scheme. This value is part of the styleguide cache key.

Available options:

`light`,

`dark`


[​](#response-styleguide)

styleguide

object

Comprehensive styleguide data extracted from the website

[Extract Structured Website Data](/api-reference/web-extraction/extract-structured-website-data)

[Previous](/api-reference/web-extraction/extract-structured-website-data)

[Scrape Fonts](/api-reference/web-extraction/scrape-fonts)

[Next](/api-reference/web-extraction/scrape-fonts)

⌘I

Assistant

Responses are generated using AI and may contain mistakes.

[Contact support](mailto:founders@context.dev)

----
url: https://docs.context.dev/guides/take-webpage-screenshot
----

> ## Documentation Index
>
> Fetch the complete documentation index at: [/llms.txt](/llms.txt)
>
> Use this file to discover all available pages before exploring further.

[Skip to main content](#content-area)

Context.dev’s Screenshot API finds and opens any page in a browser, captures a PNG screenshot, hosts it on a CDN, and sends back a URL to access it. It can dismiss cookie banners, capture the full scrollable height, and find standard pages (like pricing, login, etc.) for a given domain without you entering the exact path.

Integrate Context.dev's Screenshot API in your app

[Open in Cursor](https://cursor.com/link/prompt?text=I'm%20integrating%20Context.dev's%20Screenshot%20API%20\(%60GET%20%2Fweb%2Fscreenshot%60\)%20into%20my%20app.%20Help%20me%3A%0A%0A1.%20Install%20the%20official%20SDK%20for%20my%20language%20\(%60context.dev%60%20on%20npm%20%2F%20PyPI%20%2F%20RubyGems%2C%20%60context-dev%2Fcontext-dev-php%60%20on%20Packagist%2C%20%60github.com%2Fcontext-dot-dev%2Fcontext-go-sdk%60%20for%20Go\).%0A2.%20Read%20the%20API%20key%20from%20the%20%60CONTEXT_DEV_API_KEY%60%20environment%20variable.%20Never%20hardcode%20it.%0A3.%20Call%20%60client.web.screenshot\(%7B%20domain%20%7D\)%60%20\(or%20%60directUrl%60%20for%20an%20exact%20URL\).%20The%20response%20is%20JSON%20with%20%60screenshot%60%20\(a%20CDN%20URL\)%2C%20%60screenshotType%60%2C%20%60width%60%2C%20%60height%60.%20It%20is%20not%20raw%20image%20bytes.%0A4.%20Toggle%20%60fullScreenshot%3A%20%22true%22%60%20for%20full-page%20capture%2C%20set%20%60viewport%3A%20%7B%20width%2C%20height%20%7D%60%20for%20a%20specific%20viewport%2C%20and%20pass%20%60page%3A%20%22pricing%22%60%20%2F%20%60%22login%22%60%20%2F%20etc.%20when%20I%20want%20the%20heuristic%20to%20resolve%20the%20right%20URL%20on%20a%20domain.%0A5.%20Set%20%60handleCookiePopup%3A%20%22true%22%60%20when%20capturing%20a%20site%20with%20a%20consent%20banner.%0A6.%20Use%20%60maxAgeMs%3A%200%60%20to%20force%20a%20fresh%20capture%3B%20default%20cache%20is%201%20day%2C%20max%2030%20days.%0A7.%20Retry%20HTTP%20500%20with%20exponential%20backoff.%20Surface%20HTTP%20400%20\(validation\)%20as%20a%20user-facing%20error.%0A%0ADocs%3A%20%5Bhttps%3A%2F%2Fdocs.context.dev%2Fguides%2Ftake-webpage-screenshot%5D\(https%3A%2F%2Fdocs.context.dev%2Fguides%2Ftake-webpage-screenshot\))

## [​](#prerequisites)Prerequisites

* **A Context.dev API key.** Sign up at [context.dev/signup](https://context.dev/signup), copy the key from the [dashboard](https://context.dev/dashboard) (prefix `ctxt_secret_`), and export it:

  ```
  export CONTEXT_DEV_API_KEY="ctxt_secret_..."
  ```

* **An SDK (optional).** Install for your language, or skip the install and call directly with `curl`:

  ```
  npm install context.dev
  ```

## [​](#capture-a-screenshot)Capture a screenshot

There are two ways to point at the page you want to capture:

1. **Give a specific URL**: pass `directUrl` with the full URL (e.g. `https://stripe.com/pricing`).
2. **Give a domain and a page type**: pass `domain` (e.g. `stripe.com`) for the homepage. Add a `page` type (choose from `login`, `signup`, `blog`, `careers`, `pricing`, `terms`, `privacy`, or `contact`) to let Context.dev’s resolver find the right URL on the domain.

```
# 1. Give a specific URL
curl -G https://api.context.dev/v1/web/screenshot \
  -H "Authorization: Bearer $CONTEXT_DEV_API_KEY" \
  --data-urlencode "directUrl=https://stripe.com/pricing"

# 2. Give a domain and a page type
curl -G https://api.context.dev/v1/web/screenshot \
  -H "Authorization: Bearer $CONTEXT_DEV_API_KEY" \
  --data-urlencode "domain=stripe.com" \
  --data-urlencode "page=pricing"
```

5 credits per successful call Context.dev finds and opens the page, closes any cookie consent pop-ups (when `handleCookiePopup` is set to `"true"`), takes a screenshot, uploads it to a CDN and returns the public URL.

Captures are cached for one day by default; pass `maxAgeMs: 0` to force a fresh render, or up to 30 days for longer reuse.

### [​](#request-parameters)Request Parameters

Pass either `domain` or `directUrl`, not both.

| Parameter           | Type                                                                                         | Default                         | Description                                                                                                      |
| ------------------- | -------------------------------------------------------------------------------------------- | ------------------------------- | ---------------------------------------------------------------------------------------------------------------- |
| `domain`            | string                                                                                       | —                               | **Required** unless `directUrl` is provided. Domain to screenshot (e.g. `stripe.com`).                           |
| `directUrl`         | string (URI)                                                                                 | —                               | **Required** unless `domain` is provided. Exact URL to screenshot.                                               |
| `fullScreenshot`    | string enum (`"true"` / `"false"`)                                                           | `"false"`                       | `"true"` captures the full scrollable height; otherwise a single viewport frame.                                 |
| `handleCookiePopup` | string enum (`"true"` / `"false"`)                                                           | `"false"`                       | When `"true"`, dismisses the cookie/consent banner before capture.                                               |
| `viewport`          | object `{ width, height }`                                                                   | `{ width: 1920, height: 1080 }` | Browser viewport in pixels. `width` 240–7680, `height` 240–4320.                                                 |
| `page`              | enum (`login` / `signup` / `blog` / `careers` / `pricing` / `terms` / `privacy` / `contact`) | —                               | Resolve the right URL for the page type via link-scraping heuristics. Only valid with `domain`, not `directUrl`. |
| `maxAgeMs`          | integer                                                                                      | `86400000` (1 day)              | Return a cached capture younger than this. `0` forces fresh. Max `2592000000` (30 days).                         |
| `waitForMs`         | integer                                                                                      | `3000`                          | Browser wait after page load before capture. Min `0`, max `30000` (30 seconds).                                  |
| `timeoutMS`         | integer                                                                                      | —                               | Abort with 408 if the request exceeds this many milliseconds. Min `1000`, max `300000` (5 min).                  |

### [​](#response)Response

```
{
  "status": "ok",
  "code": 200,
  "domain": "stripe.com",
  "screenshot": "https://media.brand.dev/screenshots/cache/f7d1dab4f1fd942032eeb849f1ad9df7.png",
  "screenshotType": "viewport",
  "width": 1920,
  "height": 1080
}
```

| Field            | Type    | Description                                                                                                                                  |
| ---------------- | ------- | -------------------------------------------------------------------------------------------------------------------------------------------- |
| `status`         | string  | `"ok"` on success.                                                                                                                           |
| `code`           | integer | HTTP status code, echoed for convenience.                                                                                                    |
| `domain`         | string  | Normalized domain that was processed. For `directUrl` requests, the host parsed out of the URL.                                              |
| `screenshot`     | string  | Public CDN URL of the captured PNG. Content-addressed: the same query against the same target returns the same URL until `maxAgeMs` expires. |
| `screenshotType` | enum    | `"viewport"` or `"fullPage"`. Mirrors what was actually captured.                                                                            |
| `width`          | integer | Width of the captured image in pixels.                                                                                                       |
| `height`         | integer | Height in pixels. With `fullScreenshot: "true"`, this is the full scrollable height (often 5–20× the viewport).                              |

## [​](#handle-errors)Handle errors

The endpoint surfaces four failure modes:

| Status | Meaning                                                                                                                                    | What to do                                                                                                                            |
| ------ | ------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------- |
| 400    | Validation error: neither `domain` nor `directUrl` provided, both provided at once, `page` combined with `directUrl`, or a malformed value | Surface as a user-facing error. The response body’s `error_code` distinguishes `INPUT_VALIDATION_ERROR`, `WEBSITE_ACCESS_ERROR`, etc. |
| 401    | Missing or invalid API key                                                                                                                 | Re-check the env var and the dashboard.                                                                                               |
| 408    | `REQUEST_TIMEOUT`: the page didn’t render before `timeoutMS` elapsed (typically a cold hit)                                                | Retry once with backoff, or prefetch the capture ahead of time.                                                                       |
| 500    | Transient renderer or server error                                                                                                         | Retry with exponential backoff.                                                                                                       |

A retry pattern that covers 500:

```
import ContextDev from "context.dev";

const client = new ContextDev({ apiKey: process.env.CONTEXT_DEV_API_KEY });

async function screenshotWithRetry(domain: string, maxRetries = 3) {
  for (let i = 0; i < maxRetries; i++) {
    try {
      return await client.web.screenshot({ domain });
    } catch (err: any) {
      if (err.status === 500 && i < maxRetries - 1) {
        await new Promise((r) => setTimeout(r, 2 ** i * 1000));
        continue;
      }
      throw err;
    }
  }
}
```

For the full error code catalog, see [Troubleshooting](/optimization/troubleshooting).

## [​](#use-cases)Use cases

* Auto-generate [on-brand campaign and preview images](/use-cases/branded-campaign-assets) for every page.
* Give your coding agent screenshotting tools to do QA or classification tasks.
* Archive dated visual snapshots of pages for compliance or audits.
* Power server-side link-preview / share-card generation for chat apps, comments, and any paste-a-URL flow.

[Get Logos from a Domain](/guides/get-logo-from-url)

[Previous](/guides/get-logo-from-url)

[Extract Product Data from Webpages](/guides/extract-product-from-websites)

[Next](/guides/extract-product-from-websites)

Ctrl+I

Assistant

Responses are generated using AI and may contain mistakes.

[Contact support](mailto:founders@context.dev)

----
url: https://docs.context.dev/changelog
----

> ## Documentation Index
>
> Fetch the complete documentation index at: [/llms.txt](/llms.txt)
>
> Use this file to discover all available pages before exploring further.

[Skip to main content](#content-area)

[​](#june-2026)

June 2026

Ongoing

## [​](#-colorscheme-for-screenshots-&-styleguides-june-27th)🎨 `colorScheme` for Screenshots & Styleguides (June 27th)

The [screenshot](/api-reference/web-scraping/scrape-screenshot) and [`/web/styleguide`](/api-reference/web-extraction/scrape-styleguide) APIs now support `colorScheme=light|dark`, letting you emulate a site’s preferred color mode when capturing screenshots or extracting design systems.

## [​](#-new-context-dev-ui-june-27th)✨ New Context.dev UI (June 27th)

We’ve rolled out a refreshed Context.dev app UI across sign-up, dashboard overview, team management, and API tools. The new experience gives developers a cleaner workspace, faster access to endpoint parameters, clearer usage visibility, and more consistent navigation across the product.

## [​](#-country-parameter-for-web-scraping-june-26th)🌍 `country` Parameter for Web Scraping (June 26th)

The [`/web/scrape/html`](/api-reference/web-scraping/scrape-html), [`/web/scrape/markdown`](/api-reference/web-scraping/scrape-markdown), [`/web/crawl`](/api-reference/web-scraping/crawl-website-&-scrape-markdown), and [screenshot](/api-reference/web-scraping/scrape-screenshot) endpoints now support an optional `country` parameter (two-letter ISO 3166-1 alpha-2 code) that fetches the target page from a Context.dev residential proxy exit in that country.

## [​](#-chunked-screenshots-with-scrolloffset-june-24th)📸 Chunked Screenshots with `scrollOffset` (June 24th)

The [screenshot endpoint](/api-reference/web-scraping/scrape-screenshot) now supports a `scrollOffset` query parameter that returns a viewport-sized (1920×1080) slice of a long page starting at the given Y offset, so you can walk a tall page as successive chunks (`scrollOffset=0, 1080, 2160, …`).

## [​](#-annual-plans-are-here-june-23rd)🗓️ Annual Plans Are Here (June 23rd)

Annual billing is now available on every Context.dev plan — pay yearly and get 2 months free compared to monthly. Pick your plan and switch to yearly on the [pricing page](https://www.context.dev/pricing).

## [​](#-agent-sign-ups-june-22nd)🤖 Agent Sign-Ups (June 22nd)

Agents can now sign up for Context.dev on their own. Just tell your agent to use [context.dev/auth.md](https://context.dev/auth.md) to sign up.

## [​](#-php-sdk-launch-june-21nd)🐘 PHP SDK Launch (June 21nd)

The official [PHP SDK](https://packagist.org/packages/context-dev/context-dev-php) is now available. Install it with `composer require context-dev/context-dev-php` and use `ContextDev\Client` to access Context.dev from PHP 8.1+ projects.

## [​](#-native-docx-&-doc-scraping-june-19th)📄 Native DOCX & DOC Scraping (June 19th)

Our Markdown, HTML, and crawl APIs now natively scrape HTML, XML, JSON, text, CSV, Markdown, SVG, and PDF — and as of today, DOCX and DOC files too. Point any of these endpoints at a Word document and get clean, structured output back without extra conversion steps.

## [​](#-page-metadata-on-scrape-&-crawl-responses-june-18th)🏷️ Page Metadata on Scrape & Crawl Responses (June 18th)

The [`/web/scrape/html`](/api-reference/web-scraping/scrape-html), [`/web/scrape/markdown`](/api-reference/web-scraping/scrape-markdown), and [`/web/crawl`](/api-reference/web-scraping/crawl-website-&-scrape-markdown) responses now include a `metadata` object (`PageMetadata`) extracted from the page’s `<head>` — title, description, language, canonical URL, Open Graph and Twitter tags, JSON-LD, and more — each carrying `sourceUrl` (requested) and `finalUrl` (scraped after redirects). Metadata is read from the unfiltered document, so `includeSelectors`/`excludeSelectors` no longer blank out title/meta fields, and relative links, images, and PDF references now resolve against `finalUrl` for more accurate output.

## [​](#-hourly-usage-for-today-&-yesterday-june-17th)📊 Hourly Usage for Today & Yesterday (June 17th)

The usage page now shows hourly usage for today and yesterday, giving you a more detailed view of recent API calls and credit consumption throughout the day.

## [​](#-gzip-response-compression-june-17th)🗜️ GZIP Response Compression (June 17th)

Context.dev now supports GZIP response compression across the API. Send `Accept-Encoding: gzip` or use a client that negotiates gzip automatically to reduce transfer size on large responses, especially `/web/scrape/html`, `/web/scrape/markdown`, and `/web/crawl`. In scrape benchmarks, gzip cut bytes on the wire by about 82% and improved latency on large payloads. See the new [Compression guide](/optimization/compression) for setup and verification examples.

## [​](#-clear-404-errors-for-scrape-&-crawl-june-16th)🧭 Clear 404 Errors for Scrape & Crawl (June 16th)

The [`/web/scrape/html`](/api-reference/web-scraping/scrape-html), [`/web/scrape/markdown`](/api-reference/web-scraping/scrape-markdown), and [`/web/crawl`](/api-reference/web-scraping/crawl-website-&-scrape-markdown) endpoints now surface missing pages as a dedicated `404` error type. Previously, these cases were grouped under `WEBSITE_ACCESS_ERROR`, which made debugging harder when the target page simply did not exist.

## [​](#-lightning-fast-usage-logs-june-16th)⚡ Lightning-Fast Usage Logs (June 16th)

We’ve significantly improved usage page performance, especially for organizations viewing millions of logs. Large usage histories now load and filter much faster, making the page feel lightning fast even at very high volume.

## [​](#-context-dev-affiliate-program-june-14th)🤝 Context.dev Affiliate Program (June 14th)

We’ve launched the [Context.dev affiliate program](https://partners.dub.co/context-dev) — earn 25% per sale for a full year on every customer you refer. Read more in our [launch announcement](https://www.context.dev/blog/launching-context-dev-affiliate-program).

## [​](#-api-playground-response-export-&-“try-in-cursor”-june-12th)🛝 API Playground Response Export & “Try in Cursor” (June 12th)

The Raw Response view in the developer API playground now matches the on-brand styling of the request code block, with a Copy button pinned to the top-right corner and a new dropdown beside it: **Export JSON** downloads the full response as a `response.json` file, and **Try in Cursor** opens Cursor with a pre-filled prompt containing the response so you can start building against the API immediately.

## [​](#-official-context-dev-cli-june-11th)🖥️ Official `context-dev` CLI (June 11th)

The official [`context-dev` CLI](https://github.com/context-dot-dev/context-dev-cli) is here, wrapping every Context.dev endpoint in a single binary — resolve brands, scrape pages to Markdown, take screenshots, extract styleguides and products, and classify industries straight from the terminal. Prebuilt binaries for macOS, Linux, and Windows ship with every [GitHub release](https://github.com/context-dot-dev/context-dev-cli/releases/latest) (shell completions and man pages included), or install with `go install` on Go 1.22+.Output is pipe-friendly: `--format` picks the encoding (JSON, YAML, pretty, interactive explore), and `--transform` reshapes responses with GJSON paths before they’re printed. Because it’s just a shell command, any coding agent can use it too — see the new [Install the CLI](/install-cli) guide for setup, per-endpoint examples, and a copyable agent prompt.

## [​](#-better-429-rate-limit-responses-june-11th)⏳ Better 429 Rate-Limit Responses (June 11th)

Rate-limited (429) responses now include the `key_metadata` object (`credits_consumed` is always `0` — throttled requests are never charged — plus your `credits_remaining`) and a `Retry-After` header telling you how many seconds until your per-minute window resets. The 429 response is now also fully documented in the OpenAPI spec across all API operations, so generated client types include the rate-limit contract.

## [​](#-key_metadata-in-all-api-responses-june-11th)💳 `key_metadata` in All API Responses (June 11th)

Every JSON response now includes a `key_metadata` object when a valid API key is provided, with `credits_consumed` (credits used by the request) and `credits_remaining` (balance after the request). It’s included on all status codes — including handler errors, validation errors (400), and timeouts (408) — while responses to invalid keys (401) omit it.

## [​](#-status-code-filter-for-api-usage-logs-june-11th)🔍 Status Code Filter for API Usage Logs (June 11th)

The usage logs page on the [dashboard](https://www.context.dev/dashboard) now includes a status code filter, so you can filter your API call history by HTTP status code (2xx, 3xx, 4xx, 5xx). This makes it much easier to track down failed requests and debug issues with your integration.

## [​](#-improved-web-extraction-pipeline-june-11th)🧠 Improved Web Extraction Pipeline (June 11th)

We’ve significantly improved our web extraction pipeline. Extractions are now more accurate and more reliable across a wider range of websites — no changes needed on your end, all [`/web/extract`](/guides/extract-structured-data-from-websites) requests benefit automatically.

## [​](#-documentation-refresh-june-10th)📚 Documentation Refresh (June 10th)

We’ve updated our documentation with a fresh new look and brand new AI-native content. The docs are now easier to navigate, nicer to read, and better suited for both humans and AI agents building with Context.dev.

## [​](#-api-key-usage-breakdown-june-9th)🔑 API Key Usage Breakdown (June 9th)

API calls history now includes a “By Key” breakdown, so you can view call and credit usage by API key. The chart reuses the existing usage aggregation logic and shows API key names when available, with key IDs as fallbacks.

## [​](#-html-selector-filters-for-scrape-&-crawl-june-8th)🎯 HTML Selector Filters for Scrape & Crawl (June 8th)

The [`web/scrape/html`](/api-reference/web-scraping/scrape-html), `web/scrape/markdown`, and [`web/crawl`](/api-reference/web-scraping/crawl-website-&-scrape-markdown) endpoints now accept `includeSelectors` and `excludeSelectors` CSS-selector parameters to narrow scraped content down to exactly what you need.Use `includeSelectors` to keep only matching subtrees (returned as a subtree union in document order) and drop everything else, and `excludeSelectors` to remove matching elements afterward; exclusion always wins when an element matches both. Selectors are validated up front (invalid CSS returns `INPUT_VALIDATION_ERROR` / HTTP 400 before any scraping), capped at 50 selectors per list and 2048 characters each. Filters apply only to HTML-like content (non-HTML like PDF and XML is returned untouched), and selector values are part of the scrape cache key so different selectors are cached separately. The OpenAPI spec and generated API types have been updated to document the new parameters.

## [​](#-native-xml-conversion-for-xsl-sitemaps-&-feeds-june-7th)🗺️ Native XML Conversion for XSL Sitemaps & Feeds (June 7th)

The [Scrape HTML endpoint](/api-reference/web-scraping/scrape-html) now natively handles XML conversion, so XSL-styled sitemaps and feeds are surfaced as raw XML with a detected content type instead of Chrome’s rendered HTML viewer.When a page is served as XML (like an XSL-styled sitemap), we now recover the raw XML and re-fetch the non-JS-rendered document so you get the underlying markup. The Scrape HTML response now includes a `type` field (`"html" | "xml" | "json" | ...`) so you can tell what kind of content was returned, and the OpenAPI spec and generated API types have been updated to match.

## [​](#-headers-parameter-for-web-scraping-june-6th)🧾 `headers` Parameter for Web Scraping (June 6th)

The web scraping endpoints now support an optional `headers` query parameter for forwarding custom outbound HTTP headers to the target URL. Send headers as deep-object query params such as `headers[X-Custom]=value`; when headers are provided, caching is bypassed so requests always use the supplied header values.Use it to pass a custom `User-Agent`, cookies, authorization headers, locale hints like `Accept-Language`, or any other target-site headers your scrape needs. All SDKs have been updated with support for the new `headers` parameter.

## [​](#-context-dev-is-backed-by-y-combinator-june-1st)🚀 Context.dev is Backed by Y Combinator (June 1st)

Context.dev is now backed by [Y Combinator](https://www.ycombinator.com/). We’re excited to keep building the web intelligence layer for developers, AI products, and automation teams with YC’s support.

[​](#may-2026)

May 2026

Structured Web Extraction API, Web Search API, Rate Limits, SOC 2, Go SDK & Web Endpoint Controls

## [​](#-structured-web-extraction-api-may-31st)🧠 Structured Web Extraction API (May 31st)

New [`POST /web/extract`](/guides/extract-structured-data-from-websites) endpoint for extracting structured data from websites with your own JSON Schema. The older `/brand/ai/query` endpoint is now deprecated in favor of `/web/extract`, but it will stay live for the foreseeable future, so there is no need to migrate right away. New builds should prefer `/web/extract`.

## [​](#-better-caching-&-web-search-controls-may-30th)⚡ Better Caching & Web Search Controls (May 30th)

You now have better caching controls in the Fonts and style guide demos, including quick 1-day, 7-day, and 30-day presets on the developer API playground. We also updated all code examples (cURL, JavaScript/TypeScript, Ruby, Python, and Go) so it’s easier to use caching in your own implementation.Web Search now supports more Markdown and PDF parsing controls, plus request timing options like `waitForMs`, `maxAgeMs`, and `timeoutMS`. We also updated the docs and SDKs to cover the existing pricing-page targeting option in AI Query (`specific_pages.pricing`) and to reflect all new options.

## [​](#-per-minute-rate-limits-may-25th)⏱️ Per-Minute Rate Limits (May 25th)

Rate limits have moved to a per-minute basis and are now surfaced directly on the [dashboard](https://www.context.dev/dashboard) so you can see your plan’s limit at a glance. Updated limits: Free 10 requests/min, Starter 120 requests/min, Pro 300 requests/min, Scale 1,200 requests/min. See the [rate limits page](/optimization/rate-limits) for full details.

## [​](#-web-search-api-may-16th)🔎 Web Search API (May 16th)

New `POST /web/search` endpoint for web search with optional per-result Markdown scraping in one request. Use domain filters, freshness windows, query expansion, and Markdown options to control recall and extraction.

## [​](#-soc-2-type-i-compliance-may-14th)🔐 SOC 2 Type I Compliance (May 14th)

Context.dev is now SOC 2 Type I compliant. SOC 2 Type II is pending the end of its observation period, and you can follow our current security and compliance status in the [Context.dev Trust Center](https://trust.context.dev/).

## [​](#-go-sdk-launch-may-14th)🧩 Go SDK Launch (May 14th)

The official [Go SDK](https://pkg.go.dev/github.com/context-dot-dev/context-go-sdk) is now available. Install it with `go get github.com/context-dot-dev/context-go-sdk` and use `contextdev.NewClient` to access Context.dev from Go 1.22+ projects.

## [​](#-cookie-popup-handling-for-screenshot-endpoint-may-11th)🍪 Cookie Popup Handling for Screenshot Endpoint (May 11th)

The [screenshot endpoint](/api-reference/web-scraping/scrape-screenshot) now supports an optional `handleCookiePopup` query parameter. Set `handleCookiePopup=true` to dismiss cookie or consent banners before capture; omit it or set it to `false` to capture the page without that extra step.

## [​](#-new-pdf-controls-for-pdf-parsing-may-10th)📄 New `pdf` Controls for PDF Parsing (May 10th)

The web scraping endpoints now support a backwards-compatible `pdf` parameter, replacing `parsePDF` with richer controls for PDF handling. Use `pdf.shouldParse`, `pdf.start`, and `pdf.end` to steer whether PDF files are parsed and limit extraction/OCR to a specific page range.

## [​](#-new-stopafterms-steering-parameter-for-web-crawl-may-10th)⏱️ New `stopAfterMs` Steering Parameter for Web Crawl (May 10th)

The [`/web/crawl`](/api-reference/web-scraping/crawl-website-&-scrape-markdown) endpoint now supports a `stopAfterMs` parameter, giving crawls a soft time budget. After each page scrape, the crawler checks elapsed time and returns the pages collected so far if the budget has been exceeded. Defaults to 80 seconds (`80000` ms), with supported values from 10 seconds (`10000` ms) to 110 seconds (`110000` ms).

## [​](#-waitforms-support-across-web-endpoints-may-8th)⏱️ `waitForMs` Support Across Web Endpoints (May 8th)

Most web endpoints now support a `waitForMs` parameter, giving you finer control over how long scraping waits for pages to load dynamic content before returning results.

## [​](#-screenshot-endpoint-upgrades-may-7th)📸 Screenshot Endpoint Upgrades (May 7th)

The [screenshot endpoint](/api-reference/web-scraping/scrape-screenshot) now supports configurable browser dimensions and a `maxAgeMs` parameter to control cached screenshot freshness. Screenshot responses now also include `width` and `height` for the returned image, so you can size and lay out screenshots without an extra round trip.

## [​](#-new-maxagems-parameter-for-brand-endpoints-may-6th)⏱️ New `maxAgeMs` Parameter for Brand Endpoints (May 6th)

The brand endpoints, including [`/brand/retrieve`](/api-reference/brand-intelligence/retrieve-brand-data-by-domain), now support an optional `maxAgeMs` parameter to control how long cached brand data may be reused before the API performs a hard refresh. Defaults to 3 months (`7776000000` ms); values below 1 day are clamped to 1 day, and values above 1 year are clamped to 1 year. Warning: this may increase latency if set.

## [​](#-cached-results-&-image-enrichment-for-/web/scrape/images-may-5th)🖼️ Cached Results & Image Enrichment for `/web/scrape/images` (May 5th)

The [`/web/scrape/images`](/api-reference/web-scraping/scrape-images) endpoint now supports cached results and optional image enrichment. By default, recent image scrape results may be reused for up to 24 hours; use `maxAgeMs=0` to force a fresh scrape, or set a custom cache window up to 30 days.New enrichment options let you request image dimensions, hosted `media.brand.dev` URLs, MIME types, and asset classification for scraped images. Classification can identify assets such as photography, illustrations, logos, word marks, icons, patterns, graphics, and other image types.Pricing remains **1 credit** for standard image scrape requests. Requests with any enrichment option enabled cost a flat **5 credits per call**.

## [​](#-improved-word-mark-detection-may-3rd)✍️ Improved Word Mark Detection (May 3rd)

Word mark extraction has been dramatically improved: we now reliably capture word marks composed of an image logo paired with text in a specific layout from any website.

## [​](#-includeframes-parameter-for-web-scraping-endpoints-may-1st)🖼️ `includeFrames` Parameter for Web Scraping Endpoints (May 1st)

The [`/web/scrape/html`](/api-reference/web-scraping/scrape-html), [`/web/scrape/markdown`](/api-reference/web-scraping/scrape-markdown), and [`/web/crawl`](/api-reference/web-scraping/crawl-website-&-scrape-markdown) endpoints now support an optional `includeFrames` parameter (default: `false`) that waits for iframe content to render and embeds it directly in the response, so embedded widgets, video players, and third-party docs are captured.

[​](#april-2026)

April 2026

Web Crawl & SIC Endpoints, PDF Support, Usage Dashboard Upgrades, Style Guide Overhaul

## [​](#-api-playground-improvements-april-27th)🛠️ API Playground Improvements (April 27th)

Every endpoint in the developer portal API playground now links to its full docs page, and all parameters are configurable directly from the UI.

## [​](#-usage-dashboard-upgrades-april-25th)📈 Usage Dashboard Upgrades (April 25th)

Usage logs are now fully paginated (30/page) with access to your complete request history, and the path filter spans every endpoint your org has ever called. The usage chart drops the 8-path cap, adds an “All Time” range with day/month grouping for longer windows, and supports an interactive legend to toggle paths or statuses on and off.

## [​](#-new-sic-classification-endpoint-april-25th)🏭 New SIC Classification Endpoint (April 25th)

New [`GET /web/sic`](/api-reference/web-extraction/classify-sic-industries) endpoint that classifies any brand into Standard Industrial Classification (SIC) codes from a domain or name. Choose between the original 1987 SIC system (`original_sic`), which is still used heavily across the US, or the latest pruned SIC list maintained by the SEC (`latest_sec`).

## [​](#-new-sku-field-on-product-endpoints-april-23rd)🏷️ New `sku` Field on Product Endpoints (April 23rd)

The `POST /brand/ai/products` and `POST /brand/ai/product` endpoints now return a `sku` field on every product, giving you a reliable identifier to match products across your systems, track inventory, and remove duplicates across retailers. Consulting and software product types return `sku: null`.

## [​](#-pdf-support-for-web-scraping-endpoints-april-23rd)📄 PDF Support for Web Scraping Endpoints (April 23rd)

The [`/web/scrape/html`](/api-reference/web-scraping/scrape-html), [`/web/scrape/markdown`](/api-reference/web-scraping/scrape-markdown), and [`/web/crawl`](/api-reference/web-scraping/crawl-website-&-scrape-markdown) endpoints now handle PDF URLs natively.

* **New `parsePDF` parameter** (default: `true`) — when set to `false`, PDF URLs are skipped and return a 400 response instead of attempting extraction.
* **Structured output** — PDF content is extracted and returned as `<html><pdf>…</pdf></html>`, consistent with HTML scrape responses.
* **Automatic OCR** — scanned PDF files with low text yield are automatically routed through OCR, and embedded images inside PDF files are automatically detected and processed with OCR to maximize text coverage.
* **`numSkipped` on crawl responses** — `/web/crawl` responses now include a `numSkipped` counter reflecting pages skipped due to PDF filtering or URL regex rules.

## [​](#-new-maxagems-parameter-for-web-crawl-endpoint-april-23rd)⏱️ New `maxAgeMs` Parameter for Web Crawl Endpoint (April 23rd)

The [`/web/crawl`](/api-reference/web-scraping/crawl-website-&-scrape-markdown) endpoint now supports an optional `maxAgeMs` parameter to serve cached crawl results within a specified age, improving performance for repeated requests.

## [​](#-new-fontlinks-field-on-fonts-&-style-guide-endpoints-april-21st)🔤 New `fontLinks` Field on Fonts & Style Guide Endpoints (April 21st)

The [`/web/fonts`](/api-reference/web-extraction/scrape-fonts) and [`/web/styleguide`](/api-reference/web-extraction/scrape-styleguide) endpoints now return a `fontLinks` object containing downloadable font file URLs keyed by family name. Each entry is typed as `google` or `custom`, exposes upright font files keyed by weight (e.g. `"400"`, `"500"`, `"700"`), and includes a Google Fonts `category` or a human-readable `displayName` for custom fonts, so clients can match a `fontFamily`/`fontWeight` directly to a concrete file URL.

## [​](#-new-urlregex-parameter-for-sitemap-endpoint-april-19th)🔍 New `urlRegex` Parameter for Sitemap Endpoint (April 19th)

The [`/web/scrape/sitemap`](/api-reference/web-scraping/crawl-sitemap) endpoint now supports an optional `urlRegex` query parameter to filter which URLs are collected during a sitemap crawl.

## [​](#-usage-page-&-logs-upgrades-april-16th)📊 Usage Page & Logs Upgrades (April 16th)

The usage page on the developer portal now shows **credits over time** in addition to the existing API calls over time, plus a new breakdown of which paths you’re calling most often. We also added the ability to **search through your logs by input**, and it’s lightning fast. On top of that, UX improvements have been shipped across the usage page and the homepage of the developer portal.

## [​](#-multiple-api-keys-on-the-developer-dashboard-april-11th)🔑 Multiple API Keys on the Developer Dashboard (April 11th)

The developer dashboard now supports creating and managing multiple API keys per account, making it easier to separate environments, rotate credentials, and scope access across projects.

## [​](#-new-directurl-parameter-for-screenshot-endpoint-april-9th)🔗 New `directUrl` Parameter for Screenshot Endpoint (April 9th)

The screenshot endpoint now supports a [`directUrl`](/api-reference/web-scraping/scrape-screenshot#parameter-direct-url) parameter to screenshot a specific URL directly, bypassing domain resolution.

## [​](#-expanded-social-media-support-april-7th)💬 Expanded Social Media Support (April 7th)

Brand social links now include WhatsApp, Telegram, and Line, which brings the total supported platforms to 31.

## [​](#-new-primary_language-field-on-all-brand-endpoints-april-5th)🌐 New `primary_language` Field on All Brand Endpoints (April 5th)

All brand endpoints now return a [`primary_language`](/api-reference/brand-intelligence/retrieve-brand-data-by-domain#response-brand-primary-language) field indicating the primary language of the brand’s website content, detected from HTML lang tags, page content analysis, and social media descriptions.

## [​](#-new-web-crawl-endpoint-april-4th)🕷️ New Web Crawl Endpoint (April 4th)

New `POST /web/crawl` endpoint that crawls an entire website and returns every page as clean Markdown. Point it at any URL and it will follow same-domain links across up to 500 pages, giving you a massive amount of structured context from a site in a single API call. Each successfully crawled page costs 1 credit.The endpoint supports `maxPages`, `maxDepth`, `urlRegex` filtering, `useMainContentOnly` for stripping nav/footer chrome, and `followSubdomains` for broader coverage. Response metadata includes per-page status codes, crawl depth, and success/failure counts so you know exactly what you got back.

## [​](#-major-style-guide-endpoint-overhaul-april-3rd)⚡ Major Style Guide Endpoint Overhaul (April 3rd)

Massive performance improvements to the `/web/styleguide` endpoint (formerly `/brand/styleguide`): **p50 latency is now 6 seconds**. The `prioritize` parameter has been removed since we now handle prioritization natively. Additionally, some objects in the response now include a `css` field with ready-to-use CSS, along with other new return parameters for richer data extraction.

[​](#march-2026)

March 2026

Rebrand to Context.dev, Credit-Based Pricing, New Web Scraping Endpoints & Enhancements

## [​](#-scrape-markdown-usemaincontentonly-parameter-march-28th)📄 Scrape Markdown: `useMainContentOnly` Parameter (March 28th)

The `/web/scrape/markdown` endpoint now supports a [`useMainContentOnly`](/api-reference/web-scraping/scrape-markdown#parameter-use-main-content-only) parameter to extract only the main content of a page, excluding headers, footers, sidebars, and navigation.

## [​](#-scrape-images-background-image-support-march-25th)🖼️ Scrape Images: Background Image Support (March 25th)

The `/web/scrape/images` endpoint now extracts CSS background images in addition to standard image elements, for more complete image coverage from any page.

## [​](#-sitemap-maxlinks-parameter-march-25th)🗺️ Sitemap `maxLinks` Parameter (March 25th)

The sitemap endpoint now supports a `maxLinks` parameter, letting you control how many links are crawled (min 1, max 100,000). (The response `urls[]` array is still capped at 500 URLs.) We plan to raise the upper limit based on customer feedback.

## [​](#-brand-dev-is-now-context-dev-march-21st)🚀 Brand.dev is Now Context.dev (March 21st)

We’ve changed from Brand.dev to Context.dev to reflect the full scope of what we provide: context for software, web apps, and AI agents. All existing integrations remain fully backwards compatible with no code changes required. Brand data remains a first-class citizen alongside our expanded capabilities in AI-powered extraction, product intelligence, and custom web queries.*Entries below this point predate the rebrand; product names and links have been updated retroactively to Context.dev.*

## [​](#-improved-logo-detection-march-20th)🖼️ Improved Logo Detection (March 20th)

Improved logo detection to filter out icon shapes that are clearly not logo-like, reducing false positives in extracted brand assets.

## [​](#-country-parameter-for-name-search-march-17th)🌍 Country Parameter for Name Search (March 17th)

Added `country_gl` to `/brand/retrieve-by-name`. It lets you specify a country code so you get the right company when the same name exists in multiple countries.

## [​](#-new-pricing-api-credits-march-8th)💳 New Pricing: API Credits (March 8th)

We’re switching from flat API calls to a credit-based system.Nothing is getting more expensive.This just lets us charge less for lighter operations. The web scraping endpoints? 1 credit each. That’s 1/10th the cost of a standard API call.Your existing quota converts directly: 3,000 calls becomes 30,000 credits. Same or better value across the board.

## [​](#-web-scraping-endpoints-added-to-dashboard-march-7th)🎛️ Web Scraping Endpoints Added to Dashboard (March 7th)

The four new web scraping endpoints are now visible and testable directly from the developer dashboard.

## [​](#-new-web-scraping-endpoints-march-6th)🕸️ New Web Scraping Endpoints (March 6th)

We’ve released four new web scraping endpoints, giving you direct access to raw page content from any URL.

* **`GET /web/scrape/html`** — Scrapes a URL and returns the raw HTML content of the page. Uses automatic proxy escalation to handle blocked sites.
* **`GET /web/scrape/markdown`** — Scrapes a URL and converts the HTML to markdown. Supports options to include/exclude links and images.
* **`GET /web/scrape/images`** — Extracts all images from a URL, including inline SVG files, base64 data URI strings, and standard image URLs across `img`, `svg`, `picture`, `link`, and `video` elements.
* **`GET /web/scrape/sitemap`** — Crawls a domain’s sitemap and returns all discovered page URLs (up to 500). Supports sitemap index files, parallel fetching, and automatic duplicate removal.

Stealth features are included free of charge automatically.

[​](#february-2026)

February 2026

Logo Link Launch, Quota Increases, Single Product API, Perf Boost & New Parameters

## [​](#-high_confidence_only-for-transaction-identification-february-28th)🎯 `high_confidence_only` for Transaction Identification (February 28th)

The `GET /brand/transaction_identifier` endpoint now supports a `high_confidence_only` query parameter (boolean, default: `false`). When set to `true`, the API runs extra verification steps so the identified brand matches the transaction with high confidence.

## [​](#-directurl-for-style-guide-extraction-february-23rd)🔗 `directUrl` for Style Guide Extraction (February 23rd)

The `GET /web/styleguide` endpoint (formerly `/brand/styleguide`) now supports a `directUrl` query parameter. Use it to fetch a specific page directly (e.g., a design system or style guide URL) instead of providing a domain. Either `domain` or `directUrl` is required, not both.

## [​](#-infra-performance-boost-february-22nd)⚡ Infra Performance Boost (February 22nd)

Infrastructure improvements deliver a **20% latency reduction** across all API endpoints. Your requests should feel noticeably faster.

## [​](#-new-images-field-for-product-extraction-february-22nd)🖼️ New `images` Field for Product Extraction (February 22nd)

The `POST /brand/ai/products` and `POST /brand/ai/product` endpoints now return an `images` array on each product. This field contains URLs to product images found on the page (up to 7 images per product), in addition to the existing `image_url` field for the primary image.**Updated Product Schema:**

* **`images`** — Array of image URLs from the product page (up to 7)
* **`image_url`** — Primary product image URL (unchanged)

## [​](#-quota-increase-for-plans-february-10th)📈 Quota Increase for Plans (February 10th)

We’ve had a major breakthrough in reducing our infrastructure costs, and we’re passing the savings directly to you with increased quotas at no additional cost.**Updated Quotas:**

* **Starter** — 2,000 → **3,000 calls/month**
* **Pro** — 10,000 → **20,000 calls/month**

**Legacy Plan Upgrades:**&#x49;f you’re on a legacy plan, you’re getting a bump too:

* 1,000 or 1,500 call plans → **3,000 calls/month**
* 15,000 call plans → **20,000 calls/month**

As always, we never raise prices on existing customers; your rate is locked in for life. And we’ll never lower your quota either. You’ll always receive the latest updates and improvements at the price you signed up for.

## [​](#-new-single-product-extraction-endpoint-february-8th)🛒 New Single Product Extraction Endpoint (February 8th)

We’ve released a new beta endpoint to extract product information from a single URL. The new `POST /brand/ai/product` endpoint determines if a given URL is a product detail page, classifies the platform, and extracts structured product data.**New Endpoint:**

* **`POST /brand/ai/product`** - Extract a single product from a URL

**Supported Platforms:**

* Amazon
* TikTok Shop
* Large marketplace sites
* Generic ecommerce sites

**Extracted Product Data:**

* Product name, description, and category
* Price, currency, and billing frequency
* Pricing model (per seat, flat, tiered, free tier, custom)
* Features, target audience, and tags
* Product image URL

**Request Example:**

```
{
  "url": "https://www.amazon.com/dp/B0EXAMPLE",
  "timeoutMS": 30000
}
```

**Response Example:**

```
{
  "is_product_page": true,
  "platform": "amazon",
  "product": {
    "name": "Example Product",
    "description": "A great product",
    "price": 29.99,
    "currency": "USD",
    "features": ["Feature 1", "Feature 2"],
    "target_audience": ["Developers"],
    "tags": ["software", "tools"]
  }
}
```

[View the documentation](/api-reference/web-extraction/extract-a-single-product-from-a-url)

## [​](#-new-directurl-parameter-for-the-extract-products-api-february-7th)🛍️ New `directUrl` Parameter for the Extract Products API (February 7th)

The extract products endpoint now supports a `directUrl` parameter, allowing you to pass a direct link to a shop page for product extraction. This is useful for extracting products from marketplace shops such as TikTok Shop, eBay stores, Amazon storefronts, or any other direct URI.**New Parameter:**

* **`directUrl`** - A specific URL to use directly as the starting point for product extraction, bypassing domain resolution

**Example Request:**

```
{
  "directUrl": "https://www.etsy.com/shop/example",
  "maxProducts": 5
}
```

[View the AI Products documentation](/api-reference/web-extraction/extract-products-from-a-brands-website)

## [​](#-logo-link-now-live-february-1st)🔗 Logo Link Now Live (February 1st)

Logo Link is now available! Easily link logos to their brand pages with our new Logo Link feature.[Check out Logo Link](/guides/get-logo-from-url)

[​](#january-2026)

January 2026

Docs Revamp, Make Integration, AI Products API, Dashboard Redesign & Performance Improvements

## [​](#-documentation-revamp-january-31st)📚 Documentation Revamp (January 31st)

We’ve revamped our entire documentation to be more user-friendly with improved guides, making it easier than ever to get started and find what you need.

## [​](#-make-integration-now-live-january-25th)🔌 Make Integration Now Live (January 25th)

Our Make integration is now available! Connect Context.dev with thousands of apps using Make’s powerful automation platform.[Check out the Make integration](https://www.make.com/en/integrations/context-dev)

## [​](#-social-links-bug-fix-january-15th)🐛 Social Links Bug Fix (January 15th)

Fixed an issue where generic social links (e.g., `https://x.com/`) were being returned when they weren’t tightly correlated with the brand.

## [​](#-complete-dashboard-redesign-january-14th)🎨 Complete Dashboard Redesign (January 14th)

We’ve launched a complete redesign of the developer dashboard with a fresh new look and improved user experience.

## [​](#-new-ai-products-extraction-api-january-5th)🛍️ New AI Products Extraction API (January 5th)

We’ve released a new beta endpoint to extract product information from any brand’s website! The AI Products API uses advanced AI to analyze websites and return structured product data including pricing, features, target audience, and more.**New Endpoint:**

* **`POST /brand/ai/products`** - Extract products from a brand’s website

**Key Features:**

* **Product Details** - Get name, description, category, and image URL for each product
* **Pricing Information** - Extract price, currency, billing frequency (monthly/yearly/one-time/usage-based), and pricing model (per-seat/flat/tiered/free-tier/custom)
* **Rich Metadata** - Retrieve features list, target audience, and tags for each product
* **Customizable Results** - Control the maximum number of products to extract (1-12)

**Request Example:**

```
{
  "domain": "example.com",
  "maxProducts": 5
}
```

**Response Data:**

* Product name and description
* Price, currency, and billing frequency
* Pricing model type
* Product URL and image URL
* Category classification
* Features array
* Target audience array
* Tags array

This endpoint is perfect for competitive analysis, market research, lead enrichment, and building product comparison tools.

## [​](#-developer-dashboard-updates-january-3rd)🎛️ Developer Dashboard Updates (January 3rd)

We’ve updated the developer dashboard to display the new endpoints added in recent months:

* **Retrieve by Email** - Now visible in the dashboard endpoint list
* **Get Fonts** - Font extraction endpoint now shown in the dashboard

These updates make it easier to discover and test all available API endpoints directly from your dashboard.

## [​](#-happy-new-year-performance-improvements-january-1st)🎆 Happy New Year! Performance Improvements (January 1st)

Happy New Year! 🎉We’re kicking off 2026 with a significant performance improvement: the **p50 latency for cold hits on the `/brand/retrieve` endpoint is now down to 7 seconds**, thanks to continued infrastructure optimizations and caching improvements.This represents a substantial improvement from our previous 9-second p50, making brand data retrieval even faster for all your applications.

[​](#december-2025)

December 2025

Email Preloading, NAICS Enhancements, Transaction Enrichment & Backdrops Improvements

## [​](#-new-email-preload-endpoint-december-22nd)⚡ New Email Preload Endpoint (December 22nd)

We’ve released a new preload endpoint that accepts an email address, extracts the domain, and queues it ahead of future requests to improve latency. This endpoint doesn’t count against your quota and is available for paid customers to optimize their API performance.It will immediately return a 422 if the email is a free or disposable email.[View the endpoint documentation](/api-reference/utility/prefetch-brand-data-by-email)

## [​](#-improved-backdrops-processing-december-15th)🖼️ Improved Backdrops Processing (December 15th)

We’ve improved our image processing pipeline to remove duplicate backdrops, ensuring cleaner and more efficient image data.

## [​](#-enhanced-naics-industry-classification-december-14th)🏭 Enhanced NAICS Industry Classification (December 14th)

We’ve significantly improved our NAICS industry classification endpoint with new parameters and enhanced accuracy. The classification system now provides more control and better insights into how well each NAICS code matches a brand.**New Parameters:**

* **`minResults`** - Minimum number of NAICS codes to return (1-10, defaults to 1)
* **`maxResults`** - Maximum number of NAICS codes to return (1-10, defaults to 5)

**New Response Field:**

* **`confidence`** - Each NAICS code now includes a confidence level (`high`, `medium`, or `low`) indicating how well the code matches the company description

**Accuracy Improvements:**

* Dramatically improved classification accuracy through enhanced algorithms and better data processing
* More reliable industry classification for better business intelligence and data analysis

These improvements give you more flexibility in retrieving multiple classification options and better visibility into the reliability of each classification result.

## [​](#-new-phone-parameter-for-transaction-enrichment-december-10th)📞 New Phone Parameter for Transaction Enrichment (December 10th)

We’ve added a new optional `phone` parameter to the Transaction Enrichment endpoint to help dramatically increase identification accuracy when Visa/Mastercard returns phone number data in transaction information.**New Parameter:**

* **`phone`** - Optional phone number from the transaction to help verify brand match

This parameter works alongside existing transaction data to provide more precise brand identification, especially useful when payment processors include merchant phone numbers in transaction details.[View the parameter documentation](/api-reference/brand-intelligence/identify-brand-from-transaction-data#parameter-phone)

[​](#november-2025)

November 2025

Font & ISIN APIs, Transaction Enrichment, Fairer Pricing & AI Enhancements

## [​](#-ai-query-enhancements-november-30th)🚀 AI Query Enhancements (November 30th)

**AI Query Improvements:**

* Added pricing page analysis support in `specific_pages` parameter
* Enhanced list extraction with `datapoint_list_type` and `datapoint_object_schema` parameters
* Now supports arrays of objects in addition to primitive arrays

## [​](#-new-font-extraction-api-november-29th)🔤 New Font Extraction API (November 29th)

We’ve released a new beta endpoint to extract font information from any brand’s website! The Font API provides comprehensive typography data including font families, usage statistics, fallbacks, and element/word counts.[New Endpoint Link](/api-reference/web-extraction/scrape-fonts)**Key Features:**

* **Font Families** - Get all font families used on the website
* **Usage Statistics** - See where fonts are used with CSS selectors and element types
* **Fallback Fonts** - View fallback font families for each font
* **Usage Metrics** - Get element counts, word counts, and percentage statistics for each font

**Response Data:**

* Font family names
* Array of CSS selectors/element types where each font is used
* Fallback font families
* Number of elements and words using each font
* Percentage of words and elements using each font

This endpoint is perfect for typography analysis, design system extraction, and understanding how brands use fonts across their websites.[Check out the Font API documentation](/api-reference/web-extraction/scrape-fonts)

## [​](#-happy-thanksgiving-brand-update-requests-november-27th)🦃 Happy Thanksgiving! Brand Update Requests (November 27th)

Happy Thanksgiving! 🦃We’re excited to announce our new [brand update request page](https://www.context.dev/update)! You can now request an update to any brand and we’ll get to it within 24 hours or less. Whether you need to update your logo, colors, or any other brand information, simply submit a request and we’ll handle it quickly.

## [​](#-transaction-enrichment-parameters-november-24th)🎯 Transaction Enrichment Parameters (November 24th)

We’ve added three new optional parameters to the Transaction Enrichment endpoint to improve transaction identification accuracy:

* **`mcc`** - Merchant Category Code (4-digit code) for business category context
* **`city`** - City name to prioritize local branches or regional variations
* **`country_gl`** - ISO 3166-1 alpha-2 country code for geographic prioritization

These parameters work together to provide more precise brand identification, especially when dealing with ambiguous merchant names or international brands.[More details can be found here](/guides/enrich-transaction-codes)

## [​](#-new-retrieve-by-isin-endpoint-november-18th)🔢 New Retrieve-by-ISIN Endpoint (November 18th)

We’ve added a new endpoint to retrieve brand data by ISIN (International Securities Identification Number). This endpoint allows you to look up companies using their ISIN and returns comprehensive brand information.**New Endpoint:**

* **`/brand/retrieve-by-isin`** - Retrieve brand information using an ISIN

**Key Features:**

* Supports all ISIN formats (e.g., ‘AU000000IMD5’, ‘US0378331005’)
* ISIN must be exactly 12 characters: 2 letters followed by 9 alphanumeric characters and ending with a digit
* Returns the same comprehensive brand data as other retrieve endpoints
* Supports all standard parameters including `force_language`, `maxSpeed`, and `timeoutMS`

This endpoint is perfect for financial applications, investment platforms, and any system that works with ISIN identifiers to identify and retrieve brand information for publicly traded companies.

## [​](#-fairer-charging-model-only-pay-for-success-november-16th)💰 Fairer Charging Model - Only Pay for Success (November 16th)

We’ve changed the way we charge and will only charge on successful 200 status code responses.This means no more charges for:

* Bad domains
* Invalid inputs
* Bad emails (free or disposable email providers) for retrieve by email endpoint

**What this really means:** Even if we expend server resources to scrape a bad domain, whether it’s hosting a “for sale” page, a generic lander, or any other non-functional website, as long as you have a valid API key, we will not charge you for that request. You only pay when we successfully retrieve brand data with a 200 status code response.We believe this provides exponentially more value to our customers.

## [​](#-demo-experience-&-website-updates-november-15th)🎯 Demo Experience & Website Updates (November 15th)

We’ve improved the demo experience to show bad inputs in a more informative way, fixed blog 404 pages, and updated all links on our main website to reflect the updated docs.

## [​](#-github-login-and-sign-up-support-november-10th)🔐 GitHub Login and Sign-Up Support (November 10th)

You can now sign up and log in to your account using GitHub!

[​](#october-2025)

October 2025

Email Retrieval, Endpoint Split, Speed Boost & Quality Improvements

## [​](#-happy-halloween-new-email-based-brand-retrieval-endpoint-october-31st)🎃 Happy Halloween! New Email-Based Brand Retrieval Endpoint (October 31st)

Happy Halloween! 👻We’ve released a new endpoint to retrieve brand data by email address! This endpoint automatically extracts the domain from the email address and returns brand data for that domain. Best of all, it automatically returns an appropriate error if the email is from a free email provider (like gmail.com, yahoo.com) or a disposable email address, saving you from unnecessary processing.[Check out the new endpoint documentation](/api-reference/brand-intelligence/retrieve-brand-data-by-email-address)

## [​](#-split-retrieve-endpoint-for-better-documentation-october-29th)📚 Split Retrieve Endpoint for Better Documentation (October 29th)

We’ve split our retrieve endpoint into three separate endpoints to make the documentation much easier to read and understand:

* **`retrieve`** - The original endpoint for retrieving brand data by domain
* **`retrieve-by-ticker`** - Dedicated endpoint for retrieving brand data by stock ticker symbol
* **`retrieve-by-name`** - Dedicated endpoint for retrieving brand data by company name

This separation makes it clearer which parameters are available for each use case and provides more focused documentation for each endpoint type.

## [​](#-infrastructure-improvements-20%-speed-boost-october-25th)⚡ Infrastructure Improvements - 20% Speed Boost (October 25th)

We’ve released significant infrastructure improvements that have resulted in a 20% speed increase across all API requests.

## [​](#-reduced-false-positives-on-icon-like-logos-october-13th)🎯 Reduced False Positives on Icon-like Logos (October 13th)

We’ve released an improvement that significantly reduces false positives when detecting icon-like logos, providing more accurate brand data extraction.

## [​](#-enhanced-stock-market-ticker-support-with-exchange-selection-october-8th)🌍 Enhanced Stock Market Ticker Support with Exchange Selection (October 8th)

We’ve enhanced our brand data fetching capabilities for stock market ticker support by now allowing customers to specify the exchange they want to retrieve the ticker for. This gives you more precise control when working with international stocks and ensures you get the correct ticker data for companies listed on different exchanges worldwide.**New Parameter:**

* **`ticker_exchange`** - Optional stock exchange for the ticker. Only used when ticker parameter is provided. Defaults to assuming the ticker is American if not specified.

**Available Exchange Options:**&#x41;MEX, AMS, AQS, ASX, ATH, BER, BME, BRU, BSE, BUD, BUE, BVC, CBOE, CNQ, CPH, DFM, DOH, DUB, DUS, DXE, EGX, FSX, HAM, HEL, HKSE, HOSE, ICE, IOB, IST, JKT, JNB, JPX, KLS, KOE, KSC, KUW, LIS, LSE, MCX, MEX, MIL, MUN, NASDAQ, NEO, NSE, NYSE, NZE, OSL, OTC, PAR, PNK, PRA, RIS, SAO, SAU, SES, SET, SGO, SHH, SHZ, SIX, STO, STU, TAI, TAL, TLV, TSX, TSXV, TWO, VIE, WSE, XETRA

[​](#september-2025)

September 2025

API History Beta, Automation Integration 2.0, Performance Boost & Page Parameters

## [​](#-screenshot-page-parameter-added-to-api-playground-september-28th)🔗 Screenshot Page Parameter Added to API playground (September 28th)

We’ve updated our API playground to account for the new “page” parameter added to the screenshot API.If provided, the system will scrape the domain’s links and use heuristics to find the most appropriate URL for the specified page type.The options are: `login`, `signup`, `blog`, `careers`, `pricing`, `terms`, `privacy`, and `contact`.

## [​](#-automation-integration-2-0-0-released-september-27th)🔗 Automation Integration 2.0.0 Released (September 27th)

We’ve released an updated Zapier integration (v2.0.0) with enhanced functionality and improved user experience. [Check out the updated documentation](/nocode/zapier) to get started with the new version.TLDR: Updated retrieve brand action, 3 new actions, updated docs with recipes.

## [​](#-api-history-feature-released-in-beta-september-22nd)📊 API History Feature Released in Beta (September 22nd)

We’re excited to announce the beta release of our new “API History” feature on the dashboard! This powerful new tool gives you comprehensive visibility into your API usage patterns, helping you better understand your consumption trends and optimize your API calls.This feature is currently in beta, so we’re actively collecting feedback to improve the experience. Try it out and let us know what you think!

## [​](#-history-analytics-graph-bug-fix-september-22nd)🐛 History Analytics Graph Bug Fix (September 22nd)

We’ve fixed a critical bug in the dashboard’s history analytics graph that was causing display issues and incorrect data visualization. The graph now accurately shows your API usage patterns and analytics data, providing you with reliable insights into your API consumption.

## [​](#-retrieve-endpoint-performance-optimization-september-22nd)⚡ Retrieve Endpoint Performance Optimization (September 22nd)

We’ve released a significant performance update to our retrieve endpoint, reducing the p50 latency of cold hits to just 9 seconds. This improvement makes brand data retrieval faster and more responsive for all your applications.

## [​](#-enhanced-api-control-with-new-parameters-september-15th)🎯 Enhanced API Control with New Parameters (September 15th)

We’ve added powerful new parameters to both our Screenshot and style guide APIs, giving you more control over how these endpoints behave and perform.

### [​](#-screenshot-api-enhancements)📸 Screenshot API Enhancements

**New `page` Parameter:**

* Automatically finds and screenshots specific page types using intelligent heuristics
* Supports 8 page types: `login`, `signup`, `blog`, `careers`, `pricing`, `terms`, `privacy`, `contact`
* Works across 30 supported languages for global website coverage
* If not specified, defaults to the main domain landing page

**New `prioritize` Parameter:**

* Choose between `speed` (faster capture, basic quality) or `quality` (higher quality, longer wait times)
* Defaults to `quality` for optimal results
* Perfect for balancing performance needs with output requirements

### [​](#-style-guide-api-enhancement)🎨 Style Guide API Enhancement

**New `prioritize` Parameter:**

* Same speed vs quality trade-off as the Screenshot API
* Defaults to `speed` for faster design system extraction
* Optimize for your specific use case - quick prototyping or detailed analysis

These parameters give you the flexibility to optimize API calls based on your specific needs, whether you’re building real-time applications that need speed or detailed brand analysis tools that require the highest quality output.

## [​](#-style-guide-api-performance-boost-september-7th)⚡ Style Guide API Performance Boost (September 7th)

We’ve made significant performance improvements to our style guide API, reducing the p50 response time by 50% to just 18 seconds. This dramatic speed improvement means faster design system extraction for all your brand analysis workflows.

## [​](#-important-links-now-available-on-retrieve-endpoint-september-7th)🔗 Important Links Now Available on Retrieve Endpoint (September 7th)

We’ve released a new “links” feature under the brand retrieve endpoint that automatically pulls a domain’s key links including careers, blog, terms of service, privacy policy, and pricing pages. This makes it easier than ever to build comprehensive brand profiles and access important company information programmatically.**New Response Field:**[Check it out here](/api-reference/brand-intelligence/retrieve-brand-data-by-domain#response-brand-links)

* **`links`** - Object containing URLs for careers, blog, terms, privacy, contact, and pricing pages

**Example Response:**

```
"links": {
  "careers": "https://company.com/careers",
  "blog": "https://company.com/blog",
  "terms": "https://company.com/terms",
  "privacy": "https://company.com/privacy",
  "contact": "https://company.com/contact",
  "pricing": "https://company.com/pricing"
}
```

## [​](#-happy-labor-day-&-pricing-update-september-1st)🎉 Happy Labor Day & Pricing Update (September 1st)

Happy Labor Day to all our hardworking developers and customers! 🇺🇸We’ve updated our starter tier pricing to better reflect the infrastructure costs of our API. As always, all existing customers on the previous pricing plan have been grandfathered in, so there’s no price increase for current users.New customers will see the updated pricing on our website, while existing customers continue to enjoy their current rates. We appreciate your continued support and trust in our API!

[​](#august-2025)

August 2025

EIC Support, Enhanced Retrieve Endpoint, Word Mark Improvements

## [​](#-invoice-management-now-available-august-31st)🧾 Invoice Management Now Available (August 31st)

You can now view and download invoices directly from the developer portal.

## [​](#-website-redesign-&-developer-portal-integration-august-27th)🌐 Website Redesign & Developer Portal Integration (August 27th)

We’ve completely redesigned our website and moved away from Framer into a fully custom NextJS landing page + blog. More importantly, the separate developer portal has been removed since it is now baked directly into the main website for a seamless experience - no more jumping between different domains to manage your account and access docs.

## [​](#-developer-portal-updates-august-21st)🛠️ Developer Portal Updates (August 21st)

Added seamless plan upgrades and downgrades without requiring cancellation first.

## [​](#-api-playground-enhanced-with-contact-industry-nsfw-data-august-20th)🎮 API Playground Enhanced with Contact, Industry, NSFW Data (August 20th)

Enhanced our API playground to now showcase contact email, contact phone, industries, and all backdrops for a complete preview of available brand data.

## [​](#-eic-easy-industry-classification-support-august-19th)🏭 EIC (Easy Industry Classification) Support (August 19th)

We’ve added EIC (Easy Industry Classification) support to our brand retrieve endpoint, providing you with standardized industry categorization for any brand. This feature helps you automatically classify companies into specific industries and sub-industries for better data organization and analysis.**New Response Field:**

* **`industries.eic`** - Array of industry classifications with both industry and subindustry information

**Example Response:**

```
"industries": {
  "eic": [
    {
      "industry": "Aerospace & Defense",
      "subindustry": "Defense Systems & Military Hardware"
    }
  ]
}
```

[View the complete documentation here](/api-reference/brand-intelligence/retrieve-brand-data-by-domain#response-brand-industries)

## [​](#-enhanced-retrieve-endpoint-with-name-&-ticker-support-august-18th)🔍 Enhanced Retrieve Endpoint with Name & Ticker Support (August 18th)

We’ve expanded our retrieve endpoint to support fetching company data by name and ticker symbol, giving you more flexibility in how you access brand information.**New Query Parameters:**

* **`name`** - Company name to retrieve brand data for (e.g., ‘Apple Inc’, ‘Microsoft Corporation’). Must be 3-30 characters. Cannot be used with domain or ticker parameters.
* **`ticker`** - Stock ticker symbol to retrieve brand data for (e.g., ‘AAPL’, ‘GOOGL’, ‘BRK.A’). Must be 1-6 characters, letters/numbers/dots only. Cannot be used with domain or name parameters.

## [​](#-enhanced-word-mark-extraction-august-10th)🖼️ Enhanced Word Mark Extraction (August 10th)

We’ve significantly improved our support for word mark extraction by updating our image pipeline and refreshing our brand database.

* **Updated Image Pipeline** - Enhanced algorithms for better word mark detection and extraction
* **Massive Data Refresh** - Refreshed over 500K domains to extract word marks from their brand data
* **Better Coverage** - More brands now have accurate word mark representations available

## [​](#-api-key-history-fix-august-4th)🔧 API Key History Fix (August 4th)

Fixed a critical bug where rotating API keys would completely clear your call history. This update works retroactively as well.

* **Preserved History** - API call history is now maintained across API key rotations
* **Organization-Level Tracking** - History is tied to your organization, not individual keys
* **Seamless Key Management** - Rotate keys without losing valuable usage analytics

[​](#july-2025)

July 2025

High-Res Logos, API Cleanup & Quality Improvements

## [​](#-nsfw-content-detection-july-22nd)🛡️ NSFW Content Detection (July 22nd)

We’ve added a new `is_nsfw` field to the brand retrieve endpoint to help businesses automatically detect and filter out pornographic or NSFW content, ensuring your platform stays safe and professional.[Check it out in the documentation](/api-reference/brand-intelligence/retrieve-brand-data-by-domain#response-brand-is-nsfw)

## [​](#-crystal-clear-logos-july-21st)🖼️ Crystal Clear Logos (July 21st)

We’ve upgraded our image pipeline to ensure all returned logos are crisp, high-resolution, and ready for any display size.

* **Enhanced Resolution Detection** - Our pipeline now prioritizes high-DPI logo sources
* **Smart Resolution Enhancement** - When needed, we intelligently enhance lower-resolution logos
* **Quality Filtering** - Automatically filters out blurry or low-quality logo variants

## [​](#-search-api-deprecation-quality-over-quantity-july-20th)🚫 Search API Deprecation - Quality Over Quantity (July 20th)

Sometimes the hardest decisions are the right ones. We’ve made the tough call to deprecate our search API endpoint effective immediately.**Why We’re Doing This:**&#x4C;et’s be honest - we believe in shipping features that actually work, not half-baked solutions that leave you frustrated. After extensive analysis, we discovered that our search API wasn’t meeting the quality standards we (and you) deserve. Rather than keep a subpar feature limping along, we’re pulling the plug to focus our energy on the APIs that truly deliver value.**Our Philosophy:**&#x57;e’d rather have 5 rock-solid endpoints that you can rely on than 10 mediocre ones that make you question our competence. Quality over quantity isn’t just a buzzword for us - it’s how we sleep well at night knowing our API won’t let you down when it matters most.**What This Means:**

* **No More Search API** - The endpoint is officially deprecated and will return a 410 Gone status
* **Refocused Development** - More resources dedicated to improving our core brand intelligence features
* **Better User Experience** - No more confusion about which endpoints actually work well
* **Honest Communication** - We’ll always tell you when something isn’t up to snuff

## [​](#-developer-portal-feedback-widget-july-19th-&-13th)📝 Developer Portal Feedback Widget (July 19th & 13th)

Multiple customers have brought up the issue of bad company names being retrieved. We’ve updated our pipeline to catch this earlier and ensure all retrieved titles are immediately usable for display. We’ve also added a feedback widget to our developer portal to make it easier for you to share suggestions, report issues, and help us improve the API.

## [​](#-enhanced-error-handling-&-ddos-protection-july-10th)🛡️ Enhanced Error Handling & DDoS Protection (July 10th)

We’ve significantly enhanced API error handling capabilities and implemented robust protection against potential DDoS attacks to ensure better service reliability and security.**Key Improvements:**

* **Enhanced Invalid Endpoint Handling** - Better error responses and logging for requests to non-existent endpoints, helping developers quickly identify and fix integration issues
* **Improved Input Validation** - More comprehensive validation of API parameters with clearer error messages when invalid data is submitted
* **DDoS Mitigation** - Advanced rate limiting and traffic analysis to detect and mitigate potential distributed denial-of-service attacks
* **Faster Error Responses** - Optimized error handling pipeline reduces response times for invalid requests, improving overall API performance
* **Better Error Documentation** - Enhanced error codes and messages to help developers understand and resolve issues more efficiently

## [​](#-font-extraction-migration-use-style-guide-endpoint-july-3rd)📝 Font Extraction Migration - Use Style Guide Endpoint (July 3rd)

If you’re currently using the [retrieve endpoint](/api-reference/brand-intelligence/retrieve-brand-data-by-domain) to extract font information from domains, we recommend migrating to our new [style guide endpoint](/api-reference/web-extraction/scrape-styleguide) for enhanced typography data.**Why Migrate?**

* **More Comprehensive Typography Data** - Get detailed font specifications including font families, sizes, weights, line heights, and letter spacing for all heading levels (H1-H4) and body text
* **Better Performance** - The style guide endpoint is optimized for design system extraction with faster response times
* **Future-Proof** - This endpoint will receive ongoing improvements for typography and design system extraction
* **Enhanced Accuracy** - More sophisticated font detection and analysis algorithms

**What You’ll Get:**&#x54;he style guide endpoint provides much richer typography information compared to the basic font data in the retrieve endpoint, here’s a small example:

```
"typography": {
  "headings": {
    "h1": {
      "fontFamily": "Inter, sans-serif",
      "fontSize": "2.5rem",
      "fontWeight": 700,
      "lineHeight": "1.2",
      "letterSpacing": "0.025em"
    }
  },
  "p": {
    "fontFamily": "Inter, sans-serif",
    "fontSize": "1rem",
    "fontWeight": 400,
    "lineHeight": "1.6",
    "letterSpacing": "0.01em"
  }
}
```

[View style guide endpoint documentation](/api-reference/web-extraction/scrape-styleguide)

## [​](#-infrastructure-performance-upgrade-july-2nd)🚀 Infrastructure Performance Upgrade (July 2nd)

We’ve been working to make our style guide and screenshot APIs faster and higher quality. We added distributed caching, so repeat requests to the same domain are under 500ms. We also completely rewrote our style guide extraction and screenshot generation pipelines to be much more efficient, resulting in 40-60% faster response times across both APIs for cold hits.

[​](#june-2025)

June 2025

New APIs, Portal Redesign & Performance Boosts

## [​](#-screenshot-api-beta-launch-june-20th)📸 Screenshot API Beta Launch (June 20th)

[**Screenshot API Now Live (Beta)**](/api-reference/web-scraping/scrape-screenshot): We’re excited to announce our new Screenshot API, now available in beta! This endpoint allows you to capture high-quality screenshots of any website programmatically, perfect for building visual brand libraries, competitive analysis tools, or automated documentation systems.**Key Features:**

* **Flexible Screenshot Types** - Choose between visible-page screenshots (standard browser view) or full-page screenshots that capture all content
* **CDN-Hosted Images** - All screenshots are automatically uploaded to our fast, reliable CDN and returned as direct URLs
* **Simple Integration** - Just provide a domain and optionally specify full-page capture
* **High Quality Output** - Professional-grade screenshots ready for immediate use

**Perfect Use Cases:**

* **Visual Brand Libraries** - Automatically capture and archive website designs for brand analysis
* **Competitive Intelligence** - Monitor competitor website changes and design evolution over time
* **Client Presentations** - Generate current website screenshots for proposals and presentations
* **Documentation & Reports** - Include live website visuals in automated reporting systems
* **Quality Assurance** - Capture website states for testing and comparison workflows
* **Portfolio Creation** - Build visual portfolios showcasing website designs and layouts

[Try it now!](/api-reference/web-scraping/scrape-screenshot)

## [​](#-style-guide-api-beta-launch-june-19th)🎨 Style Guide API Beta Launch (June 19th)

[**Style guide API now live (beta)**](/api-reference/web-extraction/scrape-styleguide): We’re excited to announce our new design system and style guide API, now available in beta! This powerful endpoint automatically extracts comprehensive design system information from any brand’s website, giving you instant access to their visual DNA.**What You Get:**

* **Color Palette** - Primary colors including accent, background, and text colors
* **Typography System** - Complete font specifications for headings (H1-H4) and body text including font families, sizes, weights, line heights, and letter spacing
* **Spacing Scale** - Standardized element spacing values (XS through XL)
* **Shadow System** - Box shadow definitions from subtle to dramatic effects
* **Component Styles** - Detailed styling for buttons (primary, secondary, link) and cards with all CSS properties

**Example Use Cases:**

* **SaaS Dashboard Personalization** - Automatically adapt your B2B software’s UI colors, fonts, and styling to match each client’s brand identity
* **White-label Product Customization** - Instantly extract and apply client branding to create seamless white-label experiences
* **Personalized Email Campaigns** - Use extracted styleguide colors and typography to create branded email templates that resonate with each prospect
* **Custom Onboarding Flows** - Dynamically style your onboarding experience to match new users’ company branding for higher engagement
* **Sales Demo Personalization** - Automatically theme your demo environment with prospect’s styleguide colors and fonts for more compelling presentations
* **Client Portal Branding** - Extract design systems to create branded client portals that feel like an extension of their own website

[Try it now!](/api-reference/web-extraction/scrape-styleguide)

## [​](#-developer-portal-&-affiliate-program-june-12th)🎯 Developer Portal & Affiliate Program (June 12th)

* **Developer Portal Design**: We’ve completely revamped the developer portal with a modern, intuitive interface that better reflects our brand identity. The new design features improved navigation, enhanced documentation readability, and a more cohesive visual experience across all pages.
* **Affiliate Program Launch**: We’re excited to announce our new affiliate program! Earn 20% commission on all referrals when you help others discover the power of our API. Perfect for developers, agencies, and businesses looking to monetize their network while sharing valuable tools. [Click here to sign up in 60 seconds or less.](https://branddev.tolt.io/login)

## [​](#-performance-improvements-june-11th)⚡ Performance Improvements (June 11th)

Data pipeline has been improved dramatically, on-demand API latency has dropped by 30% across the board.

## [​](#-preload-endpoint-launch-june-10th)🚀 Preload Endpoint Launch (June 10th)

[**Preload endpoint now live**](/api-reference/utility/prefetch-brand-data-for-a-domain): Our new preload endpoint is now available for all paid customers! This powerful optimization tool allows you to signal that you may need brand data for a particular domain soon, dramatically improving response times for subsequent API calls.**Key Features:**

* **Zero usage cost** - Preload calls are completely free for subscribed customers
* **Lightning-fast subsequent calls** - Pre-warm our systems for instant data retrieval
* **Perfect for user onboarding** - Queue preload work as soon as a user signs up for optimal experience
* **Simple integration** - Just POST to `/brand/prefetch` with the domain

**Ideal Use Cases:**

* Pre-load brand data during user registration flows
* Optimize performance for high-priority domains
* Reduce latency in real-time applications
* Enhance user experience with instant data availability

## [​](#-new-api-parameters-for-enhanced-control-june-8th)🎛️ New API Parameters for Enhanced Control (June 8th)

We’ve added two powerful new parameters to give you more control over your API requests:**`maxSpeed` Parameter** (Fetch Brand endpoint only):

* Optional boolean parameter that optimizes API calls for maximum speed
* When set to `true`, the API skips time-consuming operations for faster response
* Perfect for use cases where speed is prioritized over comprehensive data collection
* Trade-off: Faster response times at the cost of less detailed information

[Click here to view the documentation.](/api-reference/brand-intelligence/retrieve-brand-data-by-domain#parameter-max-speed)**`timeoutMS` Parameter** (All endpoints):

* Optional timeout control in milliseconds for all API requests
* Set custom timeout values from 1ms up to 300,000ms (5 minutes maximum)
* Requests exceeding the specified timeout will be aborted with a 408 status code
* Ideal for applications with strict response time requirements or custom retry logic

[Click here to view the documentation.](/api-reference/brand-intelligence/retrieve-brand-data-by-domain#parameter-timeout-ms)

## [​](#-ai-query-api-release-june-6th)🤖 AI Query API Release (June 6th)

[**AI Query API released**](/api-reference/web-extraction/query-website-data-using-ai): Our AI Query API is now officially live! This powerful new endpoint allows you to intelligently extract and query specific information from any website without the technical complexity of web scraping.**Perfect for populating customer accounts** with key business information such as:

* **Use cases** and service offerings
* **Case studies** and success stories
* **Mission statements** and company values
* **Legal frameworks** and compliance information
* **Team information** and company background
* **Product details** and specifications

We handle all the heavy lifting including JavaScript rendering, bot protection bypass, and complex scraping challenges. Simply provide a URL and your query - our API will intelligently extract the relevant information and return structured data you can immediately use to populate customer profiles, CRM systems, or any other application.**Key Benefits:**

* No need to build complex scraping infrastructure
* Handles dynamic content and JavaScript-heavy sites
* Bypasses common bot detection systems
* Returns clean, structured data ready for integration
* Perfect for onboarding automation and data enrichment workflows

[CHECK IT OUT HERE!](/api-reference/web-extraction/query-website-data-using-ai)

## [​](#-api-call-history-improvements-june-5th)📊 API Call History Improvements (June 5th)

We’ve released an improved API call history widget to the dashboard with enhanced filtering options. You can now filter your API calls by time periods including this month, last 3 days, last 7 days, last 3 months, last 6 months, last year, or view all time data for comprehensive historical analysis.

[​](#may-2025)

May 2025

SDKs, Integrations & Infrastructure Improvements

## [​](#-automation-integration-may-30th)🔗 Automation Integration (May 30th)

[Automation integration is now live](https://zapier.com/apps/contextdev/integrations)!Note: This is a v0 launch; we only released the retrieve endpoint for now with the rest to follow soon.

## [​](#-ruby-sdk-&-image-mode-updates-may-29th)💎 Ruby SDK & Image Mode Updates (May 29th)

* New Ruby SDK released: [**https://rubygems.org/gems/context.dev**](https://rubygems.org/gems/context.dev)
* Docs updated to show SDK usage
* We now return a third value for “mode” under images: **has\_opaque\_background**, this means the image has its own background and can be used in dark mode or light mode.

## [​](#-python-sdk-launch-may-23rd)🐍 Python SDK Launch (May 23rd)

New Python SDK released: [**https://pypi.org/project/context.dev/**](https://pypi.org/project/context.dev/)

## [​](#-typescript-sdk-rewrite-may-20th)📝 TypeScript SDK Rewrite (May 20th)

New TypeScript SDK released: [**https://www.npmjs.com/package/context.dev**](https://www.npmjs.com/package/context.dev)This is a complete re-write and now exposes the types for easy integration.

## [​](#-database-migration-may-15th)🗄️ Database Migration (May 15th)

Transitioned to a more reliable database provider, resulting in a decrease of API call latency by approximately 50ms.

***

Was this page helpful?

⌘I

Assistant

Responses are generated using AI and may contain mistakes.

[Contact support](/cdn-cgi/l/email-protection#2a4c455f444e4f58596a4945445e4f525e044e4f5c)

----
url: https://docs.context.dev/guides/classification/NAICS
----

> ## Documentation Index
>
> Fetch the complete documentation index at: [/llms.txt](/llms.txt)
>
> Use this file to discover all available pages before exploring further.

[Skip to main content](#content-area)

NAICS classification is available through a dedicated endpoint: [`GET /web/naics`](/api-reference/web-extraction/classify-naics-industries). Codes follow the **2022 NAICS** taxonomy published by the US Census Bureau.

## [​](#naics-code-structure)NAICS code structure

NAICS codes are hierarchical. Each digit narrows the classification:

| Level             | Digits | Example                                                 |
| ----------------- | ------ | ------------------------------------------------------- |
| Sector            | 2      | `54`: Professional, Scientific, and Technical Services  |
| Subsector         | 3      | `541`: Professional, Scientific, and Technical Services |
| Industry Group    | 4      | `5415`: Computer Systems Design and Related Services    |
| NAICS Industry    | 5      | `54151`: Computer Systems Design and Related Services   |
| National Industry | 6      | `541511`: Custom Computer Programming Services          |

Three sectors span multiple 2-digit prefixes: **Manufacturing** (`31-33`), **Retail Trade** (`44-45`), and **Transportation and Warehousing** (`48-49`). The `/web/naics` endpoint returns **6-digit national industry codes**: the most specific level.

## [​](#prerequisites)Prerequisites

* **A Context.dev API key.** Sign up at [context.dev/signup](https://context.dev/signup), copy the key from the [dashboard](https://context.dev/dashboard) (prefix `ctxt_secret_`), and export it:

  ```
  export CONTEXT_DEV_API_KEY="ctxt_secret_..."
  ```

* **An SDK (optional).** Install for your language, or skip the install and call directly with `curl`:

  ```
  npm install context.dev
  ```

## [​](#send-a-request)Send a request

Pass an `input` (a domain or company title) and read back an array of 6-digit NAICS codes with confidence ratings:

```
curl -G https://api.context.dev/v1/web/naics \
  -H "Authorization: Bearer $CONTEXT_DEV_API_KEY" \
  --data-urlencode "input=stripe.com" \
  --data-urlencode "minResults=1" \
  --data-urlencode "maxResults=5"
```

10 credits per successful call

### [​](#request-parameters)Request parameters

| Parameter    | Type    | Description                                                                                                                                       |
| ------------ | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
| `input`      | string  | **Required.** A brand domain or title. If a valid domain is provided, it’s used directly; otherwise the resolver searches for the brand by title. |
| `minResults` | integer | Minimum number of NAICS codes to return. Range: 1–10. Defaults to `1`.                                                                            |
| `maxResults` | integer | Maximum number of NAICS codes to return. Range: 1–10. Defaults to `5`.                                                                            |
| `timeoutMS`  | integer | Optional request timeout (1,000–300,000 ms). Returns 408 if exceeded.                                                                             |

## [​](#response-shape)Response shape

```
{
  "status": "ok",
  "domain": "stripe.com",
  "type": "naics",
  "codes": [
    {
      "code": "522320",
      "name": "Financial Transactions Processing, Reserve, and Clearinghouse Activities",
      "confidence": "high"
    },
    {
      "code": "541511",
      "name": "Custom Computer Programming Services",
      "confidence": "medium"
    }
  ]
}
```

| Field                | Type   | Description                                                                                      |
| -------------------- | ------ | ------------------------------------------------------------------------------------------------ |
| `status`             | string | `"ok"` on a 200 response.                                                                        |
| `domain`             | string | The resolved domain. Useful when `input` was a title: you get back what the resolver settled on. |
| `type`               | string | Always `"naics"`.                                                                                |
| `codes[]`            | array  | Sorted by confidence.                                                                            |
| `codes[].code`       | string | The NAICS code. Keep it as a string in storage.                                                  |
| `codes[].name`       | string | The official NAICS title for that code.                                                          |
| `codes[].confidence` | enum   | `high`, `medium`, or `low`. Indicates how well the code matches the company.                     |

Use `minResults` / `maxResults` to control how aggressive the classification is. If you only want the strongest match, set both to `1`. For richer classification across diversified businesses, raise `maxResults` and filter by `confidence === "high"` downstream.

For the official taxonomy, see the [US Census NAICS reference](https://www.census.gov/naics/).

## [​](#sectors)Sectors

There are 20 sector groupings in the 2022 NAICS taxonomy:

| Code  | Sector                                                                   |
| ----- | ------------------------------------------------------------------------ |
| 11    | Agriculture, Forestry, Fishing and Hunting                               |
| 21    | Mining, Quarrying, and Oil and Gas Extraction                            |
| 22    | Utilities                                                                |
| 23    | Construction                                                             |
| 31-33 | Manufacturing                                                            |
| 42    | Wholesale Trade                                                          |
| 44-45 | Retail Trade                                                             |
| 48-49 | Transportation and Warehousing                                           |
| 51    | Information                                                              |
| 52    | Finance and Insurance                                                    |
| 53    | Real Estate and Rental and Leasing                                       |
| 54    | Professional, Scientific, and Technical Services                         |
| 55    | Management of Companies and Enterprises                                  |
| 56    | Administrative and Support and Waste Management and Remediation Services |
| 61    | Educational Services                                                     |
| 62    | Health Care and Social Assistance                                        |
| 71    | Arts, Entertainment, and Recreation                                      |
| 72    | Accommodation and Food Services                                          |
| 81    | Other Services (except Public Administration)                            |
| 92    | Public Administration                                                    |

## [​](#full-list-of-6-digit-naics-codes)Full list of 6-digit NAICS codes

All **1,012** national-industry (6-digit) codes returned by the API. Use the copy button on either code block to grab the entire list in one click: CSV for spreadsheets, JSON for programmatic use.

View all 1,012 NAICS codes (click to expand)

```
code,name
111110,Soybean Farming
111120,Oilseed (except Soybean) Farming
111130,Dry Pea and Bean Farming
111140,Wheat Farming
111150,Corn Farming
111160,Rice Farming
111191,Oilseed and Grain Combination Farming
111199,All Other Grain Farming
111211,Potato Farming
111219,Other Vegetable (except Potato) and Melon Farming
111310,Orange Groves
111320,Citrus (except Orange) Groves
111331,Apple Orchards
111332,Grape Vineyards
111333,Strawberry Farming
111334,Berry (except Strawberry) Farming
111335,Tree Nut Farming
111336,Fruit and Tree Nut Combination Farming
111339,Other Noncitrus Fruit Farming
111411,Mushroom Production
111419,Other Food Crops Grown Under Cover
111421,Nursery and Tree Production
111422,Floriculture Production
111910,Tobacco Farming
111920,Cotton Farming
111930,Sugarcane Farming
111940,Hay Farming
111991,Sugar Beet Farming
111992,Peanut Farming
111998,All Other Miscellaneous Crop Farming
112111,Beef Cattle Ranching and Farming
112112,Cattle Feedlots
112120,Dairy Cattle and Milk Production
112130,Dual-Purpose Cattle Ranching and Farming
112210,Hog and Pig Farming
112310,Chicken Egg Production
112320,Broilers and Other Meat Type Chicken Production
112330,Turkey Production
112340,Poultry Hatcheries
112390,Other Poultry Production
112410,Sheep Farming
112420,Goat Farming
112511,Finfish Farming and Fish Hatcheries
112512,Shellfish Farming
112519,Other Aquaculture
112910,Apiculture
112920,Horses and Other Equine Production
112930,Fur-Bearing Animal and Rabbit Production
112990,All Other Animal Production
113110,Timber Tract Operations
113210,Forest Nurseries and Gathering of Forest Products
113310,Logging
114111,Finfish Fishing
114112,Shellfish Fishing
114119,Other Marine Fishing
114210,Hunting and Trapping
115111,Cotton Ginning
115112,"Soil Preparation, Planting, and Cultivating"
115113,"Crop Harvesting, Primarily by Machine"
115114,Postharvest Crop Activities (except Cotton Ginning)
115115,Farm Labor Contractors and Crew Leaders
115116,Farm Management Services
115210,Support Activities for Animal Production
115310,Support Activities for Forestry
211120,Crude Petroleum Extraction
211130,Natural Gas Extraction
212114,Surface Coal Mining
212115,Underground Coal Mining
212210,Iron Ore Mining
212220,Gold Ore and Silver Ore Mining
212230,"Copper, Nickel, Lead, and Zinc Mining"
212290,Other Metal Ore Mining
212311,Dimension Stone Mining and Quarrying
212312,Crushed and Broken Limestone Mining and Quarrying
212313,Crushed and Broken Granite Mining and Quarrying
212319,Other Crushed and Broken Stone Mining and Quarrying
212321,Construction Sand and Gravel Mining
212322,Industrial Sand Mining
212323,"Kaolin, Clay, and Ceramic and Refractory Minerals Mining"
212390,Other Nonmetallic Mineral Mining and Quarrying
213111,Drilling Oil and Gas Wells
213112,Support Activities for Oil and Gas Operations
213113,Support Activities for Coal Mining
213114,Support Activities for Metal Mining
213115,Support Activities for Nonmetallic Minerals (except Fuels) Mining
221111,Hydroelectric Power Generation
221112,Fossil Fuel Electric Power Generation
221113,Nuclear Electric Power Generation
221114,Solar Electric Power Generation
221115,Wind Electric Power Generation
221116,Geothermal Electric Power Generation
221117,Biomass Electric Power Generation
221118,Other Electric Power Generation
221121,Electric Bulk Power Transmission and Control
221122,Electric Power Distribution
221210,Natural Gas Distribution
221310,Water Supply and Irrigation Systems
221320,Sewage Treatment Facilities
221330,Steam and Air-Conditioning Supply
236115,New Single-Family Housing Construction (except For-Sale Builders)
236116,New Multifamily Housing Construction (except For-Sale Builders)
236117,New Housing For-Sale Builders
236118,Residential Remodelers
236210,Industrial Building Construction
236220,Commercial and Institutional Building Construction
237110,Water and Sewer Line and Related Structures Construction
237120,Oil and Gas Pipeline and Related Structures Construction
237130,Power and Communication Line and Related Structures Construction
237210,Land Subdivision
237310,"Highway, Street, and Bridge Construction"
237990,Other Heavy and Civil Engineering Construction
238110,Poured Concrete Foundation and Structure Contractors
238120,Structural Steel and Precast Concrete Contractors
238130,Framing Contractors
238140,Masonry Contractors
238150,Glass and Glazing Contractors
238160,Roofing Contractors
238170,Siding Contractors
238190,"Other Foundation, Structure, and Building Exterior Contractors"
238210,Electrical Contractors and Other Wiring Installation Contractors
238220,"Plumbing, Heating, and Air-Conditioning Contractors"
238290,Other Building Equipment Contractors
238310,Drywall and Insulation Contractors
238320,Painting and Wall Covering Contractors
238330,Flooring Contractors
238340,Tile and Terrazzo Contractors
238350,Finish Carpentry Contractors
238390,Other Building Finishing Contractors
238910,Site Preparation Contractors
238990,All Other Specialty Trade Contractors
311111,Dog and Cat Food Manufacturing
311119,Other Animal Food Manufacturing
311211,Flour Milling
311212,Rice Milling
311213,Malt Manufacturing
311221,Wet Corn Milling and Starch Manufacturing
311224,Soybean and Other Oilseed Processing
311225,Fats and Oils Refining and Blending
311230,Breakfast Cereal Manufacturing
311313,Beet Sugar Manufacturing
311314,Cane Sugar Manufacturing
311340,Nonchocolate Confectionery Manufacturing
311351,Chocolate and Confectionery Manufacturing from Cacao Beans
311352,Confectionery Manufacturing from Purchased Chocolate
311411,"Frozen Fruit, Juice, and Vegetable Manufacturing"
311412,Frozen Specialty Food Manufacturing
311421,Fruit and Vegetable Canning
311422,Specialty Canning
311423,Dried and Dehydrated Food Manufacturing
311511,Fluid Milk Manufacturing
311512,Creamery Butter Manufacturing
311513,Cheese Manufacturing
311514,"Dry, Condensed, and Evaporated Dairy Product Manufacturing"
311520,Ice Cream and Frozen Dessert Manufacturing
311611,Animal (except Poultry) Slaughtering
311612,Meat Processed from Carcasses
311613,Rendering and Meat Byproduct Processing
311615,Poultry Processing
311710,Seafood Product Preparation and Packaging
311811,Retail Bakeries
311812,Commercial Bakeries
311813,"Frozen Cakes, Pies, and Other Pastries Manufacturing"
311821,Cookie and Cracker Manufacturing
311824,"Dry Pasta, Dough, and Flour Mixes Manufacturing from Purchased Flour"
311830,Tortilla Manufacturing
311911,Roasted Nuts and Peanut Butter Manufacturing
311919,Other Snack Food Manufacturing
311920,Coffee and Tea Manufacturing
311930,Flavoring Syrup and Concentrate Manufacturing
311941,"Mayonnaise, Dressing, and Other Prepared Sauce Manufacturing"
311942,Spice and Extract Manufacturing
311991,Perishable Prepared Food Manufacturing
311999,All Other Miscellaneous Food Manufacturing
312111,Soft Drink Manufacturing
312112,Bottled Water Manufacturing
312113,Ice Manufacturing
312120,Breweries
312130,Wineries
312140,Distilleries
312230,Tobacco Manufacturing
313110,"Fiber, Yarn, and Thread Mills"
313210,Broadwoven Fabric Mills
313220,Narrow Fabric Mills and Schiffli Machine Embroidery
313230,Nonwoven Fabric Mills
313240,Knit Fabric Mills
313310,Textile and Fabric Finishing Mills
313320,Fabric Coating Mills
314110,Carpet and Rug Mills
314120,Curtain and Linen Mills
314910,Textile Bag and Canvas Mills
314994,"Rope, Cordage, Twine, Tire Cord, and Tire Fabric Mills"
314999,All Other Miscellaneous Textile Product Mills
315120,Apparel Knitting Mills
315210,Cut and Sew Apparel Contractors
315250,Cut and Sew Apparel Manufacturing (except Contractors)
315990,Apparel Accessories and Other Apparel Manufacturing
316110,Leather and Hide Tanning and Finishing
316210,Footwear Manufacturing
316990,Other Leather and Allied Product Manufacturing
321113,Sawmills
321114,Wood Preservation
321211,Hardwood Veneer and Plywood Manufacturing
321212,Softwood Veneer and Plywood Manufacturing
321215,Engineered Wood Member Manufacturing
321219,Reconstituted Wood Product Manufacturing
321911,Wood Window and Door Manufacturing
321912,"Cut Stock, Resawing Lumber, and Planing"
321918,Other Millwork (including Flooring)
321920,Wood Container and Pallet Manufacturing
321991,Manufactured Home (Mobile Home) Manufacturing
321992,Prefabricated Wood Building Manufacturing
321999,All Other Miscellaneous Wood Product Manufacturing
322110,Pulp Mills
322120,Paper Mills
322130,Paperboard Mills
322211,Corrugated and Solid Fiber Box Manufacturing
322212,Folding Paperboard Box Manufacturing
322219,Other Paperboard Container Manufacturing
322220,Paper Bag and Coated and Treated Paper Manufacturing
322230,Stationery Product Manufacturing
322291,Sanitary Paper Product Manufacturing
322299,All Other Converted Paper Product Manufacturing
323111,Commercial Printing (except Screen and Books)
323113,Commercial Screen Printing
323117,Books Printing
323120,Support Activities for Printing
324110,Petroleum Refineries
324121,Asphalt Paving Mixture and Block Manufacturing
324122,Asphalt Shingle and Coating Materials Manufacturing
324191,Petroleum Lubricating Oil and Grease Manufacturing
324199,All Other Petroleum and Coal Products Manufacturing
325110,Petrochemical Manufacturing
325120,Industrial Gas Manufacturing
325130,Synthetic Dye and Pigment Manufacturing
325180,Other Basic Inorganic Chemical Manufacturing
325193,Ethyl Alcohol Manufacturing
325194,"Cyclic Crude, Intermediate, and Gum and Wood Chemical Manufacturing"
325199,All Other Basic Organic Chemical Manufacturing
325211,Plastics Material and Resin Manufacturing
325212,Synthetic Rubber Manufacturing
325220,Artificial and Synthetic Fibers and Filaments Manufacturing
325311,Nitrogenous Fertilizer Manufacturing
325312,Phosphatic Fertilizer Manufacturing
325314,Fertilizer (Mixing Only) Manufacturing
325315,Compost Manufacturing
325320,Pesticide and Other Agricultural Chemical Manufacturing
325411,Medicinal and Botanical Manufacturing
325412,Pharmaceutical Preparation Manufacturing
325413,In-Vitro Diagnostic Substance Manufacturing
325414,Biological Product (except Diagnostic) Manufacturing
325510,Paint and Coating Manufacturing
325520,Adhesive Manufacturing
325611,Soap and Other Detergent Manufacturing
325612,Polish and Other Sanitation Good Manufacturing
325613,Surface Active Agent Manufacturing
325620,Toilet Preparation Manufacturing
325910,Printing Ink Manufacturing
325920,Explosives Manufacturing
325991,Custom Compounding of Purchased Resins
325992,"Photographic Film, Paper, Plate, Chemical, and Copy Toner Manufacturing"
325998,All Other Miscellaneous Chemical Product and Preparation Manufacturing
326111,Plastics Bag and Pouch Manufacturing
326112,Plastics Packaging Film and Sheet (including Laminated) Manufacturing
326113,Unlaminated Plastics Film and Sheet (except Packaging) Manufacturing
326121,Unlaminated Plastics Profile Shape Manufacturing
326122,Plastics Pipe and Pipe Fitting Manufacturing
326130,"Laminated Plastics Plate, Sheet (except Packaging), and Shape Manufacturing"
326140,Polystyrene Foam Product Manufacturing
326150,Urethane and Other Foam Product (except Polystyrene) Manufacturing
326160,Plastics Bottle Manufacturing
326191,Plastics Plumbing Fixture Manufacturing
326199,All Other Plastics Product Manufacturing
326211,Tire Manufacturing (except Retreading)
326212,Tire Retreading
326220,Rubber and Plastics Hoses and Belting Manufacturing
326291,Rubber Product Manufacturing for Mechanical Use
326299,All Other Rubber Product Manufacturing
327110,"Pottery, Ceramics, and Plumbing Fixture Manufacturing"
327120,Clay Building Material and Refractories Manufacturing
327211,Flat Glass Manufacturing
327212,Other Pressed and Blown Glass and Glassware Manufacturing
327213,Glass Container Manufacturing
327215,Glass Product Manufacturing Made of Purchased Glass
327310,Cement Manufacturing
327320,Ready-Mix Concrete Manufacturing
327331,Concrete Block and Brick Manufacturing
327332,Concrete Pipe Manufacturing
327390,Other Concrete Product Manufacturing
327410,Lime Manufacturing
327420,Gypsum Product Manufacturing
327910,Abrasive Product Manufacturing
327991,Cut Stone and Stone Product Manufacturing
327992,Ground or Treated Mineral and Earth Manufacturing
327993,Mineral Wool Manufacturing
327999,All Other Miscellaneous Nonmetallic Mineral Product Manufacturing
331110,Iron and Steel Mills and Ferroalloy Manufacturing
331210,Iron and Steel Pipe and Tube Manufacturing from Purchased Steel
331221,Rolled Steel Shape Manufacturing
331222,Steel Wire Drawing
331313,Alumina Refining and Primary Aluminum Production
331314,Secondary Smelting and Alloying of Aluminum
331315,"Aluminum Sheet, Plate, and Foil Manufacturing"
331318,"Other Aluminum Rolling, Drawing, and Extruding"
331410,Nonferrous Metal (except Aluminum) Smelting and Refining
331420,"Copper Rolling, Drawing, Extruding, and Alloying"
331491,"Nonferrous Metal (except Copper and Aluminum) Rolling, Drawing, and Extruding"
331492,"Secondary Smelting, Refining, and Alloying of Nonferrous Metal (except Copper and Aluminum)"
331511,Iron Foundries
331512,Steel Investment Foundries
331513,Steel Foundries (except Investment)
331523,Nonferrous Metal Die-Casting Foundries
331524,Aluminum Foundries (except Die-Casting)
331529,Other Nonferrous Metal Foundries (except Die-Casting)
332111,Iron and Steel Forging
332112,Nonferrous Forging
332114,Custom Roll Forming
332117,Powder Metallurgy Part Manufacturing
332119,"Metal Crown, Closure, and Other Metal Stamping (except Automotive)"
332215,"Metal Kitchen Cookware, Utensil, Cutlery, and Flatware (except Precious) Manufacturing"
332216,Saw Blade and Handtool Manufacturing
332311,Prefabricated Metal Building and Component Manufacturing
332312,Fabricated Structural Metal Manufacturing
332313,Plate Work Manufacturing
332321,Metal Window and Door Manufacturing
332322,Sheet Metal Work Manufacturing
332323,Ornamental and Architectural Metal Work Manufacturing
332410,Power Boiler and Heat Exchanger Manufacturing
332420,Metal Tank (Heavy Gauge) Manufacturing
332431,Metal Can Manufacturing
332439,Other Metal Container Manufacturing
332510,Hardware Manufacturing
332613,Spring Manufacturing
332618,Other Fabricated Wire Product Manufacturing
332710,Machine Shops
332721,Precision Turned Product Manufacturing
332722,"Bolt, Nut, Screw, Rivet, and Washer Manufacturing"
332811,Metal Heat Treating
332812,"Metal Coating, Engraving (except Jewelry and Silverware), and Allied Services to Manufacturers"
332813,"Electroplating, Plating, Polishing, Anodizing, and Coloring"
332911,Industrial Valve Manufacturing
332912,Fluid Power Valve and Hose Fitting Manufacturing
332913,Plumbing Fixture Fitting and Trim Manufacturing
332919,Other Metal Valve and Pipe Fitting Manufacturing
332991,Ball and Roller Bearing Manufacturing
332992,Small Arms Ammunition Manufacturing
332993,Ammunition (except Small Arms) Manufacturing
332994,"Small Arms, Ordnance, and Ordnance Accessories Manufacturing"
332996,Fabricated Pipe and Pipe Fitting Manufacturing
332999,All Other Miscellaneous Fabricated Metal Product Manufacturing
333111,Farm Machinery and Equipment Manufacturing
333112,Lawn and Garden Tractor and Home Lawn and Garden Equipment Manufacturing
333120,Construction Machinery Manufacturing
333131,Mining Machinery and Equipment Manufacturing
333132,Oil and Gas Field Machinery and Equipment Manufacturing
333241,Food Product Machinery Manufacturing
333242,Semiconductor Machinery Manufacturing
333243,"Sawmill, Woodworking, and Paper Machinery Manufacturing"
333248,All Other Industrial Machinery Manufacturing
333310,Commercial and Service Industry Machinery Manufacturing
333413,Industrial and Commercial Fan and Blower and Air Purification Equipment Manufacturing
333414,Heating Equipment (except Warm Air Furnaces) Manufacturing
333415,Air-Conditioning and Warm Air Heating Equipment and Commercial and Industrial Refrigeration Equipment Manufacturing
333511,Industrial Mold Manufacturing
333514,"Special Die and Tool, Die Set, Jig, and Fixture Manufacturing"
333515,Cutting Tool and Machine Tool Accessory Manufacturing
333517,Machine Tool Manufacturing
333519,Rolling Mill and Other Metalworking Machinery Manufacturing
333611,Turbine and Turbine Generator Set Units Manufacturing
333612,"Speed Changer, Industrial High-Speed Drive, and Gear Manufacturing"
333613,Mechanical Power Transmission Equipment Manufacturing
333618,Other Engine Equipment Manufacturing
333912,Air and Gas Compressor Manufacturing
333914,"Measuring, Dispensing, and Other Pumping Equipment Manufacturing"
333921,Elevator and Moving Stairway Manufacturing
333922,Conveyor and Conveying Equipment Manufacturing
333923,"Overhead Traveling Crane, Hoist, and Monorail System Manufacturing"
333924,"Industrial Truck, Tractor, Trailer, and Stacker Machinery Manufacturing"
333991,Power-Driven Handtool Manufacturing
333992,Welding and Soldering Equipment Manufacturing
333993,Packaging Machinery Manufacturing
333994,Industrial Process Furnace and Oven Manufacturing
333995,Fluid Power Cylinder and Actuator Manufacturing
333996,Fluid Power Pump and Motor Manufacturing
333998,All Other Miscellaneous General Purpose Machinery Manufacturing
334111,Electronic Computer Manufacturing
334112,Computer Storage Device Manufacturing
334118,Computer Terminal and Other Computer Peripheral Equipment Manufacturing
334210,Telephone Apparatus Manufacturing
334220,Radio and Television Broadcasting and Wireless Communications Equipment Manufacturing
334290,Other Communications Equipment Manufacturing
334310,Audio and Video Equipment Manufacturing
334412,Bare Printed Circuit Board Manufacturing
334413,Semiconductor and Related Device Manufacturing
334416,"Capacitor, Resistor, Coil, Transformer, and Other Inductor Manufacturing"
334417,Electronic Connector Manufacturing
334418,Printed Circuit Assembly (Electronic Assembly) Manufacturing
334419,Other Electronic Component Manufacturing
334510,Electromedical and Electrotherapeutic Apparatus Manufacturing
334511,"Search, Detection, Navigation, Guidance, Aeronautical, and Nautical System and Instrument Manufacturing"
334512,"Automatic Environmental Control Manufacturing for Residential, Commercial, and Appliance Use"
334513,"Instruments and Related Products Manufacturing for Measuring, Displaying, and Controlling Industrial Process Variables"
334514,Totalizing Fluid Meter and Counting Device Manufacturing
334515,Instrument Manufacturing for Measuring and Testing Electricity and Electrical Signals
334516,Analytical Laboratory Instrument Manufacturing
334517,Irradiation Apparatus Manufacturing
334519,Other Measuring and Controlling Device Manufacturing
334610,Manufacturing and Reproducing Magnetic and Optical Media
335131,Residential Electric Lighting Fixture Manufacturing
335132,"Commercial, Industrial, and Institutional Electric Lighting Fixture Manufacturing"
335139,Electric Lamp Bulb and Other Lighting Equipment Manufacturing
335210,Small Electrical Appliance Manufacturing
335220,Major Household Appliance Manufacturing
335311,"Power, Distribution, and Specialty Transformer Manufacturing"
335312,Motor and Generator Manufacturing
335313,Switchgear and Switchboard Apparatus Manufacturing
335314,Relay and Industrial Control Manufacturing
335910,Battery Manufacturing
335921,Fiber Optic Cable Manufacturing
335929,Other Communication and Energy Wire Manufacturing
335931,Current-Carrying Wiring Device Manufacturing
335932,Noncurrent-Carrying Wiring Device Manufacturing
335991,Carbon and Graphite Product Manufacturing
335999,All Other Miscellaneous Electrical Equipment and Component Manufacturing
336110,Automobile and Light Duty Motor Vehicle Manufacturing
336120,Heavy Duty Truck Manufacturing
336211,Motor Vehicle Body Manufacturing
336212,Truck Trailer Manufacturing
336213,Motor Home Manufacturing
336214,Travel Trailer and Camper Manufacturing
336310,Motor Vehicle Gasoline Engine and Engine Parts Manufacturing
336320,Motor Vehicle Electrical and Electronic Equipment Manufacturing
336330,Motor Vehicle Steering and Suspension Components (except Spring) Manufacturing
336340,Motor Vehicle Brake System Manufacturing
336350,Motor Vehicle Transmission and Power Train Parts Manufacturing
336360,Motor Vehicle Seating and Interior Trim Manufacturing
336370,Motor Vehicle Metal Stamping
336390,Other Motor Vehicle Parts Manufacturing
336411,Aircraft Manufacturing
336412,Aircraft Engine and Engine Parts Manufacturing
336413,Other Aircraft Parts and Auxiliary Equipment Manufacturing
336414,Guided Missile and Space Vehicle Manufacturing
336415,Guided Missile and Space Vehicle Propulsion Unit and Propulsion Unit Parts Manufacturing
336419,Other Guided Missile and Space Vehicle Parts and Auxiliary Equipment Manufacturing
336510,Railroad Rolling Stock Manufacturing
336611,Ship Building and Repairing
336612,Boat Building
336991,"Motorcycle, Bicycle, and Parts Manufacturing"
336992,"Military Armored Vehicle, Tank, and Tank Component Manufacturing"
336999,All Other Transportation Equipment Manufacturing
337110,Wood Kitchen Cabinet and Countertop Manufacturing
337121,Upholstered Household Furniture Manufacturing
337122,Nonupholstered Wood Household Furniture Manufacturing
337126,Household Furniture (except Wood and Upholstered) Manufacturing
337127,Institutional Furniture Manufacturing
337211,Wood Office Furniture Manufacturing
337212,Custom Architectural Woodwork and Millwork Manufacturing
337214,Office Furniture (except Wood) Manufacturing
337215,"Showcase, Partition, Shelving, and Locker Manufacturing"
337910,Mattress Manufacturing
337920,Blind and Shade Manufacturing
339112,Surgical and Medical Instrument Manufacturing
339113,Surgical Appliance and Supplies Manufacturing
339114,Dental Equipment and Supplies Manufacturing
339115,Ophthalmic Goods Manufacturing
339116,Dental Laboratories
339910,Jewelry and Silverware Manufacturing
339920,Sporting and Athletic Goods Manufacturing
339930,"Doll, Toy, and Game Manufacturing"
339940,Office Supplies (except Paper) Manufacturing
339950,Sign Manufacturing
339991,"Gasket, Packing, and Sealing Device Manufacturing"
339992,Musical Instrument Manufacturing
339993,"Fastener, Button, Needle, and Pin Manufacturing"
339994,"Broom, Brush, and Mop Manufacturing"
339995,Burial Casket Manufacturing
339999,All Other Miscellaneous Manufacturing
423110,Automobile and Other Motor Vehicle Merchant Wholesalers
423120,Motor Vehicle Supplies and New Parts Merchant Wholesalers
423130,Tire and Tube Merchant Wholesalers
423140,Motor Vehicle Parts (Used) Merchant Wholesalers
423210,Furniture Merchant Wholesalers
423220,Home Furnishing Merchant Wholesalers
423310,"Lumber, Plywood, Millwork, and Wood Panel Merchant Wholesalers"
423320,"Brick, Stone, and Related Construction Material Merchant Wholesalers"
423330,"Roofing, Siding, and Insulation Material Merchant Wholesalers"
423390,Other Construction Material Merchant Wholesalers
423410,Photographic Equipment and Supplies Merchant Wholesalers
423420,Office Equipment Merchant Wholesalers
423430,Computer and Computer Peripheral Equipment and Software Merchant Wholesalers
423440,Other Commercial Equipment Merchant Wholesalers
423450,"Medical, Dental, and Hospital Equipment and Supplies Merchant Wholesalers"
423460,Ophthalmic Goods Merchant Wholesalers
423490,Other Professional Equipment and Supplies Merchant Wholesalers
423510,Metal Service Centers and Other Metal Merchant Wholesalers
423520,Coal and Other Mineral and Ore Merchant Wholesalers
423610,"Electrical Apparatus and Equipment, Wiring Supplies, and Related Equipment Merchant Wholesalers"
423620,"Household Appliances, Electric Housewares, and Consumer Electronics Merchant Wholesalers"
423690,Other Electronic Parts and Equipment Merchant Wholesalers
423710,Hardware Merchant Wholesalers
423720,Plumbing and Heating Equipment and Supplies (Hydronics) Merchant Wholesalers
423730,Warm Air Heating and Air-Conditioning Equipment and Supplies Merchant Wholesalers
423740,Refrigeration Equipment and Supplies Merchant Wholesalers
423810,Construction and Mining (except Oil Well) Machinery and Equipment Merchant Wholesalers
423820,Farm and Garden Machinery and Equipment Merchant Wholesalers
423830,Industrial Machinery and Equipment Merchant Wholesalers
423840,Industrial Supplies Merchant Wholesalers
423850,Service Establishment Equipment and Supplies Merchant Wholesalers
423860,Transportation Equipment and Supplies (except Motor Vehicle) Merchant Wholesalers
423910,Sporting and Recreational Goods and Supplies Merchant Wholesalers
423920,Toy and Hobby Goods and Supplies Merchant Wholesalers
423930,Recyclable Material Merchant Wholesalers
423940,"Jewelry, Watch, Precious Stone, and Precious Metal Merchant Wholesalers"
423990,Other Miscellaneous Durable Goods Merchant Wholesalers
424110,Printing and Writing Paper Merchant Wholesalers
424120,Stationery and Office Supplies Merchant Wholesalers
424130,Industrial and Personal Service Paper Merchant Wholesalers
424210,Drugs and Druggists' Sundries Merchant Wholesalers
424310,"Piece Goods, Notions, and Other Dry Goods Merchant Wholesalers"
424340,Footwear Merchant Wholesalers
424350,Clothing and Clothing Accessories Merchant Wholesalers
424410,General Line Grocery Merchant Wholesalers
424420,Packaged Frozen Food Merchant Wholesalers
424430,Dairy Product (except Dried or Canned) Merchant Wholesalers
424440,Poultry and Poultry Product Merchant Wholesalers
424450,Confectionery Merchant Wholesalers
424460,Fish and Seafood Merchant Wholesalers
424470,Meat and Meat Product Merchant Wholesalers
424480,Fresh Fruit and Vegetable Merchant Wholesalers
424490,Other Grocery and Related Products Merchant Wholesalers
424510,Grain and Field Bean Merchant Wholesalers
424520,Livestock Merchant Wholesalers
424590,Other Farm Product Raw Material Merchant Wholesalers
424610,Plastics Materials and Basic Forms and Shapes Merchant Wholesalers
424690,Other Chemical and Allied Products Merchant Wholesalers
424710,Petroleum Bulk Stations and Terminals
424720,Petroleum and Petroleum Products Merchant Wholesalers (except Bulk Stations and Terminals)
424810,Beer and Ale Merchant Wholesalers
424820,Wine and Distilled Alcoholic Beverage Merchant Wholesalers
424910,Farm Supplies Merchant Wholesalers
424920,"Book, Periodical, and Newspaper Merchant Wholesalers"
424930,"Flower, Nursery Stock, and Florists' Supplies Merchant Wholesalers"
424940,Tobacco Product and Electronic Cigarette Merchant Wholesalers
424950,"Paint, Varnish, and Supplies Merchant Wholesalers"
424990,Other Miscellaneous Nondurable Goods Merchant Wholesalers
425120,Wholesale Trade Agents and Brokers
441110,New Car Dealers
441120,Used Car Dealers
441210,Recreational Vehicle Dealers
441222,Boat Dealers
441227,"Motorcycle, ATV, and All Other Motor Vehicle Dealers"
441330,Automotive Parts and Accessories Retailers
441340,Tire Dealers
444110,Home Centers
444120,Paint and Wallpaper Retailers
444140,Hardware Retailers
444180,Other Building Material Dealers
444230,Outdoor Power Equipment Retailers
444240,"Nursery, Garden Center, and Farm Supply Retailers"
445110,Supermarkets and Other Grocery Retailers (except Convenience Retailers)
445131,Convenience Retailers
445132,Vending Machine Operators
445230,Fruit and Vegetable Retailers
445240,Meat Retailers
445250,Fish and Seafood Retailers
445291,Baked Goods Retailers
445292,Confectionery and Nut Retailers
445298,All Other Specialty Food Retailers
445320,"Beer, Wine, and Liquor Retailers"
449110,Furniture Retailers
449121,Floor Covering Retailers
449122,Window Treatment Retailers
449129,All Other Home Furnishings Retailers
449210,Electronics and Appliance Retailers
455110,Department Stores
455211,Warehouse Clubs and Supercenters
455219,All Other General Merchandise Retailers
456110,Pharmacies and Drug Retailers
456120,"Cosmetics, Beauty Supplies, and Perfume Retailers"
456130,Optical Goods Retailers
456191,Food (Health) Supplement Retailers
456199,All Other Health and Personal Care Retailers
457110,Gasoline Stations with Convenience Stores
457120,Other Gasoline Stations
457210,Fuel Dealers
458110,Clothing and Clothing Accessories Retailers
458210,Shoe Retailers
458310,Jewelry Retailers
458320,Luggage and Leather Goods Retailers
459110,Sporting Goods Retailers
459120,"Hobby, Toy, and Game Retailers"
459130,"Sewing, Needlework, and Piece Goods Retailers"
459140,Musical Instrument and Supplies Retailers
459210,Book Retailers and News Dealers
459310,Florists
459410,Office Supplies and Stationery Retailers
459420,"Gift, Novelty, and Souvenir Retailers"
459510,Used Merchandise Retailers
459910,Pet and Pet Supplies Retailers
459920,Art Dealers
459930,Manufactured (Mobile) Home Dealers
459991,"Tobacco, Electronic Cigarette, and Other Smoking Supplies Retailers"
459999,All Other Miscellaneous Retailers
481111,Scheduled Passenger Air Transportation
481112,Scheduled Freight Air Transportation
481211,Nonscheduled Chartered Passenger Air Transportation
481212,Nonscheduled Chartered Freight Air Transportation
481219,Other Nonscheduled Air Transportation
482111,Line-Haul Railroads
482112,Short Line Railroads
483111,Deep Sea Freight Transportation
483112,Deep Sea Passenger Transportation
483113,Coastal and Great Lakes Freight Transportation
483114,Coastal and Great Lakes Passenger Transportation
483211,Inland Water Freight Transportation
483212,Inland Water Passenger Transportation
484110,"General Freight Trucking, Local"
484121,"General Freight Trucking, Long-Distance, Truckload"
484122,"General Freight Trucking, Long-Distance, Less Than Truckload"
484210,Used Household and Office Goods Moving
484220,"Specialized Freight (except Used Goods) Trucking, Local"
484230,"Specialized Freight (except Used Goods) Trucking, Long-Distance"
485111,Mixed Mode Transit Systems
485112,Commuter Rail Systems
485113,Bus and Other Motor Vehicle Transit Systems
485119,Other Urban Transit Systems
485210,Interurban and Rural Bus Transportation
485310,Taxi and Ridesharing Services
485320,Limousine Service
485410,School and Employee Bus Transportation
485510,Charter Bus Industry
485991,Special Needs Transportation
485999,All Other Transit and Ground Passenger Transportation
486110,Pipeline Transportation of Crude Oil
486210,Pipeline Transportation of Natural Gas
486910,Pipeline Transportation of Refined Petroleum Products
486990,All Other Pipeline Transportation
487110,"Scenic and Sightseeing Transportation, Land"
487210,"Scenic and Sightseeing Transportation, Water"
487990,"Scenic and Sightseeing Transportation, Other"
488111,Air Traffic Control
488119,Other Airport Operations
488190,Other Support Activities for Air Transportation
488210,Support Activities for Rail Transportation
488310,Port and Harbor Operations
488320,Marine Cargo Handling
488330,Navigational Services to Shipping
488390,Other Support Activities for Water Transportation
488410,Motor Vehicle Towing
488490,Other Support Activities for Road Transportation
488510,Freight Transportation Arrangement
488991,Packing and Crating
488999,All Other Support Activities for Transportation
491110,Postal Service
492110,Couriers and Express Delivery Services
492210,Local Messengers and Local Delivery
493110,General Warehousing and Storage
493120,Refrigerated Warehousing and Storage
493130,Farm Product Warehousing and Storage
493190,Other Warehousing and Storage
512110,Motion Picture and Video Production
512120,Motion Picture and Video Distribution
512131,Motion Picture Theaters (except Drive-Ins)
512132,Drive-In Motion Picture Theaters
512191,Teleproduction and Other Postproduction Services
512199,Other Motion Picture and Video Industries
512230,Music Publishers
512240,Sound Recording Studios
512250,Record Production and Distribution
512290,Other Sound Recording Industries
513110,Newspaper Publishers
513120,Periodical Publishers
513130,Book Publishers
513140,Directory and Mailing List Publishers
513191,Greeting Card Publishers
513199,All Other Publishers
513210,Software Publishers
516110,Radio Broadcasting Stations
516120,Television Broadcasting Stations
516210,"Media Streaming Distribution Services, Social Networks, and Other Media Networks and Content Providers"
517111,Wired Telecommunications Carriers
517112,Wireless Telecommunications Carriers (except Satellite)
517121,Telecommunications Resellers
517122,Agents for Wireless Telecommunications Services
517410,Satellite Telecommunications
517810,All Other Telecommunications
518210,"Computing Infrastructure Providers, Data Processing, Web Hosting, and Related Services"
519210,Libraries and Archives
519290,Web Search Portals and All Other Information Services
521110,Monetary Authorities-Central Bank
522110,Commercial Banking
522130,Credit Unions
522180,Savings Institutions and Other Depository Credit Intermediation
522210,Credit Card Issuing
522220,Sales Financing
522291,Consumer Lending
522292,Real Estate Credit
522299,"International, Secondary Market, and All Other Nondepository Credit Intermediation"
522310,Mortgage and Nonmortgage Loan Brokers
522320,"Financial Transactions Processing, Reserve, and Clearinghouse Activities"
522390,Other Activities Related to Credit Intermediation
523150,Investment Banking and Securities Intermediation
523160,Commodity Contracts Intermediation
523210,Securities and Commodity Exchanges
523910,Miscellaneous Intermediation
523940,Portfolio Management and Investment Advice
523991,"Trust, Fiduciary, and Custody Activities"
523999,Miscellaneous Financial Investment Activities
524113,Direct Life Insurance Carriers
524114,Direct Health and Medical Insurance Carriers
524126,Direct Property and Casualty Insurance Carriers
524127,Direct Title Insurance Carriers
524128,"Other Direct Insurance (except Life, Health, and Medical) Carriers"
524130,Reinsurance Carriers
524210,Insurance Agencies and Brokerages
524291,Claims Adjusting
524292,Pharmacy Benefit Management and Other Third Party Administration of Insurance and Pension Funds
524298,All Other Insurance Related Activities
525110,Pension Funds
525120,Health and Welfare Funds
525190,Other Insurance Funds
525910,Open-End Investment Funds
525920,"Trusts, Estates, and Agency Accounts"
525990,Other Financial Vehicles
531110,Lessors of Residential Buildings and Dwellings
531120,Lessors of Nonresidential Buildings (except Miniwarehouses)
531130,Lessors of Miniwarehouses and Self-Storage Units
531190,Lessors of Other Real Estate Property
531210,Offices of Real Estate Agents and Brokers
531311,Residential Property Managers
531312,Nonresidential Property Managers
531320,Offices of Real Estate Appraisers
531390,Other Activities Related to Real Estate
532111,Passenger Car Rental
532112,Passenger Car Leasing
532120,"Truck, Utility Trailer, and RV (Recreational Vehicle) Rental and Leasing"
532210,Consumer Electronics and Appliances Rental
532281,Formal Wear and Costume Rental
532282,Video Tape and Disc Rental
532283,Home Health Equipment Rental
532284,Recreational Goods Rental
532289,All Other Consumer Goods Rental
532310,General Rental Centers
532411,"Commercial Air, Rail, and Water Transportation Equipment Rental and Leasing"
532412,"Construction, Mining, and Forestry Machinery and Equipment Rental and Leasing"
532420,Office Machinery and Equipment Rental and Leasing
532490,Other Commercial and Industrial Machinery and Equipment Rental and Leasing
533110,Lessors of Nonfinancial Intangible Assets (except Copyrighted Works)
541110,Offices of Lawyers
541120,Offices of Notaries
541191,Title Abstract and Settlement Offices
541199,All Other Legal Services
541211,Offices of Certified Public Accountants
541213,Tax Preparation Services
541214,Payroll Services
541219,Other Accounting Services
541310,Architectural Services
541320,Landscape Architectural Services
541330,Engineering Services
541340,Drafting Services
541350,Building Inspection Services
541360,Geophysical Surveying and Mapping Services
541370,Surveying and Mapping (except Geophysical) Services
541380,Testing Laboratories and Services
541410,Interior Design Services
541420,Industrial Design Services
541430,Graphic Design Services
541490,Other Specialized Design Services
541511,Custom Computer Programming Services
541512,Computer Systems Design Services
541513,Computer Facilities Management Services
541519,Other Computer Related Services
541611,Administrative Management and General Management Consulting Services
541612,Human Resources Consulting Services
541613,Marketing Consulting Services
541614,"Process, Physical Distribution, and Logistics Consulting Services"
541618,Other Management Consulting Services
541620,Environmental Consulting Services
541690,Other Scientific and Technical Consulting Services
541713,Research and Development in Nanotechnology
541714,Research and Development in Biotechnology (except Nanobiotechnology)
541715,"Research and Development in the Physical, Engineering, and Life Sciences (except Nanotechnology and Biotechnology)"
541720,Research and Development in the Social Sciences and Humanities
541810,Advertising Agencies
541820,Public Relations Agencies
541830,Media Buying Agencies
541840,Media Representatives
541850,Indoor and Outdoor Display Advertising
541860,Direct Mail Advertising
541870,Advertising Material Distribution Services
541890,Other Services Related to Advertising
541910,Marketing Research and Public Opinion Polling
541921,"Photography Studios, Portrait"
541922,Commercial Photography
541930,Translation and Interpretation Services
541940,Veterinary Services
541990,"All Other Professional, Scientific, and Technical Services"
551111,Offices of Bank Holding Companies
551112,Offices of Other Holding Companies
551114,"Corporate, Subsidiary, and Regional Managing Offices"
561110,Office Administrative Services
561210,Facilities Support Services
561311,Employment Placement Agencies
561312,Executive Search Services
561320,Temporary Help Services
561330,Professional Employer Organizations
561410,Document Preparation Services
561421,Telephone Answering Services
561422,Telemarketing Bureaus and Other Contact Centers
561431,Private Mail Centers
561439,Other Business Service Centers (including Copy Shops)
561440,Collection Agencies
561450,Credit Bureaus
561491,Repossession Services
561492,Court Reporting and Stenotype Services
561499,All Other Business Support Services
561510,Travel Agencies
561520,Tour Operators
561591,Convention and Visitors Bureaus
561599,All Other Travel Arrangement and Reservation Services
561611,Investigation and Personal Background Check Services
561612,Security Guards and Patrol Services
561613,Armored Car Services
561621,Security Systems Services (except Locksmiths)
561622,Locksmiths
561710,Exterminating and Pest Control Services
561720,Janitorial Services
561730,Landscaping Services
561740,Carpet and Upholstery Cleaning Services
561790,Other Services to Buildings and Dwellings
561910,Packaging and Labeling Services
561920,Convention and Trade Show Organizers
561990,All Other Support Services
562111,Solid Waste Collection
562112,Hazardous Waste Collection
562119,Other Waste Collection
562211,Hazardous Waste Treatment and Disposal
562212,Solid Waste Landfill
562213,Solid Waste Combustors and Incinerators
562219,Other Nonhazardous Waste Treatment and Disposal
562910,Remediation Services
562920,Materials Recovery Facilities
562991,Septic Tank and Related Services
562998,All Other Miscellaneous Waste Management Services
611110,Elementary and Secondary Schools
611210,Junior Colleges
611310,"Colleges, Universities, and Professional Schools"
611410,Business and Secretarial Schools
611420,Computer Training
611430,Professional and Management Development Training
611511,Cosmetology and Barber Schools
611512,Flight Training
611513,Apprenticeship Training
611519,Other Technical and Trade Schools
611610,Fine Arts Schools
611620,Sports and Recreation Instruction
611630,Language Schools
611691,Exam Preparation and Tutoring
611692,Automobile Driving Schools
611699,All Other Miscellaneous Schools and Instruction
611710,Educational Support Services
621111,Offices of Physicians (except Mental Health Specialists)
621112,"Offices of Physicians, Mental Health Specialists"
621210,Offices of Dentists
621310,Offices of Chiropractors
621320,Offices of Optometrists
621330,Offices of Mental Health Practitioners (except Physicians)
621340,"Offices of Physical, Occupational and Speech Therapists, and Audiologists"
621391,Offices of Podiatrists
621399,Offices of All Other Miscellaneous Health Practitioners
621410,Family Planning Centers
621420,Outpatient Mental Health and Substance Abuse Centers
621491,HMO Medical Centers
621492,Kidney Dialysis Centers
621493,Freestanding Ambulatory Surgical and Emergency Centers
621498,All Other Outpatient Care Centers
621511,Medical Laboratories
621512,Diagnostic Imaging Centers
621610,Home Health Care Services
621910,Ambulance Services
621991,Blood and Organ Banks
621999,All Other Miscellaneous Ambulatory Health Care Services
622110,General Medical and Surgical Hospitals
622210,Psychiatric and Substance Abuse Hospitals
622310,Specialty (except Psychiatric and Substance Abuse) Hospitals
623110,Nursing Care Facilities (Skilled Nursing Facilities)
623210,Residential Intellectual and Developmental Disability Facilities
623220,Residential Mental Health and Substance Abuse Facilities
623311,Continuing Care Retirement Communities
623312,Assisted Living Facilities for the Elderly
623990,Other Residential Care Facilities
624110,Child and Youth Services
624120,Services for the Elderly and Persons with Disabilities
624190,Other Individual and Family Services
624210,Community Food Services
624221,Temporary Shelters
624229,Other Community Housing Services
624230,Emergency and Other Relief Services
624310,Vocational Rehabilitation Services
624410,Child Care Services
711110,Theater Companies and Dinner Theaters
711120,Dance Companies
711130,Musical Groups and Artists
711190,Other Performing Arts Companies
711211,Sports Teams and Clubs
711212,Racetracks
711219,Other Spectator Sports
711310,"Promoters of Performing Arts, Sports, and Similar Events with Facilities"
711320,"Promoters of Performing Arts, Sports, and Similar Events without Facilities"
711410,"Agents and Managers for Artists, Athletes, Entertainers, and Other Public Figures"
711510,"Independent Artists, Writers, and Performers"
712110,Museums
712120,Historical Sites
712130,Zoos and Botanical Gardens
712190,Nature Parks and Other Similar Institutions
713110,Amusement and Theme Parks
713120,Amusement Arcades
713210,Casinos (except Casino Hotels)
713290,Other Gambling Industries
713910,Golf Courses and Country Clubs
713920,Skiing Facilities
713930,Marinas
713940,Fitness and Recreational Sports Centers
713950,Bowling Centers
713990,All Other Amusement and Recreation Industries
721110,Hotels (except Casino Hotels) and Motels
721120,Casino Hotels
721191,Bed-and-Breakfast Inns
721199,All Other Traveler Accommodation
721211,RV (Recreational Vehicle) Parks and Campgrounds
721214,Recreational and Vacation Camps (except Campgrounds)
721310,"Rooming and Boarding Houses, Dormitories, and Workers' Camps"
722310,Food Service Contractors
722320,Caterers
722330,Mobile Food Services
722410,Drinking Places (Alcoholic Beverages)
722511,Full-Service Restaurants
722513,Limited-Service Restaurants
722514,"Cafeterias, Grill Buffets, and Buffets"
722515,Snack and Nonalcoholic Beverage Bars
811111,General Automotive Repair
811114,Specialized Automotive Repair
811121,"Automotive Body, Paint, and Interior Repair and Maintenance"
811122,Automotive Glass Replacement Shops
811191,Automotive Oil Change and Lubrication Shops
811192,Car Washes
811198,All Other Automotive Repair and Maintenance
811210,Electronic and Precision Equipment Repair and Maintenance
811310,Commercial and Industrial Machinery and Equipment (except Automotive and Electronic) Repair and Maintenance
811411,Home and Garden Equipment Repair and Maintenance
811412,Appliance Repair and Maintenance
811420,Reupholstery and Furniture Repair
811430,Footwear and Leather Goods Repair
811490,Other Personal and Household Goods Repair and Maintenance
812111,Barber Shops
812112,Beauty Salons
812113,Nail Salons
812191,Diet and Weight Reducing Centers
812199,Other Personal Care Services
812210,Funeral Homes and Funeral Services
812220,Cemeteries and Crematories
812310,Coin-Operated Laundries and Drycleaners
812320,Drycleaning and Laundry Services (except Coin-Operated)
812331,Linen Supply
812332,Industrial Launderers
812910,Pet Care (except Veterinary) Services
812921,Photofinishing Laboratories (except One-Hour)
812922,One-Hour Photofinishing
812930,Parking Lots and Garages
812990,All Other Personal Services
813110,Religious Organizations
813211,Grantmaking Foundations
813212,Voluntary Health Organizations
813219,Other Grantmaking and Giving Services
813311,Human Rights Organizations
813312,"Environment, Conservation and Wildlife Organizations"
813319,Other Social Advocacy Organizations
813410,Civic and Social Organizations
813910,Business Associations
813920,Professional Organizations
813930,Labor Unions and Similar Labor Organizations
813940,Political Organizations
813990,"Other Similar Organizations (except Business, Professional, Labor, and Political Organizations)"
814110,Private Households
921110,Executive Offices
921120,Legislative Bodies
921130,Public Finance Activities
921140,"Executive and Legislative Offices, Combined"
921150,American Indian and Alaska Native Tribal Governments
921190,Other General Government Support
922110,Courts
922120,Police Protection
922130,Legal Counsel and Prosecution
922140,Correctional Institutions
922150,Parole Offices and Probation Offices
922160,Fire Protection
922190,"Other Justice, Public Order, and Safety Activities"
923110,Administration of Education Programs
923120,Administration of Public Health Programs
923130,"Administration of Human Resource Programs (except Education, Public Health, and Veterans' Affairs Programs)"
923140,Administration of Veterans' Affairs
924110,Administration of Air and Water Resource and Solid Waste Management Programs
924120,Administration of Conservation Programs
925110,Administration of Housing Programs
925120,Administration of Urban Planning and Community and Rural Development
926110,Administration of General Economic Programs
926120,Regulation and Administration of Transportation Programs
926130,"Regulation and Administration of Communications, Electric, Gas, and Other Utilities"
926140,Regulation of Agricultural Marketing and Commodities
926150,"Regulation, Licensing, and Inspection of Miscellaneous Commercial Sectors"
927110,Space Research and Technology
928110,National Security
928120,International Affairs
```

[EIC (Easy Industry Classification)](/guides/classification/EIC)

[Previous](/guides/classification/EIC)

[SIC](/guides/classification/SIC)

[Next](/guides/classification/SIC)

⌘I

Assistant

Responses are generated using AI and may contain mistakes.

[Contact support](/cdn-cgi/l/email-protection#ee88819b808a8b9c9dae8d81809a8b969ac08a8b98)

----
url: https://docs.context.dev/guides/scrape-websites-to-markdown
----

> ## Documentation Index
>
> Fetch the complete documentation index at: [/llms.txt](/llms.txt)
>
> Use this file to discover all available pages before exploring further.

[Skip to main content](#content-area)

Context.dev’s Web APIs can:

* Turn a webpage into clean markdown/HTML
* Crawl an entire website and save every page as markdown
* Get all webpages under a domain
* Extract every image on a webpage

Context.dev’s scrapers automatically switch to a different web-proxy when they get blocked by bot protection or geo-restrictions.

Integrate Context.dev's scraping endpoints in your app

[Open in Cursor](https://cursor.com/link/prompt?text=I'm%20integrating%20Context.dev's%20web%20scraping%20endpoints%20into%20my%20app.%20Help%20me%3A%0A%0A1.%20Install%20the%20official%20SDK%20for%20my%20language%3A%20%60context.dev%60%20on%20npm%20\(TypeScript\)%2C%20%60context.dev%60%20on%20PyPI%20\(Python\)%2C%20%60context.dev%60%20on%20RubyGems%20\(Ruby\)%2C%20%60context-dev%2Fcontext-dev-php%60%20on%20Packagist%20\(PHP\)%2C%20or%20%60github.com%2Fcontext-dot-dev%2Fcontext-go-sdk%60%20\(Go\).%20Or%20call%20the%20raw%20HTTP%20API%20with%20%60curl%60%20%2F%20%60fetch%60.%0A2.%20Read%20the%20API%20key%20from%20the%20%60CONTEXT_DEV_API_KEY%60%20environment%20variable.%20Never%20hardcode%20it.%20Authentication%20is%20a%20bearer%20token%20on%20every%20request.%0A3.%20Call%20%60%2Fweb%2Fscrape%2Fmarkdown%60%20to%20turn%20a%20URL%20into%20clean%20Markdown%20\(pass%20%60useMainContentOnly%3A%20true%60%20to%20strip%20nav%2C%20footer%2C%20and%20chrome\).%0A4.%20Call%20%60%2Fweb%2Fscrape%2Fhtml%60%20for%20raw%20rendered%20HTML%2C%20%60%2Fweb%2Fscrape%2Fimages%60%20for%20an%20image%20manifest%2C%20%60%2Fweb%2Fscrape%2Fsitemap%60%20to%20list%20a%20domain's%20URLs%2C%20and%20%60%2Fweb%2Fcrawl%60%20to%20walk%20a%20whole%20domain%20with%20%60maxPages%60%20and%20%60maxDepth%60%20caps.%0A5.%20Wrap%20calls%20with%20exponential%20backoff%20for%20transient%20failures.%20Proxy%20escalation%20is%20automatic%2C%20so%20most%20retries%20succeed%20on%20a%20different%20IP%20pool.%0A%0ADocs%3A%20%5Bhttps%3A%2F%2Fdocs.context.dev%2Fguides%2Fscrape-websites-to-markdown%5D\(https%3A%2F%2Fdocs.context.dev%2Fguides%2Fscrape-websites-to-markdown\))

## [​](#prerequisites)Prerequisites

* **A Context.dev API key.** Sign up at [context.dev/signup](https://context.dev/signup), copy the key from the [dashboard](https://context.dev/dashboard) (prefix `ctxt_secret_`), and export it:

  ```
  export CONTEXT_DEV_API_KEY="ctxt_secret_..."
  ```

* **An SDK (optional).** Install for your language, or skip the install and call directly with `curl`:

  ```
  npm install context.dev
  ```

## [​](#scrape-a-single-page-to-markdown)Scrape a single page to Markdown

`GET /web/scrape/markdown` scrapes any URL into LLM-ready GitHub Flavored Markdown. Bot protection and geo-blocks are handled by automatic proxy escalation; pass `useMainContentOnly: true` to drop nav, footer, sidebars, and other chrome.

```
curl -G https://api.context.dev/v1/web/scrape/markdown \
  -H "Authorization: Bearer $CONTEXT_DEV_API_KEY" \
  --data-urlencode "url=https://example.com" \
  --data-urlencode "useMainContentOnly=true"
```

1 credit per call The connection stays open while the page is fetched and converted, so there’s no need to poll. Repeated calls for the same URL within `maxAgeMs` return the cached scrape.

### [​](#request-parameters)Request Parameters

| Parameter             | Type         | Default                 | Description                                                                                                                                                                    |
| --------------------- | ------------ | ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `url`                 | string (URI) | none                    | **Required.** Full URL to scrape. Must include `http://` or `https://`.                                                                                                        |
| `includeLinks`        | boolean      | `true`                  | Preserve hyperlinks in the Markdown output.                                                                                                                                    |
| `includeImages`       | boolean      | `false`                 | Include image references in the Markdown output.                                                                                                                               |
| `shortenBase64Images` | boolean      | `true`                  | Truncate base64-encoded image data so it doesn’t dominate the response.                                                                                                        |
| `useMainContentOnly`  | boolean      | `false`                 | Strip headers, footers, sidebars, and navigation, keeping only the main content.                                                                                               |
| `includeFrames`       | boolean      | `false`                 | When true, the contents of iframes are rendered to Markdown.                                                                                                                   |
| `includeSelectors`    | string\[]    | none                    | CSS selectors. When provided, only matching HTML subtrees (and their descendants) are kept before conversion to Markdown. Examples: `article.main`, `#content`, `[role=main]`. |
| `excludeSelectors`    | string\[]    | none                    | CSS selectors to remove before conversion to Markdown. Applied after `includeSelectors`; exclusion takes precedence. Examples: `nav`, `footer`, `.ad-banner`.                  |
| `pdf`                 | object       | `{ shouldParse: true }` | PDF-page controls: `shouldParse`, `start`, `end` (1-based inclusive range). Set `shouldParse: false` to skip PDFs.                                                             |
| `maxAgeMs`            | integer      | `86400000` (24h)        | Return a cached scrape if one exists younger than this. `0` forces a fresh scrape. Max is 30 days.                                                                             |
| `waitForMs`           | integer      | none                    | Browser wait time after initial load (max 30000). Use when the page needs JS time to populate.                                                                                 |
| `headers`             | object       | none                    | Outbound HTTP headers forwarded to the target URL, sent as deep-object query params (e.g. `headers[X-Custom]=value`). When provided, caching is bypassed entirely.             |
| `timeoutMS`           | integer      | none                    | Abort with a 408 if the request exceeds this many milliseconds. Min `1000`, max `300000` (5 min).                                                                              |

### [​](#response)Response

```
{
  "success": true,
  "url": "https://example.com",
  "markdown": "# Example Domain\n\nThis domain is for use in documentation examples without needing permission. Avoid use in operations.\n\n[Learn more](https://iana.org/domains/example)"
}
```

| Field      | Type    | Description                                                                                                                                                             |
| ---------- | ------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `success`  | boolean | `true` when the scrape completed.                                                                                                                                       |
| `url`      | string  | The URL that was scraped.                                                                                                                                               |
| `markdown` | string  | The page rendered as GitHub Flavored Markdown. By default the full page is converted; pass `useMainContentOnly: true` to strip nav, footer, sidebars, and other chrome. |

Get raw HTML instead

To get the page as raw HTML:

```
curl -G https://api.context.dev/v1/web/scrape/html \
  -H "Authorization: Bearer $CONTEXT_DEV_API_KEY" \
  --data-urlencode "url=https://example.com"
```

1 credit per call**Request Parameters**

| Parameter            | Type         | Default                 | Description                                                                                                             |
| -------------------- | ------------ | ----------------------- | ----------------------------------------------------------------------------------------------------------------------- |
| `url`                | string (URI) | none                    | **Required.** Full URL to scrape.                                                                                       |
| `includeFrames`      | boolean      | `false`                 | When true, iframes are rendered inline into the returned HTML.                                                          |
| `useMainContentOnly` | boolean      | `false`                 | Return only the page’s main content, excluding headers, footers, sidebars, and navigation when detectable.              |
| `includeSelectors`   | string\[]    | none                    | CSS selectors. When provided, only matching subtrees (and their descendants) are kept; everything else is dropped.      |
| `excludeSelectors`   | string\[]    | none                    | CSS selectors to remove from the result. Applied after `includeSelectors`; exclusion takes precedence.                  |
| `pdf`                | object       | `{ shouldParse: true }` | PDF-page controls; same shape as `/web/scrape/markdown`.                                                                |
| `maxAgeMs`           | integer      | `86400000`              | Cache TTL. `0` for fresh. Max 30 days.                                                                                  |
| `waitForMs`          | integer      | none                    | Wait after initial load (max 30000).                                                                                    |
| `headers`            | object       | none                    | Outbound HTTP headers forwarded to the target URL (e.g. `headers[X-Custom]=value`). When provided, caching is bypassed. |
| `timeoutMS`          | integer      | none                    | Abort with a 408 if the request exceeds this many milliseconds. Min `1000`, max `300000` (5 min).                       |

**Response**

```
{
  "success": true,
  "url": "https://example.com",
  "html": "<!DOCTYPE html><html lang=\"en\"><head><title>Example Domain</title><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"><style>body{background:#eee;width:60vw;margin:15vh auto;font-family:system-ui,sans-serif}…</style></head><body>…</body></html>"
}
```

## [​](#crawl-a-whole-site)Crawl a whole site

`POST /web/crawl` takes a seed URL and returns an array of scraped pages in one call. That’s exactly the shape you want for seeding a RAG index or building a knowledge base.

```
curl -X POST https://api.context.dev/v1/web/crawl \
  -H "Authorization: Bearer $CONTEXT_DEV_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://context.dev",
    "maxPages": 3,
    "maxDepth": 1
  }'
```

1 credit per page scraped

Crawls are billed per page, not per call. Scraping a website with 50 pages costs 50 credits. Set `maxPages` accordingly.

### [​](#request-parameters-2)Request Parameters

| Parameter             | Type         | Default                 | Description                                                                                                                           |
| --------------------- | ------------ | ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------- |
| `url`                 | string (URI) | none                    | **Required.** Starting URL for the crawl.                                                                                             |
| `maxPages`            | integer      | `100`                   | Maximum pages to crawl. Hard cap: `500`.                                                                                              |
| `maxDepth`            | integer      | none                    | Maximum link depth from the starting URL (`0` = only the seed).                                                                       |
| `urlRegex`            | string       | none                    | Only URLs matching this regex are followed and scraped. Example: `^https?://[^/]+/blog/`.                                             |
| `followSubdomains`    | boolean      | `false`                 | When true, follow links on subdomains (`docs.example.com` from `example.com`). `www` and apex are always treated as equivalent.       |
| `includeLinks`        | boolean      | `true`                  | Preserve hyperlinks in each page’s Markdown.                                                                                          |
| `includeImages`       | boolean      | `false`                 | Include image references in each page’s Markdown.                                                                                     |
| `shortenBase64Images` | boolean      | `true`                  | Truncate base64 image data.                                                                                                           |
| `useMainContentOnly`  | boolean      | `false`                 | Strip nav/footer/sidebars on every page.                                                                                              |
| `includeFrames`       | boolean      | `false`                 | Render iframes on every page.                                                                                                         |
| `includeSelectors`    | string\[]    | none                    | CSS selectors. When provided, only matching HTML subtrees (and their descendants) are kept before each page is converted to Markdown. |
| `excludeSelectors`    | string\[]    | none                    | CSS selectors to remove before each page is converted to Markdown. Applied after `includeSelectors`; exclusion takes precedence.      |
| `pdf`                 | object       | `{ shouldParse: true }` | PDF-page controls. Set `shouldParse: false` to skip PDFs entirely.                                                                    |
| `maxAgeMs`            | integer      | `86400000`              | Per-page cache TTL.                                                                                                                   |
| `waitForMs`           | integer      | none                    | Per-page wait after initial load. Max 30000.                                                                                          |
| `stopAfterMs`         | integer      | `80000`                 | Soft time budget for the entire crawl (10000–110000). The crawler returns what it has so far when exceeded.                           |
| `timeoutMS`           | integer      | none                    | Hard abort: returns a 408 if the request exceeds this many milliseconds. Min `1000`, max `300000` (5 min).                            |

### [​](#response-2)Response

```
{
  "results": [
    {
      "markdown": "# Context.dev\n\nTurn any domain into structured, AI-ready data…",
      "metadata": {
        "url": "https://context.dev/",
        "title": "Context.dev: Brand & Web APIs for Agents",
        "crawlDepth": 0,
        "statusCode": 200,
        "success": true
      }
    },
    {
      "markdown": "# Brand.dev is now Context.dev\n\nWhy we renamed…",
      "metadata": {
        "url": "https://context.dev/blog/brand-dev-is-now-context-dev",
        "title": "Brand.dev is now Context.dev",
        "crawlDepth": 1,
        "statusCode": 200,
        "success": true
      }
    },
    {
      "markdown": "# Pricing\n\nPay only for successful calls…",
      "metadata": {
        "url": "https://context.dev/pricing",
        "title": "Pricing | Context.dev",
        "crawlDepth": 1,
        "statusCode": 200,
        "success": true
      }
    }
  ],
  "metadata": {
    "numUrls": 3,
    "maxCrawlDepth": 1,
    "numSucceeded": 3,
    "numFailed": 0,
    "numSkipped": 0
  }
}
```

| Field                           | Type    | Description                                                          |
| ------------------------------- | ------- | -------------------------------------------------------------------- |
| `results[]`                     | array   | One entry per crawled page.                                          |
| `results[].markdown`            | string  | The page body as GitHub-Flavored Markdown.                           |
| `results[].metadata.url`        | string  | The URL that was fetched (after redirects).                          |
| `results[].metadata.title`      | string  | The page’s `<title>` tag value.                                      |
| `results[].metadata.crawlDepth` | number  | Link-hops from the seed URL (`0` for the seed itself).               |
| `results[].metadata.statusCode` | number  | HTTP status of the underlying fetch.                                 |
| `results[].metadata.success`    | boolean | `false` for pages that failed to render; `markdown` may be empty.    |
| `metadata.numUrls`              | number  | Total URLs the crawler attempted.                                    |
| `metadata.maxCrawlDepth`        | number  | Deepest hop reached during the crawl.                                |
| `metadata.numSucceeded`         | number  | Pages fetched successfully. Matches the credit cost.                 |
| `metadata.numFailed`            | number  | Pages that errored.                                                  |
| `metadata.numSkipped`           | number  | Pages skipped (e.g. by `urlRegex` or `pdf: { shouldParse: false }`). |

## [​](#get-all-urls-of-a-domain)Get all URLs of a domain

`GET /web/scrape/sitemap` reads `sitemap.xml` from a domain root, follows any nested sitemap indexes, and returns a de-duplicated URL list without rendering any of the pages. Use it for cheap coverage of large sites or to feed a downstream scraper with a curated list.

```
curl -G https://api.context.dev/v1/web/scrape/sitemap \
  -H "Authorization: Bearer $CONTEXT_DEV_API_KEY" \
  --data-urlencode "domain=stripe.com" \
  --data-urlencode "maxLinks=50" \
  --data-urlencode "urlRegex=/customers/"
```

1 credit per call

### [​](#request-parameters-3)Request Parameters

| Parameter   | Type    | Default | Description                                                                                                                                   |
| ----------- | ------- | ------- | --------------------------------------------------------------------------------------------------------------------------------------------- |
| `domain`    | string  | none    | **Required.** Domain to build a sitemap for (e.g. `example.com`). No protocol required; the API validates and normalizes the input.           |
| `maxLinks`  | integer | `500`   | Maximum URLs to return (effective range 1–500). The response’s `urls[]` array is hard-capped at 500 entries, so values above 500 are clamped. |
| `urlRegex`  | string  | none    | Filter the discovered URLs by regex pattern.                                                                                                  |
| `headers`   | object  | none    | Outbound HTTP headers forwarded to the target URL (e.g. `headers[X-Custom]=value`). When provided, caching is bypassed.                       |
| `timeoutMS` | integer | none    | Abort with a 408 if the request exceeds this many milliseconds. Min `1000`, max `300000` (5 min).                                             |

### [​](#response-3)Response

```
{
  "success": true,
  "domain": "stripe.com",
  "urls": [
    "https://stripe.com/customers/all",
    "https://stripe.com/customers/gamma",
    "https://stripe.com/customers/chatbase"
  ],
  "meta": {
    "sitemapsDiscovered": 4,
    "sitemapsFetched": 4,
    "sitemapsSkipped": 0,
    "errors": 0
  }
}
```

| Field                     | Type      | Description                                                                                        |
| ------------------------- | --------- | -------------------------------------------------------------------------------------------------- |
| `success`                 | boolean   | `true` when the sitemap crawl completed.                                                           |
| `domain`                  | string    | The normalized domain that was crawled.                                                            |
| `urls[]`                  | string\[] | Discovered page URLs, de-duplicated. Bounded by `maxLinks` and capped at 500 entries per response. |
| `meta.sitemapsDiscovered` | number    | Total sitemap XML files discovered (root + nested indexes).                                        |
| `meta.sitemapsFetched`    | number    | Sitemaps actually fetched and parsed.                                                              |
| `meta.sitemapsSkipped`    | number    | Sitemaps skipped (404s, malformed XML, etc.).                                                      |
| `meta.errors`             | number    | Errors encountered during crawling.                                                                |

## [​](#extract-every-image-on-a-page)Extract every image on a page

`GET /web/scrape/images` takes a URL and returns a manifest of every image referenced on the page: `<img>` tags, inline `<svg>`, CSS background images, `<picture>` sources, OpenGraph and Twitter card images, favicons. Opt into `enrichment` to also get measured dimensions, a CDN-hosted copy, and a visual-type classification per image.

```
curl -G https://api.context.dev/v1/web/scrape/images \
  -H "Authorization: Bearer $CONTEXT_DEV_API_KEY" \
  --data-urlencode "url=https://airbnb.com" \
  --data-urlencode "enrichment[resolution]=true" \
  --data-urlencode "enrichment[classification]=true"
```

1 credit per call 5 credits per call if enrichment flags are used

### [​](#request-parameters-4)Request Parameters

| Parameter                   | Type         | Default    | Description                                                                                                             |
| --------------------------- | ------------ | ---------- | ----------------------------------------------------------------------------------------------------------------------- |
| `url`                       | string (URI) | none       | **Required.** Page URL to inspect.                                                                                      |
| `maxAgeMs`                  | integer      | `86400000` | Cache TTL (0 forces fresh; max 30 days).                                                                                |
| `enrichment.resolution`     | boolean      | `false`    | Measure width × height in pixels when possible.                                                                         |
| `enrichment.hostedUrl`      | boolean      | `false`    | Host materializable images on Context.dev’s CDN and return their URL + MIME type.                                       |
| `enrichment.classification` | boolean      | `false`    | Classify each image as `photography`, `illustration`, `logo`, `wordmark`, `icon`, `pattern`, `graphic`, or `other`.     |
| `enrichment.maxTimePerMs`   | integer      | `30000`    | Per-image enrichment timeout (1–60000 ms).                                                                              |
| `waitForMs`                 | integer      | none       | Browser wait after initial load (max 30000).                                                                            |
| `headers`                   | object       | none       | Outbound HTTP headers forwarded to the target URL (e.g. `headers[X-Custom]=value`). When provided, caching is bypassed. |
| `timeoutMS`                 | integer      | none       | Abort with a 408 if the request exceeds this many milliseconds. Min `1000`, max `300000` (5 min).                       |

### [​](#response-4)Response

```
{
  "success": true,
  "url": "https://airbnb.com",
  "images": [
    {
      "src": "https://a0.muscache.com/im/pictures/airbnb-platform-assets/AirbnbPlatformAssets-UserProfile/original/5347d650-16de-4f5a-a38e-79edc988befa.png?im_w=720",
      "element": "img",
      "type": "url",
      "alt": null,
      "enrichment": {
        "width": 720,
        "height": 720,
        "type": "illustration"
      }
    },
    {
      "src": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 32 32\" …></svg>",
      "element": "svg",
      "type": "html",
      "alt": null,
      "enrichment": {
        "width": 16,
        "height": 16,
        "type": "icon"
      }
    }
  ]
}
```

| Field                          | Type           | Description                                                                                                                                                      |
| ------------------------------ | -------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `success`                      | boolean        | `true` when the scrape completed.                                                                                                                                |
| `url`                          | string         | The page URL that was scraped.                                                                                                                                   |
| `images[]`                     | array          | One entry per image referenced on the page.                                                                                                                      |
| `images[].src`                 | string         | For `type: "url"`, the absolute image URL. For `type: "html"`, the raw inline SVG/HTML.                                                                          |
| `images[].element`             | enum           | DOM origin: `img`, `svg`, `link`, `source`, `video`, `css`, `object`, `meta`, or `background`.                                                                   |
| `images[].type`                | enum           | Format of `src`: `url` (external image), `html` (inline markup like SVG), or `base64` (data URI).                                                                |
| `images[].alt`                 | string \| null | Alt text where present.                                                                                                                                          |
| `images[].enrichment.width`    | number         | Pixel width. Present when `enrichment.resolution=true`.                                                                                                          |
| `images[].enrichment.height`   | number         | Pixel height. Present when `enrichment.resolution=true`.                                                                                                         |
| `images[].enrichment.mimetype` | string         | MIME type. Present when hosted via `enrichment.hostedUrl=true`.                                                                                                  |
| `images[].enrichment.url`      | string         | Context.dev CDN URL. Present when `enrichment.hostedUrl=true`.                                                                                                   |
| `images[].enrichment.type`     | enum           | Visual category. Present when `enrichment.classification=true`. One of `photography`, `illustration`, `logo`, `wordmark`, `icon`, `pattern`, `graphic`, `other`. |

The base manifest is 1 credit. Setting any `enrichment` flag (`resolution`, `hostedUrl`, or `classification`) bumps the entire call to 5 credits, even if only one image qualifies for enrichment.

## [​](#use-cases)Use cases

* Build a [RAG pipeline](/use-cases/build-rag-from-websites) from a docs site by crawling and chunking the returned Markdown.
* [Cut LLM token bills](/use-cases/build-rag-from-websites) by feeding clean Markdown instead of raw HTML.
* Seed a vector index without managing scrapers or proxy infrastructure.
* Monitor competitors’ marketing pages by scraping them on a schedule.

[Install the CLI](/install-cli)

[Previous](/install-cli)

[Extract Structured Data from Websites](/guides/extract-structured-data-from-websites)

[Next](/guides/extract-structured-data-from-websites)

Ctrl+I

Assistant

Responses are generated using AI and may contain mistakes.

[Contact support](mailto:founders@context.dev)

----
url: https://docs.context.dev/optimization/troubleshooting
----

> ## Documentation Index
>
> Fetch the complete documentation index at: [/llms.txt](/llms.txt)
>
> Use this file to discover all available pages before exploring further.

[Skip to main content](#content-area)

Every Context.dev failure surfaces as a typed exception in the SDK or a structured error envelope from the HTTP API. The envelope carries a `status`, a human-readable `message`, and a machine-readable `error_code` (429 responses use `code` instead):

```
{
  "message": "Domain branding not present (DNS resolution failed) [acme-nonexistent.com]",
  "status": "error",
  "error_code": "WEBSITE_ACCESS_ERROR"
}
```

The most common status codes:

| Status | Meaning                                                                  | Where to look                                   |
| ------ | ------------------------------------------------------------------------ | ----------------------------------------------- |
| 400    | Invalid input, or a well-formed domain that can’t be resolved            | [Bad Request](#bad-request-400)                 |
| 401    | Missing or invalid API key                                               | [Unauthorized](#unauthorized-401)               |
| 408    | Cold-hit timeout or custom `timeoutMS` exceeded                          | [Request Timeout](#request-timeout-408)         |
| 422    | Invalid, disposable, or free email (only on `/brand/retrieve-by-email`)  | [Invalid Email](#invalid-email-422)             |
| 429    | Rate limit exceeded — wait the seconds given in the `Retry-After` header | [Handle Rate Limits](/optimization/rate-limits) |
| 500    | Transient server error                                                   | [Server Error](#server-error-500)               |

For the current API status, see [status.context.dev](https://status.context.dev).

## [​](#bad-request-400)Bad Request (400)

Good news first: you don’t have to sanitize the domain yourself. The API strips the protocol and the `www.` subdomain for you, so `stripe.com`, `https://stripe.com`, and `www.stripe.com` all resolve to the same brand.

```
// All three resolve to stripe.com — the API normalizes protocol and www.
await client.brand.retrieve({ domain: "stripe.com" });
await client.brand.retrieve({ domain: "https://stripe.com" });
await client.brand.retrieve({ domain: "www.stripe.com" });

// 400 INPUT_VALIDATION_ERROR — no TLD, fails the domain format check
await client.brand.retrieve({ domain: "stripe" });
```

A 400 actually comes back in three distinct flavors, told apart by `error_code`:

* **`INPUT_VALIDATION_ERROR`** — the request itself is malformed. A domain with no TLD (`stripe`), a missing required parameter, an out-of-range value (company name on `/brand/retrieve-by-name` must be 3–30 characters), or both/neither of an either-or pair (`/web/styleguide`, `/web/fonts`, and `/web/screenshot` each take `domain` or `directUrl`, never both and never neither).
* **`WEBSITE_ACCESS_ERROR`** — the domain is well-formed but the resolver couldn’t reach it (DNS failure, dead site, hostile WAF). This is effectively “no brand here,” and on `/brand/retrieve` it comes back as a 400, not a 404.
* **`NOT_FOUND`** — no brand matched the identifier you passed. The request is not billed.

Surface an `INPUT_VALIDATION_ERROR` as a user-facing validation message, not a retryable failure. A `WEBSITE_ACCESS_ERROR` means the brand doesn’t exist or can’t be crawled, so treat it as a clean “not found.”

## [​](#unauthorized-401)Unauthorized (401)

The API key is missing, invalid, expired, or deleted. Start by confirming the key is actually being loaded, without ever logging the key itself:

```
console.log("API key present:", !!process.env.CONTEXT_DEV_API_KEY);
console.log("API key length:", process.env.CONTEXT_DEV_API_KEY?.length);

const client = new ContextDev({ apiKey: process.env.CONTEXT_DEV_API_KEY });
```

Common gotchas:

* **Env var name mismatch.** The expected name is `CONTEXT_DEV_API_KEY`. Watch for typos like `CONTEXTAPIKEY` or `CONTEXT_DEV_APIKEY`.
* **`.env` not loaded.** In Node, `import "dotenv/config"` (or `require("dotenv").config()`) must run before the SDK is initialized. In Python, `load_dotenv()` from `python-dotenv` does the same.
* **Key was rotated.** Generate a new key in the [dashboard](https://context.dev/dashboard) and update the environment variable everywhere the application runs.

## [​](#request-timeout-408)Request Timeout (408)

A 408 comes back when either your `timeoutMS` budget elapsed before the API finished, or the cold-hit crawl ran past the 5-minute platform maximum. For reference, cold-hit latency is around 7 seconds at p50 and up to a minute at p99; cached hits return in around 250ms. Three recovery strategies, in order of preference: **1. Prefetch the domain or email.** A warmed cache lands the eventual `/brand/retrieve` in under a second. See [Prefetch for Faster Response](/optimization/prefetching). **2. Raise the `timeoutMS` budget.** Minimum 1,000 ms, maximum 300,000 ms (5 minutes). 60 seconds is a sane default for non-time-sensitive paths:

```
const { brand } = await client.brand.retrieve({
  domain: "example.com",
  timeoutMS: 60000,
});
```

**3. Retry with exponential backoff.** A second attempt frequently lands on the now-warm cache from the first crawl. These snippets assume a configured `client` from the [Quickstart](/quickstart):

```
async function fetchWithRetry(domain: string, maxRetries = 3) {
  for (let i = 0; i < maxRetries; i++) {
    try {
      return await client.brand.retrieve({ domain });
    } catch (err: any) {
      if (err.status === 408 && i < maxRetries - 1) {
        await new Promise((r) => setTimeout(r, 2 ** i * 1000));
        continue;
      }
      throw err;
    }
  }
}
```

## [​](#invalid-email-422)Invalid Email (422)

Returned only by `/brand/retrieve-by-email`. The three causes:

* **Disposable email service** (e.g. `tempmail.com`, `guerrillamail.com`).
* **Free email provider** (`gmail.com`, `yahoo.com`, `hotmail.com`, `outlook.com`, `aol.com`, `icloud.com`, `proton.me`). The `error_code` is `FREE_EMAIL_DETECTED`.
* **Malformed email format.**

Filter known-bad providers client-side to skip the round trip:

```
const FREE_PROVIDERS = new Set([
  "gmail.com", "yahoo.com", "hotmail.com", "outlook.com",
  "aol.com", "icloud.com", "proton.me",
]);

function isWorkEmail(email: string): boolean {
  const domain = email.split("@")[1]?.toLowerCase();
  return Boolean(domain) && !FREE_PROVIDERS.has(domain);
}

if (isWorkEmail(email)) {
  await client.brand.retrieveByEmail({ email });
}
```

The `/brand/prefetch-by-email` endpoint applies a broader 10,000+ disposable-provider filter automatically.

## [​](#server-error-500)Server Error (500)

A 500 is transient. Two recovery patterns: **1. Retry with exponential backoff** (same shape as the 408 retry above). **2. Fall back to a different lookup method.** If `/brand/retrieve-by-email` 500s, extract the domain and call `/brand/retrieve` instead:

```
async function getBrandWithFallback(email: string) {
  try {
    return await client.brand.retrieveByEmail({ email });
  } catch (err: any) {
    if (err.status === 500) {
      const domain = email.split("@")[1];
      return await client.brand.retrieve({ domain });
    }
    throw err;
  }
}
```

If 500s persist across retries, check [status.context.dev](https://status.context.dev) for an open incident, then [email support](mailto:hello@context.dev) with the domain, timestamp, and full error body.

## [​](#missing-or-partial-brand-data-200)Missing or partial brand data (200)

A successful 200 does not guarantee every field is populated. Not every brand has every asset (a private company has no `stock`; some sites have no discovered logos). Always provide defaults:

```
const logo = brand.logos[0]?.url ?? "/placeholder-logo.svg";
const primaryColor = brand.colors[0]?.hex ?? "#6B7280";
const description = brand.description ?? `${brand.title} (description unavailable)`;
```

Render the fallback in the same shape so your layout does not shift. Don’t conditionally hide whole sections.

## [​](#debugging-recipes)Debugging recipes

**Isolate the issue with a raw cURL request.** If a cURL call works and the SDK call does not, the SDK or env-var setup is the suspect:

```
curl -G https://api.context.dev/v1/brand/retrieve \
  -H "Authorization: Bearer $CONTEXT_DEV_API_KEY" \
  --data-urlencode "domain=stripe.com" \
  -v
```

**Enable verbose SDK logging when chasing 4xx mysteries.** Each SDK exposes a different mechanism: Python’s `logging.basicConfig(level=logging.DEBUG)`, Node’s `console.log` around the call, or running through a local proxy that captures the request.

## [​](#related-resources)Related resources

## [Rate limits](/optimization/rate-limits)

[The full 429 recovery contract.](/optimization/rate-limits)

## [Prefetch](/optimization/prefetching)

[The fastest fix for 408 cold-hit timeouts.](/optimization/prefetching)

## [Best practices](/optimization/best-practices)

[Caching, fallbacks, and error handling at the integration level.](/optimization/best-practices)

## [Status page](https://status.context.dev)

[Live API status.](https://status.context.dev)

Was this page helpful?

[Integration Best Practices](/optimization/best-practices)

[Previous](/optimization/best-practices)

[Make](/nocode/make)

[Next](/nocode/make)

Ctrl+I

Assistant

Responses are generated using AI and may contain mistakes.

[Contact support](mailto:founders@context.dev)

----
url: https://docs.context.dev/api-reference/web-scraping/scrape-screenshot
----

> ## Documentation Index
>
> Fetch the complete documentation index at: [/llms.txt](/llms.txt)
>
> Use this file to discover all available pages before exploring further.

[Skip to main content](#content-area)

JavaScript

```
import ContextDev from 'context.dev';

const client = new ContextDev({
  apiKey: process.env['CONTEXT_DEV_API_KEY'], // This is the default and can be omitted
});

const response = await client.web.screenshot();

console.log(response.width);
```

```
{
  "status": "<string>",
  "domain": "<string>",
  "screenshot": "<string>",
  "width": 123,
  "height": 123,
  "code": 123,
  "key_metadata": {
    "credits_consumed": 123,
    "credits_remaining": 123
  }
}
```

GET

/

web

/

screenshot

JavaScript

```
import ContextDev from 'context.dev';

const client = new ContextDev({
  apiKey: process.env['CONTEXT_DEV_API_KEY'], // This is the default and can be omitted
});

const response = await client.web.screenshot();

console.log(response.width);
```

```
{
  "status": "<string>",
  "domain": "<string>",
  "screenshot": "<string>",
  "width": 123,
  "height": 123,
  "code": 123,
  "key_metadata": {
    "credits_consumed": 123,
    "credits_remaining": 123
  }
}
```

Domain name to take screenshot of (e.g., 'example.com', 'google.com'). The domain will be automatically normalized and validated. You must provide either 'domain' or 'directUrl', but not both.

[​](#parameter-direct-url)

directUrl

string\<uri>

A specific URL to screenshot directly, bypassing domain resolution (e.g., '<https://example.com/pricing>'). When provided, the screenshot is taken of this exact URL. You must provide either 'domain' or 'directUrl', but not both.

[​](#parameter-full-screenshot)

fullScreenshot

enum\<string>

Optional parameter to determine screenshot type. If 'true', takes a full page screenshot capturing all content. If 'false' or not provided, takes a viewport screenshot (standard browser view).

Available options:

`true`,

`false`

[​](#parameter-handle-cookie-popup)

handleCookiePopup

enum\<string>

default:false

Optional parameter to control cookie/consent popup handling. If 'true', we dismiss cookie banner before capture. If 'false' or not provided, captures the page without that step.

Available options:

`true`,

`false`

[​](#parameter-color-scheme)

colorScheme

enum\<string>

Optional parameter to choose the site's visual theme in the screenshot. Use 'light' or 'dark' when the site offers both appearances.

Available options:

`light`,

`dark`

[​](#parameter-viewport)

viewport

object

Optional browser viewport dimensions for the screenshot. Defaults to 1920x1080.

Show child attributes

[​](#parameter-max-age-ms)

maxAgeMs

integer

default:86400000

Return a cached screenshot if a prior screenshot for the same parameters exists and is younger than this many milliseconds. Defaults to 1 day (86400000 ms) when omitted. Max is 30 days (2592000000 ms). Set to 0 to always capture fresh.

Required range: `0 <= x <= 2592000000`

[​](#parameter-page)

page

enum\<string>

Optional parameter to specify which page type to screenshot. If provided, the system will scrape the domain's links and use heuristics to find the most appropriate URL for the specified page type (30 supported languages). If not provided, screenshots the main domain landing page. Only applicable when using 'domain', not 'directUrl'.

Available options:

`login`,

`signup`,

`blog`,

`careers`,

`pricing`,

`terms`,

`privacy`,

`contact`

[​](#parameter-wait-for-ms)

waitForMs

integer

default:3000

Optional browser wait time in milliseconds after initial page load before taking the screenshot. Min: 0. Max: 30000 (30 seconds). Defaults to 3000 ms when omitted.

Required range: `0 <= x <= 30000`

[​](#parameter-scroll-offset)

scrollOffset

integer

Optional vertical scroll offset in pixels for capturing a long page in viewport-sized chunks. When provided, the full page is captured once and the returned image is the viewport-sized slice that begins at this Y offset (e.g. request scrollOffset=0, then 1080, then 2160 to walk a 1920x1080 landing page top to bottom). The final slice may be shorter than the viewport height. Takes precedence over fullScreenshot. Max: 100000.

Required range: `0 <= x <= 100000`

[​](#parameter-country)

country

enum\<string>

Two-letter ISO 3166-1 alpha-2 country code for the website request location. When provided, Context.dev fetches the target page from that country. Two-letter ISO 3166-1 alpha-2 country code identifying a supported Context.dev residential proxy exit location. Must be one of Context.dev's supported countries. When provided, Context.dev fetches the target page from that country.

[​](#response-screenshot)

screenshot

string

Public URL of the uploaded screenshot image

[​](#response-screenshot-type)

screenshotType

enum\<string>

Type of screenshot that was captured

Available options:

`viewport`,

`fullPage`

[​](#response-width)

width

integer

Width in pixels of the returned screenshot image

[​](#response-height)

height

integer

Height in pixels of the returned screenshot image

[​](#response-code)

code

integer

HTTP status code

[​](#response-key-metadata)

key\_metadata

object

Metadata about the API key used for the request. Included in every response whenever a valid API key is provided, even when the response status is not 200.

Show child attributes

Was this page helpful?

[Web Search](/api-reference/web-scraping/web-search)

[Previous](/api-reference/web-scraping/web-search)

[Extract Structured Website Data](/api-reference/web-extraction/extract-structured-website-data)

[Next](/api-reference/web-extraction/extract-structured-website-data)

⌘I

Assistant

Responses are generated using AI and may contain mistakes.

[Contact support](/cdn-cgi/l/email-protection#44222b312a2021363704272b2a30213c306a202132)

----
url: https://docs.context.dev/introduction
----

> ## Documentation Index
>
> Fetch the complete documentation index at: [/llms.txt](/llms.txt)
>
> Use this file to discover all available pages before exploring further.

[Skip to main content](#content-area)

Context.dev turns any domain or URL into structured, AI-ready data. Send a domain, get a typed brand profile. Send a URL, get clean Markdown, a design system, a screenshot, or an AI-extracted answer. Every response is typed JSON.

## [​](#context-reference)Context Reference

Context.dev APIs can give you these outputs.

| Output                                                                                       | Examples                                                                                                                             | Use this to                                                   |
| -------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------- |
| [Logos](/guides/get-brand-data)                                                              | Light, dark, and icon variants in SVG + PNG, each with `type`, `mode`, and `resolution`                                              | Render brand logos in onboarding, CRMs, and logo walls        |
| [Company profile](/guides/get-brand-data)                                                    | Title, description, slogan, email, phone, and a links map (careers, blog, pricing, terms, privacy)                                   | Enrich CRM records and pre-fill onboarding forms              |
| [Social handles](/guides/get-brand-data)                                                     | Typed URLs for X, LinkedIn, GitHub, YouTube, and 25+ more                                                                            | Populate social links and power outreach                      |
| [Company Address](/guides/get-brand-data)                                                    | `140 2nd Street, San Francisco, CA, US, 94105`                                                                                       | Territory routing, KYC, and firmographic enrichment           |
| [Stock](/guides/get-brand-data)                                                              | Stock ticker ($AAPL) and exchange name (NASDAQ) for public companies                                                                 | Investor dashboards and ticker enrichment                     |
| [Industry codes (EIC / NAICS / SIC)](/guides/classification/overview)                        | EIC `Technology › Software (B2B)` inline on every full brand response; NAICS `334220` and SIC `3663` with confidence scores          | Segment and route accounts, plus regulatory and SEC reporting |
| [Website Styleguide](/guides/extract-design-system-from-website#extract-the-full-styleguide) | Accent / background / text colors, typography, spacing, shadows, button + card CSS                                                   | Build on-brand UI and white-label theming                     |
| [Fonts](/guides/extract-design-system-from-website#extract-just-the-fonts)                   | `Geist` (weights 400–900) with downloadable `@font-face` URLs and usage counts                                                       | Match brand typography in emails, ads, and PDFs               |
| [Embeddable logo](/guides/get-logo-from-url)                                                 | `logos.context.dev/?publicClientId=brandLL_xxx&domain=stripe.com` as an `<img>` src                                                  | High-volume logo embeds straight from a CDN                   |
| [Markdown / HTML](/guides/scrape-websites-to-markdown#scrape-a-single-page-to-markdown)      | `# Vercel Pricing…` or fully-rendered `<!doctype html>...`                                                                           | Feed LLMs and RAG pipelines, or run your own parsers          |
| [Screenshot](/guides/take-webpage-screenshot)                                                | Hosted PNG at a `1920×1080` viewport or full-page height                                                                             | Link previews, share cards, and visual archives               |
| [Product data](/guides/extract-product-from-websites)                                        | `Men's Wool Runner · $110 USD · MENS_WOOL_RUNNERS` + features, images                                                                | Catalogs, price monitoring, and competitor tracking           |
| [Structured data](/guides/extract-structured-data-from-websites)                             | Define a JSON Schema; get it back typed: `founded_year: 2010`, `has_free_trial: true`, `pricing_tiers: [{ name: "Pro", price: 99 }]` | Comparison pages and structured extraction at scale           |
| [Merchant from a transaction](/guides/enrich-transaction-codes)                              | `AMZN MKTP US` → Amazon + Retail                                                                                                     | Spend analytics and transaction tagging                       |

## [​](#context-dev-apis)Context.dev APIs

There are 4 product categories:

* Brand APIs
* Logo Link CDN
* Web APIs
* Classification APIs

Resolve a domain into a brand’s assets and metadata: logos, colors, company profile data, and industry labels.

## [Retrieve Brand](/guides/get-brand-data)

[Get company logos, description, social media handles, address, and more from just the name, domain, work email, stock ticker, or ISIN.](/guides/get-brand-data)

## [Retrieve a Website's Styleguide](/guides/extract-design-system-from-website#extract-the-full-styleguide)

[Get colors, fonts, spacing and shadows for detected components.](/guides/extract-design-system-from-website#extract-the-full-styleguide)

## [Retrieve a Website's Fonts](/guides/extract-design-system-from-website#extract-just-the-fonts)

[Get detected font families, weights, @import links, and usage counts.](/guides/extract-design-system-from-website#extract-just-the-fonts)

Embed always-fresh brand logos straight from a CDN, no API call required.

## [Get Embeddable Brand Logos](/guides/get-logo-from-url)

[Display brand logos on your website with one embeddable URL](/guides/get-logo-from-url)

Render, crawl, screenshot, and extract structured data from any URL. Bot detection bypass and proxy escalation are automatic.

## [Crawl Websites](/guides/scrape-websites-to-markdown#crawl-a-whole-site)

[Get clean markdown for reachable pages on a website](/guides/scrape-websites-to-markdown#crawl-a-whole-site)

## [Scrape Markdown](/guides/scrape-websites-to-markdown#scrape-a-single-page-to-markdown)

[Get clean markdown with nav and ads stripped, ready for LLMs.](/guides/scrape-websites-to-markdown#scrape-a-single-page-to-markdown)

## [Capture Webpage Screenshot](/guides/take-webpage-screenshot)

[Get full-page or custom viewport size screenshot of a webpage.](/guides/take-webpage-screenshot)

## [Extract Product](/guides/extract-product-from-websites)

[Get structured data about the products on a website](/guides/extract-product-from-websites)

## [Extract Structured Data](/guides/extract-structured-data-from-websites)

[Describe the data you want as a JSON Schema and get a typed JSON answer extracted from a website’s pages.](/guides/extract-structured-data-from-websites)

Classify a domain by industry code, or resolve a card descriptor to a real merchant.

## [Classify into NAICS](/guides/classification/NAICS)

[Get the assigned NAICS code and industry for regulatory reporting from a domain name.](/guides/classification/NAICS)

## [Classify into SIC](/guides/classification/SIC)

[Get the assigned SIC code and industry for tax and accounting systems from a domain name.](/guides/classification/SIC)

## [Transaction Enrichment](/guides/enrich-transaction-codes)

[Get the merchant’s brand and industry from transaction information or MCC.](/guides/enrich-transaction-codes)

## [​](#features)Features

* **Free plan, no credit card needed.** Start building with 500 one-time API credits and 10K Logo Link requests as soon as you sign up.
* **Simple, credit-based pricing with a subscription.** Every API call costs a fixed number of credits. Plans come with generous and clear rate limits.
* **Simple APIs and SDKs built for developers.** Consistent authentication and response shapes for every endpoint.
* **Typed responses.** Every endpoint returns typed JSON output, so you won’t need to parse responses.
* **Bot detection bypass on every plan.** Automatic proxy escalation for webpage crawling on every plan.

## [​](#reliability)Reliability

* **Cached hits return in under 1 second.** Around 60% of brand lookups hit the cache.

* **Cold hits** (the first lookup for a domain Context.dev hasn’t crawled yet) run a full crawl through a specialized pipeline. They almost always return in under 60 seconds.

  | Percentile | Cold-hit latency |
  | ---------- | ---------------- |
  | p50        | 7s               |
  | p90        | 18s              |
  | p99        | 1m               |

  Use the [prefetch endpoints](/optimization/prefetching) to hide this latency, or set a client-side timeout of at least 60 seconds.

## [​](#ways-to-use-context-dev)Ways to use Context.dev

## [SDKs](/quickstart)

[Official SDKs for TypeScript, Python, Ruby, Go, and PHP. One bearer-token header, fully typed responses.](/quickstart)

## [REST API](/api-reference/brand-intelligence/retrieve-brand-data-by-domain)

[Call any endpoint directly over HTTPS with a bearer token. No SDK required.](/api-reference/brand-intelligence/retrieve-brand-data-by-domain)

## [MCP server](/install-mcp)

[Give Claude, Cursor, VS Code, and any MCP-compatible agent direct access to Context.dev.](/install-mcp)

## No-code

Drop brand and web data into [Zapier](/nocode/zapier), [Make](/nocode/make), [Google Sheets](/nocode/google-sheets), and [Excel](/nocode/microsoft-excel).

## [​](#next-steps)Next steps

## [Quickstart](/quickstart)

[Install an SDK and make your first call in two steps.](/quickstart)

## [Agent Quickstart](/agent-quickstart)

[Set up an AI agent to call Context.dev correctly.](/agent-quickstart)

Was this page helpful?

[Quickstart](/quickstart)

[Next](/quickstart)

Ctrl+I

Assistant

Responses are generated using AI and may contain mistakes.

[Contact support](mailto:founders@context.dev)

----
url: https://docs.context.dev/api-reference/web-scraping/crawl-sitemap
----

> ## Documentation Index
>
> Fetch the complete documentation index at: [/llms.txt](/llms.txt)
>
> Use this file to discover all available pages before exploring further.

[Skip to main content](#content-area)

JavaScript

```
import ContextDev from 'context.dev';

const client = new ContextDev({
  apiKey: process.env['CONTEXT_DEV_API_KEY'], // This is the default and can be omitted
});

const response = await client.web.webScrapeSitemap({ domain: 'domain' });

console.log(response.domain);
```

```
{
  "success": true,
  "domain": "<string>",
  "urls": [
    "<string>"
  ],
  "meta": {
    "sitemapsDiscovered": 123,
    "sitemapsFetched": 123,
    "sitemapsSkipped": 123,
    "errors": 123
  },
  "key_metadata": {
    "credits_consumed": 123,
    "credits_remaining": 123
  }
}
```

GET

/

web

/

scrape

/

sitemap

JavaScript

```
import ContextDev from 'context.dev';

const client = new ContextDev({
  apiKey: process.env['CONTEXT_DEV_API_KEY'], // This is the default and can be omitted
});

const response = await client.web.webScrapeSitemap({ domain: 'domain' });

console.log(response.domain);
```

```
{
  "success": true,
  "domain": "<string>",
  "urls": [
    "<string>"
  ],
  "meta": {
    "sitemapsDiscovered": 123,
    "sitemapsFetched": 123,
    "sitemapsSkipped": 123,
    "errors": 123
  },
  "key_metadata": {
    "credits_consumed": 123,
    "credits_remaining": 123
  }
}
```

1 Credit

required

Domain to build a sitemap for

[​](#parameter-max-links)

maxLinks

integer

default:10000

Maximum number of links to return from the sitemap crawl. Defaults to 10,000. Minimum is 1, maximum is 100,000.

Required range: `1 <= x <= 100000`

[​](#parameter-url-regex)

urlRegex

string

Optional RE2-compatible regex pattern. Only URLs matching this pattern are returned and counted against maxLinks.

Maximum string length: `256`

Example:

`"^https?://[^/]+/blog/"`

Indicates success

Available options:

`true`

[​](#response-domain)

domain

string

required

The normalized domain that was crawled

[​](#response-urls)

urls

string\[]

required

Array of discovered page URLs from the sitemap (max 500)

[​](#response-meta)

meta

object

required

Metadata about the sitemap crawl operation

[Scrape Images](/api-reference/web-scraping/scrape-images)

[Previous](/api-reference/web-scraping/scrape-images)

[Crawl Website & Scrape Markdown](/api-reference/web-scraping/crawl-website-&-scrape-markdown)

[Next](/api-reference/web-scraping/crawl-website-&-scrape-markdown)

⌘I

Assistant

Responses are generated using AI and may contain mistakes.

[Contact support](mailto:founders@context.dev)

----
url: https://docs.context.dev/optimization/fair-use
----

> ## Documentation Index
>
> Fetch the complete documentation index at: [/llms.txt](/llms.txt)
>
> Use this file to discover all available pages before exploring further.

[Skip to main content](#content-area)

Context.dev is a data service provider offering brand data, web scraping, and structured extraction via API. It is your responsibility to ensure you are using this data in compliance with all applicable laws, regulations, and third-party terms of service. As long as you are using Context.dev data to enrich user experiences and power your applications, you should be fine. Specifically:

* **Do not imply brand endorsement.** Don’t suggest a brand sponsors, endorses, or is affiliated with your product unless you have a written agreement saying so.
* **Do not alter a brand’s assets without permission.** Logos, colors, and other assets should arrive at the end user the way the brand published them.
* **Do not use the data in a misleading or deceptive manner.** That includes phishing, spoofing, or any flow designed to make the user think the message came from the brand itself.
* **When using web scraping endpoints, respect the target website’s terms of service and `robots.txt` directives.** Many sites explicitly forbid automated access; the responsibility for honoring that does not transfer to Context.dev.

If you are unsure whether a specific use is allowed, ask before shipping. Reach out to <hello@context.dev>.

## [​](#related-resources)Related resources

## [Best practices](/optimization/best-practices)

[Integration patterns that keep your usage clean.](/optimization/best-practices)

## [Contact support](mailto:hello@context.dev)

[Ask before shipping anything ambiguous.](mailto:hello@context.dev)

Was this page helpful?

[Compression](/optimization/compression)

[Previous](/optimization/compression)

[Handle Rate Limits](/optimization/rate-limits)

[Next](/optimization/rate-limits)

Ctrl+I

Assistant

Responses are generated using AI and may contain mistakes.

[Contact support](mailto:founders@context.dev)

----
url: https://docs.context.dev/api-reference/brand-intelligence/retrieve-brand-data-by-stock-ticker
----

> ## Documentation Index
>
> Fetch the complete documentation index at: [/llms.txt](/llms.txt)
>
> Use this file to discover all available pages before exploring further.

[Skip to main content](#content-area)

JavaScript

```
import ContextDev from 'context.dev';

const client = new ContextDev({
  apiKey: process.env['CONTEXT_DEV_API_KEY'], // This is the default and can be omitted
});

const response = await client.brand.retrieveByTicker({ ticker: 'ticker' });

console.log(response.brand);
```

```
{
  "status": "<string>",
  "brand": {
    "domain": "<string>",
    "title": "<string>",
    "description": "<string>",
    "slogan": "<string>",
    "colors": [
      {
        "hex": "<string>",
        "name": "<string>"
      }
    ],
    "logos": [
      {
        "url": "<string>",
        "colors": [
          {
            "hex": "<string>",
            "name": "<string>"
          }
        ],
        "resolution": {
          "width": 123,
          "height": 123,
          "aspect_ratio": 123
        }
      }
    ],
    "backdrops": [
      {
        "url": "<string>",
        "colors": [
          {
            "hex": "<string>",
            "name": "<string>"
          }
        ],
        "resolution": {
          "width": 123,
          "height": 123,
          "aspect_ratio": 123
        }
      }
    ],
    "socials": [
      {
        "url": "<string>"
      }
    ],
    "address": {
      "street": "<string>",
      "city": "<string>",
      "country": "<string>",
      "country_code": "<string>",
      "state_province": "<string>",
      "state_code": "<string>",
      "postal_code": "<string>"
    },
    "stock": {
      "ticker": "<string>",
      "exchange": "<string>"
    },
    "is_nsfw": true,
    "email": "<string>",
    "phone": "<string>",
    "industries": {
      "eic": [
        {}
      ]
    },
    "links": {
      "careers": "<string>",
      "privacy": "<string>",
      "terms": "<string>",
      "contact": "<string>",
      "blog": "<string>",
      "pricing": "<string>"
    }
  },
  "code": 123,
  "key_metadata": {
    "credits_consumed": 123,
    "credits_remaining": 123
  }
}
```

GET

/

brand

/

retrieve-by-ticker

JavaScript

```
import ContextDev from 'context.dev';

const client = new ContextDev({
  apiKey: process.env['CONTEXT_DEV_API_KEY'], // This is the default and can be omitted
});

const response = await client.brand.retrieveByTicker({ ticker: 'ticker' });

console.log(response.brand);
```

```
{
  "status": "<string>",
  "brand": {
    "domain": "<string>",
    "title": "<string>",
    "description": "<string>",
    "slogan": "<string>",
    "colors": [
      {
        "hex": "<string>",
        "name": "<string>"
      }
    ],
    "logos": [
      {
        "url": "<string>",
        "colors": [
          {
            "hex": "<string>",
            "name": "<string>"
          }
        ],
        "resolution": {
          "width": 123,
          "height": 123,
          "aspect_ratio": 123
        }
      }
    ],
    "backdrops": [
      {
        "url": "<string>",
        "colors": [
          {
            "hex": "<string>",
            "name": "<string>"
          }
        ],
        "resolution": {
          "width": 123,
          "height": 123,
          "aspect_ratio": 123
        }
      }
    ],
    "socials": [
      {
        "url": "<string>"
      }
    ],
    "address": {
      "street": "<string>",
      "city": "<string>",
      "country": "<string>",
      "country_code": "<string>",
      "state_province": "<string>",
      "state_code": "<string>",
      "postal_code": "<string>"
    },
    "stock": {
      "ticker": "<string>",
      "exchange": "<string>"
    },
    "is_nsfw": true,
    "email": "<string>",
    "phone": "<string>",
    "industries": {
      "eic": [
        {}
      ]
    },
    "links": {
      "careers": "<string>",
      "privacy": "<string>",
      "terms": "<string>",
      "contact": "<string>",
      "blog": "<string>",
      "pricing": "<string>"
    }
  },
  "code": 123,
  "key_metadata": {
    "credits_consumed": 123,
    "credits_remaining": 123
  }
}
```

[​](#parameter-ticker)

ticker

string

required

Stock ticker symbol to retrieve brand data for (e.g., 'AAPL', 'GOOGL', 'BRK.A'). Must be 1-15 characters, letters/numbers/dots only.

Required string length: `1 - 15`

Pattern: `^[A-Za-z0-9.]+$`

[​](#parameter-ticker-exchange)

ticker\_exchange

enum\<string>

Optional stock exchange for the ticker. Defaults to NASDAQ if not specified.

Available options:

`AMEX`,

`AMS`,

`AQS`,

`ASX`,

`ATH`,

`BER`,

`BME`,

`BRU`,

`BSE`,

`BUD`,

`BUE`,

`BVC`,

`CBOE`,

`CNQ`,

`CPH`,

`DFM`,

`DOH`,

`DUB`,

`DUS`,

`DXE`,

`EGX`,

`FSX`,

`HAM`,

`HEL`,

`HKSE`,

`HOSE`,

`ICE`,

`IOB`,

`IST`,

`JKT`,

`JNB`,

`JPX`,

`KLS`,

`KOE`,

`KSC`,

`KUW`,

`LIS`,

`LSE`,

`MCX`,

`MEX`,

`MIL`,

`MUN`,

`NASDAQ`,

`NEO`,

`NSE`,

`NYSE`,

`NZE`,

`OSL`,

`OTC`,

`PAR`,

`PNK`,

`PRA`,

`RIS`,

`SAO`,

`SAU`,

`SES`,

`SET`,

`SGO`,

`SHH`,

`SHZ`,

`SIX`,

`STO`,

`STU`,

`TAI`,

`TAL`,

`TLV`,

`TSX`,

`TSXV`,

`TWO`,

`VIE`,

`WSE`,

`XETRA`

[Retrieve brand data by email address](/api-reference/brand-intelligence/retrieve-brand-data-by-email-address)

[Previous](/api-reference/brand-intelligence/retrieve-brand-data-by-email-address)

[Identify brand from transaction data](/api-reference/brand-intelligence/identify-brand-from-transaction-data)

[Next](/api-reference/brand-intelligence/identify-brand-from-transaction-data)

⌘I

Assistant

Responses are generated using AI and may contain mistakes.

[Contact support](mailto:founders@context.dev)

----
url: https://docs.context.dev/guides/classification/SIC
----

> ## Documentation Index
>
> Fetch the complete documentation index at: [/llms.txt](/llms.txt)
>
> Use this file to discover all available pages before exploring further.

[Skip to main content](#content-area)

SIC classification is available through a dedicated endpoint: [`GET /web/sic`](/api-reference/web-extraction/classify-sic-industries). The endpoint supports two SIC datasets:

* **`original_sic`** (default): the **1987 Standard Industrial Classification** system, with 1,004 four-digit codes grouped into 82 two-digit major groups.
* **`latest_sec`**: the current SIC list as published by the **U.S. Securities and Exchange Commission**, used for EDGAR filings. 430 codes, each tagged with the SEC review office that handles filings under that code.

Choose with the `type` query parameter.

## [​](#sic-code-structure)SIC code structure

SIC codes are 4 digits. The leading 2 digits identify the **major group**; the leading 3 digits identify the **industry group**; the full 4 digits identify the **industry**.

| Level          | Digits   | Example                                                          |
| -------------- | -------- | ---------------------------------------------------------------- |
| Division       | (letter) | D: Manufacturing                                                 |
| Major Group    | 2        | `35`: Industrial and Commercial Machinery and Computer Equipment |
| Industry Group | 3        | `357`: Computer and Office Equipment                             |
| Industry       | 4        | `3571`: Electronic Computers                                     |

The `/web/sic` endpoint returns **4-digit industry codes**: the most specific level. When `type=original_sic`, each result also carries its parent `majorGroup` (2-digit) and `majorGroupName`. When `type=latest_sec`, each result carries the SEC `office` instead.

## [​](#choosing-a-classification)Choosing a classification

| Use case                                                                              | Recommended `type` |
| ------------------------------------------------------------------------------------- | ------------------ |
| General-purpose industry tagging, broadest coverage                                   | `original_sic`     |
| Matching a company to its SEC EDGAR filing classification                             | `latest_sec`       |
| Mapping to public-company review offices (e.g. “who at the SEC reviews this issuer?”) | `latest_sec`       |
| Working with historical datasets that pre-date NAICS (pre-1997)                       | `original_sic`     |

The two lists are **not** drop-in replacements for one another. The SEC list is a curated subset focused on industries that file with EDGAR. The 1987 list is exhaustive across all sectors of the US economy.

## [​](#prerequisites)Prerequisites

* **A Context.dev API key.** Sign up at [context.dev/signup](https://context.dev/signup), copy the key from the [dashboard](https://context.dev/dashboard) (prefix `ctxt_secret_`), and export it:

  ```
  export CONTEXT_DEV_API_KEY="ctxt_secret_..."
  ```

* **An SDK (optional).** Install for your language, or skip the install and call directly with `curl`:

  ```
  npm install context.dev
  ```

## [​](#send-a-request)Send a request

Pass an `input` (a domain or company title) and an optional `type`. The example below shows both datasets:

```
# original_sic (default)
curl -G https://api.context.dev/v1/web/sic \
  -H "Authorization: Bearer $CONTEXT_DEV_API_KEY" \
  --data-urlencode "input=stripe.com" \
  --data-urlencode "maxResults=5"

# latest_sec (SEC EDGAR list)
curl -G https://api.context.dev/v1/web/sic \
  -H "Authorization: Bearer $CONTEXT_DEV_API_KEY" \
  --data-urlencode "input=stripe.com" \
  --data-urlencode "type=latest_sec" \
  --data-urlencode "maxResults=3"
```

10 credits per successful call

### [​](#request-parameters)Request parameters

| Parameter    | Type    | Description                                                                                                                                       |
| ------------ | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
| `input`      | string  | **Required.** A brand domain or title. If a valid domain is provided, it’s used directly; otherwise the resolver searches for the brand by title. |
| `type`       | string  | Which SIC dataset to classify against. One of `original_sic` or `latest_sec`. Defaults to `original_sic`.                                         |
| `minResults` | integer | Minimum number of SIC codes to return. Range: 1–10. Defaults to `1`.                                                                              |
| `maxResults` | integer | Maximum number of SIC codes to return. Range: 1–10. Defaults to `5`.                                                                              |
| `timeoutMS`  | integer | Optional request timeout (1,000–300,000 ms). Returns 408 if exceeded.                                                                             |

## [​](#response-shape)Response shape

Top-level fields are always present on a 200 response. The shape of each entry in `codes` depends on the requested `type` (echoed back in the response’s `classification` field).

### [​](#type=original_sic)`type=original_sic`

```
{
  "status": "ok",
  "domain": "stripe.com",
  "type": "sic",
  "classification": "original_sic",
  "codes": [
    {
      "code": "7372",
      "name": "PREPACKAGED SOFTWARE",
      "confidence": "high",
      "majorGroup": "73",
      "majorGroupName": "BUSINESS SERVICES"
    },
    {
      "code": "6099",
      "name": "FUNCTIONS RELATED TO DEPOSIT BANKING, NEC",
      "confidence": "medium",
      "majorGroup": "60",
      "majorGroupName": "DEPOSITORY INSTITUTIONS"
    }
  ]
}
```

### [​](#type=latest_sec)`type=latest_sec`

```
{
  "status": "ok",
  "domain": "stripe.com",
  "type": "sic",
  "classification": "latest_sec",
  "codes": [
    {
      "code": "7372",
      "name": "SERVICES-PREPACKAGED SOFTWARE",
      "confidence": "high",
      "office": "Office of Technology"
    }
  ]
}
```

| Field                    | Type   | Description                                                                                                                 |
| ------------------------ | ------ | --------------------------------------------------------------------------------------------------------------------------- |
| `status`                 | string | `"ok"` on success.                                                                                                          |
| `domain`                 | string | The resolved domain that was classified.                                                                                    |
| `type`                   | string | Always `"sic"`.                                                                                                             |
| `classification`         | string | The SIC dataset that was used: `original_sic` or `latest_sec`.                                                              |
| `codes[]`                | array  | The matched SIC codes, one object per match.                                                                                |
| `codes[].code`           | string | The 4-digit SIC code. Keep it as a string in storage to preserve leading zeros (codes like `0111` exist in `original_sic`). |
| `codes[].name`           | string | The official SIC title for that code.                                                                                       |
| `codes[].confidence`     | enum   | `high`, `medium`, or `low`. Indicates how well the code matches the company.                                                |
| `codes[].majorGroup`     | string | *`original_sic` only.* 2-digit major group identifier.                                                                      |
| `codes[].majorGroupName` | string | *`original_sic` only.* Description of the 2-digit major group.                                                              |
| `codes[].office`         | string | *`latest_sec` only.* SEC review office responsible for filings under this code.                                             |

Use `minResults` / `maxResults` to control how aggressive the classification is. If you only want the strongest match, set both to `1`. For richer classification across diversified businesses, raise `maxResults` and filter by `confidence === "high"` downstream.

For the official taxonomies, see:

* [OSHA SIC Manual (1987)](https://www.osha.gov/data/sic-manual): `original_sic`
* [SEC SIC code list](https://www.sec.gov/info/edgar/siccodes.htm): `latest_sec`

## [​](#major-groups-original_sic-1987)Major groups (`original_sic`, 1987)

All 82 two-digit major groups returned when `type=original_sic`:

| Code | Major Group                                                  |
| ---- | ------------------------------------------------------------ |
| 01   | AGRICULTURAL PRODUCTION - CROPS                              |
| 02   | AGRICULTURAL PRODUCTION - LIVESTOCK AND ANIMAL SPECIALTIES   |
| 07   | AGRICULTURAL SERVICES                                        |
| 08   | FORESTRY                                                     |
| 09   | FISHING, HUNTING AND TRAPPING                                |
| 10   | METAL MINING                                                 |
| 12   | COAL MINING                                                  |
| 13   | OIL AND GAS EXTRACTION                                       |
| 14   | MINING AND QUARRYING OF NONMETALLIC MINERALS, EXCEPT FUELS   |
| 15   | BUILDING CNSTRCTN - GENERAL CONTRACTORS & OPERATIVE BUILDERS |
| 16   | HEAVY CNSTRCTN, EXCEPT BUILDING CONSTRUCTION - CONTRACTORS   |
| 17   | CONSTRUCTION - SPECIAL TRADE CONTRACTORS                     |
| 20   | FOOD AND KINDRED PRODUCTS                                    |
| 21   | TOBACCO PRODUCTS                                             |
| 22   | TEXTILE MILL PRODUCTS                                        |
| 23   | APPAREL, FINISHED PRDCTS FROM FABRICS & SIMILAR MATERIALS    |
| 24   | LUMBER AND WOOD PRODUCTS, EXCEPT FURNITURE                   |
| 25   | FURNITURE AND FIXTURES                                       |
| 26   | PAPER AND ALLIED PRODUCTS                                    |
| 27   | PRINTING, PUBLISHING AND ALLIED INDUSTRIES                   |
| 28   | CHEMICALS AND ALLIED PRODUCTS                                |
| 29   | PETROLEUM REFINING AND RELATED INDUSTRIES                    |
| 30   | RUBBER AND MISCELLANEOUS PLASTIC PRODUCTS                    |
| 31   | LEATHER AND LEATHER PRODUCTS                                 |
| 32   | STONE, CLAY, GLASS, AND CONCRETE PRODUCTS                    |
| 33   | PRIMARY METAL INDUSTRIES                                     |
| 34   | FABRICATED METAL PRDCTS, EXCEPT MACHINERY & TRANSPORT EQPMNT |
| 35   | INDUSTRIAL AND COMMERCIAL MACHINERY AND COMPUTER EQUIPMENT   |
| 36   | ELECTRONIC, ELCTRCL EQPMNT & CMPNTS, EXCPT COMPUTER EQPMNT   |
| 37   | TRANSPORTATION EQUIPMENT                                     |
| 38   | MESR/ANLYZ/CNTRL INSTRMNTS; PHOTO/MED/OPT GDS; WATCHS/CLOCKS |
| 39   | MISCELLANEOUS MANUFACTURING INDUSTRIES                       |
| 40   | RAILROAD TRANSPORTATION                                      |
| 41   | LOCAL, SUBURBAN TRANSIT & INTERURBN HGWY PASSENGER TRANSPORT |
| 42   | MOTOR FREIGHT TRANSPORTATION                                 |
| 43   | UNITED STATES POSTAL SERVICE                                 |
| 44   | WATER TRANSPORTATION                                         |
| 45   | TRANSPORTATION BY AIR                                        |
| 46   | PIPELINES, EXCEPT NATURAL GAS                                |
| 47   | TRANSPORTATION SERVICES                                      |
| 48   | COMMUNICATIONS                                               |
| 49   | ELECTRIC, GAS AND SANITARY SERVICES                          |
| 50   | WHOLESALE TRADE - DURABLE GOODS                              |
| 51   | WHOLESALE TRADE - NONDURABLE GOODS                           |
| 52   | BUILDING MATRIALS, HRDWR, GARDEN SUPPLY & MOBILE HOME DEALRS |
| 53   | GENERAL MERCHANDISE STORES                                   |
| 54   | FOOD STORES                                                  |
| 55   | AUTOMOTIVE DEALERS AND GASOLINE SERVICE STATIONS             |
| 56   | APPAREL AND ACCESSORY STORES                                 |
| 57   | HOME FURNITURE, FURNISHINGS AND EQUIPMENT STORES             |
| 58   | EATING AND DRINKING PLACES                                   |
| 59   | MISCELLANEOUS RETAIL                                         |
| 60   | DEPOSITORY INSTITUTIONS                                      |
| 61   | NONDEPOSITORY CREDIT INSTITUTIONS                            |
| 62   | SECURITY & COMMODITY BROKERS, DEALERS, EXCHANGES & SERVICES  |
| 63   | INSURANCE CARRIERS                                           |
| 64   | INSURANCE AGENTS, BROKERS AND SERVICE                        |
| 65   | REAL ESTATE                                                  |
| 67   | HOLDING AND OTHER INVESTMENT OFFICES                         |
| 70   | HOTELS, ROOMING HOUSES, CAMPS, AND OTHER LODGING PLACES      |
| 72   | PERSONAL SERVICES                                            |
| 73   | BUSINESS SERVICES                                            |
| 75   | AUTOMOTIVE REPAIR, SERVICES AND PARKING                      |
| 76   | MISCELLANEOUS REPAIR SERVICES                                |
| 78   | MOTION PICTURES                                              |
| 79   | AMUSEMENT AND RECREATION SERVICES                            |
| 80   | HEALTH SERVICES                                              |
| 81   | LEGAL SERVICES                                               |
| 82   | EDUCATIONAL SERVICES                                         |
| 83   | SOCIAL SERVICES                                              |
| 84   | MUSEUMS, ART GALLERIES AND BOTANICAL AND ZOOLOGICAL GARDENS  |
| 86   | MEMBERSHIP ORGANIZATIONS                                     |
| 87   | ENGINEERING, ACCOUNTING, RESEARCH, MANAGEMENT & RELATED SVCS |
| 89   | SERVICES, NOT ELSEWHERE CLASSIFIED                           |
| 91   | EXECUTIVE, LEGISLATIVE & GENERAL GOVERNMENT, EXCEPT FINANCE  |
| 92   | JUSTICE, PUBLIC ORDER AND SAFETY                             |
| 93   | PUBLIC FINANCE, TAXATION AND MONETARY POLICY                 |
| 94   | ADMINISTRATION OF HUMAN RESOURCE PROGRAMS                    |
| 95   | ADMINISTRATION OF ENVIRONMENTAL QUALITY AND HOUSING PROGRAMS |
| 96   | ADMINISTRATION OF ECONOMIC PROGRAMS                          |
| 97   | NATIONAL SECURITY AND INTERNATIONAL AFFAIRS                  |
| 99   | NONCLASSIFIABLE ESTABLISHMENTS                               |

## [​](#sec-review-offices-latest_sec)SEC review offices (`latest_sec`)

The 13 SEC review offices that own filings under `type=latest_sec`:

| Office                                                          | Codes |
| --------------------------------------------------------------- | ----- |
| Office of Manufacturing                                         | 148   |
| Office of Trade & Services                                      | 97    |
| Industrial Applications and Services                            | 48    |
| Office of Energy & Transportation                               | 43    |
| Office of Technology                                            | 38    |
| Office of Real Estate & Construction                            | 22    |
| Office of Finance                                               | 22    |
| Office of Life Sciences                                         | 4     |
| Office of International Corp Fin                                | 3     |
| Office of Finance or Office of Crypto Assets                    | 2     |
| Office of Structured Finance                                    | 1     |
| Office of Crypto Assets                                         | 1     |
| Office of Trade & Services or Office of Energy & Transportation | 1     |

## [​](#full-list-of-original_sic-codes)Full list of `original_sic` codes

All **1,004** four-digit codes returned when `type=original_sic`. Use the copy button to grab the full list: CSV for spreadsheets, JSON for programmatic use.

View all 1,004 original\_sic codes (click to expand)

```
code,name,majorGroup,majorGroupName
0111,WHEAT,01,AGRICULTURAL PRODUCTION - CROPS
0112,RICE,01,AGRICULTURAL PRODUCTION - CROPS
0115,CORN,01,AGRICULTURAL PRODUCTION - CROPS
0116,SOYBEANS,01,AGRICULTURAL PRODUCTION - CROPS
0119,"CASH GRAINS, NEC",01,AGRICULTURAL PRODUCTION - CROPS
0131,COTTON,01,AGRICULTURAL PRODUCTION - CROPS
0132,TOBACCO,01,AGRICULTURAL PRODUCTION - CROPS
0133,SUGARCANE AND SUGAR BEETS,01,AGRICULTURAL PRODUCTION - CROPS
0134,IRISH POTATOES,01,AGRICULTURAL PRODUCTION - CROPS
0139,"FIELD CROPS, EXCEPT CASH GRAIN",01,AGRICULTURAL PRODUCTION - CROPS
0161,VEGETABLES AND MELONS,01,AGRICULTURAL PRODUCTION - CROPS
0171,BERRY CROPS,01,AGRICULTURAL PRODUCTION - CROPS
0172,GRAPES,01,AGRICULTURAL PRODUCTION - CROPS
0173,TREE NUTS,01,AGRICULTURAL PRODUCTION - CROPS
0174,CITRUS FRUITS,01,AGRICULTURAL PRODUCTION - CROPS
0175,DECIDUOUS TREE FRUITS,01,AGRICULTURAL PRODUCTION - CROPS
0179,"FRUITS AND TREE NUTS, NEC",01,AGRICULTURAL PRODUCTION - CROPS
0181,ORNAMENTAL NURSERY PRODUCTS,01,AGRICULTURAL PRODUCTION - CROPS
0182,FOOD CROPS GROWN UNDER COVER,01,AGRICULTURAL PRODUCTION - CROPS
0191,"GENERAL FARMS, PRIMARILY CROP",01,AGRICULTURAL PRODUCTION - CROPS
0211,BEEF CATTLE FEEDLOTS,02,AGRICULTURAL PRODUCTION - LIVESTOCK AND ANIMAL SPECIALTIES
0212,"BEEF CATTLE, EXCEPT FEEDLOTS",02,AGRICULTURAL PRODUCTION - LIVESTOCK AND ANIMAL SPECIALTIES
0213,HOGS,02,AGRICULTURAL PRODUCTION - LIVESTOCK AND ANIMAL SPECIALTIES
0214,SHEEP AND GOATS,02,AGRICULTURAL PRODUCTION - LIVESTOCK AND ANIMAL SPECIALTIES
0219,"GENERAL LIVESTOCK, NEC",02,AGRICULTURAL PRODUCTION - LIVESTOCK AND ANIMAL SPECIALTIES
0241,DAIRY FARMS,02,AGRICULTURAL PRODUCTION - LIVESTOCK AND ANIMAL SPECIALTIES
0251,"BROILER, FRYER, AND ROASTER CHICKENS",02,AGRICULTURAL PRODUCTION - LIVESTOCK AND ANIMAL SPECIALTIES
0252,CHICKEN EGGS,02,AGRICULTURAL PRODUCTION - LIVESTOCK AND ANIMAL SPECIALTIES
0253,TURKEYS AND TURKEY EGGS,02,AGRICULTURAL PRODUCTION - LIVESTOCK AND ANIMAL SPECIALTIES
0254,POULTRY HATCHERIES,02,AGRICULTURAL PRODUCTION - LIVESTOCK AND ANIMAL SPECIALTIES
0259,"POULTRY AND EGGS, NEC",02,AGRICULTURAL PRODUCTION - LIVESTOCK AND ANIMAL SPECIALTIES
0271,FUR-BEARING ANIMALS AND RABBITS,02,AGRICULTURAL PRODUCTION - LIVESTOCK AND ANIMAL SPECIALTIES
0272,HORSES AND OTHER EQUINES,02,AGRICULTURAL PRODUCTION - LIVESTOCK AND ANIMAL SPECIALTIES
0273,ANIMAL AQUACULTURE,02,AGRICULTURAL PRODUCTION - LIVESTOCK AND ANIMAL SPECIALTIES
0279,"ANIMAL SPECIALTIES, NEC",02,AGRICULTURAL PRODUCTION - LIVESTOCK AND ANIMAL SPECIALTIES
0291,"GENERAL FARMS, PRIMARILY ANIMALS",02,AGRICULTURAL PRODUCTION - LIVESTOCK AND ANIMAL SPECIALTIES
0711,SOIL PREPARATION SERVICES,07,AGRICULTURAL SERVICES
0721,CROP PLANTING AND PROTECTION,07,AGRICULTURAL SERVICES
0722,CROP HARVESTING,07,AGRICULTURAL SERVICES
0723,CROP PREPARATION SERVICES FOR MARKET,07,AGRICULTURAL SERVICES
0724,COTTON GINNING,07,AGRICULTURAL SERVICES
0741,VETERINARY SERVICES FOR LIVESTOCK,07,AGRICULTURAL SERVICES
0742,"VETERINARY SERVICES, SPECIALTIES",07,AGRICULTURAL SERVICES
0751,"LIVESTOCK SERVICES, EXCEPT VETERINARY",07,AGRICULTURAL SERVICES
0752,ANIMAL SPECIALTY SERVICES,07,AGRICULTURAL SERVICES
0761,FARM LABOR CONTRACTORS,07,AGRICULTURAL SERVICES
0762,FARM MANAGEMENT SERVICES,07,AGRICULTURAL SERVICES
0781,LANDSCAPE COUNSELING AND PLANNING,07,AGRICULTURAL SERVICES
0782,LAWN AND GARDEN SERVICES,07,AGRICULTURAL SERVICES
0783,ORNAMENTAL SHRUB AND TREE SERVICES,07,AGRICULTURAL SERVICES
0811,TIMBER TRACTS,08,FORESTRY
0831,FOREST PRODUCTS,08,FORESTRY
0851,FORESTRY SERVICES,08,FORESTRY
0912,FINFISH,09,"FISHING, HUNTING AND TRAPPING"
0913,SHELLFISH,09,"FISHING, HUNTING AND TRAPPING"
0919,MISCELLANEOUS MARINE PRODUCTS,09,"FISHING, HUNTING AND TRAPPING"
0921,FISH HATCHERIES AND PRESERVES,09,"FISHING, HUNTING AND TRAPPING"
0971,"HUNTING, TRAPPING, GAME PROPAGATION",09,"FISHING, HUNTING AND TRAPPING"
1011,IRON ORES,10,METAL MINING
1021,COPPER ORES,10,METAL MINING
1031,LEAD AND ZINC ORES,10,METAL MINING
1041,GOLD ORES,10,METAL MINING
1044,SILVER ORES,10,METAL MINING
1061,"FERROALLOY ORES, EXCEPT VANADIUM",10,METAL MINING
1081,METAL MINING SERVICES,10,METAL MINING
1094,URANIUM-RADIUM-VANADIUM ORES,10,METAL MINING
1099,"METAL ORES, NEC",10,METAL MINING
1221,BITUMINOUS COAL AND LIGNITE-SURFACE MINING,12,COAL MINING
1222,BITUMINOUS COAL-UNDERGROUND MINING,12,COAL MINING
1231,ANTHRACITE MINING,12,COAL MINING
1241,COAL MINING SERVICES,12,COAL MINING
1311,CRUDE PETROLEUM AND NATURAL GAS,13,OIL AND GAS EXTRACTION
1321,NATURAL GAS LIQUIDS,13,OIL AND GAS EXTRACTION
1381,DRILLING OIL AND GAS WELLS,13,OIL AND GAS EXTRACTION
1382,OIL AND GAS EXPLORATION SERVICES,13,OIL AND GAS EXTRACTION
1389,"OIL AND GAS FIELD SERVICES, NEC",13,OIL AND GAS EXTRACTION
1411,DIMENSION STONE,14,"MINING AND QUARRYING OF NONMETALLIC MINERALS, EXCEPT FUELS"
1422,CRUSHED AND BROKEN LIMESTONE,14,"MINING AND QUARRYING OF NONMETALLIC MINERALS, EXCEPT FUELS"
1423,CRUSHED AND BROKEN GRANITE,14,"MINING AND QUARRYING OF NONMETALLIC MINERALS, EXCEPT FUELS"
1429,"CRUSHED AND BROKEN STONE, NEC",14,"MINING AND QUARRYING OF NONMETALLIC MINERALS, EXCEPT FUELS"
1442,CONSTRUCTION SAND AND GRAVEL,14,"MINING AND QUARRYING OF NONMETALLIC MINERALS, EXCEPT FUELS"
1446,INDUSTRIAL SAND,14,"MINING AND QUARRYING OF NONMETALLIC MINERALS, EXCEPT FUELS"
1455,KAOLIN AND BALL CLAY,14,"MINING AND QUARRYING OF NONMETALLIC MINERALS, EXCEPT FUELS"
1459,"CLAY AND RELATED MINERALS, NEC",14,"MINING AND QUARRYING OF NONMETALLIC MINERALS, EXCEPT FUELS"
1474,"POTASH, SODA, AND BORATE MINERALS",14,"MINING AND QUARRYING OF NONMETALLIC MINERALS, EXCEPT FUELS"
1475,PHOSPHATE ROCK,14,"MINING AND QUARRYING OF NONMETALLIC MINERALS, EXCEPT FUELS"
1479,CHEMICAL AND FERTILIZER MINING,14,"MINING AND QUARRYING OF NONMETALLIC MINERALS, EXCEPT FUELS"
1481,NONMETALLIC MINERAL SERVICES,14,"MINING AND QUARRYING OF NONMETALLIC MINERALS, EXCEPT FUELS"
1499,MISCELLANEOUS NONMETALLIC MINING,14,"MINING AND QUARRYING OF NONMETALLIC MINERALS, EXCEPT FUELS"
1521,SINGLE-FAMILY HOUSING CONSTRUCTION,15,BUILDING CNSTRCTN - GENERAL CONTRACTORS & OPERATIVE BUILDERS
1522,"RESIDENTIAL CONSTRUCTION, NEC",15,BUILDING CNSTRCTN - GENERAL CONTRACTORS & OPERATIVE BUILDERS
1531,OPERATIVE BUILDERS,15,BUILDING CNSTRCTN - GENERAL CONTRACTORS & OPERATIVE BUILDERS
1541,INDUSTRIAL BUILDINGS AND WAREHOUSES,15,BUILDING CNSTRCTN - GENERAL CONTRACTORS & OPERATIVE BUILDERS
1542,"NONRESIDENTIAL CONSTRUCTION, NEC",15,BUILDING CNSTRCTN - GENERAL CONTRACTORS & OPERATIVE BUILDERS
1611,HIGHWAY AND STREET CONSTRUCTION,16,"HEAVY CNSTRCTN, EXCEPT BUILDING CONSTRUCTION - CONTRACTORS"
1622,"BRIDGE, TUNNEL, AND ELEVATED HIGHWAY",16,"HEAVY CNSTRCTN, EXCEPT BUILDING CONSTRUCTION - CONTRACTORS"
1623,"WATER, SEWER, AND UTILITY LINES",16,"HEAVY CNSTRCTN, EXCEPT BUILDING CONSTRUCTION - CONTRACTORS"
1629,"HEAVY CONSTRUCTION, NEC",16,"HEAVY CNSTRCTN, EXCEPT BUILDING CONSTRUCTION - CONTRACTORS"
1711,"PLUMBING, HEATING, AIR-CONDITIONING",17,CONSTRUCTION - SPECIAL TRADE CONTRACTORS
1721,PAINTING AND PAPER HANGING,17,CONSTRUCTION - SPECIAL TRADE CONTRACTORS
1731,ELECTRICAL WORK,17,CONSTRUCTION - SPECIAL TRADE CONTRACTORS
1741,MASONRY AND OTHER STONEWORK,17,CONSTRUCTION - SPECIAL TRADE CONTRACTORS
1742,"PLASTERING, DRYWALL, AND INSULATION",17,CONSTRUCTION - SPECIAL TRADE CONTRACTORS
1743,"TERRAZZO, TILE, MARBLE, MOSAIC WORK",17,CONSTRUCTION - SPECIAL TRADE CONTRACTORS
1751,CARPENTRY WORK,17,CONSTRUCTION - SPECIAL TRADE CONTRACTORS
1752,"FLOOR LAYING AND FLOOR WORK, NEC",17,CONSTRUCTION - SPECIAL TRADE CONTRACTORS
1761,"ROOFING, SIDING, AND SHEETMETAL WORK",17,CONSTRUCTION - SPECIAL TRADE CONTRACTORS
1771,CONCRETE WORK,17,CONSTRUCTION - SPECIAL TRADE CONTRACTORS
1781,WATER WELL DRILLING,17,CONSTRUCTION - SPECIAL TRADE CONTRACTORS
1791,STRUCTURAL STEEL ERECTION,17,CONSTRUCTION - SPECIAL TRADE CONTRACTORS
1793,GLASS AND GLAZING WORK,17,CONSTRUCTION - SPECIAL TRADE CONTRACTORS
1794,EXCAVATION WORK,17,CONSTRUCTION - SPECIAL TRADE CONTRACTORS
1795,WRECKING AND DEMOLITION WORK,17,CONSTRUCTION - SPECIAL TRADE CONTRACTORS
1796,INSTALLING BUILDING EQUIPMENT,17,CONSTRUCTION - SPECIAL TRADE CONTRACTORS
1799,"SPECIAL TRADE CONTRACTORS, NEC",17,CONSTRUCTION - SPECIAL TRADE CONTRACTORS
2011,MEAT PACKING PLANTS,20,FOOD AND KINDRED PRODUCTS
2013,SAUSAGES AND OTHER PREPARED MEATS,20,FOOD AND KINDRED PRODUCTS
2015,POULTRY SLAUGHTERING AND PROCESSING,20,FOOD AND KINDRED PRODUCTS
2021,CREAMERY BUTTER,20,FOOD AND KINDRED PRODUCTS
2022,CHEESE; NATURAL AND PROCESSED,20,FOOD AND KINDRED PRODUCTS
2023,"DRY, CONDENSED, EVAPORATED PRODUCTS",20,FOOD AND KINDRED PRODUCTS
2024,ICE CREAM AND FROZEN DESERTS,20,FOOD AND KINDRED PRODUCTS
2026,FLUID MILK,20,FOOD AND KINDRED PRODUCTS
2032,CANNED SPECIALTIES,20,FOOD AND KINDRED PRODUCTS
2033,CANNED FRUITS AND SPECIALTIES,20,FOOD AND KINDRED PRODUCTS
2034,"DEHYDRATED FRUITS, VEGETABLES, SOUPS",20,FOOD AND KINDRED PRODUCTS
2035,"PICKLES, SAUCES, AND SALAD DRESSINGS",20,FOOD AND KINDRED PRODUCTS
2037,FROZEN FRUITS AND VEGETABLES,20,FOOD AND KINDRED PRODUCTS
2038,"FROZEN SPECIALTIES, NEC",20,FOOD AND KINDRED PRODUCTS
2041,FLOUR AND OTHER GRAIN MILL PRODUCTS,20,FOOD AND KINDRED PRODUCTS
2043,CEREAL BREAKFAST FOODS,20,FOOD AND KINDRED PRODUCTS
2044,RICE MILLING,20,FOOD AND KINDRED PRODUCTS
2045,PREPARED FLOUR MIXES AND DOUGHS,20,FOOD AND KINDRED PRODUCTS
2046,WET CORN MILLING,20,FOOD AND KINDRED PRODUCTS
2047,DOG AND CAT FOOD,20,FOOD AND KINDRED PRODUCTS
2048,"PREPARED FEEDS, NEC",20,FOOD AND KINDRED PRODUCTS
2051,"BREAD, CAKE, AND RELATED PRODUCTS",20,FOOD AND KINDRED PRODUCTS
2052,COOKIES AND CRACKERS,20,FOOD AND KINDRED PRODUCTS
2053,"FROZEN BAKERY PRODUCTS, EXCEPT BREAD",20,FOOD AND KINDRED PRODUCTS
2061,RAW CANE SUGAR,20,FOOD AND KINDRED PRODUCTS
2062,CANE SUGAR REFINING,20,FOOD AND KINDRED PRODUCTS
2063,BEET SUGAR,20,FOOD AND KINDRED PRODUCTS
2064,CANDY AND OTHER CONFECTIONERY PRODUCTS,20,FOOD AND KINDRED PRODUCTS
2066,CHOCOLATE AND COCOA PRODUCTS,20,FOOD AND KINDRED PRODUCTS
2067,CHEWING GUM,20,FOOD AND KINDRED PRODUCTS
2068,SALTED AND ROASTED NUTS AND SEEDS,20,FOOD AND KINDRED PRODUCTS
2074,COTTONSEED OIL MILLS,20,FOOD AND KINDRED PRODUCTS
2075,SOYBEAN OIL MILLS,20,FOOD AND KINDRED PRODUCTS
2076,"VEGETABLE OIL MILLS, NEC",20,FOOD AND KINDRED PRODUCTS
2077,ANIMAL AND MARINE FATS AND OILS,20,FOOD AND KINDRED PRODUCTS
2079,EDIBLE FATS AND OILS,20,FOOD AND KINDRED PRODUCTS
2082,MALT BEVERAGES,20,FOOD AND KINDRED PRODUCTS
2083,MALT,20,FOOD AND KINDRED PRODUCTS
2084,"WINES, BRANDY, AND BRANDY SPIRITS",20,FOOD AND KINDRED PRODUCTS
2085,DISTILLED AND BLENDED LIQUORS,20,FOOD AND KINDRED PRODUCTS
2086,BOTTLED AND CANNED SOFT DRINKS,20,FOOD AND KINDRED PRODUCTS
2087,"FLAVORING EXTRACTS AND SYRUPS, NEC",20,FOOD AND KINDRED PRODUCTS
2091,CANNED AND CURED FISH AND SEAFOODS,20,FOOD AND KINDRED PRODUCTS
2092,FRESH OR FROZEN PACKAGED FISH,20,FOOD AND KINDRED PRODUCTS
2095,ROASTED COFFEE,20,FOOD AND KINDRED PRODUCTS
2096,POTATO CHIPS AND SIMILAR SNACKS,20,FOOD AND KINDRED PRODUCTS
2097,MANUFACTURED ICE,20,FOOD AND KINDRED PRODUCTS
2098,MACARONI AND SPAGHETTI,20,FOOD AND KINDRED PRODUCTS
2099,"FOOD PREPARATIONS, NEC",20,FOOD AND KINDRED PRODUCTS
2111,CIGARETTES,21,TOBACCO PRODUCTS
2121,CIGARS,21,TOBACCO PRODUCTS
2131,CHEWING AND SMOKING TOBACCO,21,TOBACCO PRODUCTS
2141,TOBACCO STEMMING AND REDRYING,21,TOBACCO PRODUCTS
2211,"BROADWOVEN FABRIC MILLS, COTTON",22,TEXTILE MILL PRODUCTS
2221,"BROADWOVEN FABRIC MILLS, MANMADE",22,TEXTILE MILL PRODUCTS
2231,"BROADWOVEN FABRIC MILLS, WOOL",22,TEXTILE MILL PRODUCTS
2241,NARROW FABRIC MILLS,22,TEXTILE MILL PRODUCTS
2251,"WOMEN'S HOSIERY, EXCEPT SOCKS",22,TEXTILE MILL PRODUCTS
2252,"HOSIERY, NEC",22,TEXTILE MILL PRODUCTS
2253,KNIT OUTERWEAR MILLS,22,TEXTILE MILL PRODUCTS
2254,KNIT UNDERWEAR MILLS,22,TEXTILE MILL PRODUCTS
2257,WEFT KNIT FABRIC MILLS,22,TEXTILE MILL PRODUCTS
2258,LACE AND WARP KNIT FABRIC MILLS,22,TEXTILE MILL PRODUCTS
2259,"KNITTING MILLS, NEC",22,TEXTILE MILL PRODUCTS
2261,"FINISHING PLANTS, COTTON",22,TEXTILE MILL PRODUCTS
2262,"FINISHING PLANTS, MANMADE",22,TEXTILE MILL PRODUCTS
2269,"FINISHING PLANTS, NEC",22,TEXTILE MILL PRODUCTS
2273,CARPETS AND RUGS,22,TEXTILE MILL PRODUCTS
2281,YARN SPINNING MILLS,22,TEXTILE MILL PRODUCTS
2282,THROWING AND WINDING MILLS,22,TEXTILE MILL PRODUCTS
2284,THREAD MILLS,22,TEXTILE MILL PRODUCTS
2295,"COATED FABRICS, NOT RUBBERIZED",22,TEXTILE MILL PRODUCTS
2296,TIRE CORD AND FABRICS,22,TEXTILE MILL PRODUCTS
2297,NONWOVEN FABRICS,22,TEXTILE MILL PRODUCTS
2298,CORDAGE AND TWINE,22,TEXTILE MILL PRODUCTS
2299,"TEXTILE GOODS, NEC",22,TEXTILE MILL PRODUCTS
2311,MEN'S AND BOY'S SUITS AND COATS,23,"APPAREL, FINISHED PRDCTS FROM FABRICS & SIMILAR MATERIALS"
2321,MEN'S AND BOY'S FURNISHINGS,23,"APPAREL, FINISHED PRDCTS FROM FABRICS & SIMILAR MATERIALS"
2322,MEN'S AND BOY'S UNDERWEAR AND NIGHTWEAR,23,"APPAREL, FINISHED PRDCTS FROM FABRICS & SIMILAR MATERIALS"
2323,MEN'S AND BOY'S NECKWEAR,23,"APPAREL, FINISHED PRDCTS FROM FABRICS & SIMILAR MATERIALS"
2325,MEN'S AND BOY'S TROUSERS AND SLACKS,23,"APPAREL, FINISHED PRDCTS FROM FABRICS & SIMILAR MATERIALS"
2326,MEN'S AND BOY'S WORK CLOTHING,23,"APPAREL, FINISHED PRDCTS FROM FABRICS & SIMILAR MATERIALS"
2329,"MEN'S AND BOY'S CLOTHING, NEC",23,"APPAREL, FINISHED PRDCTS FROM FABRICS & SIMILAR MATERIALS"
2331,WOMEN'S AND MISSES' BLOUSES AND SHIRTS,23,"APPAREL, FINISHED PRDCTS FROM FABRICS & SIMILAR MATERIALS"
2335,"WOMEN'S, JUNIOR'S, AND MISSES' DRESSES",23,"APPAREL, FINISHED PRDCTS FROM FABRICS & SIMILAR MATERIALS"
2337,WOMEN'S AND MISSES' SUITS AND COATS,23,"APPAREL, FINISHED PRDCTS FROM FABRICS & SIMILAR MATERIALS"
2339,"WOMEN'S AND MISSES' OUTERWEAR, NEC",23,"APPAREL, FINISHED PRDCTS FROM FABRICS & SIMILAR MATERIALS"
2341,WOMEN'S AND CHILDREN'S UNDERWEAR,23,"APPAREL, FINISHED PRDCTS FROM FABRICS & SIMILAR MATERIALS"
2342,"BRAS, GIRDLES, AND ALLIED GARMENTS",23,"APPAREL, FINISHED PRDCTS FROM FABRICS & SIMILAR MATERIALS"
2353,"HATS, CAPS, AND MILLINERY",23,"APPAREL, FINISHED PRDCTS FROM FABRICS & SIMILAR MATERIALS"
2361,"GIRL'S AND CHILDREN'S DRESSES, BLOUSES",23,"APPAREL, FINISHED PRDCTS FROM FABRICS & SIMILAR MATERIALS"
2369,"GIRL'S AND CHILDREN'S OUTERWEAR, NEC",23,"APPAREL, FINISHED PRDCTS FROM FABRICS & SIMILAR MATERIALS"
2371,FUR GOODS,23,"APPAREL, FINISHED PRDCTS FROM FABRICS & SIMILAR MATERIALS"
2381,FABRIC DRESS AND WORK GLOVES,23,"APPAREL, FINISHED PRDCTS FROM FABRICS & SIMILAR MATERIALS"
2384,ROBES AND DRESSING GOWNS,23,"APPAREL, FINISHED PRDCTS FROM FABRICS & SIMILAR MATERIALS"
2385,WATERPROOF OUTERWEAR,23,"APPAREL, FINISHED PRDCTS FROM FABRICS & SIMILAR MATERIALS"
2386,LEATHER AND SHEEP-LINED CLOTHING,23,"APPAREL, FINISHED PRDCTS FROM FABRICS & SIMILAR MATERIALS"
2387,APPAREL BELTS,23,"APPAREL, FINISHED PRDCTS FROM FABRICS & SIMILAR MATERIALS"
2389,"APPAREL AND ACCESSORIES, NEC",23,"APPAREL, FINISHED PRDCTS FROM FABRICS & SIMILAR MATERIALS"
2391,CURTAINS AND DRAPERIES,23,"APPAREL, FINISHED PRDCTS FROM FABRICS & SIMILAR MATERIALS"
2392,"HOUSEHOLD FURNISHINGS, NEC",23,"APPAREL, FINISHED PRDCTS FROM FABRICS & SIMILAR MATERIALS"
2393,TEXTILE BAGS,23,"APPAREL, FINISHED PRDCTS FROM FABRICS & SIMILAR MATERIALS"
2394,CANVAS AND RELATED PRODUCTS,23,"APPAREL, FINISHED PRDCTS FROM FABRICS & SIMILAR MATERIALS"
2395,PLEATING AND STITCHING,23,"APPAREL, FINISHED PRDCTS FROM FABRICS & SIMILAR MATERIALS"
2396,AUTOMOTIVE AND APPAREL TRIMMINGS,23,"APPAREL, FINISHED PRDCTS FROM FABRICS & SIMILAR MATERIALS"
2397,SCHIFFLI MACHINE EMBROIDERIES,23,"APPAREL, FINISHED PRDCTS FROM FABRICS & SIMILAR MATERIALS"
2399,"FABRICATED TEXTILE PRODUCTS, NEC",23,"APPAREL, FINISHED PRDCTS FROM FABRICS & SIMILAR MATERIALS"
2411,LOGGING,24,"LUMBER AND WOOD PRODUCTS, EXCEPT FURNITURE"
2421,"SAWMILLS AND PLANING MILLS, GENERAL",24,"LUMBER AND WOOD PRODUCTS, EXCEPT FURNITURE"
2426,HARDWOOD DIMENSION AND FLOORING MILLS,24,"LUMBER AND WOOD PRODUCTS, EXCEPT FURNITURE"
2429,"SPECIAL PRODUCT SAWMILLS, NEC",24,"LUMBER AND WOOD PRODUCTS, EXCEPT FURNITURE"
2431,MILLWORK,24,"LUMBER AND WOOD PRODUCTS, EXCEPT FURNITURE"
2434,WOOD KITCHEN CABINETS,24,"LUMBER AND WOOD PRODUCTS, EXCEPT FURNITURE"
2435,HARDWOOD VENEER AND PLYWOOD,24,"LUMBER AND WOOD PRODUCTS, EXCEPT FURNITURE"
2436,SOFTWOOD VENEER AND PLYWOOD,24,"LUMBER AND WOOD PRODUCTS, EXCEPT FURNITURE"
2439,"STRUCTURAL WOOD MEMBERS, NEC",24,"LUMBER AND WOOD PRODUCTS, EXCEPT FURNITURE"
2441,NAILED WOOD BOXES AND SHOOK,24,"LUMBER AND WOOD PRODUCTS, EXCEPT FURNITURE"
2448,WOOD PALLETS AND SKIDS,24,"LUMBER AND WOOD PRODUCTS, EXCEPT FURNITURE"
2449,"WOOD CONTAINERS, NEC",24,"LUMBER AND WOOD PRODUCTS, EXCEPT FURNITURE"
2451,MOBILE HOMES,24,"LUMBER AND WOOD PRODUCTS, EXCEPT FURNITURE"
2452,PREFABRICATED WOOD BUILDINGS,24,"LUMBER AND WOOD PRODUCTS, EXCEPT FURNITURE"
2491,WOOD PRESERVING,24,"LUMBER AND WOOD PRODUCTS, EXCEPT FURNITURE"
2493,RECONSTITUTED WOOD PRODUCTS,24,"LUMBER AND WOOD PRODUCTS, EXCEPT FURNITURE"
2499,"WOOD PRODUCTS, NEC",24,"LUMBER AND WOOD PRODUCTS, EXCEPT FURNITURE"
2511,WOOD HOUSEHOLD FURNITURE,25,FURNITURE AND FIXTURES
2512,UPHOLSTERED HOUSEHOLD FURNITURE,25,FURNITURE AND FIXTURES
2514,METAL HOUSEHOLD FURNITURE,25,FURNITURE AND FIXTURES
2515,MATTRESSES AND BEDSPRINGS,25,FURNITURE AND FIXTURES
2517,WOOD TELEVISION AND RADIO CABINETS,25,FURNITURE AND FIXTURES
2519,"HOUSEHOLD FURNITURE, NEC",25,FURNITURE AND FIXTURES
2521,WOOD OFFICE FURNITURE,25,FURNITURE AND FIXTURES
2522,"OFFICE FURNITURE, EXCEPT WOOD",25,FURNITURE AND FIXTURES
2531,PUBLIC BUILDING AND RELATED FURNITURE,25,FURNITURE AND FIXTURES
2541,WOOD PARTITIONS AND FIXTURES,25,FURNITURE AND FIXTURES
2542,"PARTITIONS AND FIXTURES, EXCEPT WOOD",25,FURNITURE AND FIXTURES
2591,DRAPERY HARDWARE AND BLINDS AND SHADES,25,FURNITURE AND FIXTURES
2599,"FURNITURE AND FIXTURES, NEC",25,FURNITURE AND FIXTURES
2611,PULP MILLS,26,PAPER AND ALLIED PRODUCTS
2621,PAPER MILLS,26,PAPER AND ALLIED PRODUCTS
2631,PAPERBOARD MILLS,26,PAPER AND ALLIED PRODUCTS
2652,SETUP PAPERBOARD BOXES,26,PAPER AND ALLIED PRODUCTS
2653,CORRUGATED AND SOLID FIBER BOXES,26,PAPER AND ALLIED PRODUCTS
2655,"FIBER CANS, DRUMS, AND SIMILAR PRODUCTS",26,PAPER AND ALLIED PRODUCTS
2656,SANITARY FOOD CONTAINERS,26,PAPER AND ALLIED PRODUCTS
2657,FOLDING PAPERBOARD BOXES,26,PAPER AND ALLIED PRODUCTS
2671,PAPER; COATED AND LAMINATED PACKAGING,26,PAPER AND ALLIED PRODUCTS
2672,"PAPER; COATED AND LAMINATED, NEC",26,PAPER AND ALLIED PRODUCTS
2673,"BAGS: PLASTIC, LAMINATED, AND COATED",26,PAPER AND ALLIED PRODUCTS
2674,BAGS: UNCOATED PAPER AND MULTIWALL,26,PAPER AND ALLIED PRODUCTS
2675,DIE-CUT PAPER AND BOARD,26,PAPER AND ALLIED PRODUCTS
2676,SANITARY PAPER PRODUCTS,26,PAPER AND ALLIED PRODUCTS
2677,ENVELOPES,26,PAPER AND ALLIED PRODUCTS
2678,STATIONERY PRODUCTS,26,PAPER AND ALLIED PRODUCTS
2679,"CONVERTED PAPER PRODUCTS, NEC",26,PAPER AND ALLIED PRODUCTS
2711,NEWSPAPERS,27,"PRINTING, PUBLISHING AND ALLIED INDUSTRIES"
2721,PERIODICALS,27,"PRINTING, PUBLISHING AND ALLIED INDUSTRIES"
2731,BOOK PUBLISHING,27,"PRINTING, PUBLISHING AND ALLIED INDUSTRIES"
2732,BOOK PRINTING,27,"PRINTING, PUBLISHING AND ALLIED INDUSTRIES"
2741,MISCELLANEOUS PUBLISHING,27,"PRINTING, PUBLISHING AND ALLIED INDUSTRIES"
2752,"COMMERCIAL PRINTING, LITHOGRAPHIC",27,"PRINTING, PUBLISHING AND ALLIED INDUSTRIES"
2754,"COMMERCIAL PRINTING, GRAVURE",27,"PRINTING, PUBLISHING AND ALLIED INDUSTRIES"
2759,"COMMERCIAL PRINTING, NEC",27,"PRINTING, PUBLISHING AND ALLIED INDUSTRIES"
2761,MANIFOLD BUSINESS FORMS,27,"PRINTING, PUBLISHING AND ALLIED INDUSTRIES"
2771,GREETING CARDS,27,"PRINTING, PUBLISHING AND ALLIED INDUSTRIES"
2782,BLANKBOOKS AND LOOSELEAF BINDERS,27,"PRINTING, PUBLISHING AND ALLIED INDUSTRIES"
2789,BOOKBINDING AND RELATED WORK,27,"PRINTING, PUBLISHING AND ALLIED INDUSTRIES"
2791,TYPESETTING,27,"PRINTING, PUBLISHING AND ALLIED INDUSTRIES"
2796,PLATEMAKING SERVICES,27,"PRINTING, PUBLISHING AND ALLIED INDUSTRIES"
2812,ALKALIES AND CHLORINE,28,CHEMICALS AND ALLIED PRODUCTS
2813,INDUSTRIAL GASES,28,CHEMICALS AND ALLIED PRODUCTS
2816,INORGANIC PIGMENTS,28,CHEMICALS AND ALLIED PRODUCTS
2819,"INDUSTRIAL INORGANIC CHEMICALS, NEC",28,CHEMICALS AND ALLIED PRODUCTS
2821,PLASTICS MATERIALS AND RESINS,28,CHEMICALS AND ALLIED PRODUCTS
2822,SYNTHETIC RUBBER,28,CHEMICALS AND ALLIED PRODUCTS
2823,CELLULOSIC MANMADE FIBERS,28,CHEMICALS AND ALLIED PRODUCTS
2824,"ORGANIC FIBERS, NONCELLULOSIC",28,CHEMICALS AND ALLIED PRODUCTS
2833,MEDICINALS AND BOTANICALS,28,CHEMICALS AND ALLIED PRODUCTS
2834,PHARMACEUTICAL PREPARATIONS,28,CHEMICALS AND ALLIED PRODUCTS
2835,DIAGNOSTIC SUBSTANCES,28,CHEMICALS AND ALLIED PRODUCTS
2836,"BIOLOGICAL PRODUCTS, EXCEPT DIAGNOSTIC",28,CHEMICALS AND ALLIED PRODUCTS
2841,SOAP AND OTHER DETERGENTS,28,CHEMICALS AND ALLIED PRODUCTS
2842,POLISHES AND SANITATION GOODS,28,CHEMICALS AND ALLIED PRODUCTS
2843,SURFACE ACTIVE AGENTS,28,CHEMICALS AND ALLIED PRODUCTS
2844,TOILET PREPARATIONS,28,CHEMICALS AND ALLIED PRODUCTS
2851,PAINTS AND ALLIED PRODUCTS,28,CHEMICALS AND ALLIED PRODUCTS
2861,GUM AND WOOD CHEMICALS,28,CHEMICALS AND ALLIED PRODUCTS
2865,CYCLIC CRUDES AND INTERMEDIATES,28,CHEMICALS AND ALLIED PRODUCTS
2869,"INDUSTRIAL ORGANIC CHEMICALS, NEC",28,CHEMICALS AND ALLIED PRODUCTS
2873,NITROGENOUS FERTILIZERS,28,CHEMICALS AND ALLIED PRODUCTS
2874,PHOSPHATIC FERTILIZERS,28,CHEMICALS AND ALLIED PRODUCTS
2875,"FERTILIZERS, MIXING ONLY",28,CHEMICALS AND ALLIED PRODUCTS
2879,"AGRICULTURAL CHEMICALS, NEC",28,CHEMICALS AND ALLIED PRODUCTS
2891,ADHESIVES AND SEALANTS,28,CHEMICALS AND ALLIED PRODUCTS
2892,EXPLOSIVES,28,CHEMICALS AND ALLIED PRODUCTS
2893,PRINTING INK,28,CHEMICALS AND ALLIED PRODUCTS
2895,CARBON BLACK,28,CHEMICALS AND ALLIED PRODUCTS
2899,"CHEMICAL PREPARATIONS, NEC",28,CHEMICALS AND ALLIED PRODUCTS
2911,PETROLEUM REFINING,29,PETROLEUM REFINING AND RELATED INDUSTRIES
2951,ASPHALT PAVING MIXTURES AND BLOCKS,29,PETROLEUM REFINING AND RELATED INDUSTRIES
2952,ASPHALT FELTS AND COATINGS,29,PETROLEUM REFINING AND RELATED INDUSTRIES
2992,LUBRICATING OILS AND GREASES,29,PETROLEUM REFINING AND RELATED INDUSTRIES
2999,"PETROLEUM AND COAL PRODUCTS, NEC",29,PETROLEUM REFINING AND RELATED INDUSTRIES
3011,TIRES AND INNER TUBES,30,RUBBER AND MISCELLANEOUS PLASTIC PRODUCTS
3021,RUBBER AND PLASTICS FOOTWEAR,30,RUBBER AND MISCELLANEOUS PLASTIC PRODUCTS
3052,RUBBER AND PLASTICS HOSE AND BELTINGS,30,RUBBER AND MISCELLANEOUS PLASTIC PRODUCTS
3053,GASKETS; PACKING AND SEALING DEVICES,30,RUBBER AND MISCELLANEOUS PLASTIC PRODUCTS
3061,MECHANICAL RUBBER GOODS,30,RUBBER AND MISCELLANEOUS PLASTIC PRODUCTS
3069,"FABRICATED RUBBER PRODUCTS, NEC",30,RUBBER AND MISCELLANEOUS PLASTIC PRODUCTS
3081,UNSUPPORTED PLASTICS FILM AND SHEET,30,RUBBER AND MISCELLANEOUS PLASTIC PRODUCTS
3082,UNSUPPORTED PLASTICS PROFILE SHAPES,30,RUBBER AND MISCELLANEOUS PLASTIC PRODUCTS
3083,LAMINATED PLASTICS PLATE AND SHEET,30,RUBBER AND MISCELLANEOUS PLASTIC PRODUCTS
3084,PLASTICS PIPE,30,RUBBER AND MISCELLANEOUS PLASTIC PRODUCTS
3085,PLASTICS BOTTLES,30,RUBBER AND MISCELLANEOUS PLASTIC PRODUCTS
3086,PLASTICS FOAM PRODUCTS,30,RUBBER AND MISCELLANEOUS PLASTIC PRODUCTS
3087,CUSTOM COMPOUND PURCHASED RESINS,30,RUBBER AND MISCELLANEOUS PLASTIC PRODUCTS
3088,PLASTICS PLUMBING FIXTURES,30,RUBBER AND MISCELLANEOUS PLASTIC PRODUCTS
3089,"PLASTICS PRODUCTS, NEC",30,RUBBER AND MISCELLANEOUS PLASTIC PRODUCTS
3111,LEATHER TANNING AND FINISHING,31,LEATHER AND LEATHER PRODUCTS
3131,FOOTWEAR CUT STOCK,31,LEATHER AND LEATHER PRODUCTS
3142,HOUSE SLIPPERS,31,LEATHER AND LEATHER PRODUCTS
3143,"MEN'S FOOTWEAR, EXCEPT ATHLETIC",31,LEATHER AND LEATHER PRODUCTS
3144,"WOMEN'S FOOTWEAR, EXCEPT ATHLETIC",31,LEATHER AND LEATHER PRODUCTS
3149,"FOOTWEAR, EXCEPT RUBBER, NEC",31,LEATHER AND LEATHER PRODUCTS
3151,LEATHER GLOVES AND MITTENS,31,LEATHER AND LEATHER PRODUCTS
3161,LUGGAGE,31,LEATHER AND LEATHER PRODUCTS
3171,WOMEN'S HANDBAGS AND PURSES,31,LEATHER AND LEATHER PRODUCTS
3172,"PERSONAL LEATHER GOODS, NEC",31,LEATHER AND LEATHER PRODUCTS
3199,"LEATHER GOODS, NEC",31,LEATHER AND LEATHER PRODUCTS
3211,FLAT GLASS,32,"STONE, CLAY, GLASS, AND CONCRETE PRODUCTS"
3221,GLASS CONTAINERS,32,"STONE, CLAY, GLASS, AND CONCRETE PRODUCTS"
3229,"PRESSED AND BLOWN GLASS, NEC",32,"STONE, CLAY, GLASS, AND CONCRETE PRODUCTS"
3231,PRODUCTS OF PURCHASED GLASS,32,"STONE, CLAY, GLASS, AND CONCRETE PRODUCTS"
3241,"CEMENT, HYDRAULIC",32,"STONE, CLAY, GLASS, AND CONCRETE PRODUCTS"
3251,BRICK AND STRUCTURAL CLAY TILE,32,"STONE, CLAY, GLASS, AND CONCRETE PRODUCTS"
3253,CERAMIC WALL AND FLOOR TILE,32,"STONE, CLAY, GLASS, AND CONCRETE PRODUCTS"
3255,CLAY REFRACTORIES,32,"STONE, CLAY, GLASS, AND CONCRETE PRODUCTS"
3259,"STRUCTURAL CLAY PRODUCTS, NEC",32,"STONE, CLAY, GLASS, AND CONCRETE PRODUCTS"
3261,VITREOUS PLUMBING FIXTURES,32,"STONE, CLAY, GLASS, AND CONCRETE PRODUCTS"
3262,VITREOUS CHINA TABLE AND KITCHENWARE,32,"STONE, CLAY, GLASS, AND CONCRETE PRODUCTS"
3263,SEMIVITREOUS TABLE AND KITCHENWARE,32,"STONE, CLAY, GLASS, AND CONCRETE PRODUCTS"
3264,PORCELAIN ELECTRICAL SUPPLIES,32,"STONE, CLAY, GLASS, AND CONCRETE PRODUCTS"
3269,"POTTERY PRODUCTS, NEC",32,"STONE, CLAY, GLASS, AND CONCRETE PRODUCTS"
3271,CONCRETE BLOCK AND BRICK,32,"STONE, CLAY, GLASS, AND CONCRETE PRODUCTS"
3272,"CONCRETE PRODUCTS, NEC",32,"STONE, CLAY, GLASS, AND CONCRETE PRODUCTS"
3273,READY-MIXED CONCRETE,32,"STONE, CLAY, GLASS, AND CONCRETE PRODUCTS"
3274,LIME,32,"STONE, CLAY, GLASS, AND CONCRETE PRODUCTS"
3275,GYPSUM PRODUCTS,32,"STONE, CLAY, GLASS, AND CONCRETE PRODUCTS"
3281,CUT STONE AND STONE PRODUCTS,32,"STONE, CLAY, GLASS, AND CONCRETE PRODUCTS"
3291,ABRASIVE PRODUCTS,32,"STONE, CLAY, GLASS, AND CONCRETE PRODUCTS"
3292,ASBESTOS PRODUCTS,32,"STONE, CLAY, GLASS, AND CONCRETE PRODUCTS"
3295,"MINERALS, GROUND OR TREATED",32,"STONE, CLAY, GLASS, AND CONCRETE PRODUCTS"
3296,MINERAL WOOL,32,"STONE, CLAY, GLASS, AND CONCRETE PRODUCTS"
3297,NONCLAY REFRACTORIES,32,"STONE, CLAY, GLASS, AND CONCRETE PRODUCTS"
3299,"NONMETALLIC MINERAL PRODUCTS,",32,"STONE, CLAY, GLASS, AND CONCRETE PRODUCTS"
3312,BLAST FURNACES AND STEEL MILLS,33,PRIMARY METAL INDUSTRIES
3313,ELECTROMETALLURGICAL PRODUCTS,33,PRIMARY METAL INDUSTRIES
3315,STEEL WIRE AND RELATED PRODUCTS,33,PRIMARY METAL INDUSTRIES
3316,COLD FINISHING OF STEEL SHAPES,33,PRIMARY METAL INDUSTRIES
3317,STEEL PIPE AND TUBES,33,PRIMARY METAL INDUSTRIES
3321,GRAY AND DUCTILE IRON FOUNDRIES,33,PRIMARY METAL INDUSTRIES
3322,MALLEABLE IRON FOUNDRIES,33,PRIMARY METAL INDUSTRIES
3324,STEEL INVESTMENT FOUNDRIES,33,PRIMARY METAL INDUSTRIES
3325,"STEEL FOUNDRIES, NEC",33,PRIMARY METAL INDUSTRIES
3331,PRIMARY COPPER,33,PRIMARY METAL INDUSTRIES
3334,PRIMARY ALUMINUM,33,PRIMARY METAL INDUSTRIES
3339,"PRIMARY NONFERROUS METALS, NEC",33,PRIMARY METAL INDUSTRIES
3341,SECONDARY NONFERROUS METALS,33,PRIMARY METAL INDUSTRIES
3351,COPPER ROLLING AND DRAWING,33,PRIMARY METAL INDUSTRIES
3353,"ALUMINUM SHEET, PLATE, AND FOIL",33,PRIMARY METAL INDUSTRIES
3354,ALUMINUM EXTRUDED PRODUCTS,33,PRIMARY METAL INDUSTRIES
3355,"ALUMINUM ROLLING AND DRAWING, NEC",33,PRIMARY METAL INDUSTRIES
3356,"NONFERROUS ROLLING AND DRAWING, NEC",33,PRIMARY METAL INDUSTRIES
3357,NONFERROUS WIREDRAWING AND INSULATING,33,PRIMARY METAL INDUSTRIES
3363,ALUMINUM DIE-CASTINGS,33,PRIMARY METAL INDUSTRIES
3364,NONFERROUS DIE-CASTINGS EXCEPT ALUMINUM,33,PRIMARY METAL INDUSTRIES
3365,ALUMINUM FOUNDRIES,33,PRIMARY METAL INDUSTRIES
3366,COPPER FOUNDRIES,33,PRIMARY METAL INDUSTRIES
3369,"NONFERROUS FOUNDRIES, NEC",33,PRIMARY METAL INDUSTRIES
3398,METAL HEAT TREATING,33,PRIMARY METAL INDUSTRIES
3399,PRIMARY METAL PRODUCTS,33,PRIMARY METAL INDUSTRIES
3411,METAL CANS,34,"FABRICATED METAL PRDCTS, EXCEPT MACHINERY & TRANSPORT EQPMNT"
3412,"METAL BARRELS, DRUMS, AND PAILS",34,"FABRICATED METAL PRDCTS, EXCEPT MACHINERY & TRANSPORT EQPMNT"
3421,CUTLERY,34,"FABRICATED METAL PRDCTS, EXCEPT MACHINERY & TRANSPORT EQPMNT"
3423,"HAND AND EDGE TOOLS, NEC",34,"FABRICATED METAL PRDCTS, EXCEPT MACHINERY & TRANSPORT EQPMNT"
3425,SAW BLADES AND HANDSAWS,34,"FABRICATED METAL PRDCTS, EXCEPT MACHINERY & TRANSPORT EQPMNT"
3429,"HARDWARE, NEC",34,"FABRICATED METAL PRDCTS, EXCEPT MACHINERY & TRANSPORT EQPMNT"
3431,METAL SANITARY WARE,34,"FABRICATED METAL PRDCTS, EXCEPT MACHINERY & TRANSPORT EQPMNT"
3432,PLUMBING FIXTURE FITTINGS AND TRIM,34,"FABRICATED METAL PRDCTS, EXCEPT MACHINERY & TRANSPORT EQPMNT"
3433,"HEATING EQUIPMENT, EXCEPT ELECTRIC",34,"FABRICATED METAL PRDCTS, EXCEPT MACHINERY & TRANSPORT EQPMNT"
3441,FABRICATED STRUCTURAL METAL,34,"FABRICATED METAL PRDCTS, EXCEPT MACHINERY & TRANSPORT EQPMNT"
3442,"METAL DOORS, SASH, AND TRIM",34,"FABRICATED METAL PRDCTS, EXCEPT MACHINERY & TRANSPORT EQPMNT"
3443,FABRICATED PLATE WORK (BOILER SHOP),34,"FABRICATED METAL PRDCTS, EXCEPT MACHINERY & TRANSPORT EQPMNT"
3444,SHEET METALWORK,34,"FABRICATED METAL PRDCTS, EXCEPT MACHINERY & TRANSPORT EQPMNT"
3446,ARCHITECTURAL METALWORK,34,"FABRICATED METAL PRDCTS, EXCEPT MACHINERY & TRANSPORT EQPMNT"
3448,PREFABRICATED METAL BUILDINGS,34,"FABRICATED METAL PRDCTS, EXCEPT MACHINERY & TRANSPORT EQPMNT"
3449,MISCELLANEOUS METALWORK,34,"FABRICATED METAL PRDCTS, EXCEPT MACHINERY & TRANSPORT EQPMNT"
3451,SCREW MACHINE PRODUCTS,34,"FABRICATED METAL PRDCTS, EXCEPT MACHINERY & TRANSPORT EQPMNT"
3452,"BOLTS, NUTS, RIVETS, AND WASHERS",34,"FABRICATED METAL PRDCTS, EXCEPT MACHINERY & TRANSPORT EQPMNT"
3462,IRON AND STEEL FORGINGS,34,"FABRICATED METAL PRDCTS, EXCEPT MACHINERY & TRANSPORT EQPMNT"
3463,NONFERROUS FORGINGS,34,"FABRICATED METAL PRDCTS, EXCEPT MACHINERY & TRANSPORT EQPMNT"
3465,AUTOMOTIVE STAMPINGS,34,"FABRICATED METAL PRDCTS, EXCEPT MACHINERY & TRANSPORT EQPMNT"
3466,CROWNS AND CLOSURES,34,"FABRICATED METAL PRDCTS, EXCEPT MACHINERY & TRANSPORT EQPMNT"
3469,"METAL STAMPINGS, NEC",34,"FABRICATED METAL PRDCTS, EXCEPT MACHINERY & TRANSPORT EQPMNT"
3471,PLATING AND POLISHING,34,"FABRICATED METAL PRDCTS, EXCEPT MACHINERY & TRANSPORT EQPMNT"
3479,METAL COATING AND ALLIED SERVICES,34,"FABRICATED METAL PRDCTS, EXCEPT MACHINERY & TRANSPORT EQPMNT"
3482,SMALL ARMS AMMUNITION,34,"FABRICATED METAL PRDCTS, EXCEPT MACHINERY & TRANSPORT EQPMNT"
3483,"AMMUNITION, EXCEPT FOR SMALL ARMS, NEC",34,"FABRICATED METAL PRDCTS, EXCEPT MACHINERY & TRANSPORT EQPMNT"
3484,SMALL ARMS,34,"FABRICATED METAL PRDCTS, EXCEPT MACHINERY & TRANSPORT EQPMNT"
3489,"ORDNANCE AND ACCESSORIES, NEC",34,"FABRICATED METAL PRDCTS, EXCEPT MACHINERY & TRANSPORT EQPMNT"
3491,INDUSTRIAL VALVES,34,"FABRICATED METAL PRDCTS, EXCEPT MACHINERY & TRANSPORT EQPMNT"
3492,FLUID POWER VALVES AND HOSE FITTINGS,34,"FABRICATED METAL PRDCTS, EXCEPT MACHINERY & TRANSPORT EQPMNT"
3493,"STEEL SPRINGS, EXCEPT WIRE",34,"FABRICATED METAL PRDCTS, EXCEPT MACHINERY & TRANSPORT EQPMNT"
3494,"VALVES AND PIPE FITTINGS, NEC",34,"FABRICATED METAL PRDCTS, EXCEPT MACHINERY & TRANSPORT EQPMNT"
3495,WIRE SPRINGS,34,"FABRICATED METAL PRDCTS, EXCEPT MACHINERY & TRANSPORT EQPMNT"
3496,MISCELLANEOUS FABRICATED WIRE PRODUCTS,34,"FABRICATED METAL PRDCTS, EXCEPT MACHINERY & TRANSPORT EQPMNT"
3497,METAL FOIL AND LEAF,34,"FABRICATED METAL PRDCTS, EXCEPT MACHINERY & TRANSPORT EQPMNT"
3498,FABRICATED PIPE AND FITTINGS,34,"FABRICATED METAL PRDCTS, EXCEPT MACHINERY & TRANSPORT EQPMNT"
3499,"FABRICATED METAL PRODUCTS, NEC",34,"FABRICATED METAL PRDCTS, EXCEPT MACHINERY & TRANSPORT EQPMNT"
3511,TURBINES AND TURBINE GENERATOR SETS,35,INDUSTRIAL AND COMMERCIAL MACHINERY AND COMPUTER EQUIPMENT
3519,"INTERNAL COMBUSTION ENGINES, NEC",35,INDUSTRIAL AND COMMERCIAL MACHINERY AND COMPUTER EQUIPMENT
3523,FARM MACHINERY AND EQUIPMENT,35,INDUSTRIAL AND COMMERCIAL MACHINERY AND COMPUTER EQUIPMENT
3524,LAWN AND GARDEN EQUIPMENT,35,INDUSTRIAL AND COMMERCIAL MACHINERY AND COMPUTER EQUIPMENT
3531,CONSTRUCTION MACHINERY,35,INDUSTRIAL AND COMMERCIAL MACHINERY AND COMPUTER EQUIPMENT
3532,MINING MACHINERY,35,INDUSTRIAL AND COMMERCIAL MACHINERY AND COMPUTER EQUIPMENT
3533,OIL AND GAS FIELD MACHINERY,35,INDUSTRIAL AND COMMERCIAL MACHINERY AND COMPUTER EQUIPMENT
3534,ELEVATORS AND MOVING STAIRWAYS,35,INDUSTRIAL AND COMMERCIAL MACHINERY AND COMPUTER EQUIPMENT
3535,CONVEYORS AND CONVEYING EQUIPMENT,35,INDUSTRIAL AND COMMERCIAL MACHINERY AND COMPUTER EQUIPMENT
3536,"HOISTS, CRANES, AND MONORAILS",35,INDUSTRIAL AND COMMERCIAL MACHINERY AND COMPUTER EQUIPMENT
3537,INDUSTRIAL TRUCKS AND TRACTORS,35,INDUSTRIAL AND COMMERCIAL MACHINERY AND COMPUTER EQUIPMENT
3541,"MACHINE TOOLS, METAL CUTTING TYPE",35,INDUSTRIAL AND COMMERCIAL MACHINERY AND COMPUTER EQUIPMENT
3542,"MACHINE TOOLS, METAL FORMING TYPE",35,INDUSTRIAL AND COMMERCIAL MACHINERY AND COMPUTER EQUIPMENT
3543,INDUSTRIAL PATTERNS,35,INDUSTRIAL AND COMMERCIAL MACHINERY AND COMPUTER EQUIPMENT
3544,"SPECIAL DIES, TOOLS, JIGS, AND FIXTURES",35,INDUSTRIAL AND COMMERCIAL MACHINERY AND COMPUTER EQUIPMENT
3545,MACHINE TOOL ACCESSORIES,35,INDUSTRIAL AND COMMERCIAL MACHINERY AND COMPUTER EQUIPMENT
3546,POWER-DRIVEN HANDTOOLS,35,INDUSTRIAL AND COMMERCIAL MACHINERY AND COMPUTER EQUIPMENT
3547,ROLLING MILL MACHINERY,35,INDUSTRIAL AND COMMERCIAL MACHINERY AND COMPUTER EQUIPMENT
3548,WELDING APPARATUS,35,INDUSTRIAL AND COMMERCIAL MACHINERY AND COMPUTER EQUIPMENT
3549,"METALWORKING MACHINERY, NEC",35,INDUSTRIAL AND COMMERCIAL MACHINERY AND COMPUTER EQUIPMENT
3552,TEXTILE MACHINERY,35,INDUSTRIAL AND COMMERCIAL MACHINERY AND COMPUTER EQUIPMENT
3553,WOODWORKING MACHINERY,35,INDUSTRIAL AND COMMERCIAL MACHINERY AND COMPUTER EQUIPMENT
3554,PAPER INDUSTRIES MACHINERY,35,INDUSTRIAL AND COMMERCIAL MACHINERY AND COMPUTER EQUIPMENT
3555,PRINTING TRADES MACHINERY,35,INDUSTRIAL AND COMMERCIAL MACHINERY AND COMPUTER EQUIPMENT
3556,FOOD PRODUCTS MACHINERY,35,INDUSTRIAL AND COMMERCIAL MACHINERY AND COMPUTER EQUIPMENT
3559,"SPECIAL INDUSTRY MACHINERY, NEC",35,INDUSTRIAL AND COMMERCIAL MACHINERY AND COMPUTER EQUIPMENT
3561,PUMPS AND PUMPING EQUIPMENT,35,INDUSTRIAL AND COMMERCIAL MACHINERY AND COMPUTER EQUIPMENT
3562,BALL AND ROLLER BEARINGS,35,INDUSTRIAL AND COMMERCIAL MACHINERY AND COMPUTER EQUIPMENT
3563,AIR AND GAS COMPRESSORS,35,INDUSTRIAL AND COMMERCIAL MACHINERY AND COMPUTER EQUIPMENT
3564,BLOWERS AND FANS,35,INDUSTRIAL AND COMMERCIAL MACHINERY AND COMPUTER EQUIPMENT
3565,PACKAGING MACHINERY,35,INDUSTRIAL AND COMMERCIAL MACHINERY AND COMPUTER EQUIPMENT
3566,"SPEED CHANGERS, DRIVES, AND GEARS",35,INDUSTRIAL AND COMMERCIAL MACHINERY AND COMPUTER EQUIPMENT
3567,INDUSTRIAL FURNACES AND OVENS,35,INDUSTRIAL AND COMMERCIAL MACHINERY AND COMPUTER EQUIPMENT
3568,"POWER TRANSMISSION EQUIPMENT, NEC",35,INDUSTRIAL AND COMMERCIAL MACHINERY AND COMPUTER EQUIPMENT
3569,"GENERAL INDUSTRIAL MACHINERY,",35,INDUSTRIAL AND COMMERCIAL MACHINERY AND COMPUTER EQUIPMENT
3571,ELECTRONIC COMPUTERS,35,INDUSTRIAL AND COMMERCIAL MACHINERY AND COMPUTER EQUIPMENT
3572,COMPUTER STORAGE DEVICES,35,INDUSTRIAL AND COMMERCIAL MACHINERY AND COMPUTER EQUIPMENT
3575,COMPUTER TERMINALS,35,INDUSTRIAL AND COMMERCIAL MACHINERY AND COMPUTER EQUIPMENT
3577,"COMPUTER PERIPHERAL EQUIPMENT, NEC",35,INDUSTRIAL AND COMMERCIAL MACHINERY AND COMPUTER EQUIPMENT
3578,CALCULATING AND ACCOUNTING EQUIPMENT,35,INDUSTRIAL AND COMMERCIAL MACHINERY AND COMPUTER EQUIPMENT
3579,"OFFICE MACHINES, NEC",35,INDUSTRIAL AND COMMERCIAL MACHINERY AND COMPUTER EQUIPMENT
3581,AUTOMATIC VENDING MACHINES,35,INDUSTRIAL AND COMMERCIAL MACHINERY AND COMPUTER EQUIPMENT
3582,COMMERCIAL LAUNDRY EQUIPMENT,35,INDUSTRIAL AND COMMERCIAL MACHINERY AND COMPUTER EQUIPMENT
3585,REFRIGERATION AND HEATING EQUIPMENT,35,INDUSTRIAL AND COMMERCIAL MACHINERY AND COMPUTER EQUIPMENT
3586,MEASURING AND DISPENSING PUMPS,35,INDUSTRIAL AND COMMERCIAL MACHINERY AND COMPUTER EQUIPMENT
3589,"SERVICE INDUSTRY MACHINERY, NEC",35,INDUSTRIAL AND COMMERCIAL MACHINERY AND COMPUTER EQUIPMENT
3592,"CARBURETORS, PISTONS, RINGS, VALVES",35,INDUSTRIAL AND COMMERCIAL MACHINERY AND COMPUTER EQUIPMENT
3593,FLUID POWER CYLINDERS AND ACTUATORS,35,INDUSTRIAL AND COMMERCIAL MACHINERY AND COMPUTER EQUIPMENT
3594,FLUID POWER PUMPS AND MOTORS,35,INDUSTRIAL AND COMMERCIAL MACHINERY AND COMPUTER EQUIPMENT
3596,"SCALES AND BALANCES, EXCEPT LABORATORY",35,INDUSTRIAL AND COMMERCIAL MACHINERY AND COMPUTER EQUIPMENT
3599,"INDUSTRIAL MACHINERY, NEC",35,INDUSTRIAL AND COMMERCIAL MACHINERY AND COMPUTER EQUIPMENT
3612,"TRANSFORMERS, EXCEPT ELECTRIC",36,"ELECTRONIC, ELCTRCL EQPMNT & CMPNTS, EXCPT COMPUTER EQPMNT"
3613,SWITCHGEAR AND SWITCHBOARD APPARATUS,36,"ELECTRONIC, ELCTRCL EQPMNT & CMPNTS, EXCPT COMPUTER EQPMNT"
3621,MOTORS AND GENERATORS,36,"ELECTRONIC, ELCTRCL EQPMNT & CMPNTS, EXCPT COMPUTER EQPMNT"
3624,CARBON AND GRAPHITE PRODUCTS,36,"ELECTRONIC, ELCTRCL EQPMNT & CMPNTS, EXCPT COMPUTER EQPMNT"
3625,RELAYS AND INDUSTRIAL CONTROLS,36,"ELECTRONIC, ELCTRCL EQPMNT & CMPNTS, EXCPT COMPUTER EQPMNT"
3629,ELECTRICAL INDUSTRIAL APPARATUS,36,"ELECTRONIC, ELCTRCL EQPMNT & CMPNTS, EXCPT COMPUTER EQPMNT"
3631,HOUSEHOLD COOKING EQUIPMENT,36,"ELECTRONIC, ELCTRCL EQPMNT & CMPNTS, EXCPT COMPUTER EQPMNT"
3632,HOUSEHOLD REFRIGERATORS AND FREEZERS,36,"ELECTRONIC, ELCTRCL EQPMNT & CMPNTS, EXCPT COMPUTER EQPMNT"
3633,HOUSEHOLD LAUNDRY EQUIPMENT,36,"ELECTRONIC, ELCTRCL EQPMNT & CMPNTS, EXCPT COMPUTER EQPMNT"
3634,ELECTRIC HOUSEWARES AND FANS,36,"ELECTRONIC, ELCTRCL EQPMNT & CMPNTS, EXCPT COMPUTER EQPMNT"
3635,HOUSEHOLD VACUUM CLEANERS,36,"ELECTRONIC, ELCTRCL EQPMNT & CMPNTS, EXCPT COMPUTER EQPMNT"
3639,"HOUSEHOLD APPLIANCES, NEC",36,"ELECTRONIC, ELCTRCL EQPMNT & CMPNTS, EXCPT COMPUTER EQPMNT"
3641,ELECTRIC LAMPS,36,"ELECTRONIC, ELCTRCL EQPMNT & CMPNTS, EXCPT COMPUTER EQPMNT"
3643,CURRENT-CARRYING WIRING DEVICES,36,"ELECTRONIC, ELCTRCL EQPMNT & CMPNTS, EXCPT COMPUTER EQPMNT"
3644,NONCURRENT-CARRYING WIRING DEVICES,36,"ELECTRONIC, ELCTRCL EQPMNT & CMPNTS, EXCPT COMPUTER EQPMNT"
3645,RESIDENTIAL LIGHTING FIXTURES,36,"ELECTRONIC, ELCTRCL EQPMNT & CMPNTS, EXCPT COMPUTER EQPMNT"
3646,COMMERCIAL LIGHTING FIXTURES,36,"ELECTRONIC, ELCTRCL EQPMNT & CMPNTS, EXCPT COMPUTER EQPMNT"
3647,VEHICULAR LIGHTING EQUIPMENT,36,"ELECTRONIC, ELCTRCL EQPMNT & CMPNTS, EXCPT COMPUTER EQPMNT"
3648,"LIGHTING EQUIPMENT, NEC",36,"ELECTRONIC, ELCTRCL EQPMNT & CMPNTS, EXCPT COMPUTER EQPMNT"
3651,HOUSEHOLD AUDIO AND VIDEO EQUIPMENT,36,"ELECTRONIC, ELCTRCL EQPMNT & CMPNTS, EXCPT COMPUTER EQPMNT"
3652,PRERECORDED RECORDS AND TAPES,36,"ELECTRONIC, ELCTRCL EQPMNT & CMPNTS, EXCPT COMPUTER EQPMNT"
3661,TELEPHONE AND TELEGRAPH APPARATUS,36,"ELECTRONIC, ELCTRCL EQPMNT & CMPNTS, EXCPT COMPUTER EQPMNT"
3663,RADIO AND T.V. COMMUNICATIONS EQUIPMENT,36,"ELECTRONIC, ELCTRCL EQPMNT & CMPNTS, EXCPT COMPUTER EQPMNT"
3669,"COMMUNICATIONS EQUIPMENT, NEC",36,"ELECTRONIC, ELCTRCL EQPMNT & CMPNTS, EXCPT COMPUTER EQPMNT"
3671,ELECTRON TUBES,36,"ELECTRONIC, ELCTRCL EQPMNT & CMPNTS, EXCPT COMPUTER EQPMNT"
3672,PRINTED CIRCUIT BOARDS,36,"ELECTRONIC, ELCTRCL EQPMNT & CMPNTS, EXCPT COMPUTER EQPMNT"
3674,SEMICONDUCTORS AND RELATED DEVICES,36,"ELECTRONIC, ELCTRCL EQPMNT & CMPNTS, EXCPT COMPUTER EQPMNT"
3675,ELECTRONIC CAPACITORS,36,"ELECTRONIC, ELCTRCL EQPMNT & CMPNTS, EXCPT COMPUTER EQPMNT"
3676,ELECTRONIC RESISTORS,36,"ELECTRONIC, ELCTRCL EQPMNT & CMPNTS, EXCPT COMPUTER EQPMNT"
3677,ELECTRONIC COILS AND TRANSFORMERS,36,"ELECTRONIC, ELCTRCL EQPMNT & CMPNTS, EXCPT COMPUTER EQPMNT"
3678,ELECTRONIC CONNECTORS,36,"ELECTRONIC, ELCTRCL EQPMNT & CMPNTS, EXCPT COMPUTER EQPMNT"
3679,"ELECTRONIC COMPONENTS, NEC",36,"ELECTRONIC, ELCTRCL EQPMNT & CMPNTS, EXCPT COMPUTER EQPMNT"
3691,STORAGE BATTERIES,36,"ELECTRONIC, ELCTRCL EQPMNT & CMPNTS, EXCPT COMPUTER EQPMNT"
3692,"PRIMARY BATTERIES, DRY AND WET",36,"ELECTRONIC, ELCTRCL EQPMNT & CMPNTS, EXCPT COMPUTER EQPMNT"
3694,ENGINE ELECTRICAL EQUIPMENT,36,"ELECTRONIC, ELCTRCL EQPMNT & CMPNTS, EXCPT COMPUTER EQPMNT"
3695,MAGNETIC AND OPTICAL RECORDING MEDIA,36,"ELECTRONIC, ELCTRCL EQPMNT & CMPNTS, EXCPT COMPUTER EQPMNT"
3699,"ELECTRICAL EQUIPMENT AND SUPPLIES, NEC",36,"ELECTRONIC, ELCTRCL EQPMNT & CMPNTS, EXCPT COMPUTER EQPMNT"
3711,MOTOR VEHICLES AND CAR BODIES,37,TRANSPORTATION EQUIPMENT
3713,TRUCK AND BUS BODIES,37,TRANSPORTATION EQUIPMENT
3714,MOTOR VEHICLE PARTS AND ACCESSORIES,37,TRANSPORTATION EQUIPMENT
3715,TRUCK TRAILERS,37,TRANSPORTATION EQUIPMENT
3716,MOTOR HOMES,37,TRANSPORTATION EQUIPMENT
3721,AIRCRAFT,37,TRANSPORTATION EQUIPMENT
3724,AIRCRAFT ENGINES AND ENGINE PARTS,37,TRANSPORTATION EQUIPMENT
3728,"AIRCRAFT PARTS AND EQUIPMENT, NEC",37,TRANSPORTATION EQUIPMENT
3731,SHIPBUILDING AND REPAIRING,37,TRANSPORTATION EQUIPMENT
3732,BOATBUILDING AND REPAIRING,37,TRANSPORTATION EQUIPMENT
3743,RAILROAD EQUIPMENT,37,TRANSPORTATION EQUIPMENT
3751,"MOTORCYCLES, BICYCLES, AND PARTS",37,TRANSPORTATION EQUIPMENT
3761,GUIDED MISSILES AND SPACE VEHICLES,37,TRANSPORTATION EQUIPMENT
3764,SPACE PROPULSION UNITS AND PARTS,37,TRANSPORTATION EQUIPMENT
3769,"SPACE VEHICLE EQUIPMENT, NEC",37,TRANSPORTATION EQUIPMENT
3792,TRAVEL TRAILERS AND CAMPERS,37,TRANSPORTATION EQUIPMENT
3795,TANKS AND TANK COMPONENTS,37,TRANSPORTATION EQUIPMENT
3799,"TRANSPORTATION EQUIPMENT, NEC",37,TRANSPORTATION EQUIPMENT
3812,SEARCH AND NAVIGATION EQUIPMENT,38,MESR/ANLYZ/CNTRL INSTRMNTS; PHOTO/MED/OPT GDS; WATCHS/CLOCKS
3821,LABORATORY APPARATUS AND FURNITURE,38,MESR/ANLYZ/CNTRL INSTRMNTS; PHOTO/MED/OPT GDS; WATCHS/CLOCKS
3822,ENVIRONMENTAL CONTROLS,38,MESR/ANLYZ/CNTRL INSTRMNTS; PHOTO/MED/OPT GDS; WATCHS/CLOCKS
3823,PROCESS CONTROL INSTRUMENTS,38,MESR/ANLYZ/CNTRL INSTRMNTS; PHOTO/MED/OPT GDS; WATCHS/CLOCKS
3824,FLUID METERS AND COUNTING DEVICES,38,MESR/ANLYZ/CNTRL INSTRMNTS; PHOTO/MED/OPT GDS; WATCHS/CLOCKS
3825,INSTRUMENTS TO MEASURE ELECTRICITY,38,MESR/ANLYZ/CNTRL INSTRMNTS; PHOTO/MED/OPT GDS; WATCHS/CLOCKS
3826,ANALYTICAL INSTRUMENTS,38,MESR/ANLYZ/CNTRL INSTRMNTS; PHOTO/MED/OPT GDS; WATCHS/CLOCKS
3827,OPTICAL INSTRUMENTS AND LENSES,38,MESR/ANLYZ/CNTRL INSTRMNTS; PHOTO/MED/OPT GDS; WATCHS/CLOCKS
3829,"MEASURING AND CONTROLLING DEVICES, NEC",38,MESR/ANLYZ/CNTRL INSTRMNTS; PHOTO/MED/OPT GDS; WATCHS/CLOCKS
3841,SURGICAL AND MEDICAL INSTRUMENTS,38,MESR/ANLYZ/CNTRL INSTRMNTS; PHOTO/MED/OPT GDS; WATCHS/CLOCKS
3842,SURGICAL APPLIANCES AND SUPPLIES,38,MESR/ANLYZ/CNTRL INSTRMNTS; PHOTO/MED/OPT GDS; WATCHS/CLOCKS
3843,DENTAL EQUIPMENT AND SUPPLIES,38,MESR/ANLYZ/CNTRL INSTRMNTS; PHOTO/MED/OPT GDS; WATCHS/CLOCKS
3844,X-RAY APPARATUS AND TUBES,38,MESR/ANLYZ/CNTRL INSTRMNTS; PHOTO/MED/OPT GDS; WATCHS/CLOCKS
3845,ELECTROMEDICAL EQUIPMENT,38,MESR/ANLYZ/CNTRL INSTRMNTS; PHOTO/MED/OPT GDS; WATCHS/CLOCKS
3851,OPHTHALMIC GOODS,38,MESR/ANLYZ/CNTRL INSTRMNTS; PHOTO/MED/OPT GDS; WATCHS/CLOCKS
3861,PHOTOGRAPHIC EQUIPMENT AND SUPPLIES,38,MESR/ANLYZ/CNTRL INSTRMNTS; PHOTO/MED/OPT GDS; WATCHS/CLOCKS
3873,"WATCHES, CLOCKS, WATCHCASES, AND PARTS",38,MESR/ANLYZ/CNTRL INSTRMNTS; PHOTO/MED/OPT GDS; WATCHS/CLOCKS
3911,"JEWELRY, PRECIOUS METAL",39,MISCELLANEOUS MANUFACTURING INDUSTRIES
3914,SILVERWARE AND PLATED WARE,39,MISCELLANEOUS MANUFACTURING INDUSTRIES
3915,JEWELERS' MATERIALS AND LAPIDARY WORK,39,MISCELLANEOUS MANUFACTURING INDUSTRIES
3931,MUSICAL INSTRUMENTS,39,MISCELLANEOUS MANUFACTURING INDUSTRIES
3942,DOLLS AND STUFFED TOYS,39,MISCELLANEOUS MANUFACTURING INDUSTRIES
3944,"GAMES, TOYS, AND CHILDREN'S VEHICLES",39,MISCELLANEOUS MANUFACTURING INDUSTRIES
3949,"SPORTING AND ATHLETIC GOODS, NEC",39,MISCELLANEOUS MANUFACTURING INDUSTRIES
3951,PENS AND MECHANICAL PENCILS,39,MISCELLANEOUS MANUFACTURING INDUSTRIES
3952,LEAD PENCILS AND ART GOODS,39,MISCELLANEOUS MANUFACTURING INDUSTRIES
3953,MARKING DEVICES,39,MISCELLANEOUS MANUFACTURING INDUSTRIES
3955,CARBON PAPER AND INKED RIBBONS,39,MISCELLANEOUS MANUFACTURING INDUSTRIES
3961,COSTUME JEWELRY,39,MISCELLANEOUS MANUFACTURING INDUSTRIES
3965,"FASTENERS, BUTTONS, NEEDLES, AND PINS",39,MISCELLANEOUS MANUFACTURING INDUSTRIES
3991,BROOMS AND BRUSHES,39,MISCELLANEOUS MANUFACTURING INDUSTRIES
3993,SIGNS AND ADVERTISING SPECIALTIES,39,MISCELLANEOUS MANUFACTURING INDUSTRIES
3995,BURIAL CASKETS,39,MISCELLANEOUS MANUFACTURING INDUSTRIES
3996,"HARD SURFACE FLOOR COVERINGS, NEC",39,MISCELLANEOUS MANUFACTURING INDUSTRIES
3999,"MANUFACTURING INDUSTRIES, NEC",39,MISCELLANEOUS MANUFACTURING INDUSTRIES
4011,"RAILROADS, LINE-HAUL OPERATING",40,RAILROAD TRANSPORTATION
4013,SWITCHING AND TERMINAL SERVICES,40,RAILROAD TRANSPORTATION
4111,LOCAL AND SUBURBAN TRANSIT,41,"LOCAL, SUBURBAN TRANSIT & INTERURBN HGWY PASSENGER TRANSPORT"
4119,"LOCAL PASSENGER TRANSPORTATION, NEC",41,"LOCAL, SUBURBAN TRANSIT & INTERURBN HGWY PASSENGER TRANSPORT"
4121,TAXICABS,41,"LOCAL, SUBURBAN TRANSIT & INTERURBN HGWY PASSENGER TRANSPORT"
4131,INTERCITY AND RURAL BUS TRANSPORTATION,41,"LOCAL, SUBURBAN TRANSIT & INTERURBN HGWY PASSENGER TRANSPORT"
4141,LOCAL BUS CHARTER SERVICE,41,"LOCAL, SUBURBAN TRANSIT & INTERURBN HGWY PASSENGER TRANSPORT"
4142,"BUS CHARTER SERVICE, EXCEPT LOCAL",41,"LOCAL, SUBURBAN TRANSIT & INTERURBN HGWY PASSENGER TRANSPORT"
4151,SCHOOL BUSES,41,"LOCAL, SUBURBAN TRANSIT & INTERURBN HGWY PASSENGER TRANSPORT"
4173,BUS TERMINAL AND SERVICE FACILITIES,41,"LOCAL, SUBURBAN TRANSIT & INTERURBN HGWY PASSENGER TRANSPORT"
4212,"LOCAL TRUCKING, WITHOUT STORAGE",42,MOTOR FREIGHT TRANSPORTATION
4213,"TRUCKING, EXCEPT LOCAL",42,MOTOR FREIGHT TRANSPORTATION
4214,LOCAL TRUCKING WITH STORAGE,42,MOTOR FREIGHT TRANSPORTATION
4215,"COURIER SERVICES, EXCEPT BY AIR",42,MOTOR FREIGHT TRANSPORTATION
4221,FARM PRODUCT WAREHOUSING AND STORAGE,42,MOTOR FREIGHT TRANSPORTATION
4222,REFRIGERATED WAREHOUSING AND STORAGE,42,MOTOR FREIGHT TRANSPORTATION
4225,GENERAL WAREHOUSING AND STORAGE,42,MOTOR FREIGHT TRANSPORTATION
4226,"SPECIAL WAREHOUSING AND STORAGE, NEC",42,MOTOR FREIGHT TRANSPORTATION
4231,TRUCKING TERMINAL FACILITIES,42,MOTOR FREIGHT TRANSPORTATION
4311,U.S. POSTAL SERVICE,43,UNITED STATES POSTAL SERVICE
4412,DEEP SEA FOREIGN TRANSPORTATION OF FREIGHT,44,WATER TRANSPORTATION
4424,DEEP SEA DOMESTIC TRANSPORTATION OF FREIGHT,44,WATER TRANSPORTATION
4432,FREIGHT TRANSPORTATION ON THE GREAT LAKES,44,WATER TRANSPORTATION
4449,WATER TRANSPORTATION OF FREIGHT,44,WATER TRANSPORTATION
4481,"DEEP SEA PASSENGER TRANSPORTATION, EXCEPT FERRY",44,WATER TRANSPORTATION
4482,FERRIES,44,WATER TRANSPORTATION
4489,WATER PASSENGER TRANSPORTATION,44,WATER TRANSPORTATION
4491,MARINE CARGO HANDLING,44,WATER TRANSPORTATION
4492,TOWING AND TUGBOAT SERVICE,44,WATER TRANSPORTATION
4493,MARINAS,44,WATER TRANSPORTATION
4499,"WATER TRANSPORTATION SERVICES, NEC",44,WATER TRANSPORTATION
4512,"AIR TRANSPORTATION, SCHEDULED",45,TRANSPORTATION BY AIR
4513,AIR COURIER SERVICES,45,TRANSPORTATION BY AIR
4522,"AIR TRANSPORTATION, NONSCHEDULED",45,TRANSPORTATION BY AIR
4581,"AIRPORTS, FLYING FIELDS, AND SERVICES",45,TRANSPORTATION BY AIR
4612,CRUDE PETROLEUM PIPELINES,46,"PIPELINES, EXCEPT NATURAL GAS"
4613,REFINED PETROLEUM PIPELINES,46,"PIPELINES, EXCEPT NATURAL GAS"
4619,"PIPELINES, NEC",46,"PIPELINES, EXCEPT NATURAL GAS"
4724,TRAVEL AGENCIES,47,TRANSPORTATION SERVICES
4725,TOUR OPERATORS,47,TRANSPORTATION SERVICES
4729,PASSENGER TRANSPORTATION ARRANGEMENT,47,TRANSPORTATION SERVICES
4731,FREIGHT TRANSPORTATION ARRANGEMENT,47,TRANSPORTATION SERVICES
4741,RENTAL OF RAILROAD CARS,47,TRANSPORTATION SERVICES
4783,PACKING AND CRATING,47,TRANSPORTATION SERVICES
4785,INSPECTION AND FIXED FACILITIES,47,TRANSPORTATION SERVICES
4789,"TRANSPORTATION SERVICES, NEC",47,TRANSPORTATION SERVICES
4812,RADIOTELEPHONE COMMUNICATION,48,COMMUNICATIONS
4813,"TELEPHONE COMMUNICATION, EXCEPT RADIO",48,COMMUNICATIONS
4822,TELEGRAPH AND OTHER COMMUNICATIONS,48,COMMUNICATIONS
4832,RADIO BROADCASTING STATIONS,48,COMMUNICATIONS
4833,TELEVISION BROADCASTING STATIONS,48,COMMUNICATIONS
4841,CABLE AND OTHER PAY TELEVISION SERVICES,48,COMMUNICATIONS
4899,"COMMUNICATION SERVICES, NEC",48,COMMUNICATIONS
4911,ELECTRIC SERVICES,49,"ELECTRIC, GAS AND SANITARY SERVICES"
4922,NATURAL GAS TRANSMISSION,49,"ELECTRIC, GAS AND SANITARY SERVICES"
4923,GAS TRANSMISSION AND DISTRIBUTION,49,"ELECTRIC, GAS AND SANITARY SERVICES"
4924,NATURAL GAS DISTRIBUTION,49,"ELECTRIC, GAS AND SANITARY SERVICES"
4925,GAS PRODUCTION AND/OR DISTRIBUTION,49,"ELECTRIC, GAS AND SANITARY SERVICES"
4931,ELECTRIC AND OTHER SERVICES COMBINED,49,"ELECTRIC, GAS AND SANITARY SERVICES"
4932,GAS AND OTHER SERVICES COMBINED,49,"ELECTRIC, GAS AND SANITARY SERVICES"
4939,"COMBINATION UTILITIES, NEC",49,"ELECTRIC, GAS AND SANITARY SERVICES"
4941,WATER SUPPLY,49,"ELECTRIC, GAS AND SANITARY SERVICES"
4952,SEWERAGE SYSTEMS,49,"ELECTRIC, GAS AND SANITARY SERVICES"
4953,REFUSE SYSTEMS,49,"ELECTRIC, GAS AND SANITARY SERVICES"
4959,"SANITARY SERVICES, NEC",49,"ELECTRIC, GAS AND SANITARY SERVICES"
4961,STEAM AND AIR-CONDITIONING SUPPLY,49,"ELECTRIC, GAS AND SANITARY SERVICES"
4971,IRRIGATION SYSTEMS,49,"ELECTRIC, GAS AND SANITARY SERVICES"
5012,AUTOMOBILES AND OTHER MOTOR VEHICLES,50,WHOLESALE TRADE - DURABLE GOODS
5013,MOTOR VEHICLE SUPPLIES AND NEW PARTS,50,WHOLESALE TRADE - DURABLE GOODS
5014,TIRES AND TUBES,50,WHOLESALE TRADE - DURABLE GOODS
5015,"MOTOR VEHICLE PARTS, USED",50,WHOLESALE TRADE - DURABLE GOODS
5021,FURNITURE,50,WHOLESALE TRADE - DURABLE GOODS
5023,HOMEFURNISHINGS,50,WHOLESALE TRADE - DURABLE GOODS
5031,"LUMBER, PLYWOOD, AND MILLWORK",50,WHOLESALE TRADE - DURABLE GOODS
5032,"BRICK, STONE, AND RELATED MATERIAL",50,WHOLESALE TRADE - DURABLE GOODS
5033,"ROOFING, SIDING, AND INSULATION",50,WHOLESALE TRADE - DURABLE GOODS
5039,"CONSTRUCTION MATERIALS, NEC",50,WHOLESALE TRADE - DURABLE GOODS
5043,PHOTOGRAPHIC EQUIPMENT AND SUPPLIES,50,WHOLESALE TRADE - DURABLE GOODS
5044,OFFICE EQUIPMENT,50,WHOLESALE TRADE - DURABLE GOODS
5045,"COMPUTERS, PERIPHERALS, AND SOFTWARE",50,WHOLESALE TRADE - DURABLE GOODS
5046,"COMMERCIAL EQUIPMENT, NEC",50,WHOLESALE TRADE - DURABLE GOODS
5047,MEDICAL AND HOSPITAL EQUIPMENT,50,WHOLESALE TRADE - DURABLE GOODS
5048,OPHTHALMIC GOODS,50,WHOLESALE TRADE - DURABLE GOODS
5049,"PROFESSIONAL EQUIPMENT, NEC",50,WHOLESALE TRADE - DURABLE GOODS
5051,METALS SERVICE CENTERS AND OFFICES,50,WHOLESALE TRADE - DURABLE GOODS
5052,COAL AND OTHER MINERALS AND ORES,50,WHOLESALE TRADE - DURABLE GOODS
5063,ELECTRICAL APPARATUS AND EQUIPMENT,50,WHOLESALE TRADE - DURABLE GOODS
5064,"ELECTRICAL APPLIANCES, TELEVISION AND RADIO",50,WHOLESALE TRADE - DURABLE GOODS
5065,"ELECTRONIC PARTS AND EQUIPMENT, NEC",50,WHOLESALE TRADE - DURABLE GOODS
5072,HARDWARE,50,WHOLESALE TRADE - DURABLE GOODS
5074,PLUMBING AND HYDRONIC HEATING SUPPLIES,50,WHOLESALE TRADE - DURABLE GOODS
5075,WARM AIR HEATING AND AIR CONDITIONING,50,WHOLESALE TRADE - DURABLE GOODS
5078,REFRIGERATION EQUIPMENT AND SUPPLIES,50,WHOLESALE TRADE - DURABLE GOODS
5082,CONSTRUCTION AND MINING MACHINERY,50,WHOLESALE TRADE - DURABLE GOODS
5083,FARM AND GARDEN MACHINERY,50,WHOLESALE TRADE - DURABLE GOODS
5084,INDUSTRIAL MACHINERY AND EQUIPMENT,50,WHOLESALE TRADE - DURABLE GOODS
5085,INDUSTRIAL SUPPLIES,50,WHOLESALE TRADE - DURABLE GOODS
5087,SERVICE ESTABLISHMENT EQUIPMENT,50,WHOLESALE TRADE - DURABLE GOODS
5088,TRANSPORTATION EQUIPMENT AND SUPPLIES,50,WHOLESALE TRADE - DURABLE GOODS
5091,SPORTING AND RECREATION GOODS,50,WHOLESALE TRADE - DURABLE GOODS
5092,TOYS AND HOBBY GOODS AND SUPPLIES,50,WHOLESALE TRADE - DURABLE GOODS
5093,SCRAP AND WASTE MATERIALS,50,WHOLESALE TRADE - DURABLE GOODS
5094,JEWELRY AND PRECIOUS STONES,50,WHOLESALE TRADE - DURABLE GOODS
5099,"DURABLE GOODS, NEC",50,WHOLESALE TRADE - DURABLE GOODS
5111,PRINTING AND WRITING PAPER,51,WHOLESALE TRADE - NONDURABLE GOODS
5112,STATIONERY AND OFFICE SUPPLIES,51,WHOLESALE TRADE - NONDURABLE GOODS
5113,INDUSTRIAL AND PERSONAL SERVICE PAPER,51,WHOLESALE TRADE - NONDURABLE GOODS
5122,"DRUGS, PROPRIETARIES, AND SUNDRIES",51,WHOLESALE TRADE - NONDURABLE GOODS
5131,PIECE GOODS AND NOTIONS,51,WHOLESALE TRADE - NONDURABLE GOODS
5136,MEN'S AND BOY'S CLOTHING,51,WHOLESALE TRADE - NONDURABLE GOODS
5137,WOMEN'S AND CHILDREN'S CLOTHING,51,WHOLESALE TRADE - NONDURABLE GOODS
5139,FOOTWEAR,51,WHOLESALE TRADE - NONDURABLE GOODS
5141,"GROCERIES, GENERAL LINE",51,WHOLESALE TRADE - NONDURABLE GOODS
5142,PACKAGED FROZEN GOODS,51,WHOLESALE TRADE - NONDURABLE GOODS
5143,"DAIRY PRODUCTS, EXCEPT DRIED OR CANNED",51,WHOLESALE TRADE - NONDURABLE GOODS
5144,POULTRY AND POULTRY PRODUCTS,51,WHOLESALE TRADE - NONDURABLE GOODS
5145,CONFECTIONERY,51,WHOLESALE TRADE - NONDURABLE GOODS
5146,FISH AND SEAFOODS,51,WHOLESALE TRADE - NONDURABLE GOODS
5147,MEATS AND MEAT PRODUCTS,51,WHOLESALE TRADE - NONDURABLE GOODS
5148,FRESH FRUITS AND VEGETABLES,51,WHOLESALE TRADE - NONDURABLE GOODS
5149,"GROCERIES AND RELATED PRODUCTS, NEC",51,WHOLESALE TRADE - NONDURABLE GOODS
5153,GRAIN AND FIELD BEANS,51,WHOLESALE TRADE - NONDURABLE GOODS
5154,LIVESTOCK,51,WHOLESALE TRADE - NONDURABLE GOODS
5159,"FARM-PRODUCT RAW MATERIALS, NEC",51,WHOLESALE TRADE - NONDURABLE GOODS
5162,PLASTICS MATERIALS AND BASIC SHAPES,51,WHOLESALE TRADE - NONDURABLE GOODS
5169,"CHEMICALS AND ALLIED PRODUCTS, NEC",51,WHOLESALE TRADE - NONDURABLE GOODS
5171,PETROLEUM BULK STATIONS AND TERMINALS,51,WHOLESALE TRADE - NONDURABLE GOODS
5172,"PETROLEUM PRODUCTS, NEC",51,WHOLESALE TRADE - NONDURABLE GOODS
5181,BEER AND ALE,51,WHOLESALE TRADE - NONDURABLE GOODS
5182,WINE AND DISTILLED BEVERAGES,51,WHOLESALE TRADE - NONDURABLE GOODS
5191,FARM SUPPLIES,51,WHOLESALE TRADE - NONDURABLE GOODS
5192,"BOOKS, PERIODICALS, AND NEWSPAPERS",51,WHOLESALE TRADE - NONDURABLE GOODS
5193,FLOWERS AND FLORISTS SUPPLIES,51,WHOLESALE TRADE - NONDURABLE GOODS
5194,TOBACCO AND TOBACCO PRODUCTS,51,WHOLESALE TRADE - NONDURABLE GOODS
5198,"PAINTS, VARNISHES, AND SUPPLIES",51,WHOLESALE TRADE - NONDURABLE GOODS
5199,"NONDURABLE GOODS, NEC",51,WHOLESALE TRADE - NONDURABLE GOODS
5211,LUMBER AND OTHER BUILDING MATERIALS,52,"BUILDING MATRIALS, HRDWR, GARDEN SUPPLY & MOBILE HOME DEALRS"
5231,"PAINT, GLASS, AND WALLPAPER STORES",52,"BUILDING MATRIALS, HRDWR, GARDEN SUPPLY & MOBILE HOME DEALRS"
5251,HARDWARE STORES,52,"BUILDING MATRIALS, HRDWR, GARDEN SUPPLY & MOBILE HOME DEALRS"
5261,RETAIL NURSERIES AND GARDEN STORES,52,"BUILDING MATRIALS, HRDWR, GARDEN SUPPLY & MOBILE HOME DEALRS"
5271,MOBILE HOME DEALERS,52,"BUILDING MATRIALS, HRDWR, GARDEN SUPPLY & MOBILE HOME DEALRS"
5311,DEPARTMENT STORES,53,GENERAL MERCHANDISE STORES
5331,VARIETY STORES,53,GENERAL MERCHANDISE STORES
5399,MISCELLANEOUS GENERAL MERCHANDISE,53,GENERAL MERCHANDISE STORES
5411,GROCERY STORES,54,FOOD STORES
5421,MEAT AND FISH MARKETS,54,FOOD STORES
5431,FRUIT AND VEGETABLE MARKETS,54,FOOD STORES
5441,"CANDY, NUT, AND CONFECTIONERY STORES",54,FOOD STORES
5451,DAIRY PRODUCTS STORES,54,FOOD STORES
5461,RETAIL BAKERIES,54,FOOD STORES
5499,MISCELLANEOUS FOOD STORES,54,FOOD STORES
5511,NEW AND USED CAR DEALERS,55,AUTOMOTIVE DEALERS AND GASOLINE SERVICE STATIONS
5521,USED CAR DEALERS,55,AUTOMOTIVE DEALERS AND GASOLINE SERVICE STATIONS
5531,AUTO AND HOME SUPPLY STORES,55,AUTOMOTIVE DEALERS AND GASOLINE SERVICE STATIONS
5541,GASOLINE SERVICE STATIONS,55,AUTOMOTIVE DEALERS AND GASOLINE SERVICE STATIONS
5551,BOAT DEALERS,55,AUTOMOTIVE DEALERS AND GASOLINE SERVICE STATIONS
5561,RECREATIONAL VEHICLE DEALERS,55,AUTOMOTIVE DEALERS AND GASOLINE SERVICE STATIONS
5571,MOTORCYCLE DEALERS,55,AUTOMOTIVE DEALERS AND GASOLINE SERVICE STATIONS
5599,"AUTOMOTIVE DEALERS, NEC",55,AUTOMOTIVE DEALERS AND GASOLINE SERVICE STATIONS
5611,MEN'S AND BOYS' CLOTHING STORES,56,APPAREL AND ACCESSORY STORES
5621,WOMEN'S CLOTHING STORES,56,APPAREL AND ACCESSORY STORES
5632,WOMEN'S ACCESSORY AND SPECIALTY STORES,56,APPAREL AND ACCESSORY STORES
5641,CHILDREN'S AND INFANTS' WEAR STORES,56,APPAREL AND ACCESSORY STORES
5651,FAMILY CLOTHING STORES,56,APPAREL AND ACCESSORY STORES
5661,SHOE STORES,56,APPAREL AND ACCESSORY STORES
5699,MISCELLANEOUS APPAREL AND ACCESSORIES,56,APPAREL AND ACCESSORY STORES
5712,FURNITURE STORES,57,"HOME FURNITURE, FURNISHINGS AND EQUIPMENT STORES"
5713,FLOOR COVERING STORES,57,"HOME FURNITURE, FURNISHINGS AND EQUIPMENT STORES"
5714,DRAPERY AND UPHOLSTERY STORES,57,"HOME FURNITURE, FURNISHINGS AND EQUIPMENT STORES"
5719,MISCELLANEOUS HOMEFURNISHINGS,57,"HOME FURNITURE, FURNISHINGS AND EQUIPMENT STORES"
5722,HOUSEHOLD APPLIANCE STORES,57,"HOME FURNITURE, FURNISHINGS AND EQUIPMENT STORES"
5731,"RADIO, TELEVISION, AND ELECTRONIC STORES",57,"HOME FURNITURE, FURNISHINGS AND EQUIPMENT STORES"
5734,COMPUTER AND SOFTWARE STORES,57,"HOME FURNITURE, FURNISHINGS AND EQUIPMENT STORES"
5735,RECORD AND PRERECORDED TAPE STORES,57,"HOME FURNITURE, FURNISHINGS AND EQUIPMENT STORES"
5736,MUSICAL INSTRUMENT STORES,57,"HOME FURNITURE, FURNISHINGS AND EQUIPMENT STORES"
5812,EATING PLACES,58,EATING AND DRINKING PLACES
5813,DRINKING PLACES,58,EATING AND DRINKING PLACES
5912,DRUG STORES AND PROPRIETARY STORES,59,MISCELLANEOUS RETAIL
5921,LIQUOR STORES,59,MISCELLANEOUS RETAIL
5932,USED MERCHANDISE STORES,59,MISCELLANEOUS RETAIL
5941,SPORTING GOODS AND BICYCLE SHOPS,59,MISCELLANEOUS RETAIL
5942,BOOK STORES,59,MISCELLANEOUS RETAIL
5943,STATIONERY STORES,59,MISCELLANEOUS RETAIL
5944,JEWELRY STORES,59,MISCELLANEOUS RETAIL
5945,"HOBBY, TOY, AND GAME SHOPS",59,MISCELLANEOUS RETAIL
5946,CAMERA AND PHOTOGRAPHIC SUPPLY STORES,59,MISCELLANEOUS RETAIL
5947,"GIFT, NOVELTY, AND SOUVENIR SHOP",59,MISCELLANEOUS RETAIL
5948,LUGGAGE AND LEATHER GOODS STORES,59,MISCELLANEOUS RETAIL
5949,"SEWING, NEEDLEWORK, AND PIECE GOODS",59,MISCELLANEOUS RETAIL
5961,CATALOG AND MAIL-ORDER HOUSES,59,MISCELLANEOUS RETAIL
5962,MERCHANDISING MACHINE OPERATORS,59,MISCELLANEOUS RETAIL
5963,DIRECT SELLING ESTABLISHMENTS,59,MISCELLANEOUS RETAIL
5983,FUEL OIL DEALERS,59,MISCELLANEOUS RETAIL
5984,LIQUEFIED PETROLEUM GAS DEALERS,59,MISCELLANEOUS RETAIL
5989,"FUEL DEALERS, NEC",59,MISCELLANEOUS RETAIL
5992,FLORISTS,59,MISCELLANEOUS RETAIL
5993,TOBACCO STORES AND STANDS,59,MISCELLANEOUS RETAIL
5994,NEWS DEALERS AND NEWSSTANDS,59,MISCELLANEOUS RETAIL
5995,OPTICAL GOODS STORES,59,MISCELLANEOUS RETAIL
5999,"MISCELLANEOUS RETAIL STORES, NEC",59,MISCELLANEOUS RETAIL
6011,FEDERAL RESERVE BANKS,60,DEPOSITORY INSTITUTIONS
6019,"CENTRAL RESERVE DEPOSITORY, NEC",60,DEPOSITORY INSTITUTIONS
6021,NATIONAL COMMERCIAL BANKS,60,DEPOSITORY INSTITUTIONS
6022,STATE COMMERCIAL BANKS,60,DEPOSITORY INSTITUTIONS
6029,"COMMERCIAL BANKS, NEC",60,DEPOSITORY INSTITUTIONS
6035,FEDERAL SAVINGS INSTITUTIONS,60,DEPOSITORY INSTITUTIONS
6036,"SAVINGS INSTITUTIONS, EXCEPT FEDERAL",60,DEPOSITORY INSTITUTIONS
6061,FEDERAL CREDIT UNIONS,60,DEPOSITORY INSTITUTIONS
6062,STATE CREDIT UNIONS,60,DEPOSITORY INSTITUTIONS
6081,FOREIGN BANK AND BRANCHES AND AGENCIES,60,DEPOSITORY INSTITUTIONS
6082,FOREIGN TRADE AND INTERNATIONAL BANKS,60,DEPOSITORY INSTITUTIONS
6091,NONDEPOSIT TRUST FACILITIES,60,DEPOSITORY INSTITUTIONS
6099,FUNCTIONS RELATED TO DEPOSITORY BANKING,60,DEPOSITORY INSTITUTIONS
6111,FEDERAL AND FEDERALLY SPONSORED CREDIT,61,NONDEPOSITORY CREDIT INSTITUTIONS
6141,PERSONAL CREDIT INSTITUTIONS,61,NONDEPOSITORY CREDIT INSTITUTIONS
6153,SHORT-TERM BUSINESS CREDIT,61,NONDEPOSITORY CREDIT INSTITUTIONS
6159,MISCELLANEOUS BUSINESS CREDIT,61,NONDEPOSITORY CREDIT INSTITUTIONS
6162,MORTGAGE BANKERS AND CORRESPONDENTS,61,NONDEPOSITORY CREDIT INSTITUTIONS
6163,LOAN BROKERS,61,NONDEPOSITORY CREDIT INSTITUTIONS
6211,SECURITY BROKERS AND DEALERS,62,"SECURITY & COMMODITY BROKERS, DEALERS, EXCHANGES & SERVICES"
6221,"COMMODITY CONTRACTS BROKERS, DEALERS",62,"SECURITY & COMMODITY BROKERS, DEALERS, EXCHANGES & SERVICES"
6231,SECURITY AND COMMODITY EXCHANGES,62,"SECURITY & COMMODITY BROKERS, DEALERS, EXCHANGES & SERVICES"
6282,INVESTMENT ADVICE,62,"SECURITY & COMMODITY BROKERS, DEALERS, EXCHANGES & SERVICES"
6289,SECURITY AND COMMODITY SERVICE,62,"SECURITY & COMMODITY BROKERS, DEALERS, EXCHANGES & SERVICES"
6311,LIFE INSURANCE,63,INSURANCE CARRIERS
6321,ACCIDENT AND HEALTH INSURANCE,63,INSURANCE CARRIERS
6324,HOSPITAL AND MEDICAL SERVICE PLANS,63,INSURANCE CARRIERS
6331,"FIRE, MARINE, AND CASUALTY INSURANCE",63,INSURANCE CARRIERS
6351,SURETY INSURANCE,63,INSURANCE CARRIERS
6361,TITLE INSURANCE,63,INSURANCE CARRIERS
6371,"PENSION, HEALTH, AND WELFARE FUNDS",63,INSURANCE CARRIERS
6399,"INSURANCE CARRIERS, NEC",63,INSURANCE CARRIERS
6411,"INSURANCE AGENTS, BROKERS, AND SERVICE",64,"INSURANCE AGENTS, BROKERS AND SERVICE"
6512,NONRESIDENTIAL BUILDING OPERATORS,65,REAL ESTATE
6513,APARTMENT BUILDING OPERATORS,65,REAL ESTATE
6514,"DWELLING OPERATORS, EXCEPT APARTMENTS",65,REAL ESTATE
6515,MOBILE HOME SITE OPERATORS,65,REAL ESTATE
6517,RAILROAD PROPERTY LESSORS,65,REAL ESTATE
6519,"REAL PROPERTY LESSORS, NEC",65,REAL ESTATE
6531,REAL ESTATE AGENTS AND MANAGERS,65,REAL ESTATE
6541,TITLE ABSTRACT OFFICES,65,REAL ESTATE
6552,"SUBDIVIDERS AND DEVELOPERS, NEC",65,REAL ESTATE
6553,CEMETERY SUBDIVIDERS AND DEVELOPERS,65,REAL ESTATE
6712,BANK HOLDING COMPANIES,67,HOLDING AND OTHER INVESTMENT OFFICES
6719,"HOLDING COMPANIES, NEC",67,HOLDING AND OTHER INVESTMENT OFFICES
6722,"MANAGEMENT INVESTMENT, OPEN-ENDED",67,HOLDING AND OTHER INVESTMENT OFFICES
6726,"INVESTMENT OFFICES, NEC",67,HOLDING AND OTHER INVESTMENT OFFICES
6732,"TRUSTS: EDUCATIONAL, RELIGIOUS, ETC.",67,HOLDING AND OTHER INVESTMENT OFFICES
6733,"TRUSTS, NEC",67,HOLDING AND OTHER INVESTMENT OFFICES
6792,OIL ROYALTY TRADERS,67,HOLDING AND OTHER INVESTMENT OFFICES
6794,PATENT OWNERS AND LESSORS,67,HOLDING AND OTHER INVESTMENT OFFICES
6798,REAL ESTATE INVESTMENT TRUSTS,67,HOLDING AND OTHER INVESTMENT OFFICES
6799,"INVESTORS, NEC",67,HOLDING AND OTHER INVESTMENT OFFICES
7011,HOTELS AND MOTELS,70,"HOTELS, ROOMING HOUSES, CAMPS, AND OTHER LODGING PLACES"
7021,ROOMING AND BOARDING HOUSES,70,"HOTELS, ROOMING HOUSES, CAMPS, AND OTHER LODGING PLACES"
7032,SPORTING AND RECREATIONAL CAMPS,70,"HOTELS, ROOMING HOUSES, CAMPS, AND OTHER LODGING PLACES"
7033,TRAILER PARKS AND CAMPSITES,70,"HOTELS, ROOMING HOUSES, CAMPS, AND OTHER LODGING PLACES"
7041,MEMBERSHIP-BASIS ORGANIZATION HOTELS,70,"HOTELS, ROOMING HOUSES, CAMPS, AND OTHER LODGING PLACES"
7211,"POWER LAUNDRIES, FAMILY AND COMMERCIAL",72,PERSONAL SERVICES
7212,GARMENT PRESSING AND CLEANERS' AGENTS,72,PERSONAL SERVICES
7213,LINEN SUPPLY,72,PERSONAL SERVICES
7215,COIN-OPERATED LAUNDRIES AND CLEANING,72,PERSONAL SERVICES
7216,"DRYCLEANING PLANTS, EXCEPT RUGS",72,PERSONAL SERVICES
7217,CARPET AND UPHOLSTERY CLEANING,72,PERSONAL SERVICES
7218,INDUSTRIAL LAUNDERERS,72,PERSONAL SERVICES
7219,"LAUNDRY AND GARMENT SERVICES, NEC",72,PERSONAL SERVICES
7221,"PHOTOGRAPHIC STUDIOS, PORTRAIT",72,PERSONAL SERVICES
7231,BEAUTY SHOPS,72,PERSONAL SERVICES
7241,BARBER SHOPS,72,PERSONAL SERVICES
7251,SHOE REPAIR AND SHOESHINE PARLORS,72,PERSONAL SERVICES
7261,FUNERAL SERVICE AND CREMATORIES,72,PERSONAL SERVICES
7291,TAX RETURN PREPARATION SERVICES,72,PERSONAL SERVICES
7299,MISCELLANEOUS PERSONAL SERVICES,72,PERSONAL SERVICES
7311,ADVERTISING AGENCIES,73,BUSINESS SERVICES
7312,OUTDOOR ADVERTISING SERVICES,73,BUSINESS SERVICES
7313,"RADIO, TELEVISION, PUBLISHER REPRESENTATIVES",73,BUSINESS SERVICES
7319,"ADVERTISING, NEC",73,BUSINESS SERVICES
7322,ADJUSTMENT AND COLLECTION SERVICES,73,BUSINESS SERVICES
7323,CREDIT REPORTING SERVICES,73,BUSINESS SERVICES
7331,DIRECT MAIL ADVERTISING SERVICES,73,BUSINESS SERVICES
7334,PHOTOCOPYING AND DUPLICATING SERVICES,73,BUSINESS SERVICES
7335,COMMERCIAL PHOTOGRAPHY,73,BUSINESS SERVICES
7336,COMMERCIAL ART AND GRAPHIC DESIGN,73,BUSINESS SERVICES
7338,SECRETARIAL AND COURT REPORTING,73,BUSINESS SERVICES
7342,DISINFECTING AND PEST CONTROL SERVICES,73,BUSINESS SERVICES
7349,"BUILDING MAINTENANCE SERVICES, NEC",73,BUSINESS SERVICES
7352,MEDICAL EQUIPMENT RENTAL,73,BUSINESS SERVICES
7353,HEAVY CONSTRUCTION EQUIPMENT RENTAL,73,BUSINESS SERVICES
7359,"EQUIPMENT RENTAL AND LEASING, NEC",73,BUSINESS SERVICES
7361,EMPLOYMENT AGENCIES,73,BUSINESS SERVICES
7363,HELP SUPPLY SERVICES,73,BUSINESS SERVICES
7371,CUSTOM COMPUTER PROGRAMMING SERVICES,73,BUSINESS SERVICES
7372,PREPACKAGED SOFTWARE,73,BUSINESS SERVICES
7373,COMPUTER INTEGRATED SYSTEMS DESIGN,73,BUSINESS SERVICES
7374,DATA PROCESSING AND PREPARATION,73,BUSINESS SERVICES
7375,INFORMATION RETRIEVAL SERVICES,73,BUSINESS SERVICES
7376,COMPUTER FACILITIES MANAGEMENT,73,BUSINESS SERVICES
7377,COMPUTER RENTAL AND LEASING,73,BUSINESS SERVICES
7378,COMPUTER MAINTENANCE AND REPAIR,73,BUSINESS SERVICES
7379,"COMPUTER RELATED SERVICES, NEC",73,BUSINESS SERVICES
7381,DETECTIVE AND ARMORED CAR SERVICES,73,BUSINESS SERVICES
7382,SECURITY SYSTEMS SERVICES,73,BUSINESS SERVICES
7383,NEWS SYNDICATES,73,BUSINESS SERVICES
7384,PHOTOFINISH LABORATORIES,73,BUSINESS SERVICES
7389,"BUSINESS SERVICES, NEC",73,BUSINESS SERVICES
7513,"TRUCK RENTAL AND LEASING, WITHOUT DRIVERS",75,"AUTOMOTIVE REPAIR, SERVICES AND PARKING"
7514,PASSENGER CAR RENTAL,75,"AUTOMOTIVE REPAIR, SERVICES AND PARKING"
7515,PASSENGER CAR LEASING,75,"AUTOMOTIVE REPAIR, SERVICES AND PARKING"
7519,UTILITY TRAILER RENTAL,75,"AUTOMOTIVE REPAIR, SERVICES AND PARKING"
7521,AUTOMOBILE PARKING,75,"AUTOMOTIVE REPAIR, SERVICES AND PARKING"
7532,TOP AND BODY REPAIR AND PAINT SHOPS,75,"AUTOMOTIVE REPAIR, SERVICES AND PARKING"
7533,AUTO EXHAUST SYSTEM REPAIR SHOPS,75,"AUTOMOTIVE REPAIR, SERVICES AND PARKING"
7534,TIRE RETREADING AND REPAIR SHOPS,75,"AUTOMOTIVE REPAIR, SERVICES AND PARKING"
7536,AUTOMOTIVE GLASS REPLACEMENT SHOPS,75,"AUTOMOTIVE REPAIR, SERVICES AND PARKING"
7537,AUTOMOTIVE TRANSMISSION REPAIR SHOPS,75,"AUTOMOTIVE REPAIR, SERVICES AND PARKING"
7538,GENERAL AUTOMOTIVE REPAIR SHOPS,75,"AUTOMOTIVE REPAIR, SERVICES AND PARKING"
7539,"AUTOMOTIVE REPAIR SHOPS, NEC",75,"AUTOMOTIVE REPAIR, SERVICES AND PARKING"
7542,CARWASHES,75,"AUTOMOTIVE REPAIR, SERVICES AND PARKING"
7549,"AUTOMOTIVE SERVICES, NEC",75,"AUTOMOTIVE REPAIR, SERVICES AND PARKING"
7622,RADIO AND TELEVISION REPAIR,76,MISCELLANEOUS REPAIR SERVICES
7623,REFRIGERATION SERVICE AND REPAIR,76,MISCELLANEOUS REPAIR SERVICES
7629,ELECTRICAL REPAIR SHOPS,76,MISCELLANEOUS REPAIR SERVICES
7631,"WATCH, CLOCK, AND JEWELRY REPAIR",76,MISCELLANEOUS REPAIR SERVICES
7641,REUPHOLSTERY AND FURNITURE REPAIR,76,MISCELLANEOUS REPAIR SERVICES
7692,WELDING REPAIR,76,MISCELLANEOUS REPAIR SERVICES
7694,ARMATURE REWINDING SHOPS,76,MISCELLANEOUS REPAIR SERVICES
7699,"REPAIR SERVICES, NEC",76,MISCELLANEOUS REPAIR SERVICES
7812,MOTION PICTURE AND VIDEO PRODUCTION,78,MOTION PICTURES
7819,SERVICES ALLIED TO MOTION PICTURES,78,MOTION PICTURES
7822,MOTION PICTURE AND TAPE DISTRIBUTION,78,MOTION PICTURES
7829,MOTION PICTURE DISTRIBUTION SERVICES,78,MOTION PICTURES
7832,"MOTION PICTURE THEATERS, EXCEPT DRIVE-IN",78,MOTION PICTURES
7833,DRIVE-IN MOTION PICTURE THEATERS,78,MOTION PICTURES
7841,VIDEO TAPE RENTAL,78,MOTION PICTURES
7911,"DANCE STUDIOS, SCHOOLS, AND HALLS",79,AMUSEMENT AND RECREATION SERVICES
7922,THEATRICAL PRODUCERS AND SERVICES,79,AMUSEMENT AND RECREATION SERVICES
7929,ENTERTAINERS AND ENTERTAINMENT GROUPS,79,AMUSEMENT AND RECREATION SERVICES
7933,BOWLING CENTERS,79,AMUSEMENT AND RECREATION SERVICES
7941,"SPORTS CLUBS, MANAGERS, AND PROMOTERS",79,AMUSEMENT AND RECREATION SERVICES
7948,"RACING, INCLUDING TRACK OPERATION",79,AMUSEMENT AND RECREATION SERVICES
7991,PHYSICAL FITNESS FACILITIES,79,AMUSEMENT AND RECREATION SERVICES
7992,PUBLIC GOLF COURSES,79,AMUSEMENT AND RECREATION SERVICES
7993,COIN-OPERATED AMUSEMENT DEVICES,79,AMUSEMENT AND RECREATION SERVICES
7996,AMUSEMENT PARKS,79,AMUSEMENT AND RECREATION SERVICES
7997,MEMBERSHIP SPORTS AND RECREATION CLUBS,79,AMUSEMENT AND RECREATION SERVICES
7999,"AMUSEMENT AND RECREATION, NEC",79,AMUSEMENT AND RECREATION SERVICES
8011,OFFICES AND CLINICS OF MEDICAL DOCTORS,80,HEALTH SERVICES
8021,OFFICES AND CLINICS OF DENTISTS,80,HEALTH SERVICES
8031,OFFICES AND CLINICS OF OSTEOPATHIC PHYSICIANS,80,HEALTH SERVICES
8041,OFFICES AND CLINICS OF CHIROPRACTORS,80,HEALTH SERVICES
8042,OFFICES AND CLINICS OF OPTOMETRISTS,80,HEALTH SERVICES
8043,OFFICES AND CLINICS OF PODIATRISTS,80,HEALTH SERVICES
8049,OFFICES OF HEALTH PRACTITIONER,80,HEALTH SERVICES
8051,SKILLED NURSING CARE FACILITIES,80,HEALTH SERVICES
8052,INTERMEDIATE CARE FACILITIES,80,HEALTH SERVICES
8059,"NURSING AND PERSONAL CARE, NEC",80,HEALTH SERVICES
8062,GENERAL MEDICAL AND SURGICAL HOSPITALS,80,HEALTH SERVICES
8063,PSYCHIATRIC HOSPITALS,80,HEALTH SERVICES
8069,"SPECIALTY HOSPITALS, EXCEPT PSYCHIATRIC",80,HEALTH SERVICES
8071,MEDICAL LABORATORIES,80,HEALTH SERVICES
8072,DENTAL LABORATORIES,80,HEALTH SERVICES
8082,HOME HEALTH CARE SERVICES,80,HEALTH SERVICES
8092,KIDNEY DIALYSIS CENTERS,80,HEALTH SERVICES
8093,"SPECIALTY OUTPATIENT CLINICS, NEC",80,HEALTH SERVICES
8099,"HEALTH AND ALLIED SERVICES, NEC",80,HEALTH SERVICES
8111,LEGAL SERVICES,81,LEGAL SERVICES
8211,ELEMENTARY AND SECONDARY SCHOOLS,82,EDUCATIONAL SERVICES
8221,COLLEGES AND UNIVERSITIES,82,EDUCATIONAL SERVICES
8222,JUNIOR COLLEGES,82,EDUCATIONAL SERVICES
8231,LIBRARIES,82,EDUCATIONAL SERVICES
8243,DATA PROCESSING SCHOOLS,82,EDUCATIONAL SERVICES
8244,BUSINESS AND SECRETARIAL SCHOOLS,82,EDUCATIONAL SERVICES
8249,"VOCATIONAL SCHOOLS, NEC",82,EDUCATIONAL SERVICES
8299,SCHOOLS AND EDUCATIONAL SERVICES,82,EDUCATIONAL SERVICES
8322,INDIVIDUAL AND FAMILY SERVICES,83,SOCIAL SERVICES
8331,JOB TRAINING AND RELATED SERVICES,83,SOCIAL SERVICES
8351,CHILD DAY CARE SERVICES,83,SOCIAL SERVICES
8361,RESIDENTIAL CARE,83,SOCIAL SERVICES
8399,"SOCIAL SERVICES, NEC",83,SOCIAL SERVICES
8412,MUSEUMS AND ART GALLERIES,84,"MUSEUMS, ART GALLERIES AND BOTANICAL AND ZOOLOGICAL GARDENS"
8422,BOTANICAL AND ZOOLOGICAL GARDENS,84,"MUSEUMS, ART GALLERIES AND BOTANICAL AND ZOOLOGICAL GARDENS"
8611,BUSINESS ASSOCIATIONS,86,MEMBERSHIP ORGANIZATIONS
8621,PROFESSIONAL ORGANIZATIONS,86,MEMBERSHIP ORGANIZATIONS
8631,LABOR ORGANIZATIONS,86,MEMBERSHIP ORGANIZATIONS
8641,CIVIC AND SOCIAL ASSOCIATIONS,86,MEMBERSHIP ORGANIZATIONS
8651,POLITICAL ORGANIZATIONS,86,MEMBERSHIP ORGANIZATIONS
8661,RELIGIOUS ORGANIZATIONS,86,MEMBERSHIP ORGANIZATIONS
8699,"MEMBERSHIP ORGANIZATIONS, NEC",86,MEMBERSHIP ORGANIZATIONS
8711,ENGINEERING SERVICES,87,"ENGINEERING, ACCOUNTING, RESEARCH, MANAGEMENT & RELATED SVCS"
8712,ARCHITECTURAL SERVICES,87,"ENGINEERING, ACCOUNTING, RESEARCH, MANAGEMENT & RELATED SVCS"
8713,SURVEYING SERVICES,87,"ENGINEERING, ACCOUNTING, RESEARCH, MANAGEMENT & RELATED SVCS"
8721,"ACCOUNTING, AUDITING, AND BOOKKEEPING",87,"ENGINEERING, ACCOUNTING, RESEARCH, MANAGEMENT & RELATED SVCS"
8731,COMMERCIAL PHYSICAL RESEARCH,87,"ENGINEERING, ACCOUNTING, RESEARCH, MANAGEMENT & RELATED SVCS"
8732,COMMERCIAL NONPHYSICAL RESEARCH,87,"ENGINEERING, ACCOUNTING, RESEARCH, MANAGEMENT & RELATED SVCS"
8733,NONCOMMERCIAL RESEARCH ORGANIZATIONS,87,"ENGINEERING, ACCOUNTING, RESEARCH, MANAGEMENT & RELATED SVCS"
8734,TESTING LABORATORIES,87,"ENGINEERING, ACCOUNTING, RESEARCH, MANAGEMENT & RELATED SVCS"
8741,MANAGEMENT SERVICES,87,"ENGINEERING, ACCOUNTING, RESEARCH, MANAGEMENT & RELATED SVCS"
8742,MANAGEMENT CONSULTING SERVICES,87,"ENGINEERING, ACCOUNTING, RESEARCH, MANAGEMENT & RELATED SVCS"
8743,PUBLIC RELATIONS SERVICES,87,"ENGINEERING, ACCOUNTING, RESEARCH, MANAGEMENT & RELATED SVCS"
8744,FACILITIES SUPPORT SERVICES,87,"ENGINEERING, ACCOUNTING, RESEARCH, MANAGEMENT & RELATED SVCS"
8748,"BUSINESS CONSULTING, NEC",87,"ENGINEERING, ACCOUNTING, RESEARCH, MANAGEMENT & RELATED SVCS"
8999,"SERVICES, NEC",89,"SERVICES, NOT ELSEWHERE CLASSIFIED"
9111,EXECUTIVE OFFICES,91,"EXECUTIVE, LEGISLATIVE & GENERAL GOVERNMENT, EXCEPT FINANCE"
9121,LEGISLATIVE BODIES,91,"EXECUTIVE, LEGISLATIVE & GENERAL GOVERNMENT, EXCEPT FINANCE"
9131,EXECUTIVE AND LEGISLATIVE COMBINED,91,"EXECUTIVE, LEGISLATIVE & GENERAL GOVERNMENT, EXCEPT FINANCE"
9199,"GENERAL GOVERNMENT, NEC",91,"EXECUTIVE, LEGISLATIVE & GENERAL GOVERNMENT, EXCEPT FINANCE"
9211,COURTS,92,"JUSTICE, PUBLIC ORDER AND SAFETY"
9221,POLICE PROTECTION,92,"JUSTICE, PUBLIC ORDER AND SAFETY"
9222,LEGAL COUNSEL AND PROSECUTION,92,"JUSTICE, PUBLIC ORDER AND SAFETY"
9223,CORRECTIONAL INSTITUTIONS,92,"JUSTICE, PUBLIC ORDER AND SAFETY"
9224,FIRE PROTECTION,92,"JUSTICE, PUBLIC ORDER AND SAFETY"
9229,"PUBLIC ORDER AND SAFETY, NEC",92,"JUSTICE, PUBLIC ORDER AND SAFETY"
9311,"FINANCE, TAXATION, AND MONETARY POLICY",93,"PUBLIC FINANCE, TAXATION AND MONETARY POLICY"
9411,ADMINISTRATION OF EDUCATIONAL PROGRAMS,94,ADMINISTRATION OF HUMAN RESOURCE PROGRAMS
9431,ADMINISTRATION OF PUBLIC HEALTH PROGRAMS,94,ADMINISTRATION OF HUMAN RESOURCE PROGRAMS
9441,ADMINISTRATION OF SOCIAL AND MANPOWER PROGRAMS,94,ADMINISTRATION OF HUMAN RESOURCE PROGRAMS
9451,ADMINISTRATION OF VETERANS' AFFAIRS,94,ADMINISTRATION OF HUMAN RESOURCE PROGRAMS
9511,"AIR, WATER, AND SOLID WASTE MANAGEMENT",95,ADMINISTRATION OF ENVIRONMENTAL QUALITY AND HOUSING PROGRAMS
9512,"LAND, MINERAL, AND WILDLIFE CONSERVATION",95,ADMINISTRATION OF ENVIRONMENTAL QUALITY AND HOUSING PROGRAMS
9531,HOUSING PROGRAMS,95,ADMINISTRATION OF ENVIRONMENTAL QUALITY AND HOUSING PROGRAMS
9532,URBAN AND COMMUNITY DEVELOPMENT,95,ADMINISTRATION OF ENVIRONMENTAL QUALITY AND HOUSING PROGRAMS
9611,ADMINISTRATION OF GENERAL ECONOMIC PROGRAMS,96,ADMINISTRATION OF ECONOMIC PROGRAMS
9621,"REGULATION, ADMINISTRATION OF TRANSPORTATION",96,ADMINISTRATION OF ECONOMIC PROGRAMS
9631,"REGULATION, ADMINISTRATION OF UTILITIES",96,ADMINISTRATION OF ECONOMIC PROGRAMS
9641,REGULATION OF AGRICULTURAL MARKETING,96,ADMINISTRATION OF ECONOMIC PROGRAMS
9651,"REGULATION, MISCELLANEOUS COMMERCIAL SECTORS",96,ADMINISTRATION OF ECONOMIC PROGRAMS
9661,SPACE RESEARCH AND TECHNOLOGY,96,ADMINISTRATION OF ECONOMIC PROGRAMS
9711,NATIONAL SECURITY,97,NATIONAL SECURITY AND INTERNATIONAL AFFAIRS
9721,INTERNATIONAL AFFAIRS,97,NATIONAL SECURITY AND INTERNATIONAL AFFAIRS
9999,NONCLASSIFIABLE ESTABLISHMENTS,99,NONCLASSIFIABLE ESTABLISHMENTS
```

## [​](#full-list-of-latest_sec-codes)Full list of `latest_sec` codes

All **430** codes returned when `type=latest_sec`, each annotated with its SEC review office.

View all 430 latest\_sec codes (click to expand)

```
code,name,office
0100,AGRICULTURAL PRODUCTION-CROPS,Industrial Applications and Services
0200,AGRICULTURAL PROD-LIVESTOCK & ANIMAL SPECIALTIES,Industrial Applications and Services
0700,AGRICULTURAL SERVICES,Industrial Applications and Services
0800,FORESTRY,Industrial Applications and Services
0900,"FISHING, HUNTING AND TRAPPING",Industrial Applications and Services
1000,METAL MINING,Office of Energy & Transportation
1040,GOLD AND SILVER ORES,Office of Energy & Transportation
1090,MISCELLANEOUS METAL ORES,Office of Energy & Transportation
1220,BITUMINOUS COAL & LIGNITE MINING,Office of Energy & Transportation
1221,BITUMINOUS COAL & LIGNITE SURFACE MINING,Office of Energy & Transportation
1311,CRUDE PETROLEUM & NATURAL GAS,Office of Energy & Transportation
1381,DRILLING OIL & GAS WELLS,Office of Energy & Transportation
1382,OIL & GAS FIELD EXPLORATION SERVICES,Office of Energy & Transportation
1389,"OIL & GAS FIELD SERVICES, NEC",Office of Energy & Transportation
1400,MINING & QUARRYING OF NONMETALLIC MINERALS (NO FUELS),Office of Energy & Transportation
1520,GENERAL BLDG CONTRACTORS - RESIDENTIAL BLDGS,Office of Real Estate & Construction
1531,OPERATIVE BUILDERS,Office of Real Estate & Construction
1540,GENERAL BLDG CONTRACTORS - NONRESIDENTIAL BLDGS,Office of Real Estate & Construction
1600,HEAVY CONSTRUCTION OTHER THAN BLDG CONST - CONTRACTORS,Office of Real Estate & Construction
1623,"WATER, SEWER, PIPELINE, COMM & POWER LINE CONSTRUCTION",Office of Real Estate & Construction
1700,CONSTRUCTION - SPECIAL TRADE CONTRACTORS,Office of Real Estate & Construction
1731,ELECTRICAL WORK,Office of Real Estate & Construction
2000,FOOD AND KINDRED PRODUCTS,Office of Manufacturing
2011,MEAT PACKING PLANTS,Office of Manufacturing
2013,SAUSAGES & OTHER PREPARED MEAT PRODUCTS,Office of Manufacturing
2015,POULTRY SLAUGHTERING AND PROCESSING,Office of Manufacturing
2020,DAIRY PRODUCTS,Office of Manufacturing
2024,ICE CREAM & FROZEN DESSERTS,Office of Manufacturing
2030,"CANNED, FROZEN & PRESERVD FRUIT, VEG & FOOD SPECIALTIES",Office of Manufacturing
2033,"CANNED, FRUITS, VEG, PRESERVES, JAMS & JELLIES",Office of Manufacturing
2040,GRAIN MILL PRODUCTS,Office of Manufacturing
2050,BAKERY PRODUCTS,Office of Manufacturing
2052,COOKIES & CRACKERS,Office of Manufacturing
2060,SUGAR & CONFECTIONERY PRODUCTS,Office of Manufacturing
2070,FATS & OILS,Office of Manufacturing
2080,BEVERAGES,Office of Manufacturing
2082,MALT BEVERAGES,Office of Manufacturing
2086,BOTTLED & CANNED SOFT DRINKS & CARBONATED WATERS,Office of Manufacturing
2090,MISCELLANEOUS FOOD PREPARATIONS & KINDRED PRODUCTS,Office of Manufacturing
2092,PREPARED FRESH OR FROZEN FISH & SEAFOODS,Office of Manufacturing
2100,TOBACCO PRODUCTS,Office of Manufacturing
2111,CIGARETTES,Office of Manufacturing
2200,TEXTILE MILL PRODUCTS,Office of Manufacturing
2211,"BROADWOVEN FABRIC MILLS, COTTON",Office of Manufacturing
2221,"BROADWOVEN FABRIC MILLS, MAN MADE FIBER & SILK",Office of Manufacturing
2250,KNITTING MILLS,Office of Manufacturing
2253,KNIT OUTERWEAR MILLS,Office of Manufacturing
2273,CARPETS & RUGS,Office of Manufacturing
2300,APPAREL & OTHER FINISHD PRODS OF FABRICS & SIMILAR MATL,Office of Manufacturing
2320,"MEN'S & BOYS' FURNISHGS, WORK CLOTHG, & ALLIED GARMENTS",Office of Manufacturing
2330,"WOMEN'S, MISSES', AND JUNIORS OUTERWEAR",Office of Manufacturing
2340,"WOMEN'S, MISSES', CHILDREN'S & INFANTS' UNDERGARMENTS",Office of Manufacturing
2390,MISCELLANEOUS FABRICATED TEXTILE PRODUCTS,Office of Manufacturing
2400,LUMBER & WOOD PRODUCTS (NO FURNITURE),Office of Manufacturing
2421,"SAWMILLS & PLANTING MILLS, GENERAL",Office of Manufacturing
2430,"MILLWOOD, VENEER, PLYWOOD, & STRUCTURAL WOOD MEMBERS",Office of Manufacturing
2451,MOBILE HOMES,Office of Manufacturing
2452,PREFABRICATED WOOD BLDGS & COMPONENTS,Office of Manufacturing
2510,HOUSEHOLD FURNITURE,Office of Manufacturing
2511,"WOOD HOUSEHOLD FURNITURE, (NO UPHOLSTERED)",Office of Manufacturing
2520,OFFICE FURNITURE,Office of Manufacturing
2522,OFFICE FURNITURE (NO WOOD),Office of Manufacturing
2531,PUBLIC BLDG & RELATED FURNITURE,Office of Manufacturing
2540,"PARTITIONS, SHELVG, LOCKERS, & OFFICE & STORE FIXTURES",Office of Manufacturing
2590,MISCELLANEOUS FURNITURE & FIXTURES,Office of Manufacturing
2600,PAPERS & ALLIED PRODUCTS,Office of Manufacturing
2611,PULP MILLS,Office of Manufacturing
2621,PAPER MILLS,Office of Manufacturing
2631,PAPERBOARD MILLS,Office of Manufacturing
2650,PAPERBOARD CONTAINERS & BOXES,Office of Manufacturing
2670,CONVERTED PAPER & PAPERBOARD PRODS (NO CONTANERS/BOXES),Office of Manufacturing
2673,"PLASTICS, FOIL & COATED PAPER BAGS",Office of Manufacturing
2711,NEWSPAPERS: PUBLISHING OR PUBLISHING & PRINTING,Office of Manufacturing
2721,PERIODICALS: PUBLISHING OR PUBLISHING & PRINTING,Office of Manufacturing
2731,BOOKS: PUBLISHING OR PUBLISHING & PRINTING,Office of Manufacturing
2732,BOOK PRINTING,Office of Manufacturing
2741,MISCELLANEOUS PUBLISHING,Office of Manufacturing
2750,COMMERCIAL PRINTING,Office of Manufacturing
2761,MANIFOLD BUSINESS FORMS,Office of Manufacturing
2771,GREETING CARDS,Office of Manufacturing
2780,"BLANKBOOKS, LOOSELEAF BINDERS & BOOKBINDG & RELATD WORK",Office of Manufacturing
2790,SERVICE INDUSTRIES FOR THE PRINTING TRADE,Office of Manufacturing
2800,CHEMICALS & ALLIED PRODUCTS,Industrial Applications and Services
2810,INDUSTRIAL INORGANIC CHEMICALS,Industrial Applications and Services
2820,"PLASTIC MATERIAL, SYNTH RESIN/RUBBER, CELLULOS (NO GLASS)",Industrial Applications and Services
2821,"PLASTIC MATERIALS, SYNTH RESINS & NONVULCAN ELASTOMERS",Industrial Applications and Services
2833,MEDICINAL CHEMICALS & BOTANICAL PRODUCTS,Office of Life Sciences
2834,PHARMACEUTICAL PREPARATIONS,Office of Life Sciences
2835,IN VITRO & IN VIVO DIAGNOSTIC SUBSTANCES,Office of Life Sciences
2836,"BIOLOGICAL PRODUCTS, (NO DISGNOSTIC SUBSTANCES)",Office of Life Sciences
2840,"SOAP, DETERGENTS, CLEANG PREPARATIONS, PERFUMES, COSMETICS",Industrial Applications and Services
2842,"SPECIALTY CLEANING, POLISHING AND SANITATION PREPARATIONS",Industrial Applications and Services
2844,"PERFUMES, COSMETICS & OTHER TOILET PREPARATIONS",Industrial Applications and Services
2851,"PAINTS, VARNISHES, LACQUERS, ENAMELS & ALLIED PRODS",Industrial Applications and Services
2860,INDUSTRIAL ORGANIC CHEMICALS,Industrial Applications and Services
2870,AGRICULTURAL CHEMICALS,Industrial Applications and Services
2890,MISCELLANEOUS CHEMICAL PRODUCTS,Industrial Applications and Services
2891,ADHESIVES & SEALANTS,Industrial Applications and Services
2911,PETROLEUM REFINING,Office of Energy & Transportation
2950,ASPHALT PAVING & ROOFING MATERIALS,Office of Energy & Transportation
2990,MISCELLANEOUS PRODUCTS OF PETROLEUM & COAL,Office of Energy & Transportation
3011,TIRES & INNER TUBES,Office of Manufacturing
3021,RUBBER & PLASTICS FOOTWEAR,Office of Manufacturing
3050,"GASKETS, PACKG & SEALG DEVICES & RUBBER & PLASTICS HOSE",Office of Manufacturing
3060,"FABRICATED RUBBER PRODUCTS, NEC",Office of Manufacturing
3080,MISCELLANEOUS PLASTICS PRODUCTS,Industrial Applications and Services
3081,UNSUPPORTED PLASTICS FILM & SHEET,Industrial Applications and Services
3086,PLASTICS FOAM PRODUCTS,Industrial Applications and Services
3089,"PLASTICS PRODUCTS, NEC",Industrial Applications and Services
3100,LEATHER & LEATHER PRODUCTS,Office of Manufacturing
3140,"FOOTWEAR, (NO RUBBER)",Office of Manufacturing
3211,FLAT GLASS,Office of Manufacturing
3220,"GLASS & GLASSWARE, PRESSED OR BLOWN",Office of Manufacturing
3221,GLASS CONTAINERS,Office of Manufacturing
3231,"GLASS PRODUCTS, MADE OF PURCHASED GLASS",Office of Manufacturing
3241,"CEMENT, HYDRAULIC",Office of Manufacturing
3250,STRUCTURAL CLAY PRODUCTS,Office of Manufacturing
3260,POTTERY & RELATED PRODUCTS,Office of Manufacturing
3270,"CONCRETE, GYPSUM & PLASTER PRODUCTS",Office of Manufacturing
3272,"CONCRETE PRODUCTS, EXCEPT BLOCK & BRICK",Office of Manufacturing
3281,CUT STONE & STONE PRODUCTS,Office of Manufacturing
3290,"ABRASIVE, ASBESTOS & MISC NONMETALLIC MINERAL PRODS",Office of Manufacturing
3310,"STEEL WORKS, BLAST FURNACES & ROLLING & FINISHING MILLS",Office of Manufacturing
3312,"STEEL WORKS, BLAST FURNACES & ROLLING MILLS (COKE OVENS)",Office of Manufacturing
3317,STEEL PIPE & TUBES,Office of Manufacturing
3320,IRON & STEEL FOUNDRIES,Office of Manufacturing
3330,PRIMARY SMELTING & REFINING OF NONFERROUS METALS,Office of Manufacturing
3334,PRIMARY PRODUCTION OF ALUMINUM,Office of Manufacturing
3341,SECONDARY SMELTING & REFINING OF NONFERROUS METALS,Office of Manufacturing
3350,ROLLING DRAWING & EXTRUDING OF NONFERROUS METALS,Office of Manufacturing
3357,DRAWING & INSULATING OF NONFERROUS WIRE,Office of Manufacturing
3360,NONFERROUS FOUNDRIES (CASTINGS),Office of Manufacturing
3390,MISCELLANEOUS PRIMARY METAL PRODUCTS,Office of Manufacturing
3411,METAL CANS,Office of Manufacturing
3412,"METAL SHIPPING BARRELS, DRUMS, KEGS & PAILS",Office of Manufacturing
3420,"CUTLERY, HANDTOOLS & GENERAL HARDWARE",Office of Manufacturing
3430,"HEATING EQUIP, EXCEPT ELEC & WARM AIR; & PLUMBING FIXTURES",Office of Manufacturing
3433,"HEATING EQUIPMENT, EXCEPT ELECTRIC & WARM AIR FURNACES",Office of Manufacturing
3440,FABRICATED STRUCTURAL METAL PRODUCTS,Office of Manufacturing
3442,"METAL DOORS, SASH, FRAMES, MOLDINGS & TRIM",Office of Manufacturing
3443,FABRICATED PLATE WORK (BOILER SHOPS),Office of Manufacturing
3444,SHEET METAL WORK,Office of Manufacturing
3448,PREFABRICATED METAL BUILDINGS & COMPONENTS,Office of Manufacturing
3451,SCREW MACHINE PRODUCTS,Office of Manufacturing
3452,"BOLTS, NUTS, SCREWS, RIVETS & WASHERS",Office of Manufacturing
3460,METAL FORGINGS & STAMPINGS,Office of Manufacturing
3470,"COATING, ENGRAVING & ALLIED SERVICES",Office of Manufacturing
3480,"ORDNANCE & ACCESSORIES, (NO VEHICLES/GUIDED MISSILES)",Office of Manufacturing
3490,MISCELLANEOUS FABRICATED METAL PRODUCTS,Office of Manufacturing
3510,ENGINES & TURBINES,Office of Technology
3523,FARM MACHINERY & EQUIPMENT,Office of Technology
3524,LAWN & GARDEN TRACTORS & HOME LAWN & GARDENS EQUIP,Office of Technology
3531,CONSTRUCTION MACHINERY & EQUIP,Office of Technology
3532,MINING MACHINERY & EQUIP (NO OIL & GAS FIELD MACH & EQUIP),Office of Technology
3533,OIL & GAS FIELD MACHINERY & EQUIPMENT,Office of Energy & Transportation
3537,"INDUSTRIAL TRUCKS, TRACTORS, TRAILORS & STACKERS",Office of Technology
3540,METALWORKG MACHINERY & EQUIPMENT,Office of Technology
3541,"MACHINE TOOLS, METAL CUTTING TYPES",Office of Technology
3550,SPECIAL INDUSTRY MACHINERY (NO METALWORKING MACHINERY),Office of Technology
3555,PRINTING TRADES MACHINERY & EQUIPMENT,Office of Technology
3559,"SPECIAL INDUSTRY MACHINERY, NEC",Office of Technology
3560,GENERAL INDUSTRIAL MACHINERY & EQUIPMENT,Office of Technology
3561,PUMPS & PUMPING EQUIPMENT,Office of Technology
3562,BALL & ROLLER BEARINGS,Office of Technology
3567,INDUSTRIAL PROCESS FURNACES & OVENS,Office of Technology
3569,"GENERAL INDUSTRIAL MACHINERY & EQUIPMENT, NEC",Office of Technology
3570,COMPUTER & OFFICE EQUIPMENT,Office of Technology
3571,ELECTRONIC COMPUTERS,Office of Technology
3572,COMPUTER STORAGE DEVICES,Office of Technology
3575,COMPUTER TERMINALS,Office of Technology
3576,COMPUTER COMMUNICATIONS EQUIPMENT,Office of Technology
3577,"COMPUTER PERIPHERAL EQUIPMENT, NEC",Office of Technology
3579,"OFFICE MACHINES, NEC",Office of Technology
3580,REFRIGERATION & SERVICE INDUSTRY MACHINERY,Office of Technology
3585,AIR-COND & WARM AIR HEATG EQUIP & COMM & INDL REFRIG EQUIP,Office of Technology
3590,MISC INDUSTRIAL & COMMERCIAL MACHINERY & EQUIPMENT,Office of Technology
3612,"POWER, DISTRIBUTION & SPECIALTY TRANSFORMERS",Office of Manufacturing
3613,SWITCHGEAR & SWITCHBOARD APPARATUS,Office of Manufacturing
3620,ELECTRICAL INDUSTRIAL APPARATUS,Office of Manufacturing
3621,MOTORS & GENERATORS,Office of Manufacturing
3630,HOUSEHOLD APPLIANCES,Office of Manufacturing
3634,ELECTRIC HOUSEWARES & FANS,Office of Manufacturing
3640,ELECTRIC LIGHTING & WIRING EQUIPMENT,Office of Manufacturing
3651,HOUSEHOLD AUDIO & VIDEO EQUIPMENT,Office of Manufacturing
3652,PHONOGRAPH RECORDS & PRERECORDED AUDIO TAPES & DISKS,Office of Manufacturing
3661,TELEPHONE & TELEGRAPH APPARATUS,Office of Manufacturing
3663,RADIO & TV BROADCASTING & COMMUNICATIONS EQUIPMENT,Office of Manufacturing
3669,"COMMUNICATIONS EQUIPMENT, NEC",Office of Manufacturing
3670,ELECTRONIC COMPONENTS & ACCESSORIES,Office of Manufacturing
3672,PRINTED CIRCUIT BOARDS,Office of Manufacturing
3674,SEMICONDUCTORS & RELATED DEVICES,Office of Manufacturing
3677,"ELECTRONIC COILS, TRANSFORMERS & OTHER INDUCTORS",Office of Manufacturing
3678,ELECTRONIC CONNECTORS,Office of Manufacturing
3679,"ELECTRONIC COMPONENTS, NEC",Office of Manufacturing
3690,"MISCELLANEOUS ELECTRICAL MACHINERY, EQUIPMENT & SUPPLIES",Office of Manufacturing
3695,MAGNETIC & OPTICAL RECORDING MEDIA,Office of Manufacturing
3711,MOTOR VEHICLES & PASSENGER CAR BODIES,Office of Manufacturing
3713,TRUCK & BUS BODIES,Office of Manufacturing
3714,MOTOR VEHICLE PARTS & ACCESSORIES,Office of Manufacturing
3715,TRUCK TRAILERS,Office of Manufacturing
3716,MOTOR HOMES,Office of Manufacturing
3720,AIRCRAFT & PARTS,Office of Manufacturing
3721,AIRCRAFT,Office of Manufacturing
3724,AIRCRAFT ENGINES & ENGINE PARTS,Office of Manufacturing
3728,"AIRCRAFT PARTS & AUXILIARY EQUIPMENT, NEC",Office of Manufacturing
3730,SHIP & BOAT BUILDING & REPAIRING,Office of Manufacturing
3743,RAILROAD EQUIPMENT,Office of Manufacturing
3751,"MOTORCYCLES, BICYCLES & PARTS",Office of Manufacturing
3760,GUIDED MISSILES & SPACE VEHICLES & PARTS,Office of Manufacturing
3790,MISCELLANEOUS TRANSPORTATION EQUIPMENT,Office of Manufacturing
3812,"SEARCH, DETECTION, NAVAGATION, GUIDANCE, AERONAUTICAL SYS",Office of Manufacturing
3821,LABORATORY APPARATUS & FURNITURE,Industrial Applications and Services
3824,TOTALIZING FLUID METERS & COUNTING DEVICES,Industrial Applications and Services
3825,INSTRUMENTS FOR MEAS & TESTING OF ELECTRICITY & ELEC SIGNALS,Industrial Applications and Services
3826,LABORATORY ANALYTICAL INSTRUMENTS,Industrial Applications and Services
3827,OPTICAL INSTRUMENTS & LENSES,Industrial Applications and Services
3829,"MEASURING & CONTROLLING DEVICES, NEC",Industrial Applications and Services
3841,SURGICAL & MEDICAL INSTRUMENTS & APPARATUS,Industrial Applications and Services
3842,"ORTHOPEDIC, PROSTHETIC & SURGICAL APPLIANCES & SUPPLIES",Industrial Applications and Services
3843,DENTAL EQUIPMENT & SUPPLIES,Industrial Applications and Services
3844,X-RAY APPARATUS & TUBES & RELATED IRRADIATION APPARATUS,Industrial Applications and Services
3845,ELECTROMEDICAL & ELECTROTHERAPEUTIC APPARATUS,Industrial Applications and Services
3851,OPHTHALMIC GOODS,Industrial Applications and Services
3861,PHOTOGRAPHIC EQUIPMENT & SUPPLIES,Industrial Applications and Services
3873,"WATCHES, CLOCKS, CLOCKWORK OPERATED DEVICES/PARTS",Industrial Applications and Services
3910,"JEWELRY, SILVERWARE & PLATED WARE",Office of Manufacturing
3911,"JEWELRY, PRECIOUS METAL",Office of Manufacturing
3931,MUSICAL INSTRUMENTS,Office of Manufacturing
3942,DOLLS & STUFFED TOYS,Office of Manufacturing
3944,"GAMES, TOYS & CHILDREN'S VEHICLES (NO DOLLS & BICYCLES)",Office of Manufacturing
3949,"SPORTING & ATHLETIC GOODS, NEC",Office of Manufacturing
3950,"PENS, PENCILS & OTHER ARTISTS' MATERIALS",Office of Manufacturing
3960,COSTUME JEWELRY & NOVELTIES,Office of Manufacturing
3990,MISCELLANEOUS MANUFACTURING INDUSTRIES,Office of Manufacturing
4011,"RAILROADS, LINE-HAUL OPERATING",Office of Energy & Transportation
4013,RAILROAD SWITCHING & TERMINAL ESTABLISHMENTS,Office of Energy & Transportation
4210,TRUCKING & COURIER SERVICES (NO AIR),Office of Energy & Transportation
4213,TRUCKING (NO LOCAL),Office of Energy & Transportation
4220,PUBLIC WAREHOUSING & STORAGE,Office of Energy & Transportation
4400,WATER TRANSPORTATION,Office of Energy & Transportation
4412,DEEP SEA FOREIGN TRANSPORTATION OF FREIGHT,Office of Energy & Transportation
4512,"AIR TRANSPORTATION, SCHEDULED",Office of Energy & Transportation
4513,AIR COURIER SERVICES,Office of Energy & Transportation
4522,"AIR TRANSPORTATION, NONSCHEDULED",Office of Energy & Transportation
4581,"AIRPORTS, FLYING FIELDS & AIRPORT TERMINAL SERVICES",Office of Energy & Transportation
4610,PIPE LINES (NO NATURAL GAS),Office of Energy & Transportation
4700,TRANSPORTATION SERVICES,Office of Energy & Transportation
4731,ARRANGEMENT OF TRANSPORTATION OF FREIGHT & CARGO,Office of Energy & Transportation
4812,RADIOTELEPHONE COMMUNICATIONS,Office of Technology
4813,TELEPHONE COMMUNICATIONS (NO RADIOTELEPHONE),Office of Technology
4822,TELEGRAPH & OTHER MESSAGE COMMUNICATIONS,Office of Technology
4832,RADIO BROADCASTING STATIONS,Office of Technology
4833,TELEVISION BROADCASTING STATIONS,Office of Technology
4841,CABLE & OTHER PAY TELEVISION SERVICES,Office of Technology
4899,"COMMUNICATIONS SERVICES, NEC",Office of Technology
4900,"ELECTRIC, GAS & SANITARY SERVICES",Office of Energy & Transportation
4911,ELECTRIC SERVICES,Office of Energy & Transportation
4922,NATURAL GAS TRANSMISSION,Office of Energy & Transportation
4923,NATURAL GAS TRANSMISISON & DISTRIBUTION,Office of Energy & Transportation
4924,NATURAL GAS DISTRIBUTION,Office of Energy & Transportation
4931,ELECTRIC & OTHER SERVICES COMBINED,Office of Energy & Transportation
4932,GAS & OTHER SERVICES COMBINED,Office of Energy & Transportation
4941,WATER SUPPLY,Office of Energy & Transportation
4950,SANITARY SERVICES,Office of Energy & Transportation
4953,REFUSE SYSTEMS,Office of Energy & Transportation
4955,HAZARDOUS WASTE MANAGEMENT,Office of Energy & Transportation
4961,STEAM & AIR-CONDITIONING SUPPLY,Office of Energy & Transportation
4991,COGENERATION SERVICES & SMALL POWER PRODUCERS,Office of Energy & Transportation
5000,WHOLESALE-DURABLE GOODS,Office of Trade & Services
5010,WHOLESALE-MOTOR VEHICLES & MOTOR VEHICLE PARTS & SUPPLIES,Office of Trade & Services
5013,WHOLESALE-MOTOR VEHICLE SUPPLIES & NEW PARTS,Office of Trade & Services
5020,WHOLESALE-FURNITURE & HOME FURNISHINGS,Office of Trade & Services
5030,WHOLESALE-LUMBER & OTHER CONSTRUCTION MATERIALS,Office of Trade & Services
5031,"WHOLESALE-LUMBER, PLYWOOD, MILLWORK & WOOD PANELS",Office of Trade & Services
5040,WHOLESALE-PROFESSIONAL & COMMERCIAL EQUIPMENT & SUPPLIES,Office of Trade & Services
5045,WHOLESALE-COMPUTERS & PERIPHERAL EQUIPMENT & SOFTWARE,Office of Trade & Services
5047,"WHOLESALE-MEDICAL, DENTAL & HOSPITAL EQUIPMENT & SUPPLIES",Office of Trade & Services
5050,WHOLESALE-METALS & MINERALS (NO PETROLEUM),Office of Trade & Services
5051,WHOLESALE-METALS SERVICE CENTERS & OFFICES,Office of Trade & Services
5064,"WHOLESALE-ELECTRICAL APPLIANCES, TV & RADIO SETS",Office of Trade & Services
5065,"WHOLESALE-ELECTRONIC PARTS & EQUIPMENT, NEC",Office of Trade & Services
5072,WHOLESALE-HARDWARE,Office of Trade & Services
5080,"WHOLESALE-MACHINERY, EQUIPMENT & SUPPLIES",Office of Trade & Services
5084,WHOLESALE-INDUSTRIAL MACHINERY & EQUIPMENT,Office of Trade & Services
5090,WHOLESALE-MISC DURABLE GOODS,Office of Trade & Services
5094,"WHOLESALE-JEWELRY, WATCHES, PRECIOUS STONES & METALS",Office of Trade & Services
5099,"WHOLESALE-DURABLE GOODS, NEC",Office of Trade & Services
5110,WHOLESALE-PAPER & PAPER PRODUCTS,Office of Trade & Services
5122,"WHOLESALE-DRUGS, PROPRIETARIES & DRUGGISTS' SUNDRIES",Office of Trade & Services
5130,"WHOLESALE-APPAREL, PIECE GOODS & NOTIONS",Office of Trade & Services
5140,WHOLESALE-GROCERIES & RELATED PRODUCTS,Office of Trade & Services
5141,"WHOLESALE-GROCERIES, GENERAL LINE",Office of Trade & Services
5150,WHOLESALE-FARM PRODUCT RAW MATERIALS,Office of Trade & Services
5160,WHOLESALE-CHEMICALS & ALLIED PRODUCTS,Office of Trade & Services
5171,WHOLESALE-PETROLEUM BULK STATIONS & TERMINALS,Office of Trade & Services
5180,"WHOLESALE-BEER, WINE & DISTILLED ALCOHOLIC BEVERAGES",Office of Trade & Services
5190,WHOLESALE-MISCELLANEOUS NONDURABLE GOODS,Office of Trade & Services
5200,"RETAIL-BUILDING MATERIALS, HARDWARE, GARDEN SUPPLY",Office of Trade & Services
5211,RETAIL-LUMBER & OTHER BUILDING MATERIALS DEALERS,Office of Trade & Services
5271,RETAIL-MOBILE HOME DEALERS,Office of Trade & Services
5311,RETAIL-DEPARTMENT STORES,Office of Trade & Services
5331,RETAIL-VARIETY STORES,Office of Trade & Services
5399,RETAIL-MISC GENERAL MERCHANDISE STORES,Office of Trade & Services
5400,RETAIL-FOOD STORES,Office of Trade & Services
5411,RETAIL-GROCERY STORES,Office of Trade & Services
5412,RETAIL-CONVENIENCE STORES,Office of Trade & Services
5500,RETAIL-AUTO DEALERS & GASOLINE STATIONS,Office of Trade & Services
5531,RETAIL-AUTO & HOME SUPPLY STORES,Office of Trade & Services
5600,RETAIL-APPAREL & ACCESSORY STORES,Office of Trade & Services
5621,RETAIL-WOMEN'S CLOTHING STORES,Office of Trade & Services
5651,RETAIL-FAMILY CLOTHING STORES,Office of Trade & Services
5661,RETAIL-SHOE STORES,Office of Trade & Services
5700,"RETAIL-HOME FURNITURE, FURNISHINGS & EQUIPMENT STORES",Office of Trade & Services
5712,RETAIL-FURNITURE STORES,Office of Trade & Services
5731,"RETAIL-RADIO, TV & CONSUMER ELECTRONICS STORES",Office of Trade & Services
5734,RETAIL-COMPUTER & COMPUTER SOFTWARE STORES,Office of Trade & Services
5735,RETAIL-RECORD & PRERECORDED TAPE STORES,Office of Trade & Services
5810,RETAIL-EATING & DRINKING PLACES,Office of Trade & Services
5812,RETAIL-EATING PLACES,Office of Trade & Services
5900,RETAIL-MISCELLANEOUS RETAIL,Office of Trade & Services
5912,RETAIL-DRUG STORES AND PROPRIETARY STORES,Office of Trade & Services
5940,RETAIL-MISCELLANEOUS SHOPPING GOODS STORES,Office of Trade & Services
5944,RETAIL-JEWELRY STORES,Office of Trade & Services
5945,"RETAIL-HOBBY, TOY & GAME SHOPS",Office of Trade & Services
5960,RETAIL-NONSTORE RETAILERS,Office of Trade & Services
5961,RETAIL-CATALOG & MAIL-ORDER HOUSES,Office of Trade & Services
5990,"RETAIL-RETAIL STORES, NEC",Office of Trade & Services
6021,NATIONAL COMMERCIAL BANKS,Office of Finance
6022,STATE COMMERCIAL BANKS,Office of Finance
6029,"COMMERCIAL BANKS, NEC",Office of Finance
6035,"SAVINGS INSTITUTION, FEDERALLY CHARTERED",Office of Finance
6036,"SAVINGS INSTITUTIONS, NOT FEDERALLY CHARTERED",Office of Finance
6099,"FUNCTIONS RELATED TO DEPOSITORY BANKING, NEC",Office of Finance
6111,FEDERAL & FEDERALLY-SPONSORED CREDIT AGENCIES,Office of Finance
6141,PERSONAL CREDIT INSTITUTIONS,Office of Finance
6153,SHORT-TERM BUSINESS CREDIT INSTITUTIONS,Office of Finance
6159,MISCELLANEOUS BUSINESS CREDIT INSTITUTION,Office of Finance
6162,MORTGAGE BANKERS & LOAN CORRESPONDENTS,Office of Finance
6163,LOAN BROKERS,Office of Finance
6172,FINANCE LESSORS,Office of Finance
6189,ASSET-BACKED SECURITIES,Office of Structured Finance
6199,FINANCE SERVICES,Office of Finance or Office of Crypto Assets
6211,"SECURITY BROKERS, DEALERS & FLOTATION COMPANIES",Office of Finance or Office of Crypto Assets
6221,COMMODITY CONTRACTS BROKERS & DEALERS,Office of Crypto Assets
6282,INVESTMENT ADVICE,Office of Finance
6311,LIFE INSURANCE,Office of Finance
6321,ACCIDENT & HEALTH INSURANCE,Office of Finance
6324,HOSPITAL & MEDICAL SERVICE PLANS,Office of Finance
6331,"FIRE, MARINE & CASUALTY INSURANCE",Office of Finance
6351,SURETY INSURANCE,Office of Finance
6361,TITLE INSURANCE,Office of Finance
6399,"INSURANCE CARRIERS, NEC",Office of Finance
6411,"INSURANCE AGENTS, BROKERS & SERVICE",Office of Finance
6500,REAL ESTATE,Office of Real Estate & Construction
6510,REAL ESTATE OPERATORS (NO DEVELOPERS) & LESSORS,Office of Real Estate & Construction
6512,OPERATORS OF NONRESIDENTIAL BUILDINGS,Office of Real Estate & Construction
6513,OPERATORS OF APARTMENT BUILDINGS,Office of Real Estate & Construction
6519,"LESSORS OF REAL PROPERTY, NEC",Office of Real Estate & Construction
6531,REAL ESTATE AGENTS & MANAGERS (FOR OTHERS),Office of Real Estate & Construction
6532,REAL ESTATE DEALERS (FOR THEIR OWN ACCOUNT),Office of Real Estate & Construction
6552,LAND SUBDIVIDERS & DEVELOPERS (NO CEMETERIES),Office of Real Estate & Construction
6770,BLANK CHECKS,Office of Real Estate & Construction
6792,OIL ROYALTY TRADERS,Office of Energy & Transportation
6794,PATENT OWNERS & LESSORS,Office of Real Estate & Construction
6795,MINERAL ROYALTY TRADERS,Office of Energy & Transportation
6798,REAL ESTATE INVESTMENT TRUSTS,Office of Real Estate & Construction
6799,"INVESTORS, NEC",Office of Real Estate & Construction
7000,"HOTELS, ROOMING HOUSES, CAMPS & OTHER LODGING PLACES",Office of Real Estate & Construction
7011,HOTELS & MOTELS,Office of Real Estate & Construction
7200,SERVICES-PERSONAL SERVICES,Office of Trade & Services
7310,SERVICES-ADVERTISING,Office of Trade & Services
7311,SERVICES-ADVERTISING AGENCIES,Office of Trade & Services
7320,"SERVICES-CONSUMER CREDIT REPORTING, COLLECTION AGENCIES",Office of Trade & Services
7331,SERVICES-DIRECT MAIL ADVERTISING SERVICES,Office of Trade & Services
7340,SERVICES-TO DWELLINGS & OTHER BUILDINGS,Office of Trade & Services
7350,SERVICES-MISCELLANEOUS EQUIPMENT RENTAL & LEASING,Office of Trade & Services
7359,"SERVICES-EQUIPMENT RENTAL & LEASING, NEC",Office of Trade & Services
7361,SERVICES-EMPLOYMENT AGENCIES,Office of Trade & Services
7363,SERVICES-HELP SUPPLY SERVICES,Office of Trade & Services
7370,"SERVICES-COMPUTER PROGRAMMING, DATA PROCESSING, ETC.",Office of Technology
7371,SERVICES-COMPUTER PROGRAMMING SERVICES,Office of Technology
7372,SERVICES-PREPACKAGED SOFTWARE,Office of Technology
7373,SERVICES-COMPUTER INTEGRATED SYSTEMS DESIGN,Office of Technology
7374,SERVICES-COMPUTER PROCESSING & DATA PREPARATION,Office of Technology
7377,SERVICES-COMPUTER RENTAL & LEASING,Office of Trade & Services
7380,SERVICES-MISCELLANEOUS BUSINESS SERVICES,Office of Trade & Services
7381,"SERVICES-DETECTIVE, GUARD & ARMORED CAR SERVICES",Office of Trade & Services
7384,SERVICES-PHOTOFINISHING LABORATORIES,Office of Trade & Services
7385,SERVICES-TELEPHONE INTERCONNECT SYSTEMS,Office of Trade & Services
7389,"SERVICES-BUSINESS SERVICES, NEC",Office of Trade & Services or Office of Energy & Transportation
7500,"SERVICES-AUTOMOTIVE REPAIR, SERVICES & PARKING",Office of Trade & Services
7510,SERVICES-AUTO RENTAL & LEASING (NO DRIVERS),Office of Trade & Services
7600,SERVICES-MISCELLANEOUS REPAIR SERVICES,Office of Trade & Services
7812,SERVICES-MOTION PICTURE & VIDEO TAPE PRODUCTION,Office of Trade & Services
7819,SERVICES-ALLIED TO MOTION PICTURE PRODUCTION,Office of Trade & Services
7822,SERVICES-MOTION PICTURE & VIDEO TAPE DISTRIBUTION,Office of Trade & Services
7829,SERVICES-ALLIED TO MOTION PICTURE DISTRIBUTION,Office of Trade & Services
7830,SERVICES-MOTION PICTURE THEATERS,Office of Trade & Services
7841,SERVICES-VIDEO TAPE RENTAL,Office of Trade & Services
7900,SERVICES-AMUSEMENT & RECREATION SERVICES,Office of Trade & Services
7948,"SERVICES-RACING, INCLUDING TRACK OPERATION",Office of Trade & Services
7990,SERVICES-MISCELLANEOUS AMUSEMENT & RECREATION,Office of Trade & Services
7997,SERVICES-MEMBERSHIP SPORTS & RECREATION CLUBS,Office of Trade & Services
8000,SERVICES-HEALTH SERVICES,Industrial Applications and Services
8011,SERVICES-OFFICES & CLINICS OF DOCTORS OF MEDICINE,Industrial Applications and Services
8050,SERVICES-NURSING & PERSONAL CARE FACILITIES,Industrial Applications and Services
8051,SERVICES-SKILLED NURSING CARE FACILITIES,Industrial Applications and Services
8060,SERVICES-HOSPITALS,Industrial Applications and Services
8062,"SERVICES-GENERAL MEDICAL & SURGICAL HOSPITALS, NEC",Industrial Applications and Services
8071,SERVICES-MEDICAL LABORATORIES,Industrial Applications and Services
8082,SERVICES-HOME HEALTH CARE SERVICES,Industrial Applications and Services
8090,"SERVICES-MISC HEALTH & ALLIED SERVICES, NEC",Industrial Applications and Services
8093,"SERVICES-SPECIALTY OUTPATIENT FACILITIES, NEC",Industrial Applications and Services
8111,SERVICES-LEGAL SERVICES,Office of Trade & Services
8200,SERVICES-EDUCATIONAL SERVICES,Office of Trade & Services
8300,SERVICES-SOCIAL SERVICES,Industrial Applications and Services
8351,SERVICES-CHILD DAY CARE SERVICES,Office of Trade & Services
8600,SERVICES-MEMBERSHIP ORGANIZATIONS,Office of Trade & Services
8700,"SERVICES-ENGINEERING, ACCOUNTING, RESEARCH, MANAGEMENT",Office of Trade & Services
8711,SERVICES-ENGINEERING SERVICES,Office of Trade & Services
8731,SERVICES-COMMERCIAL PHYSICAL & BIOLOGICAL RESEARCH,Industrial Applications and Services
8734,SERVICES-TESTING LABORATORIES,Industrial Applications and Services
8741,SERVICES-MANAGEMENT SERVICES,Office of Trade & Services
8742,SERVICES-MANAGEMENT CONSULTING SERVICES,Office of Trade & Services
8744,SERVICES-FACILITIES SUPPORT MANAGEMENT SERVICES,Office of Trade & Services
8880,AMERICAN DEPOSITARY RECEIPTS,Office of International Corp Fin
8888,FOREIGN GOVERNMENTS,Office of International Corp Fin
8900,"SERVICES-SERVICES, NEC",Office of Trade & Services
9721,INTERNATIONAL AFFAIRS,Office of International Corp Fin
9995,NON-OPERATING ESTABLISHMENTS,Office of Real Estate & Construction
```

[NAICS](/guides/classification/NAICS)

[Previous](/guides/classification/NAICS)

[Prefetch for Faster Response](/optimization/prefetching)

[Next](/optimization/prefetching)

⌘I

Assistant

Responses are generated using AI and may contain mistakes.

[Contact support](/cdn-cgi/l/email-protection#98fef7edf6fcfdeaebd8fbf7f6ecfde0ecb6fcfdee)

----
url: https://docs.brand.dev/
----

> ## Documentation Index
>
> Fetch the complete documentation index at: [/llms.txt](/llms.txt)
>
> Use this file to discover all available pages before exploring further.

[Skip to main content](#content-area)

# Build With

Turn any domain into structured, AI-ready data with a single API.

[Quickstart→](/quickstart)[Give it to your Agent](/agent-quickstart)

***

***

***

***

***

© 2026 Context.dev

[](https://github.com/context-dot-dev)[](https://x.com/getcontextdev)[](https://www.linkedin.com/company/contextdev/)

⌘I

Assistant

Responses are generated using AI and may contain mistakes.

[Contact support](/cdn-cgi/l/email-protection#5731382239333225241734383923322f2379333221)

----
url: https://docs.context.dev/guides/get-logo-from-url
----

> ## Documentation Index
>
> Fetch the complete documentation index at: [/llms.txt](/llms.txt)
>
> Use this file to discover all available pages before exploring further.

[Skip to main content](#content-area)

Logo Link is a Context.dev service that provides fast, reliable logo delivery via a global CDN. Pass a `publicClientId` and a `domain` to the Logo Link URL and use it as your `<img>` source URL.

Integrate Context.dev's Logo Link in your app

[Open in Cursor](https://cursor.com/link/prompt?text=I'm%20integrating%20Context.dev's%20Logo%20Link%20into%20my%20app%20to%20dynamically%20fetch%20and%20display%20company%20logos%20by%20domain.%20Help%20me%3A%0A%0A1.%20Ask%20where%20in%20my%20codebase%20I%20want%20to%20display%20company%20logos.%0A2.%20Ask%20me%20for%20my%20Logo%20Link%20%60publicClientId%60%20from%20%5Bhttps%3A%2F%2Fcontext.dev%2Fdashboard%2Flogolink%5D\(https%3A%2F%2Fcontext.dev%2Fdashboard%2Flogolink\).%20Read%20it%20from%20an%20environment%20variable%20if%20the%20codebase%20supports%20one.%0A3.%20Implement%20Logo%20Link%20using%20this%20URL%20format%3A%20%60https%3A%2F%2Flogos.context.dev%2F%3FpublicClientId%3DMY_PUBLIC_CLIENT_ID%26domain%3DTARGET_DOMAIN%60.%20Replace%20%60MY_PUBLIC_CLIENT_ID%60%20with%20the%20ID%20I%20provide%20and%20%60TARGET_DOMAIN%60%20with%20the%20company%20domain%20variable.%20The%20endpoint%20returns%20an%20image%20file%20directly.%0A4.%20Update%20only%20the%20identified%20code%20locations%20that%20currently%20handle%20logo%20display%2C%20preserving%20existing%20fallback%20and%20error%20handling%20patterns.%0A5.%20Remind%20me%20to%20restrict%20allowed%20referring%20domains%20at%20%5Bhttps%3A%2F%2Fcontext.dev%2Fdashboard%2Flogolink%5D\(https%3A%2F%2Fcontext.dev%2Fdashboard%2Flogolink\)%20so%20strangers%20can't%20charge%20my%20account.%0A%0ADocs%3A%20%5Bhttps%3A%2F%2Fdocs.context.dev%2Fguides%2Fget-logo-from-url%5D\(https%3A%2F%2Fdocs.context.dev%2Fguides%2Fget-logo-from-url\))

## [​](#try-it)Try it

Live Logo Link Demo

Pick a domain to see the logo instantly

Change demo

The Logo Link demo is currently offline.

Go to the [Logo Link dashboard](https://context.dev/dashboard/logolink) to try it out.

`https://logos.context.dev/?publicClientId={{your_id}}&domain=github.com`

## [​](#prerequisites)Prerequisites

1

[](#)

Sign up

Create an account at [context.dev/signup](https://context.dev/signup). The free tier includes 10,000 Logo Link requests per month, no credit card required.

2

[](#)

Get your Public Client ID

Go to the [Logo Link dashboard](https://context.dev/dashboard/logolink) and copy the key from the “Public Client ID” section.

This `publicClientId` is safe to expose in your frontend, because it can only be called by the domains you have explicitly allowed.

3

[](#)

Important: Set Domain Restrictions

Click on `Edit Restrictions` and add your website domain where the image will be embedded:

* `*.example.com`
* `localhost:3000`

## [​](#build-the-url)Build the URL

Replace `publicClientId` and `domain` in the Base URL and set it as the image source:

```
https://logos.context.dev/?publicClientId=brandLL_xxx&domain=github.com
```

Logo Link accepts only `GET` and `HEAD` requests.

### [​](#response)Response

The body is the raw logo bytes; there is no JSON envelope. Point an `<img>` tag at the URL and the browser renders it. Fetch it with code and you get a binary blob.

| Header          | Value                                                                                |
| --------------- | ------------------------------------------------------------------------------------ |
| `Content-Type`  | The actual media type of the image: `image/png`, `image/svg+xml`, `image/jpeg`, etc. |
| `Cache-Control` | 24-hour browser cache.                                                               |

## [​](#pricing)Pricing

Logo Link usage is billed separately from the core Context.dev APIs. Logo Link requests **do not** consume your API credits. Every plan comes with a dedicated monthly Logo Link requests pool along with its API credits:

| Plan          | API credits / month | Logo Link requests / month |
| ------------- | ------------------- | -------------------------- |
| Free          | 500 (one-time)      | 10,000                     |
| Starter ($49) | 30,000              | 500,000                    |
| Pro ($149)    | 200,000             | 2,500,000                  |
| Scale ($949)  | 2,500,000           | 25,000,000                 |
| Enterprise    | Custom              | Custom                     |

See [pricing](https://context.dev/pricing/) for details. **Logo Link has no rate limit**, and you can track your current usage in the [Logo Link dashboard](https://context.dev/dashboard/logolink). **Billing is throttled to one charge per unique logo per client per 24 hours**. Spikes of traffic for the same handful of logos cost the same as steady traffic. **Logos are delivered with a 24-hour browser `Cache-Control` header** so a repeat view in the same browser session doesn’t count towards your usage. This header-driven browser/CDN caching is expected and allowed. See [Usage Restrictions](#usage-restrictions) for what isn’t.

## [​](#embed-the-image)Embed the image

Drop the URL into any place that accepts an image source: `<img>`, CSS `background-image`, an email template, a spreadsheet `=IMAGE()` cell.

* HTML
* CSS background
* React
* JavaScript fetch
* Email HTML
* Sheets / Excel

```
<img
  src="https://logos.context.dev/?publicClientId=brandLL_xxx&domain=stripe.com"
  alt="Stripe logo"
/>
```

```
.company-card {
  background-image: url("https://logos.context.dev/?publicClientId=brandLL_xxx&domain=stripe.com");
  background-size: contain;
  background-repeat: no-repeat;
}
```

```
function CompanyLogo({ domain }) {
  const publicClientId = process.env.NEXT_PUBLIC_LOGOLINK_KEY;

  return (
    <img
      src={`https://logos.context.dev/?publicClientId=${publicClientId}&domain=${domain}`}
      alt={`${domain} logo`}
      onError={(e) => {
        e.target.style.display = "none";
      }}
    />
  );
}
```

```
const response = await fetch(
  "https://logos.context.dev/?publicClientId=brandLL_xxx&domain=github.com",
);

if (response.ok) {
  const blob = await response.blob();
  const imageUrl = URL.createObjectURL(blob);
  document.getElementById("logo").src = imageUrl;
}
```

```
<img
  src="https://logos.context.dev/?publicClientId=brandLL_xxx&domain=stripe.com"
  alt="Stripe"
  width="48"
  height="48"
  style="border-radius:8px;"
/>
```

```
=IMAGE("https://logos.context.dev/?publicClientId=brandLL_xxx&domain=" & A2)
```

See the [Google Sheets](/nocode/google-sheets) and [Microsoft Excel](/nocode/microsoft-excel) recipes.

**Fallback behavior.** If Logo Link cannot find a logo for the domain, it returns a generated SVG monogram of the domain’s first letter. You always get a valid image response, so an `<img>` tag never breaks. Example:

## [​](#usage-restrictions)Usage Restrictions

Logo Link is intentionally ephemeral, fast and image-only. **You are not allowed to download and re-host logos retrieved from Logo Link, or persist the image files in your own storage.** (Normal browser and CDN caching driven by the response’s `Cache-Control` headers is fine.) Use Context.dev’s [Brand APIs](/guides/get-brand-data) if you:

* Need to store logos in your own database
* Get multiple logo variants (light / dark / opaque background, icon vs wordmark)
* Or, pull logo colors and other brand details alongside the logo

Need the brand’s fonts too? Those come from the [Styleguide and Fonts APIs](/guides/extract-design-system-from-website).

## [​](#use-cases)Use cases

Logo Link is purpose-built for client-facing embeds where you’d otherwise have to host logo assets yourself:

* **CRM & Sales Platforms**: Drop a Logo Link URL into every contact record.
* **Customer Logo Walls**: Use users’ sign-up email domains to automatically generate “trusted by” strips on landing pages.
* **Financial & Banking Apps**: Render merchant logos next to transaction descriptors.
* **Directories & Marketplaces**: Populate listings with logos automatically, with no upload step in vendor onboarding.

## [​](#next-steps)Next steps

## [Full Brand Profile](/guides/get-brand-data)

[Logos, colors, socials, address, and industry from one call.](/guides/get-brand-data)

## [Google Sheets Recipe](/nocode/google-sheets)

[`=IMAGE()` formula patterns for logo columns at scale.](/nocode/google-sheets)

## [Best Practices](/optimization/best-practices)

[Caching, error handling, and key hygiene.](/optimization/best-practices)

## [Troubleshooting](/optimization/troubleshooting)

[Status codes, retry patterns, and common errors.](/optimization/troubleshooting)

Was this page helpful?

[Extract a Website's Design System](/guides/extract-design-system-from-website)

[Previous](/guides/extract-design-system-from-website)

[Capture Webpage Screenshots](/guides/take-webpage-screenshot)

[Next](/guides/take-webpage-screenshot)

Ctrl+I

Assistant

Responses are generated using AI and may contain mistakes.

[Contact support](mailto:founders@context.dev)

----
url: https://docs.context.dev/guides/enrich-transaction-codes
----

> ## Documentation Index
>
> Fetch the complete documentation index at: [/llms.txt](/llms.txt)
>
> Use this file to discover all available pages before exploring further.

[Skip to main content](#content-area)

Context.dev’s Transaction Enrichment API takes a raw card or ACH descriptor (e.g., `AMZN*MKTP US`) and returns:

* `title` and `domain`: clean company name and domain
* `logos`: SVG/PNG variants in light, dark, and on-background modes
* `colors`: hex codes of colors from the merchant’s logo
* `industries.eic`: industry + subindustry classification
* `stock`: ticker and exchange for publicly traded merchants
* And more: `socials`, `address`, `links`, `description`, `slogan`

Our database has 50M+ identified merchants. You can also find small and local merchants by passing `mcc`, `city`, `country_gl`, or `phone`.

Integrate Context.dev's Transaction Enrichment endpoint in your app

[Open in Cursor](https://cursor.com/link/prompt?text=I'm%20integrating%20Context.dev's%20Transaction%20Enrichment%20endpoint%20\(%60GET%20%2Fbrand%2Ftransaction_identifier%60\)%20into%20my%20app.%20Help%20me%3A%0A%0A1.%20Install%20the%20official%20SDK%20for%20my%20language%20\(%60context.dev%60%20on%20npm%20%2F%20PyPI%20%2F%20RubyGems%2C%20%60context-dev%2Fcontext-dev-php%60%20on%20Packagist%2C%20%60github.com%2Fcontext-dot-dev%2Fcontext-go-sdk%60%20for%20Go\).%0A2.%20Read%20the%20API%20key%20from%20the%20%60CONTEXT_DEV_API_KEY%60%20environment%20variable.%20Never%20hardcode%20it.%0A3.%20Call%20%60client.brand.identifyFromTransaction\(%7B%20transaction_info%2C%20mcc%3F%2C%20country_gl%3F%2C%20city%3F%2C%20phone%3F%2C%20high_confidence_only%3F%20%7D\)%60.%20The%20response%20is%20the%20standard%20%60brand%60%20envelope%3A%20same%20shape%20as%20%60%2Fbrand%2Fretrieve%60.%0A4.%20Always%20pass%20%60mcc%60%20\(4-digit%20Merchant%20Category%20Code\)%20and%20%60country_gl%60%20\(ISO%203166-1%20alpha-2\)%20when%20I%20have%20them.%20They%20sharply%20disambiguate%20small%20merchants%20and%20regional%20variants.%0A5.%20Set%20%60high_confidence_only%3A%20true%60%20for%20spend%20analytics%20or%20compliance%20flows%20where%20a%20wrong%20match%20is%20worse%20than%20no%20match.%0A6.%20Treat%20HTTP%20400%20\(%22could%20not%20be%20identified%22\)%20as%20a%20normal%20outcome.%20Fall%20back%20to%20a%20cleaned%20descriptor%20%2B%20MCC-based%20category%20icon%2C%20and%20cache%20misses%20for%20at%20least%2024%20hours.%0A7.%20Cache%20successful%20matches%20by%20a%20normalized%20merchant%20key%20\(strip%20terminal%20IDs%2C%20ticket%20numbers%2C%20store%20numbers\)%20so%20%60STARBUCKS%20%2312345%60%20and%20%60STARBUCKS%20%2367890%60%20share%20the%20same%20enrichment.%0A%0ADocs%3A%20%5Bhttps%3A%2F%2Fdocs.context.dev%2Fguides%2Fenrich-transaction-codes%5D\(https%3A%2F%2Fdocs.context.dev%2Fguides%2Fenrich-transaction-codes\))

## [​](#prerequisites)Prerequisites

* **A Context.dev API key.** Sign up at [context.dev/signup](https://context.dev/signup), copy the key from the [dashboard](https://context.dev/dashboard) (prefix `ctxt_secret_`), and export it:

  ```
  export CONTEXT_DEV_API_KEY="ctxt_secret_..."
  ```

* **An SDK (optional).** Install for your language, or skip the install and call directly with `curl`:

  ```
  npm install context.dev
  ```

## [​](#identify-a-transaction)Identify a transaction

`GET /brand/transaction_identifier` takes a raw descriptor and resolves it to a merchant brand. Pass MCC and geography hints when you have them: they collapse ambiguity sharply on small or regional merchants.

```
curl -G https://api.context.dev/v1/brand/transaction_identifier \
  -H "Authorization: Bearer $CONTEXT_DEV_API_KEY" \
  --data-urlencode "transaction_info=STARBUCKS STORE 12345" \
  --data-urlencode "mcc=5814" \
  --data-urlencode "country_gl=us"
```

10 credits per successful call

### [​](#request-parameters)Request Parameters

| Parameter              | Type                                   | Description                                                                                                                                                                                                                                                                                        |
| ---------------------- | -------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `transaction_info`     | string                                 | **Required.** Raw transaction descriptor (e.g. `AMZN MKTP US*2X7Y8Z`, `SQ *COFFEE SHOP NYC`).                                                                                                                                                                                                      |
| `mcc`                  | string                                 | 4-digit Merchant Category Code. The resolver maintains an MCC database with specific descriptions; otherwise it falls back to a general category based on the code range. Examples: `5411` grocery, `5814` fast food / takeout, `5812` restaurants, `5942` book stores, `4121` taxis & limousines. |
| `country_gl`           | string (ISO 3166-1 alpha-2, lowercase) | Country hint for geographic disambiguation. Examples: `us`, `gb`, `ca`, `au`. Every alpha-2 code is supported.                                                                                                                                                                                     |
| `city`                 | string                                 | City hint to prioritize local branches or regional brand variants. Free-form; standard names work best (e.g. `San Francisco`, `New York`).                                                                                                                                                         |
| `phone`                | number                                 | Phone number from the transaction descriptor, when present, to help verify the brand match.                                                                                                                                                                                                        |
| `high_confidence_only` | boolean                                | When `true`, runs additional verification and returns 400 instead of a low-confidence match. Use for spend analytics, compliance, or expense flows. Defaults to `false`.                                                                                                                           |
| `force_language`       | string                                 | Force the language of the retrieved brand data.                                                                                                                                                                                                                                                    |
| `maxSpeed`             | boolean                                | Skip time-consuming operations for a faster, less complete response. Defaults to `false`.                                                                                                                                                                                                          |
| `timeoutMS`            | integer                                | Abort with a 408 if the request exceeds this many milliseconds. Min `1000`, max `300000` (5 min).                                                                                                                                                                                                  |

### [​](#response)Response

```
{
  "status": "ok",
  "code": 200,
  "brand": {
    "domain": "starbucks.com",
    "title": "Starbucks",
    "description": "Starbucks is a global coffee company that puts people at the heart of its business…",
    "slogan": "Inspiring and nurturing the human spirit — one person, one cup",
    "colors": [
      { "hex": "#0bac66", "name": "Secret Garden" },
      { "hex": "#7cd4b4", "name": "Seafoam Blue" }
    ],
    "logos": [
      {
        "url": "https://media.brand.dev/67dc7846-2ca2-4a7b-9877-6bb5a5e2c0e0.png",
        "mode": "has_opaque_background",
        "type": "icon",
        "colors": [{ "hex": "#0bac66", "name": "Secret Garden" }],
        "resolution": { "width": 180, "height": 180, "aspect_ratio": 1 }
      }
    ],
    "socials": [
      { "type": "x", "url": "https://x.com/starbucks" },
      { "type": "facebook", "url": "https://facebook.com/starbucks" },
      { "type": "instagram", "url": "https://instagram.com/starbucks" }
    ],
    "address": {
      "street": "2401 Utah Avenue South",
      "city": "Seattle",
      "state_province": "Washington",
      "state_code": "WA",
      "country": "United States",
      "country_code": "US",
      "postal_code": "98134"
    },
    "stock": { "ticker": "SBUX", "exchange": "NASDAQ" },
    "industries": {
      "eic": [
        {
          "industry": "Retail & E-commerce",
          "subindustry": "Omnichannel & In-Store Retail"
        }
      ]
    },
    "primary_language": "english",
    "is_nsfw": false
  }
}
```

| Field                    | Type    | Description                                                                                                                                                    |
| ------------------------ | ------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `status`                 | string  | `"ok"` on success.                                                                                                                                             |
| `code`                   | integer | HTTP status code, echoed for convenience.                                                                                                                      |
| `brand.domain`           | string  | Canonical merchant domain.                                                                                                                                     |
| `brand.title`            | string  | Clean company name.                                                                                                                                            |
| `brand.description`      | string  | One-paragraph company description.                                                                                                                             |
| `brand.slogan`           | string  | Marketing tagline, when available.                                                                                                                             |
| `brand.colors[]`         | array   | Brand colors ordered by visual prominence. Each has `hex` and a human-readable `name`.                                                                         |
| `brand.logos[]`          | array   | Logo variants: `url`, `mode` (`light` / `dark` / `has_opaque_background`), `type` (`logo` / `icon`), `colors`, and `resolution.{width, height, aspect_ratio}`. |
| `brand.socials[]`        | array   | Social profile URLs. `type` is one of `x`, `facebook`, `instagram`, `linkedin`, `youtube`, `tiktok`, `github`, and 20+ more.                                   |
| `brand.address`          | object  | HQ address: `street`, `city`, `state_province`, `state_code`, `country`, `country_code`, `postal_code`.                                                        |
| `brand.stock`            | object  | `ticker` and `exchange` for publicly traded merchants. `null` for private companies.                                                                           |
| `brand.industries.eic[]` | array   | EIC industry tags with `industry` and `subindustry`. For NAICS / SIC codes, call `/web/naics` or `/web/sic`.                                                   |
| `brand.links`            | object  | Non-social URLs: `blog`, `pricing`, `careers`, `contact`, `privacy`, `terms`, `login`, `signup`.                                                               |
| `brand.primary_language` | string  | Detected language of the merchant’s website (e.g. `english`, `spanish`).                                                                                       |
| `brand.is_nsfw`          | boolean | Safe-content flag.                                                                                                                                             |

## [​](#handle-errors)Handle errors

| Status | Meaning                                                                                                                                                  | What to do                                                                                                                          |
| ------ | -------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- |
| 400    | The descriptor couldn’t be identified (no confident brand match), `high_confidence_only` blocked a low-confidence hit, or `transaction_info` is missing. | Fall back to a cleaned descriptor + an MCC-based category icon. Cache the miss for at least 24 hours so retries don’t burn credits. |
| 401    | Missing or invalid API key.                                                                                                                              | Re-check the env var and the dashboard.                                                                                             |
| 429    | Rate limit.                                                                                                                                              | Back off exponentially.                                                                                                             |

A fallback pattern that surfaces 400 as a “no match” outcome instead of an exception:

```
import ContextDev from "context.dev";

const client = new ContextDev({ apiKey: process.env.CONTEXT_DEV_API_KEY });

async function enrichOrFallback(transaction: {
  description: string;
  mcc?: string;
  country?: string;
}) {
  try {
    const { brand } = await client.brand.identifyFromTransaction({
      transaction_info: transaction.description,
      mcc: transaction.mcc,
      country_gl: transaction.country,
    });
    return brand;
  } catch (err: any) {
    if (err.status === 400) return null; // no confident match
    throw err;
  }
}
```

For the full error code catalog, see [Troubleshooting](/optimization/troubleshooting).

## [​](#use-cases)Use cases

* **Personal finance apps**: show actual company logos and clean names for every merchant and subscription.
* **Reconcile employee expense reports automatically**: match messy expense entries to clean company names, logos, and categories.

[Extract Product Data from Webpages](/guides/extract-product-from-websites)

[Previous](/guides/extract-product-from-websites)

[Overview](/guides/classification/overview)

[Next](/guides/classification/overview)

Ctrl+I

Assistant

Responses are generated using AI and may contain mistakes.

[Contact support](mailto:founders@context.dev)

----
url: https://docs.context.dev/api-reference/web-extraction/query-website-data-using-ai
----

> ## Documentation Index
>
> Fetch the complete documentation index at: [/llms.txt](/llms.txt)
>
> Use this file to discover all available pages before exploring further.

[Skip to main content](#content-area)

JavaScript

```
import ContextDev from 'context.dev';

const client = new ContextDev({
  apiKey: process.env['CONTEXT_DEV_API_KEY'], // This is the default and can be omitted
});

const response = await client.ai.aiQuery({
  data_to_extract: [
    {
      datapoint_description: 'datapoint_description',
      datapoint_example: 'datapoint_example',
      datapoint_name: 'datapoint_name',
      datapoint_type: 'text',
    },
  ],
  domain: 'domain',
});

console.log(response.data_extracted);
```

```
{
  "status": "<string>",
  "domain": "<string>",
  "urls_analyzed": [
    "<string>"
  ],
  "data_extracted": [
    {
      "datapoint_name": "<string>",
      "datapoint_value": "<string>"
    }
  ],
  "key_metadata": {
    "credits_consumed": 123,
    "credits_remaining": 123
  }
}
```

POST

/

brand

/

ai

/

query

JavaScript

```
import ContextDev from 'context.dev';

const client = new ContextDev({
  apiKey: process.env['CONTEXT_DEV_API_KEY'], // This is the default and can be omitted
});

const response = await client.ai.aiQuery({
  data_to_extract: [
    {
      datapoint_description: 'datapoint_description',
      datapoint_example: 'datapoint_example',
      datapoint_name: 'datapoint_name',
      datapoint_type: 'text',
    },
  ],
  domain: 'domain',
});

console.log(response.data_extracted);
```

```
{
  "status": "<string>",
  "domain": "<string>",
  "urls_analyzed": [
    "<string>"
  ],
  "data_extracted": [
    {
      "datapoint_name": "<string>",
      "datapoint_value": "<string>"
    }
  ],
  "key_metadata": {
    "credits_consumed": 123,
    "credits_remaining": 123
  }
}
```

10 Credits

The domain name to analyze

[​](#body-data-to-extract)

data\_to\_extract

object\[]

required

Array of data points to extract from the website

Show child attributes

[​](#body-specific-pages)

specific\_pages

object

Optional object specifying which pages to analyze

[​](#response-status)

status

string

Status of the response, e.g., 'ok'

[​](#response-domain)

domain

string

The domain that was analyzed

[​](#response-urls-analyzed)

urls\_analyzed

string\[]

List of URLs that were analyzed

[​](#response-data-extracted)

data\_extracted

object\[]

Array of extracted data points

⌘I

Assistant

Responses are generated using AI and may contain mistakes.

[Contact support](mailto:founders@context.dev)

----
url: https://docs.context.dev/api-reference/web-extraction/classify-naics-industries
----

> ## Documentation Index
>
> Fetch the complete documentation index at: [/llms.txt](/llms.txt)
>
> Use this file to discover all available pages before exploring further.

[Skip to main content](#content-area)

JavaScript

```
import ContextDev from 'context.dev';

const client = new ContextDev({
  apiKey: process.env['CONTEXT_DEV_API_KEY'], // This is the default and can be omitted
});

const response = await client.industry.retrieveNaics({ input: 'input' });

console.log(response.codes);
```

```
{
  "status": "<string>",
  "domain": "<string>",
  "type": "<string>",
  "codes": [
    {
      "code": "<string>",
      "name": "<string>"
    }
  ],
  "key_metadata": {
    "credits_consumed": 123,
    "credits_remaining": 123
  }
}
```

GET

/

web

/

naics

JavaScript

```
import ContextDev from 'context.dev';

const client = new ContextDev({
  apiKey: process.env['CONTEXT_DEV_API_KEY'], // This is the default and can be omitted
});

const response = await client.industry.retrieveNaics({ input: 'input' });

console.log(response.codes);
```

```
{
  "status": "<string>",
  "domain": "<string>",
  "type": "<string>",
  "codes": [
    {
      "code": "<string>",
      "name": "<string>"
    }
  ],
  "key_metadata": {
    "credits_consumed": 123,
    "credits_remaining": 123
  }
}
```

Brand domain or title to retrieve NAICS code for. If a valid domain is provided, it will be used for classification, otherwise, we will search for the brand using the provided title.

[​](#parameter-min-results)

minResults

integer

default:1

Minimum number of NAICS codes to return. Must be at least 1. Defaults to 1.

Required range: `1 <= x <= 10`

[​](#parameter-max-results)

maxResults

integer

default:5

Maximum number of NAICS codes to return. Must be between 1 and 10. Defaults to 5.

Industry classification type, for naics api it will be `naics`

[​](#response-codes)

codes

object\[]

Array of NAICS codes and titles.

[Scrape Fonts](/api-reference/web-extraction/scrape-fonts)

[Previous](/api-reference/web-extraction/scrape-fonts)

[Classify SIC industries](/api-reference/web-extraction/classify-sic-industries)

[Next](/api-reference/web-extraction/classify-sic-industries)

⌘I

Assistant

Responses are generated using AI and may contain mistakes.

[Contact support](mailto:founders@context.dev)

----
url: https://docs.context.dev/api-reference/brand-intelligence/retrieve-simplified-brand-data-by-domain
----

> ## Documentation Index
>
> Fetch the complete documentation index at: [/llms.txt](/llms.txt)
>
> Use this file to discover all available pages before exploring further.

[Skip to main content](#content-area)

JavaScript

```
import ContextDev from 'context.dev';

const client = new ContextDev({
  apiKey: process.env['CONTEXT_DEV_API_KEY'], // This is the default and can be omitted
});

const response = await client.brand.retrieveSimplified({ domain: 'domain' });

console.log(response.brand);
```

```
{
  "status": "<string>",
  "brand": {
    "domain": "<string>",
    "title": "<string>",
    "colors": [
      {
        "hex": "<string>",
        "name": "<string>"
      }
    ],
    "logos": [
      {
        "url": "<string>",
        "colors": [
          {
            "hex": "<string>",
            "name": "<string>"
          }
        ],
        "resolution": {
          "width": 123,
          "height": 123,
          "aspect_ratio": 123
        }
      }
    ],
    "backdrops": [
      {
        "url": "<string>",
        "colors": [
          {
            "hex": "<string>",
            "name": "<string>"
          }
        ],
        "resolution": {
          "width": 123,
          "height": 123,
          "aspect_ratio": 123
        }
      }
    ]
  },
  "code": 123,
  "key_metadata": {
    "credits_consumed": 123,
    "credits_remaining": 123
  }
}
```

GET

/

brand

/

retrieve-simplified

JavaScript

```
import ContextDev from 'context.dev';

const client = new ContextDev({
  apiKey: process.env['CONTEXT_DEV_API_KEY'], // This is the default and can be omitted
});

const response = await client.brand.retrieveSimplified({ domain: 'domain' });

console.log(response.brand);
```

```
{
  "status": "<string>",
  "brand": {
    "domain": "<string>",
    "title": "<string>",
    "colors": [
      {
        "hex": "<string>",
        "name": "<string>"
      }
    ],
    "logos": [
      {
        "url": "<string>",
        "colors": [
          {
            "hex": "<string>",
            "name": "<string>"
          }
        ],
        "resolution": {
          "width": 123,
          "height": 123,
          "aspect_ratio": 123
        }
      }
    ],
    "backdrops": [
      {
        "url": "<string>",
        "colors": [
          {
            "hex": "<string>",
            "name": "<string>"
          }
        ],
        "resolution": {
          "width": 123,
          "height": 123,
          "aspect_ratio": 123
        }
      }
    ]
  },
  "code": 123,
  "key_metadata": {
    "credits_consumed": 123,
    "credits_remaining": 123
  }
}
```

Domain name to retrieve simplified brand data for

[​](#parameter-max-age-ms)

maxAgeMs

integer

default:7776000000

Maximum age in milliseconds for cached brand data before the API performs a hard refresh. Defaults to 3 months (7776000000 ms). Values below 1 day (86400000 ms) are clamped to 1 day; values above 1 year (31536000000 ms) are clamped to 1 year.

Required range: `86400000 <= x <= 31536000000`

Simplified brand information

Show child attributes

[​](#response-code)

code

integer

HTTP status code of the response

[​](#response-key-metadata)

key\_metadata

object

Metadata about the API key used for the request. Included in every response whenever a valid API key is provided, even when the response status is not 200.

Show child attributes

Was this page helpful?

[Identify brand from transaction data](/api-reference/brand-intelligence/identify-brand-from-transaction-data)

[Previous](/api-reference/brand-intelligence/identify-brand-from-transaction-data)

[Prefetch brand data for a domain](/api-reference/utility/prefetch-brand-data-for-a-domain)

[Next](/api-reference/utility/prefetch-brand-data-for-a-domain)

Ctrl+I

Assistant

Responses are generated using AI and may contain mistakes.

[Contact support](mailto:founders@context.dev)

----
url: https://docs.context.dev/guides/get-brand-data
----

> ## Documentation Index
>
> Fetch the complete documentation index at: [/llms.txt](/llms.txt)
>
> Use this file to discover all available pages before exploring further.

[Skip to main content](#content-area)

Context.dev’s Brand API turns any of the following identifiers into a full **brand profile** with logos, colors, slogans, description, social media handles, address, industry, and website page links:

* Brand domain (e.g., stripe.com)
* Company name (e.g., “Stripe Inc”)
* A work email (e.g., <patrick@stripe.com>)
* A stock ticker (e.g., AAPL)
* An ISIN (e.g., US0378331005)

Integrate Context.dev's Brand resolution endpoints

[Open in Cursor](https://cursor.com/link/prompt?text=I'm%20integrating%20Context.dev's%20Brand%20Intelligence%20endpoints%20into%20my%20app.%20Help%20me%3A%0A%0A1.%20Install%20the%20official%20SDK%20for%20my%20language%20\(%60context.dev%60%20on%20npm%20%2F%20PyPI%20%2F%20RubyGems%2C%20%60context-dev%2Fcontext-dev-php%60%20on%20Packagist%2C%20%60github.com%2Fcontext-dot-dev%2Fcontext-go-sdk%60%20for%20Go\).%0A2.%20Read%20the%20API%20key%20from%20the%20%60CONTEXT_DEV_API_KEY%60%20environment%20variable.%20Never%20hardcode%20it.%0A3.%20Pick%20the%20right%20%60%2Fbrand%2F*%60%20endpoint%20based%20on%20the%20identifier%20I%20have%20\(domain%2C%20name%2C%20email%2C%20ticker%2C%20ISIN%2C%20or%20transaction%20descriptor\)%20and%20call%20it%20with%20query%20parameters.%0A4.%20Parse%20the%20shared%20envelope%20\(%60status%60%2C%20%60code%60%2C%20%60brand%60\)%20and%20extract%20%60brand.title%60%2C%20%60brand.colors%5B0%5D.hex%60%2C%20%60brand.logos%5B0%5D.url%60%2C%20socials%2C%20industry%2C%20and%20links.%0A5.%20Treat%20HTTP%20400%20with%20%60error_code%3A%20%22NOT_FOUND%22%60%20\(no%20brand\)%20as%20a%20normal%20outcome%2C%20not%20an%20error.%20Cache%20misses%20for%20at%20least%2024%20hours.%0A6.%20Retry%20HTTP%20429%20with%20exponential%20backoff.%0A%0ADocs%3A%20%5Bhttps%3A%2F%2Fdocs.context.dev%2Fguides%2Fget-brand-data%5D\(https%3A%2F%2Fdocs.context.dev%2Fguides%2Fget-brand-data\))

## [​](#prerequisites)Prerequisites

* **A Context.dev API key.** Sign up at [context.dev/signup](https://context.dev/signup), copy the key from the [dashboard](https://context.dev/dashboard) (prefix `ctxt_secret_`), and export it:

  ```
  export CONTEXT_DEV_API_KEY="ctxt_secret_..."
  ```

* **An SDK (optional).** Install for your language, or skip the install and call directly with `curl`:

  ```
  npm install context.dev
  ```

## [​](#get-a-brand-by-domain)Get a brand by domain

`GET /brand/retrieve` takes a domain and returns a full brand profile: logos, colors, description, socials, industry, address, and links.

```
curl -G https://api.context.dev/v1/brand/retrieve \
  -H "Authorization: Bearer $CONTEXT_DEV_API_KEY" \
  --data-urlencode "domain=stripe.com"
```

10 credits per successful call The connection stays open while the lookup runs, so there’s no need to poll. Repeated lookups for the same domain within `maxAgeMs` return the cached record.

### [​](#request-parameters)Request Parameters

| Parameter        | Type    | Default            | Description                                                                                                                                                                       |
| ---------------- | ------- | ------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `domain`         | string  | —                  | **Required.** Domain to retrieve brand data for (e.g. `stripe.com`). Use `/brand/retrieve-by-name` or `/brand/retrieve-by-ticker` when you have a company name or ticker instead. |
| `force_language` | string  | —                  | Force the language of the retrieved brand data. Accepts a [SupportedLanguage](https://docs.context.dev/api-reference) code.                                                       |
| `maxSpeed`       | boolean | `false`            | Skip time-consuming operations for a faster response, at the cost of less comprehensive data.                                                                                     |
| `maxAgeMs`       | integer | `7776000000` (90d) | Max cache age before a hard refresh. Clamped to `[86400000, 31536000000]` (1 day – 1 year).                                                                                       |
| `timeoutMS`      | integer | —                  | Abort the request with a 408 if it exceeds this many milliseconds. Max `300000` (5 min).                                                                                          |

### [​](#response)Response

```
{
  "status": "ok",
  "code": 200,
  "brand": {
    "domain": "stripe.com",
    "title": "Stripe",
    "description": "Stripe is a global financial-infrastructure platform that helps businesses accept payments, manage subscriptions, issue cards, and build custom revenue models…",
    "slogan": "Financial infrastructure to grow your revenue.",
    "colors": [
      { "hex": "#543cfb", "name": "Meteor Shower" },
      { "hex": "#a498ec", "name": "Dull Lavender" }
    ],
    "logos": [
      {
        "url": "https://media.brand.dev/5d83eab0-8041-4c39-a30d-84e6a0c5c461.jpg",
        "mode": "has_opaque_background",
        "type": "icon",
        "colors": [{ "hex": "#543cfb", "name": "Meteor Shower" }],
        "resolution": { "width": 512, "height": 512, "aspect_ratio": 1 }
      }
    ],
    "backdrops": [
      {
        "url": "https://media.brand.dev/a0a5ce89-982c-4e3d-9def-8db3e19c6294.jpg",
        "colors": [
          { "hex": "#f57b2d", "name": "Iceland Poppy" },
          { "hex": "#f4bc8c", "name": "Brandy Butter" }
        ],
        "resolution": { "width": 1000, "height": 169, "aspect_ratio": 5.92 }
      }
    ],
    "socials": [
      { "type": "x", "url": "https://x.com/stripe" },
      { "type": "github", "url": "https://github.com/stripe" },
      { "type": "facebook", "url": "https://facebook.com/StripeHQ" },
      { "type": "linkedin", "url": "https://linkedin.com/company/stripe" },
      { "type": "youtube", "url": "https://youtube.com/stripe" }
    ],
    "address": {
      "street": "354 Oyster Point Blvd",
      "city": "South San Francisco",
      "state_province": "California",
      "state_code": "CA",
      "country": "United States",
      "country_code": "US",
      "postal_code": "94080"
    },
    "industries": {
      "eic": [
        { "industry": "Finance", "subindustry": "Payments & Money Movement" },
        {
          "industry": "Finance",
          "subindustry": "Financial Infrastructure & APIs"
        }
      ]
    },
    "links": {
      "blog": "https://stripe.com/blog",
      "login": null,
      "signup": null,
      "careers": "https://stripe.com/jobs",
      "contact": "https://stripe.com/contact/sales",
      "privacy": "https://stripe.com/privacy",
      "terms": "https://stripe.com/legal",
      "pricing": "https://stripe.com/pricing"
    },
    "primary_language": "english",
    "is_nsfw": false
  }
}
```

| Field                    | Type    | Description                                                                                                                                                                                                                  |
| ------------------------ | ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `status`                 | string  | `"ok"` on success, `"error"` on a non-2xx.                                                                                                                                                                                   |
| `code`                   | integer | HTTP status code, echoed in the body for convenience.                                                                                                                                                                        |
| `brand.domain`           | string  | The brand’s canonical domain.                                                                                                                                                                                                |
| `brand.title`            | string  | Company name.                                                                                                                                                                                                                |
| `brand.description`      | string  | One-paragraph company description.                                                                                                                                                                                           |
| `brand.slogan`           | string  | Marketing tagline, if available.                                                                                                                                                                                             |
| `brand.colors[]`         | array   | Brand colors ordered by visual prominence. Each has `hex` and a human-readable `name`. Index 0 is the primary.                                                                                                               |
| `brand.logos[]`          | array   | Logo variants. Each has `url`, `mode` (`light`, `dark`, `has_opaque_background`), `type` (`logo` or `icon`), `colors`, and `resolution.{width, height, aspect_ratio}`.                                                       |
| `brand.backdrops[]`      | array   | Hero / backdrop imagery. Same color and resolution structure as logos.                                                                                                                                                       |
| `brand.socials[]`        | array   | Social profile URLs. `type` is one of `x`, `facebook`, `instagram`, `linkedin`, `youtube`, `tiktok`, `github`, and 20+ more.                                                                                                 |
| `brand.address`          | object  | HQ address: `street`, `city`, `state_province`, `state_code`, `country`, `country_code`, `postal_code`.                                                                                                                      |
| `brand.stock`            | object  | `ticker` and `exchange`. `null` for private companies.                                                                                                                                                                       |
| `brand.industries.eic[]` | array   | EIC industry tags with `industry` and `subindustry`. For NAICS or SIC codes, call `/web/naics` or `/web/sic`.                                                                                                                |
| `brand.links`            | object  | Non-social URLs the resolver was able to discover. Common keys include `blog`, `pricing`, `careers`, `contact`, `privacy`, `terms`, `login`, `signup`. Values are `null` when the resolver couldn’t find a URL for that key. |
| `brand.email`            | string  | Public contact email, when discoverable.                                                                                                                                                                                     |
| `brand.phone`            | string  | Public contact phone, when discoverable.                                                                                                                                                                                     |
| `brand.primary_language` | string  | Detected language of the brand’s website (e.g. `english`, `spanish`).                                                                                                                                                        |
| `brand.is_nsfw`          | boolean | Safe-content flag.                                                                                                                                                                                                           |

The `colors` returned by this API are extracted from the brand’s logos. To get pixel-perfect colors as they appear on a website, use the [Styleguide API](/guides/extract-design-system-from-website#extract-the-full-styleguide) instead.

Get a lighter response

If you need only `domain`, `title`, `colors`, `logos`, and `backdrops`, you can use `GET /brand/retrieve-simplified`.

```
curl -G https://api.context.dev/v1/brand/retrieve-simplified \
  -H "Authorization: Bearer $CONTEXT_DEV_API_KEY" \
  --data-urlencode "domain=stripe.com"
```

10 credits per successful call**Request Parameters**

| Parameter   | Type    | Default      | Description                                                                      |
| ----------- | ------- | ------------ | -------------------------------------------------------------------------------- |
| `domain`    | string  | —            | **Required.** Domain to retrieve simplified brand data for.                      |
| `maxAgeMs`  | integer | `7776000000` | Max cache age before a hard refresh. Clamped to `[86400000, 31536000000]`.       |
| `timeoutMS` | integer | —            | Abort the request with a 408 if it exceeds this many milliseconds. Max `300000`. |

**Response**

```
{
  "status": "ok",
  "brand": {
    "domain": "stripe.com",
    "title": "Stripe",
    "colors": [
      { "hex": "#543cfb", "name": "Meteor Shower" },
      { "hex": "#a498ec", "name": "Dull Lavender" }
    ],
    "logos": [
      {
        "url": "https://media.brand.dev/5d83eab0-8041-4c39-a30d-84e6a0c5c461.jpg",
        "mode": "has_opaque_background",
        "type": "icon",
        "resolution": { "width": 512, "height": 512, "aspect_ratio": 1 }
      }
    ],
    "backdrops": [
      {
        "url": "https://media.brand.dev/a0a5ce89-982c-4e3d-9def-8db3e19c6294.jpg",
        "resolution": { "width": 1024, "height": 768, "aspect_ratio": 1.33 }
      }
    ]
  }
}
```

## [​](#look-up-by-company-name)Look up by company name

`GET /brand/retrieve-by-name` resolves a company name (3–30 characters) to a brand. Pass `country_gl` to bias the match toward a specific country when the name is ambiguous across markets.

```
curl -G https://api.context.dev/v1/brand/retrieve-by-name \
  -H "Authorization: Bearer $CONTEXT_DEV_API_KEY" \
  --data-urlencode "name=Airbnb"
```

10 credits per successful call Name must be 3–30 characters. Pass `country_gl` as a lowercase ISO 3166-1 alpha-2 code to narrow the match when the name could resolve to multiple brands across markets.

### [​](#request-parameters-2)Request Parameters

| Parameter        | Type                                   | Default      | Description                                                                   |
| ---------------- | -------------------------------------- | ------------ | ----------------------------------------------------------------------------- |
| `name`           | string (3–30 chars)                    | —            | **Required.** Company name (e.g. `Apple Inc`, `Microsoft Corporation`).       |
| `country_gl`     | string (ISO 3166-1 alpha-2, lowercase) | —            | Two-letter country code to bias the match toward (e.g. `us`, `gb`, `de`).     |
| `maxSpeed`       | boolean                                | `false`      | Skip time-consuming operations for a faster, less complete response.          |
| `force_language` | string                                 | —            | Force the language of the retrieved brand data.                               |
| `maxAgeMs`       | integer                                | `7776000000` | Max cache age before a hard refresh.                                          |
| `timeoutMS`      | integer                                | —            | Abort with a 408 if the request exceeds this many milliseconds. Max `300000`. |

### [​](#response-2)Response

Returns the same envelope as `GET /brand/retrieve`; see [the response field table above](#response).

```
{
  "status": "ok",
  "code": 200,
  "brand": {
    "domain": "airbnb.com",
    "title": "Airbnb",
    "description": "Airbnb is a global online community marketplace that connects hosts with guests, offering unique stays and experiences…",
    "slogan": "Belong Anywhere",
    "colors": [
      { "hex": "#fc3c5c", "name": "Radical Red" },
      { "hex": "#fc9cb4", "name": "Saira Red" },
      { "hex": "#fb5c74", "name": "Ponceau" }
    ],
    "logos": [
      {
        "url": "https://media.brand.dev/4ae9a10b-ffde-45c8-b5c1-c1e7cef5b716.png",
        "mode": "light",
        "type": "icon",
        "colors": [{ "hex": "#fc3c5c", "name": "Radical Red" }],
        "resolution": { "width": 250, "height": 250, "aspect_ratio": 1 }
      }
    ],
    "stock": { "ticker": "ABNB", "exchange": "NASDAQ" },
    "industries": {
      "eic": [
        {
          "industry": "Hospitality & Tourism",
          "subindustry": "Vacation Rentals & Short-Term Stays"
        },
        {
          "industry": "Technology",
          "subindustry": "eCommerce & Marketplace Platforms"
        }
      ]
    }
  }
}
```

## [​](#look-up-by-work-email)Look up by work email

`GET /brand/retrieve-by-email` extracts the domain from an email address, filters out personal-email providers (gmail, outlook, proton, etc.), then runs the same resolver as `/brand/retrieve`.

```
curl -G https://api.context.dev/v1/brand/retrieve-by-email \
  -H "Authorization: Bearer $CONTEXT_DEV_API_KEY" \
  --data-urlencode "email=founders@stripe.com"
```

10 credits per successful call Personal-email addresses on common consumer providers (`*@gmail.com`, `*@outlook.com`, `*@proton.me`, and others) return a 422 with `error_code: "FREE_EMAIL_DETECTED"`, which is useful for onboarding flows that should only enrich on a work email.

### [​](#request-parameters-3)Request Parameters

| Parameter        | Type    | Default      | Description                                                                   |
| ---------------- | ------- | ------------ | ----------------------------------------------------------------------------- |
| `email`          | string  | —            | **Required.** Email address (e.g. `alex@stripe.com`).                         |
| `maxSpeed`       | boolean | `false`      | Skip time-consuming operations for a faster, less complete response.          |
| `force_language` | string  | —            | Force the language of the retrieved brand data.                               |
| `maxAgeMs`       | integer | `7776000000` | Max cache age before a hard refresh.                                          |
| `timeoutMS`      | integer | —            | Abort with a 408 if the request exceeds this many milliseconds. Max `300000`. |

### [​](#response-3)Response

Returns the same envelope as `GET /brand/retrieve`; see [the response field table above](#response).

```
{
  "status": "ok",
  "code": 200,
  "brand": {
    "domain": "stripe.com",
    "title": "Stripe",
    "slogan": "Financial infrastructure to grow your revenue.",
    "colors": [
      { "hex": "#543cfb", "name": "Meteor Shower" },
      { "hex": "#a498ec", "name": "Dull Lavender" }
    ],
    "logos": [
      {
        "url": "https://media.brand.dev/5d83eab0-8041-4c39-a30d-84e6a0c5c461.jpg",
        "mode": "has_opaque_background",
        "type": "icon",
        "colors": [{ "hex": "#543cfb", "name": "Meteor Shower" }],
        "resolution": { "width": 512, "height": 512, "aspect_ratio": 1 }
      }
    ],
    "industries": {
      "eic": [
        { "industry": "Finance", "subindustry": "Payments & Money Movement" },
        {
          "industry": "Finance",
          "subindustry": "Financial Infrastructure & APIs"
        }
      ]
    }
  }
}
```

## [​](#look-up-by-stock-ticker)Look up by stock ticker

`GET /brand/retrieve-by-ticker` resolves a stock ticker to a brand and populates the `stock` object with `ticker` and `exchange`.

```
curl -G https://api.context.dev/v1/brand/retrieve-by-ticker \
  -H "Authorization: Bearer $CONTEXT_DEV_API_KEY" \
  --data-urlencode "ticker=AAPL"
```

10 credits per successful call Pass `ticker_exchange` to constrain the lookup to a specific exchange (`NASDAQ`, `NYSE`, `LON`, `XETR`, `TYO`, and 60+ others) when the bare symbol is ambiguous.

### [​](#request-parameters-4)Request Parameters

| Parameter         | Type          | Default      | Description                                                                             |
| ----------------- | ------------- | ------------ | --------------------------------------------------------------------------------------- |
| `ticker`          | string        | —            | **Required.** Stock ticker symbol (e.g. `AAPL`, `MSFT`).                                |
| `ticker_exchange` | string (enum) | —            | Exchange code to disambiguate (`NASDAQ`, `NYSE`, `LON`, `XETR`, `TYO`, and 60+ others). |
| `maxSpeed`        | boolean       | `false`      | Skip time-consuming operations for a faster, less complete response.                    |
| `force_language`  | string        | —            | Force the language of the retrieved brand data.                                         |
| `maxAgeMs`        | integer       | `7776000000` | Max cache age before a hard refresh.                                                    |
| `timeoutMS`       | integer       | —            | Abort with a 408 if the request exceeds this many milliseconds. Max `300000`.           |

### [​](#response-4)Response

Returns the same envelope as `GET /brand/retrieve`; see [the response field table above](#response). The `stock` object is populated for ticker lookups.

```
{
  "status": "ok",
  "code": 200,
  "brand": {
    "domain": "apple.com",
    "title": "Apple",
    "slogan": "Think Different",
    "stock": { "ticker": "AAPL", "exchange": "NASDAQ" },
    "colors": [
      { "hex": "#7c7c7c", "name": "Namara Grey" },
      { "hex": "#656565", "name": "Hard Coal" }
    ],
    "logos": [
      {
        "url": "https://media.brand.dev/08f7d41a-ef7b-4d83-aff6-e7f67408b85d.png",
        "mode": "has_opaque_background",
        "type": "icon",
        "colors": [{ "hex": "#656565", "name": "Hard Coal" }],
        "resolution": { "width": 302, "height": 302, "aspect_ratio": 1 }
      }
    ],
    "industries": {
      "eic": [
        {
          "industry": "Technology",
          "subindustry": "Hardware & Semiconductors"
        },
        { "industry": "Technology", "subindustry": "Software (B2C)" }
      ]
    }
  }
}
```

## [​](#look-up-by-isin)Look up by ISIN

`GET /brand/retrieve-by-isin` resolves an International Securities Identification Number (ISIN), the 12-character identifier used in financial data feeds, to a brand and populates the `stock` object.

```
curl -G https://api.context.dev/v1/brand/retrieve-by-isin \
  -H "Authorization: Bearer $CONTEXT_DEV_API_KEY" \
  --data-urlencode "isin=US0378331005"
```

10 credits per successful call Use this when you’re working with financial data feeds keyed by ISIN. Malformed ISINs return a 400.

### [​](#request-parameters-5)Request Parameters

| Parameter        | Type    | Default      | Description                                                                   |
| ---------------- | ------- | ------------ | ----------------------------------------------------------------------------- |
| `isin`           | string  | —            | **Required.** 12-character ISIN (e.g. `US0378331005` for Apple Inc.).         |
| `maxSpeed`       | boolean | `false`      | Skip time-consuming operations for a faster, less complete response.          |
| `force_language` | string  | —            | Force the language of the retrieved brand data.                               |
| `maxAgeMs`       | integer | `7776000000` | Max cache age before a hard refresh.                                          |
| `timeoutMS`      | integer | —            | Abort with a 408 if the request exceeds this many milliseconds. Max `300000`. |

### [​](#response-5)Response

Returns the same envelope as `GET /brand/retrieve`; see [the response field table above](#response). The `stock` object is populated with the resolved ticker.

```
{
  "status": "ok",
  "code": 200,
  "brand": {
    "domain": "apple.com",
    "title": "Apple",
    "stock": { "ticker": "AAPL", "exchange": "NASDAQ" },
    "colors": [{ "hex": "#7c7c7c", "name": "Namara Grey" }],
    "logos": [
      {
        "url": "https://media.brand.dev/08f7d41a-ef7b-4d83-aff6-e7f67408b85d.png",
        "mode": "has_opaque_background",
        "type": "icon",
        "resolution": { "width": 302, "height": 302, "aspect_ratio": 1 }
      }
    ]
  }
}
```

## [​](#identify-a-card-transaction)Identify a card transaction

`GET /brand/transaction_identifier` takes a raw transaction descriptor and returns the merchant’s brand profile. Pass `mcc`, `city`, `country_gl`, or `phone` hints when you have them to improve accuracy on ambiguous descriptors.

```
curl -G https://api.context.dev/v1/brand/transaction_identifier \
  -H "Authorization: Bearer $CONTEXT_DEV_API_KEY" \
  --data-urlencode "transaction_info=STARBUCKS STORE 12345" \
  --data-urlencode "country_gl=us" \
  --data-urlencode "mcc=5814"
```

10 credits per successful call Descriptors the API can’t match with confidence return a 400 with `error_code: "NOT_FOUND"`. Setting `high_confidence_only: true` makes the API return that 400 instead of a low-confidence match.

### [​](#request-parameters-6)Request Parameters

| Parameter              | Type                                  | Default | Description                                                                    |
| ---------------------- | ------------------------------------- | ------- | ------------------------------------------------------------------------------ |
| `transaction_info`     | string                                | —       | **Required.** Raw transaction descriptor (e.g. `STARBUCKS STORE 12345`).       |
| `country_gl`           | string (lowercase ISO 3166-1 alpha-2) | —       | Country hint (e.g. `us`, `gb`).                                                |
| `city`                 | string                                | —       | City hint (e.g. `San Francisco`).                                              |
| `mcc`                  | string                                | —       | Merchant Category Code (e.g. `5814`).                                          |
| `phone`                | number                                | —       | Merchant phone hint, when present on the descriptor.                           |
| `high_confidence_only` | boolean                               | `false` | Return a 400 with `error_code: "NOT_FOUND"` instead of a low-confidence match. |
| `maxSpeed`             | boolean                               | `false` | Skip time-consuming operations for a faster, less complete response.           |
| `force_language`       | string                                | —       | Force the language of the retrieved brand data.                                |
| `timeoutMS`            | integer                               | —       | Abort with a 408 if the request exceeds this many milliseconds. Max `300000`.  |

### [​](#response-6)Response

Returns the same envelope as `GET /brand/retrieve`; see [the response field table above](#response).

```
{
  "status": "ok",
  "code": 200,
  "brand": {
    "domain": "starbucks.com",
    "title": "Starbucks",
    "slogan": "Inspiring and nurturing the human spirit — one person, one cup",
    "stock": { "ticker": "SBUX", "exchange": "NASDAQ" },
    "colors": [
      { "hex": "#0bac66", "name": "Secret Garden" },
      { "hex": "#7cd4b4", "name": "Seafoam Blue" }
    ],
    "logos": [
      {
        "url": "https://media.brand.dev/67dc7846-2ca2-4a7b-9877-6bb5a5e2c0e0.png",
        "mode": "has_opaque_background",
        "type": "icon",
        "colors": [{ "hex": "#0bac66", "name": "Secret Garden" }],
        "resolution": { "width": 180, "height": 180, "aspect_ratio": 1 }
      }
    ],
    "industries": {
      "eic": [
        {
          "industry": "Retail & E-commerce",
          "subindustry": "Omnichannel & In-Store Retail"
        }
      ]
    }
  }
}
```

## [​](#handle-errors)Handle errors

Not every input resolves. The API returns a non-2xx response with a `message`, `status: "error"`, and an `error_code`:

```
{
  "message": "Transaction could not be identified.",
  "status": "error",
  "error_code": "NOT_FOUND"
}
```

Common cases:

| Status | `error_code`             | When                                                            |
| ------ | ------------------------ | --------------------------------------------------------------- |
| 400    | `WEBSITE_ACCESS_ERROR`   | Domain can’t be resolved or fetched (DNS failure, hostile WAF). |
| 400    | `INPUT_VALIDATION_ERROR` | Required parameter missing or malformed.                        |
| 400    | `NOT_FOUND`              | Lookup ran but no brand was matched.                            |
| 408    | `REQUEST_TIMEOUT`        | Request exceeded `timeoutMS` or the platform max.               |
| 422    | `FREE_EMAIL_DETECTED`    | Personal-email provider on `/brand/retrieve-by-email`.          |
| 429    | `RATE_LIMITED`           | Rate limit hit.                                                 |

Treat `NOT_FOUND` responses as a normal outcome, not an error. For high-volume pipelines, cache misses for at least 24 hours so you don’t re-resolve the same dead identifier on every retry. Rate limits surface as HTTP 429. Back off exponentially:

```
import ContextDev from "context.dev";

const client = new ContextDev({ apiKey: process.env.CONTEXT_DEV_API_KEY });

async function retrieveWithRetry(domain: string, maxRetries = 3) {
  for (let i = 0; i < maxRetries; i++) {
    try {
      return await client.brand.retrieve({ domain });
    } catch (err: any) {
      if (err.status === 429 && i < maxRetries - 1) {
        await new Promise((r) => setTimeout(r, 2 ** i * 1000));
        continue;
      }
      throw err;
    }
  }
}
```

For the full catalog of error codes, see [Troubleshooting](/optimization/troubleshooting).

## [​](#use-cases)Use cases

* Pre-fill onboarding forms with logo, name, and colors when a user signs up with a work email.
* Enrich CRM leads with industry, socials, address, and logos for outbound playbooks.
* Resolve card transaction descriptors to canonical merchant brands for spend analytics.
* Power “trusted by” logo strips and customer-wall sections with live brand data.
* Pull public-company profiles from a ticker or ISIN for investor-facing dashboards.

[Extract Structured Data from Websites](/guides/extract-structured-data-from-websites)

[Previous](/guides/extract-structured-data-from-websites)

[Extract a Website's Design System](/guides/extract-design-system-from-website)

[Next](/guides/extract-design-system-from-website)

Ctrl+I

Assistant

Responses are generated using AI and may contain mistakes.

[Contact support](mailto:founders@context.dev)

----
url: https://docs.context.dev/use-cases/custom-email-templates
----

> ## Documentation Index
>
> Fetch the complete documentation index at: [/llms.txt](/llms.txt)
>
> Use this file to discover all available pages before exploring further.

[Skip to main content](#content-area)

If you use coding agents for email template design, you know they often produce generic designs that do not match your brand. To get on-theme designs, you need to provide your agents with **“Design Tokens”** of your brand: logos, color schemes, typography, shadows, spacing, background images, component screenshots and more. That’s exactly what Context.dev’s [Brand API](/guides/get-brand-data), [Styleguide API](/guides/extract-design-system-from-website#extract-the-full-styleguide), [Screenshot API](/guides/take-webpage-screenshot) and [Image Scraping API](/guides/scrape-websites-to-markdown#extract-every-image-on-a-page) give you. In this guide, we’ll use these APIs to build a fully-automated brand-themed email template generation pipeline — highly useful for products that let users send emails. Try it:

Live demo

**Welcome** · Airbnb

\#fc3c5c#fc9cb4

Drop this prompt into your AI coding tool to build the branded-email pipeline.

## [​](#architecture)Architecture

The pipeline runs in three phases: gather, generate, and test.

1. The **Gather** step takes in a domain name and collects context about the brand and “design tokens” to set the LLM up to generate relevant and consistent designs.
2. The **Generate** step calls an agent to generate the actual email template in HTML and inline CSS.
3. The **Test** phase is just a bunch of pre-flight checks to ensure the email template will render correctly in the end user’s inbox.

## [​](#prerequisites)Prerequisites

* **A Context.dev API key.** Grab one from the [dashboard](https://context.dev/dashboard) and export it as `CONTEXT_DEV_API_KEY`.
* **An Anthropic API key** for the generation step. Grab one from the [Anthropic Console](https://console.anthropic.com/settings/keys), export it as `ANTHROPIC_API_KEY`, and install the Anthropic SDK (`@anthropic-ai/sdk`, `anthropic`, or `anthropic-sdk-go`).
* **The Context.dev SDK** for your backend:

```
npm install context.dev
```

## [​](#step-1-gather-the-brand-context)Step 1. Gather the brand context

These four APIs have all the context our agent needs:

1. **Brand API**: the brand profile.

   * `logos[]`: logo and icon variants, each with `url`, `type`, and `mode`
   * `backdrops[]`: hero and background imagery
   * `links`: standard page URLs (`pricing`, `blog`, `login`, `signup`, `careers`, `contact`, `privacy`, `terms`)
   * `title`, `description`, `slogan`, `socials[]`, `address`, and `industries`

2. **Styleguide API**: the homepage’s design tokens.

   * `mode`: `light` or `dark`
   * `colors`: `accent`, `background`, and `text`
   * `typography`: `headings.h1` to `h4` and `p`, each with `fontFamily`, `fontFallbacks`, `fontSize`, `fontWeight`, and `lineHeight`
   * `elementSpacing`: an `xs` to `xl` spacing scale
   * `shadows`: `sm` to `xl` plus `inner` box-shadow values
   * `components`: `button` and `card`, each with ready-to-paste `css`
   * `fontLinks`: downloadable font files keyed by family

3. **Screenshot API**: a hosted render of each page.

   * `screenshot`: a CDN URL for the captured PNG
   * `screenshotType`: `viewport` or `fullPage`
   * `width` and `height`: the captured dimensions

4. **Image Scraping API**: each page’s image manifest.

   * `images[]`: every image on the page, each with `src`, `element` (`img`, `svg`, `css`, `background`, and more), `type`, and `alt`
   * `images[].enrichment` (optional): `width`, `height`, `hostedUrl`, and `classification`

This guide gathers the **homepage only**. Brand API also returns `brand.links` (pricing, blog, login, and the rest of the standard pages); running the screenshot and image scrape on a few of those too is useful extra context for the model, but optional.

```
import ContextDev from "context.dev";

const client = new ContextDev({ apiKey: process.env.CONTEXT_DEV_API_KEY });

export async function gatherBrandContext(domain: string) {
  const homepage = `https://${domain}`;

  // Brand, design tokens, a screenshot, and an image manifest, all for the homepage.
  const [brandRes, sgRes, shot, imgs] = await Promise.all([
    client.brand.retrieve({ domain }),
    client.web.extractStyleguide({ domain }),
    client.web.screenshot({ directUrl: homepage, handleCookiePopup: "true" }),
    client.web.webScrapeImages({ url: homepage }),
  ]);

  const brand = brandRes.brand;
  const logos = brand?.logos ?? [];
  const lightLogo =
    logos.find((l) => l.type === "logo" && l.mode === "light") ?? logos[0];
  // CSS background images a flat screenshot can't isolate.
  const backgrounds = (imgs.images ?? [])
    .filter((i) => i.element === "background" || i.element === "css")
    .map((i) => i.src);

  return {
    name: brand?.title ?? domain,
    logo: lightLogo?.url ?? null,
    colors: sgRes.styleguide.colors,
    styleguide: sgRes.styleguide,
    screenshot: shot.screenshot ?? "",
    backgrounds,
  };
}
```

Brand · 10 credits Styleguide · 10 credits Screenshot · 5 credits Image scrape · 1 credit That is about 26 credits per brand. It all caches, so you pay it once per brand and reuse the context for every email you generate.

## [​](#step-2-generate-the-template-with-an-llm)Step 2. Generate the template with an LLM

Now, we feed the gathered context into an LLM call. We recommend **Claude Opus 4.8** for visual design tasks like these. But you can experiment with models as you like. Here’s the **system prompt** we’ll be using. It includes a description of the schema of the design tokens we’re providing and some email HTML/CSS rendering best practices. Save it as a file named `system-prompt.txt`.

System prompt for the email generator

```
import { readFileSync } from "node:fs";
import Anthropic from "@anthropic-ai/sdk";
import { gatherBrandContext } from "./gather";

const anthropic = new Anthropic(); // reads ANTHROPIC_API_KEY
const MODEL = "claude-opus-4-8";   // Opus 4.8 for quality; Sonnet 4.6 for cheaper drafts
const SYSTEM_PROMPT = readFileSync("system-prompt.txt", "utf8");

export async function generateEmailTemplate(domain: string, brief: string) {
  const ctx = await gatherBrandContext(domain);

  const message = await anthropic.messages.create({
    model: MODEL,
    max_tokens: 8000,
    system: SYSTEM_PROMPT,
    messages: [
      {
        role: "user",
        content: [
          { type: "text", text: `Brand: ${ctx.name}. Build: ${brief}.` },
          { type: "text", text: `Logo: ${ctx.logo}\nColors: ${JSON.stringify(ctx.colors)}` },
          { type: "text", text: `Design tokens (styleguide):\n${JSON.stringify(ctx.styleguide)}` },
          { type: "text", text: `Background images: ${JSON.stringify(ctx.backgrounds)}` },
          { type: "image", source: { type: "url", url: ctx.screenshot } },
        ],
      },
    ],
  });

  return message.content.find((b) => b.type === "text")?.text ?? "";
}
```

## [​](#step-3-test-the-rendered-email)Step 3. Test the rendered email

Email HTML/CSS is slightly harder to get right. That makes it very important to test before you send. This pipeline runs two tests:

1. **Lints** to find email-client compatibility issues (oversized HTML, script tags, flexbox/grid, missing image attributes)
2. **Rendered Preview** to find aesthetic inconsistencies

### [​](#lint-the-code)Lint the code

Catch issues in code:

```
// Fast pre-flight. The real check is the cross-client render below.
export function lintEmailHtml(html: string): string[] {
  const problems: string[] = [];
  const kb = Buffer.byteLength(html, "utf8") / 1024;

  if (kb > 102) problems.push(`HTML is ${kb.toFixed(0)}KB; Gmail clips above ~102KB.`);
  if (/<script/i.test(html)) problems.push("Contains a script tag, which every client strips.");
  if (/<link[^>]+stylesheet/i.test(html)) problems.push("Links remote CSS; inline it instead.");
  if (/display\s*:\s*(flex|grid)/i.test(html)) problems.push("Uses flexbox/grid; unreliable in Outlook.");

  for (const img of html.match(/<img\b[^>]*>/gi) ?? []) {
    if (!/\bwidth=/i.test(img)) problems.push("An img is missing an explicit width.");
    if (!/\balt=/i.test(img)) problems.push("An img is missing alt text.");
  }
  return problems;
}
```

If this fails, you can give the errors to an LLM to fix.

### [​](#render-across-real-clients)Render across real clients

The standard way to verify how an email actually looks is a cross-client preview service like [Litmus](https://docs.litmus.com/instant) or [Email on Acid](https://api.emailonacid.com/docs/latest). These services take in the HTML and send back real screenshots of how your email looks on popular email clients across Desktop and Mobile screen sizes. Litmus’s Instant API takes the HTML and hands back an `email_guid` you then pull per-client screenshots from:

```
// Submit the generated HTML for real cross-client screenshots.
export async function renderPreviews(html: string): Promise<string> {
  const auth = Buffer.from(`${process.env.LITMUS_API_KEY}:`).toString("base64");

  const res = await fetch("https://instant-api.litmus.com/v1/emails", {
    method: "POST",
    headers: { "Content-Type": "application/json", Authorization: `Basic ${auth}` },
    body: JSON.stringify({ html_text: html }),
  });

  // Then fetch a screenshot per client; see https://docs.litmus.com/instant.
  const { email_guid } = await res.json();
  return email_guid;
}
```

Previews come back in about ten seconds. Give them to a visual LLM to judge or let the user manually review them. If something seems odd, hand the email back to an LLM to redo it.

## [​](#full-implementation)Full implementation

Here is the whole pipeline (gather, generate, lint) as one runnable script per language. Each one reads `CONTEXT_DEV_API_KEY` and `ANTHROPIC_API_KEY` from the environment, expects the [`system-prompt.txt`](#step-2-generate-the-template-with-an-llm) from Step 2 alongside it, takes a domain and a brief as arguments, and writes `email.html`.

Every Context.dev call below was run against the live API, the Anthropic request shape was verified, and each file was type-checked or compiled before publishing. Run with, e.g., `npx tsx branded-email.ts stripe.com "a welcome email"`.

```
import { readFileSync, writeFileSync } from "node:fs";
import ContextDev from "context.dev";
import Anthropic from "@anthropic-ai/sdk";

const contextdev = new ContextDev({ apiKey: process.env.CONTEXT_DEV_API_KEY });
const MODEL = "claude-opus-4-8"; // Opus 4.8 for quality; Sonnet 4.6 for cheaper drafts
const SYSTEM_PROMPT = readFileSync(new URL("./system-prompt.txt", import.meta.url), "utf8");

// 1. Gather the homepage's brand context.
export async function gatherBrandContext(domain: string) {
  const homepage = `https://${domain}`;
  const [brandRes, sgRes, shot, imgs] = await Promise.all([
    contextdev.brand.retrieve({ domain }),
    contextdev.web.extractStyleguide({ domain }),
    contextdev.web.screenshot({ directUrl: homepage, handleCookiePopup: "true" }),
    contextdev.web.webScrapeImages({ url: homepage }),
  ]);

  const brand = brandRes.brand;
  const logos = brand?.logos ?? [];
  const lightLogo =
    logos.find((l) => l.type === "logo" && l.mode === "light") ?? logos[0];
  const backgrounds = (imgs.images ?? [])
    .filter((i) => i.element === "background" || i.element === "css")
    .map((i) => i.src);

  return {
    name: brand?.title ?? domain,
    logo: lightLogo?.url ?? null,
    colors: sgRes.styleguide.colors,
    styleguide: sgRes.styleguide,
    screenshot: shot.screenshot ?? "",
    backgrounds,
  };
}

// 2. Hand the context to Claude and get back a self-contained HTML email.
export async function generateEmail(domain: string, brief: string): Promise<string> {
  const ctx = await gatherBrandContext(domain);
  const anthropic = new Anthropic(); // reads ANTHROPIC_API_KEY

  const message = await anthropic.messages.create({
    model: MODEL,
    max_tokens: 8000,
    system: SYSTEM_PROMPT,
    messages: [
      {
        role: "user",
        content: [
          { type: "text", text: `Brand: ${ctx.name}. Build: ${brief}.` },
          { type: "text", text: `Logo: ${ctx.logo}\nColors: ${JSON.stringify(ctx.colors)}` },
          { type: "text", text: `Design tokens (styleguide):\n${JSON.stringify(ctx.styleguide)}` },
          { type: "text", text: `Background images: ${JSON.stringify(ctx.backgrounds)}` },
          { type: "image", source: { type: "url", url: ctx.screenshot } },
        ],
      },
    ],
  });

  return message.content.find((b) => b.type === "text")?.text ?? "";
}

// 3. Lint the generated HTML for email-client gotchas.
export function lintEmailHtml(html: string): string[] {
  const problems: string[] = [];
  const kb = Buffer.byteLength(html, "utf8") / 1024;

  if (kb > 102) problems.push(`HTML is ${kb.toFixed(0)}KB; Gmail clips above ~102KB.`);
  if (/<script/i.test(html)) problems.push("Contains a script tag, which every client strips.");
  if (/<link[^>]+stylesheet/i.test(html)) problems.push("Links remote CSS; inline it instead.");
  if (/display\s*:\s*(flex|grid)/i.test(html)) problems.push("Uses flexbox/grid; unreliable in Outlook.");
  for (const img of html.match(/<img\b[^>]*>/gi) ?? []) {
    if (!/\bwidth=/i.test(img)) problems.push("An img is missing an explicit width.");
    if (!/\balt=/i.test(img)) problems.push("An img is missing alt text.");
  }
  return problems;
}

const domain = process.argv[2] ?? "stripe.com";
const brief = process.argv[3] ?? "a welcome email";
const html = await generateEmail(domain, brief);
writeFileSync("email.html", html);
const problems = lintEmailHtml(html);
console.log(problems.length ? `Lint issues: ${problems.join(" | ")}` : "Lint clean.");
console.log("Wrote email.html");
```

## [​](#related-resources)Related resources

## [Brand API](/guides/get-brand-data)

[Logos, backdrops, slogans, socials, and standard page links from a domain.](/guides/get-brand-data)

## [Styleguide API](/guides/extract-design-system-from-website#extract-the-full-styleguide)

[Typography, colors, spacing, shadows, and component CSS in one call.](/guides/extract-design-system-from-website#extract-the-full-styleguide)

## [Screenshot API](/guides/take-webpage-screenshot)

[Capture the homepage and standard pages as hosted PNGs for visual reference.](/guides/take-webpage-screenshot)

## [Best Practices](/optimization/best-practices)

[Caching, error handling, and key hygiene across the API.](/optimization/best-practices)

Was this page helpful?

[Generate Branded Campaign Assets at Scale](/use-cases/branded-campaign-assets)

[Previous](/use-cases/branded-campaign-assets)

[Auto-Enrich Leads in Your CRM](/use-cases/lead-enrichment)

[Next](/use-cases/lead-enrichment)

Ctrl+I

Assistant

Responses are generated using AI and may contain mistakes.

[Contact support](mailto:founders@context.dev)

----
url: https://docs.context.dev/api-reference/brand-intelligence/identify-brand-from-transaction-data
----

> ## Documentation Index
>
> Fetch the complete documentation index at: [/llms.txt](/llms.txt)
>
> Use this file to discover all available pages before exploring further.

[Skip to main content](#content-area)

JavaScript

```
import ContextDev from 'context.dev';

const client = new ContextDev({
  apiKey: process.env['CONTEXT_DEV_API_KEY'], // This is the default and can be omitted
});

const response = await client.brand.identifyFromTransaction({
  transaction_info: 'transaction_info',
});

console.log(response.brand);
```

```
{
  "status": "<string>",
  "brand": {
    "domain": "<string>",
    "title": "<string>",
    "description": "<string>",
    "slogan": "<string>",
    "colors": [
      {
        "hex": "<string>",
        "name": "<string>"
      }
    ],
    "logos": [
      {
        "url": "<string>",
        "colors": [
          {
            "hex": "<string>",
            "name": "<string>"
          }
        ],
        "resolution": {
          "width": 123,
          "height": 123,
          "aspect_ratio": 123
        }
      }
    ],
    "backdrops": [
      {
        "url": "<string>",
        "colors": [
          {
            "hex": "<string>",
            "name": "<string>"
          }
        ],
        "resolution": {
          "width": 123,
          "height": 123,
          "aspect_ratio": 123
        }
      }
    ],
    "socials": [
      {
        "url": "<string>"
      }
    ],
    "address": {
      "street": "<string>",
      "city": "<string>",
      "country": "<string>",
      "country_code": "<string>",
      "state_province": "<string>",
      "state_code": "<string>",
      "postal_code": "<string>"
    },
    "stock": {
      "ticker": "<string>",
      "exchange": "<string>"
    },
    "is_nsfw": true,
    "email": "<string>",
    "phone": "<string>",
    "industries": {
      "eic": [
        {}
      ]
    },
    "links": {
      "careers": "<string>",
      "privacy": "<string>",
      "terms": "<string>",
      "contact": "<string>",
      "blog": "<string>",
      "pricing": "<string>"
    }
  },
  "code": 123,
  "key_metadata": {
    "credits_consumed": 123,
    "credits_remaining": 123
  }
}
```

GET

/

brand

/

transaction\_identifier

JavaScript

```
import ContextDev from 'context.dev';

const client = new ContextDev({
  apiKey: process.env['CONTEXT_DEV_API_KEY'], // This is the default and can be omitted
});

const response = await client.brand.identifyFromTransaction({
  transaction_info: 'transaction_info',
});

console.log(response.brand);
```

```
{
  "status": "<string>",
  "brand": {
    "domain": "<string>",
    "title": "<string>",
    "description": "<string>",
    "slogan": "<string>",
    "colors": [
      {
        "hex": "<string>",
        "name": "<string>"
      }
    ],
    "logos": [
      {
        "url": "<string>",
        "colors": [
          {
            "hex": "<string>",
            "name": "<string>"
          }
        ],
        "resolution": {
          "width": 123,
          "height": 123,
          "aspect_ratio": 123
        }
      }
    ],
    "backdrops": [
      {
        "url": "<string>",
        "colors": [
          {
            "hex": "<string>",
            "name": "<string>"
          }
        ],
        "resolution": {
          "width": 123,
          "height": 123,
          "aspect_ratio": 123
        }
      }
    ],
    "socials": [
      {
        "url": "<string>"
      }
    ],
    "address": {
      "street": "<string>",
      "city": "<string>",
      "country": "<string>",
      "country_code": "<string>",
      "state_province": "<string>",
      "state_code": "<string>",
      "postal_code": "<string>"
    },
    "stock": {
      "ticker": "<string>",
      "exchange": "<string>"
    },
    "is_nsfw": true,
    "email": "<string>",
    "phone": "<string>",
    "industries": {
      "eic": [
        {}
      ]
    },
    "links": {
      "careers": "<string>",
      "privacy": "<string>",
      "terms": "<string>",
      "contact": "<string>",
      "blog": "<string>",
      "pricing": "<string>"
    }
  },
  "code": 123,
  "key_metadata": {
    "credits_consumed": 123,
    "credits_remaining": 123
  }
}
```

[​](#parameter-transaction-info)

transaction\_info

string

required

Transaction information to identify the brand

[​](#parameter-country-gl)

country\_gl

enum\<string>

Optional country code (GL parameter) to specify the country. This affects the geographic location used for search queries.

[​](#parameter-city)

city

string

Optional city name to prioritize when searching for the brand.

[​](#parameter-mcc)

mcc

string

Optional Merchant Category Code (MCC) to help identify the business category/industry.

[​](#parameter-phone)

phone

number

Optional phone number from the transaction to help verify brand match.

[​](#parameter-high-confidence-only)

high\_confidence\_only

boolean

default:false

When set to true, the API will perform an additional verification steps to ensure the identified brand matches the transaction with high confidence.

Detailed brand information

[Retrieve brand data by stock ticker](/api-reference/brand-intelligence/retrieve-brand-data-by-stock-ticker)

[Previous](/api-reference/brand-intelligence/retrieve-brand-data-by-stock-ticker)

[Retrieve simplified brand data by domain](/api-reference/brand-intelligence/retrieve-simplified-brand-data-by-domain)

[Next](/api-reference/brand-intelligence/retrieve-simplified-brand-data-by-domain)

⌘I

Assistant

Responses are generated using AI and may contain mistakes.

[Contact support](mailto:founders@context.dev)

----
url: https://docs.context.dev/api-reference/web-extraction/classify-sic-industries
----

> ## Documentation Index
>
> Fetch the complete documentation index at: [/llms.txt](/llms.txt)
>
> Use this file to discover all available pages before exploring further.

[Skip to main content](#content-area)

JavaScript

```
import ContextDev from 'context.dev';

const client = new ContextDev({
  apiKey: process.env['CONTEXT_DEV_API_KEY'], // This is the default and can be omitted
});

const response = await client.industry.retrieveSic({ input: 'input' });

console.log(response.classification);
```

```
{
  "status": "<string>",
  "domain": "<string>",
  "type": "<string>",
  "codes": [
    {
      "code": "<string>",
      "name": "<string>",
      "majorGroup": "<string>",
      "majorGroupName": "<string>",
      "office": "<string>"
    }
  ],
  "key_metadata": {
    "credits_consumed": 123,
    "credits_remaining": 123
  }
}
```

GET

/

web

/

sic

JavaScript

```
import ContextDev from 'context.dev';

const client = new ContextDev({
  apiKey: process.env['CONTEXT_DEV_API_KEY'], // This is the default and can be omitted
});

const response = await client.industry.retrieveSic({ input: 'input' });

console.log(response.classification);
```

```
{
  "status": "<string>",
  "domain": "<string>",
  "type": "<string>",
  "codes": [
    {
      "code": "<string>",
      "name": "<string>",
      "majorGroup": "<string>",
      "majorGroupName": "<string>",
      "office": "<string>"
    }
  ],
  "key_metadata": {
    "credits_consumed": 123,
    "credits_remaining": 123
  }
}
```

Brand domain or title to retrieve SIC code for. If a valid domain is provided, it will be used for classification, otherwise, we will search for the brand using the provided title.

[​](#parameter-type)

type

enum\<string>

default:original\_sic

Which SIC dataset to classify against. `original_sic` uses the 1987 Standard Industrial Classification system; `latest_sec` uses the current SIC list as published by the SEC. Defaults to `original_sic`.

Available options:

`original_sic`,

`latest_sec`

[​](#parameter-min-results)

minResults

integer

default:1

Minimum number of SIC codes to return. Must be at least 1. Defaults to 1.

Required range: `1 <= x <= 10`

[​](#parameter-max-results)

maxResults

integer

default:5

Maximum number of SIC codes to return. Must be between 1 and 10. Defaults to 5.

Industry classification type, for sic api it will be `sic`

[​](#response-classification)

classification

enum\<string>

Echoes back which SIC dataset was used to classify the brand.

Available options:

`original_sic`,

`latest_sec`

[​](#response-codes)

codes

object\[]

Array of SIC codes with confidence scores. Extra fields depend on the requested classification: `original_sic` results include `majorGroup` and `majorGroupName`; `latest_sec` results include `office`.

[Classify NAICS industries](/api-reference/web-extraction/classify-naics-industries)

[Previous](/api-reference/web-extraction/classify-naics-industries)

[Extract a single product from a URL](/api-reference/web-extraction/extract-a-single-product-from-a-url)

[Next](/api-reference/web-extraction/extract-a-single-product-from-a-url)

Ctrl+I

Assistant

Responses are generated using AI and may contain mistakes.

[Contact support](mailto:founders@context.dev)

----
url: https://docs.context.dev/optimization/compression
----

> ## Documentation Index
>
> Fetch the complete documentation index at: [/llms.txt](/llms.txt)
>
> Use this file to discover all available pages before exploring further.

[Skip to main content](#content-area)

Context.dev supports gzip response compression across the API. Send `Accept-Encoding: gzip` with your request, or use a client that sends compression headers automatically, and Context.dev returns compressed JSON when the response is large enough to benefit. This is most useful for response-heavy endpoints like `/web/scrape/html`, `/web/scrape/markdown`, and `/web/crawl`, all covered in the [Scrape Websites guide](/guides/scrape-websites-to-markdown). In production benchmarks on scrape responses, gzip reduced bytes on the wire by about 82%. Large payloads, especially 500KB and above, saw a median latency improvement of about 70ms, while smaller responses were roughly neutral. For brand, quality, extraction, and classification-style endpoints, gzip is still supported as an option. The benefit depends on how large the response is: small JSON payloads may not move much, while larger AI or crawl-derived responses can benefit from the same transfer-size reduction.

## [​](#enable-gzip)Enable gzip

Most HTTP clients already request compressed responses and decompress them automatically. The main rules are:

* Don’t override `Accept-Encoding` with `identity` unless you are deliberately measuring an uncompressed baseline.
* Let Ruby `Net::HTTP` and Go `net/http` manage `Accept-Encoding`; if you set that header manually in those clients, they return compressed bytes and you must decompress them yourself.
* Treat the decoded JSON as the application contract. Some clients expose `content-encoding: gzip`, some negotiate `br`, and some strip the header after decompression.

All examples below read the API key from `CONTEXT_DEV_API_KEY` and request `/web/scrape/markdown` with automatic decompression. No manual `gunzip` step is needed. Run these from a backend process; never expose the secret API key in browser code.

```
curl --compressed -G https://api.context.dev/v1/web/scrape/markdown \
  -H "Authorization: Bearer $CONTEXT_DEV_API_KEY" \
  --data-urlencode "url=https://example.com" \
  --data-urlencode "useMainContentOnly=true"
```

For Node Axios and Python `requests`, install the client library first:

```
npm install axios
```

With these clients, the decoded JSON is what your application sees. Compression and decompression happen at the HTTP layer.

## [​](#verify-compression)Verify compression

To confirm gzip is being negotiated, inspect the response headers with a client that does not hide the wire-level response:

```
curl -s -o /dev/null -D - -G https://api.context.dev/v1/web/scrape/markdown \
  -H "Authorization: Bearer $CONTEXT_DEV_API_KEY" \
  -H "Accept-Encoding: gzip" \
  --data-urlencode "url=https://example.com"
```

Look for:

```
content-encoding: gzip
```

If you see no `content-encoding` header in application code, the response may be small enough that compression is not worth applying, or your client may have already decompressed it before exposing headers. That is normal for clients like Axios, Ruby `Net::HTTP`, and Go `net/http`. Node’s built-in `fetch` may expose `gzip` or `br` depending on what it negotiated; the response body is still decoded before `response.json()` runs.

## [​](#where-compression-helps-most)Where compression helps most

Gzip improves transfer size for any compressible JSON response, but the latency impact depends on payload size and network conditions.

| Response shape                         | Expected impact                                                                                         |
| -------------------------------------- | ------------------------------------------------------------------------------------------------------- |
| Large rendered HTML                    | Highest benefit. HTML compresses well, and `/web/scrape/html` can return hundreds of KB or multiple MB. |
| Full-site crawl responses              | High benefit. `/web/crawl` can return many Markdown documents in one JSON response.                     |
| Markdown scrape responses              | Moderate benefit. Markdown is usually smaller than HTML, but large pages still benefit.                 |
| Brand and quality-style JSON responses | Optional. Use gzip when available, but expect smaller gains unless the response is large.               |
| Very small responses                   | Usually neutral. The response is already small, so transfer savings are limited.                        |

The benchmarked scrape responses had a median compression ratio of 6.5x for HTML and 4.2x for Markdown. On slower, mobile, metered, or distant networks, the same byte reduction can translate into a larger user-visible latency win than it does from a fast server-to-server connection.

## [​](#keep-connections-warm)Keep connections warm

Compression reduces bytes on the wire, but connection setup can still dominate latency. Reuse HTTP connections instead of creating a fresh client for every request:

```
import axios from "axios";
import https from "node:https";

const api = axios.create({
  baseURL: "https://api.context.dev/v1",
  headers: {
    Authorization: `Bearer ${process.env.CONTEXT_DEV_API_KEY}`,
    "Accept-Encoding": "gzip",
  },
  httpsAgent: new https.Agent({ keepAlive: true }),
});

const { data } = await api.get("/web/scrape/html", {
  params: { url: "https://example.com" },
});
```

For bulk scrape or crawl jobs, a reused client plus gzip is usually the best default: fewer transferred bytes, less network time on large responses, and less work for your application to move data around.

## [​](#combine-with-payload-controls)Combine with payload controls

Compression works best alongside endpoint parameters that avoid returning bytes you do not need:

* Use `useMainContentOnly=true` when you only need the main article or page body.
* Prefer `/web/scrape/markdown` over `/web/scrape/html` when plain text is enough.
* Keep `includeImages=false` and `shortenBase64Images=true` for Markdown scrapes unless image references are required.
* Use `includeSelectors` and `excludeSelectors` to narrow scrape output to the relevant page regions.
* Use `maxAgeMs` for repeated scrapes so cached responses can be served quickly.

## [​](#related-resources)Related resources

## [Scrape websites](/guides/scrape-websites-to-markdown)

[Use scrape and crawl endpoints that benefit most from response compression.](/guides/scrape-websites-to-markdown)

## [Integration best practices](/optimization/best-practices)

[Production patterns for caching, timeouts, retries, and background jobs.](/optimization/best-practices)

## [Prefetching](/optimization/prefetching)

[Warm brand lookups before user-facing requests.](/optimization/prefetching)

## [Troubleshooting](/optimization/troubleshooting)

[Diagnose timeouts, retries, and slow requests.](/optimization/troubleshooting)

Was this page helpful?

[Prefetch for Faster Response](/optimization/prefetching)

[Previous](/optimization/prefetching)

[Fair Use](/optimization/fair-use)

[Next](/optimization/fair-use)

Ctrl+I

Assistant

Responses are generated using AI and may contain mistakes.

[Contact support](mailto:founders@context.dev)

----
url: https://docs.context.dev/nocode/google-sheets
----

> ## Documentation Index
>
> Fetch the complete documentation index at: [/llms.txt](/llms.txt)
>
> Use this file to discover all available pages before exploring further.

[Skip to main content](#content-area)

Logo Link URLs return image bytes directly. Pair them with Google Sheets’ built-in [`IMAGE()`](https://support.google.com/docs/answer/3093333) formula and any cell becomes a logo.

## [​](#prerequisites)Prerequisites

* A Context.dev account with a Logo Link `publicClientId` (prefix `brandLL_`). Copy it from the [Logo Link dashboard](https://context.dev/dashboard/logolink).

## [​](#basic-usage)Basic usage

Use the built-in `IMAGE()` function with a Logo Link URL:

```
=IMAGE("https://logos.context.dev/?publicClientId=brandLL_xxx&domain=stripe.com")
```

## [​](#dynamic-domains)Dynamic domains

Reference a cell containing the domain instead of hardcoding it. If cell `A2` holds `stripe.com`:

```
=IMAGE("https://logos.context.dev/?publicClientId=brandLL_xxx&domain=" & A2)
```

Drag the formula down a column to fetch logos for an entire list of domains.

## [​](#sizing)Sizing

The second argument of `IMAGE()` controls how the logo fits inside the cell. From [Google’s `IMAGE()` reference](https://support.google.com/docs/answer/3093333):

| Mode                  | Value | Behavior                                                                  |
| --------------------- | ----- | ------------------------------------------------------------------------- |
| Fit to cell (default) | `1`   | Resizes the image to fit inside the cell, maintaining aspect ratio        |
| Stretch               | `2`   | Stretches or compresses the image to fill the cell, ignoring aspect ratio |
| Original size         | `3`   | Leaves the image at original size; may cause cropping                     |
| Custom size           | `4`   | Specify custom height and width in pixels as additional parameters        |

```
=IMAGE("https://logos.context.dev/?publicClientId=brandLL_xxx&domain=stripe.com", 2)
```

For mode `4`:

```
=IMAGE("https://logos.context.dev/?publicClientId=brandLL_xxx&domain=stripe.com", 4, 120, 200)
```

Adjust row height and column width so logos display at a reasonable size. Mode `1` (fit to cell) usually looks best. Icons and monograms are square; wordmarks may be wider.

## [​](#fallbacks)Fallbacks

If a logo isn’t published for a domain, Logo Link automatically returns a generated **monogram** based on the domain name. Note that the monogram is an SVG, which Sheets’ `IMAGE()` can’t render (see [Limitations](#limitations)), so for unknown domains the cell may stay blank rather than show the fallback.

## [​](#limitations)Limitations

* **No SVG.** Google Sheets’ `IMAGE()` does not render SVG files. Most Logo Link responses for known brands are PNG, but the monogram fallback is SVG and won’t render, so pass a known domain when you can.
* **No Google Drive URLs.** `IMAGE()` cannot load images from `drive.google.com`. Logo Link’s `logos.context.dev` host is fine.
* **No volatile functions inside the URL.** `IMAGE()` rejects `NOW()`, `RAND()`, and other volatile functions in the base URL.

## [​](#next-steps)Next steps

## [Microsoft Excel](/nocode/microsoft-excel)

[Same workflow in Excel for Microsoft 365 and Excel for the web.](/nocode/microsoft-excel)

## [Logo Link reference](/guides/get-logo-from-url)

[All Logo Link URL options and the publicClientId setup.](/guides/get-logo-from-url)

## [Zapier integration](/nocode/zapier)

[Programmatic enrichment for Google Sheets rows beyond logos.](/nocode/zapier)

## [Logo Link dashboard](https://context.dev/dashboard/logolink)

[Grab your publicClientId and lock it to your own domain.](https://context.dev/dashboard/logolink)

Was this page helpful?

[Zapier](/nocode/zapier)

[Previous](/nocode/zapier)

[Microsoft Excel](/nocode/microsoft-excel)

[Next](/nocode/microsoft-excel)

Ctrl+I

Assistant

Responses are generated using AI and may contain mistakes.

[Contact support](mailto:founders@context.dev)

----
url: https://docs.context.dev/api-reference/brand-intelligence/retrieve-brand-data-by-email-address
----

> ## Documentation Index
>
> Fetch the complete documentation index at: [/llms.txt](/llms.txt)
>
> Use this file to discover all available pages before exploring further.

[Skip to main content](#content-area)

JavaScript

```
import ContextDev from 'context.dev';

const client = new ContextDev({
  apiKey: process.env['CONTEXT_DEV_API_KEY'], // This is the default and can be omitted
});

const response = await client.brand.retrieveByEmail({ email: 'dev@stainless.com' });

console.log(response.brand);
```

```
{
  "status": "<string>",
  "brand": {
    "domain": "<string>",
    "title": "<string>",
    "description": "<string>",
    "slogan": "<string>",
    "colors": [
      {
        "hex": "<string>",
        "name": "<string>"
      }
    ],
    "logos": [
      {
        "url": "<string>",
        "colors": [
          {
            "hex": "<string>",
            "name": "<string>"
          }
        ],
        "resolution": {
          "width": 123,
          "height": 123,
          "aspect_ratio": 123
        }
      }
    ],
    "backdrops": [
      {
        "url": "<string>",
        "colors": [
          {
            "hex": "<string>",
            "name": "<string>"
          }
        ],
        "resolution": {
          "width": 123,
          "height": 123,
          "aspect_ratio": 123
        }
      }
    ],
    "socials": [
      {
        "url": "<string>"
      }
    ],
    "address": {
      "street": "<string>",
      "city": "<string>",
      "country": "<string>",
      "country_code": "<string>",
      "state_province": "<string>",
      "state_code": "<string>",
      "postal_code": "<string>"
    },
    "stock": {
      "ticker": "<string>",
      "exchange": "<string>"
    },
    "is_nsfw": true,
    "email": "<string>",
    "phone": "<string>",
    "industries": {
      "eic": [
        {}
      ]
    },
    "links": {
      "careers": "<string>",
      "privacy": "<string>",
      "terms": "<string>",
      "contact": "<string>",
      "blog": "<string>",
      "pricing": "<string>"
    }
  },
  "code": 123,
  "key_metadata": {
    "credits_consumed": 123,
    "credits_remaining": 123
  }
}
```

GET

/

brand

/

retrieve-by-email

JavaScript

```
import ContextDev from 'context.dev';

const client = new ContextDev({
  apiKey: process.env['CONTEXT_DEV_API_KEY'], // This is the default and can be omitted
});

const response = await client.brand.retrieveByEmail({ email: 'dev@stainless.com' });

console.log(response.brand);
```

```
{
  "status": "<string>",
  "brand": {
    "domain": "<string>",
    "title": "<string>",
    "description": "<string>",
    "slogan": "<string>",
    "colors": [
      {
        "hex": "<string>",
        "name": "<string>"
      }
    ],
    "logos": [
      {
        "url": "<string>",
        "colors": [
          {
            "hex": "<string>",
            "name": "<string>"
          }
        ],
        "resolution": {
          "width": 123,
          "height": 123,
          "aspect_ratio": 123
        }
      }
    ],
    "backdrops": [
      {
        "url": "<string>",
        "colors": [
          {
            "hex": "<string>",
            "name": "<string>"
          }
        ],
        "resolution": {
          "width": 123,
          "height": 123,
          "aspect_ratio": 123
        }
      }
    ],
    "socials": [
      {
        "url": "<string>"
      }
    ],
    "address": {
      "street": "<string>",
      "city": "<string>",
      "country": "<string>",
      "country_code": "<string>",
      "state_province": "<string>",
      "state_code": "<string>",
      "postal_code": "<string>"
    },
    "stock": {
      "ticker": "<string>",
      "exchange": "<string>"
    },
    "is_nsfw": true,
    "email": "<string>",
    "phone": "<string>",
    "industries": {
      "eic": [
        {}
      ]
    },
    "links": {
      "careers": "<string>",
      "privacy": "<string>",
      "terms": "<string>",
      "contact": "<string>",
      "blog": "<string>",
      "pricing": "<string>"
    }
  },
  "code": 123,
  "key_metadata": {
    "credits_consumed": 123,
    "credits_remaining": 123
  }
}
```

[​](#parameter-email)

email

string\<email>

required

Email address to retrieve brand data for (e.g., '<contact@example.com>'). The domain will be extracted from the email. Free email providers (gmail.com, yahoo.com, etc.) and disposable email addresses are not allowed.

[Retrieve brand data by company name](/api-reference/brand-intelligence/retrieve-brand-data-by-company-name)

[Previous](/api-reference/brand-intelligence/retrieve-brand-data-by-company-name)

[Retrieve brand data by stock ticker](/api-reference/brand-intelligence/retrieve-brand-data-by-stock-ticker)

[Next](/api-reference/brand-intelligence/retrieve-brand-data-by-stock-ticker)

Ctrl+I

Assistant

Responses are generated using AI and may contain mistakes.

[Contact support](mailto:founders@context.dev)

----
url: https://docs.context.dev/api-reference/utility/prefetch-brand-data-for-a-domain
----

> ## Documentation Index
>
> Fetch the complete documentation index at: [/llms.txt](/llms.txt)
>
> Use this file to discover all available pages before exploring further.

[Skip to main content](#content-area)

JavaScript

```
import ContextDev from 'context.dev';

const client = new ContextDev({
  apiKey: process.env['CONTEXT_DEV_API_KEY'], // This is the default and can be omitted
});

const response = await client.utility.prefetch({ domain: 'domain' });

console.log(response.domain);
```

```
{
  "status": "<string>",
  "message": "<string>",
  "domain": "<string>",
  "key_metadata": {
    "credits_consumed": 123,
    "credits_remaining": 123
  }
}
```

POST

/

brand

/

prefetch

JavaScript

```
import ContextDev from 'context.dev';

const client = new ContextDev({
  apiKey: process.env['CONTEXT_DEV_API_KEY'], // This is the default and can be omitted
});

const response = await client.utility.prefetch({ domain: 'domain' });

console.log(response.domain);
```

```
{
  "status": "<string>",
  "message": "<string>",
  "domain": "<string>",
  "key_metadata": {
    "credits_consumed": 123,
    "credits_remaining": 123
  }
}
```

0 Credits Only for Subscribers

Domain name to prefetch brand data for

[Retrieve simplified brand data by domain](/api-reference/brand-intelligence/retrieve-simplified-brand-data-by-domain)

[Previous](/api-reference/brand-intelligence/retrieve-simplified-brand-data-by-domain)

[Prefetch brand data by email](/api-reference/utility/prefetch-brand-data-by-email)

[Next](/api-reference/utility/prefetch-brand-data-by-email)

Ctrl+I

Assistant

Responses are generated using AI and may contain mistakes.

[Contact support](mailto:founders@context.dev)

----
url: https://docs.context.dev/api-reference/web-scraping/crawl-website-&-scrape-markdown
----

> ## Documentation Index
>
> Fetch the complete documentation index at: [/llms.txt](/llms.txt)
>
> Use this file to discover all available pages before exploring further.

[Skip to main content](#content-area)

JavaScript

```
import ContextDev from 'context.dev';

const client = new ContextDev({
  apiKey: process.env['CONTEXT_DEV_API_KEY'], // This is the default and can be omitted
});

const response = await client.web.webCrawlMd({ url: 'https://example.com' });

console.log(response.metadata);
```

```
{
  "results": [
    {
      "markdown": "<string>",
      "metadata": {
        "sourceUrl": "<string>",
        "finalUrl": "<string>",
        "title": "<string>",
        "url": "<string>",
        "crawlDepth": 123,
        "statusCode": 123,
        "success": true,
        "description": "<string>",
        "language": "<string>",
        "keywords": [
          "<string>"
        ],
        "canonicalUrl": "<string>",
        "author": "<string>",
        "siteName": "<string>",
        "image": "<string>",
        "favicon": "<string>",
        "publishedTime": "<string>",
        "modifiedTime": "<string>",
        "robots": "<string>",
        "openGraph": {},
        "twitter": {},
        "alternates": [
          {
            "href": "<string>",
            "hreflang": "<string>",
            "type": "<string>",
            "title": "<string>"
          }
        ],
        "jsonLd": [
          {}
        ],
        "additionalMeta": {}
      }
    }
  ],
  "metadata": {
    "numUrls": 123,
    "maxCrawlDepth": 123,
    "numSucceeded": 123,
    "numFailed": 123,
    "numSkipped": 123
  },
  "key_metadata": {
    "credits_consumed": 123,
    "credits_remaining": 123
  }
}
```

POST

/

web

/

crawl

JavaScript

```
import ContextDev from 'context.dev';

const client = new ContextDev({
  apiKey: process.env['CONTEXT_DEV_API_KEY'], // This is the default and can be omitted
});

const response = await client.web.webCrawlMd({ url: 'https://example.com' });

console.log(response.metadata);
```

```
{
  "results": [
    {
      "markdown": "<string>",
      "metadata": {
        "sourceUrl": "<string>",
        "finalUrl": "<string>",
        "title": "<string>",
        "url": "<string>",
        "crawlDepth": 123,
        "statusCode": 123,
        "success": true,
        "description": "<string>",
        "language": "<string>",
        "keywords": [
          "<string>"
        ],
        "canonicalUrl": "<string>",
        "author": "<string>",
        "siteName": "<string>",
        "image": "<string>",
        "favicon": "<string>",
        "publishedTime": "<string>",
        "modifiedTime": "<string>",
        "robots": "<string>",
        "openGraph": {},
        "twitter": {},
        "alternates": [
          {
            "href": "<string>",
            "hreflang": "<string>",
            "type": "<string>",
            "title": "<string>"
          }
        ],
        "jsonLd": [
          {}
        ],
        "additionalMeta": {}
      }
    }
  ],
  "metadata": {
    "numUrls": 123,
    "maxCrawlDepth": 123,
    "numSucceeded": 123,
    "numFailed": 123,
    "numSkipped": 123
  },
  "key_metadata": {
    "credits_consumed": 123,
    "credits_remaining": 123
  }
}
```

1 Credit Per Page

[​](#body-url)

url

string\<uri>

required

The starting URL for the crawl (must include http\:// or https\:// protocol)

[​](#body-max-pages)

maxPages

integer

default:100

Maximum number of pages to crawl. Hard cap: 500.

Required range: `1 <= x <= 500`

[​](#body-max-depth)

maxDepth

integer

Maximum link depth from the starting URL (0 = only the starting page)

Required range: `x >= 0`

[​](#body-url-regex)

urlRegex

string

Regex pattern. Only URLs matching this pattern will be followed and scraped.

Example:

`"^https?://[^/]+/blog/"`

[​](#body-include-links)

includeLinks

boolean

default:true

Preserve hyperlinks in the Markdown output

[​](#body-include-images)

includeImages

boolean

default:false

Include image references in the Markdown output

[​](#body-shorten-base64-images)

shortenBase64Images

boolean

default:true

Truncate base64-encoded image data in the Markdown output

[​](#body-use-main-content-only)

useMainContentOnly

boolean

default:false

Extract only the main content, stripping headers, footers, sidebars, and navigation

[​](#body-follow-subdomains)

followSubdomains

boolean

default:false

When true, follow links on subdomains of the starting URL's domain (e.g. docs.example.com when starting from example.com). www and apex are always treated as equivalent.

[​](#body-pdf)

pdf

object

PDF parsing controls. Use start/end to limit text extraction and OCR to an inclusive 1-based page range.

Show child attributes

[​](#body-include-frames)

includeFrames

boolean

default:false

When true, the contents of iframes are rendered to Markdown for each crawled page.

[​](#body-include-selectors)

includeSelectors

string\[]

CSS selectors. When provided, only matching HTML subtrees (and their descendants) are kept before each crawled page is converted to Markdown. When omitted, the entire document is kept. Examples: "article.main", "#content", "\[role=main]".

Maximum array length: `50`

Maximum string length: `2048`

[​](#body-exclude-selectors)

excludeSelectors

string\[]

CSS selectors to remove before each crawled page is converted to Markdown. Applied after includeSelectors. Exclusion takes precedence: an element matching both is removed. Examples: "nav", "footer", ".ad-banner", "\[aria-hidden=true]".

Maximum array length: `50`

Maximum string length: `2048`

[​](#body-max-age-ms)

maxAgeMs

integer

default:86400000

Return a cached result if a prior scrape for the same parameters exists and is younger than this many milliseconds. Defaults to 1 day (86400000 ms) when omitted. Max is 30 days (2592000000 ms). Set to 0 to always scrape fresh.

Required range: `0 <= x <= 2592000000`

[​](#body-wait-for-ms)

waitForMs

integer

Optional browser wait time in milliseconds after initial page load for each crawled page. Min: 0. Max: 30000 (30 seconds).

Required range: `0 <= x <= 30000`

[​](#body-stop-after-ms)

stopAfterMs

integer

default:80000

Soft time budget for the crawl in milliseconds. After each scrape, the crawler checks the elapsed time and, if exceeded, returns the pages collected so far instead of continuing. Min: 10000 (10s). Max: 110000 (110s). Default: 80000 (80s).

Required range: `10000 <= x <= 110000`

[​](#body-country)

country

enum\<string>

Two-letter ISO 3166-1 alpha-2 country code identifying a supported Context.dev residential proxy exit location. Must be one of Context.dev's supported countries. When provided, Context.dev fetches the target page from that country.

[​](#body-timeout-ms)

timeoutMS

integer

Optional timeout in milliseconds for the request. If the request takes longer than this value, it will be aborted with a 408 status code. Maximum allowed value is 300000ms (5 minutes).

Required range: `1000 <= x <= 300000`

#### Response

Successful response

[​](#response-results)

results

object\[]

required

Show child attributes

[Crawl Sitemap](/api-reference/web-scraping/crawl-sitemap)

[Previous](/api-reference/web-scraping/crawl-sitemap)

[Web Search](/api-reference/web-scraping/web-search)

[Next](/api-reference/web-scraping/web-search)

⌘I

Assistant

Responses are generated using AI and may contain mistakes.

[Contact support](/cdn-cgi/l/email-protection#2b4d445e454f4e59586b4844455f4e535f054f4e5d)

----
url: https://docs.context.dev/install-mcp
----

> ## Documentation Index
>
> Fetch the complete documentation index at: [/llms.txt](/llms.txt)
>
> Use this file to discover all available pages before exploring further.

[Skip to main content](#content-area)

Context.dev’s Model Context Protocol (MCP) server exposes the full API to any MCP-aware AI tool: Claude Code, Cursor, VS Code, Zed, Claude Desktop, and the rest. This gives your agent tools to resolve a brand, scrape webpages, crawl entire sites, pull styleguides, and more. Context.dev offers a hosted MCP server you can connect to at `https://context-dev.stlmcp.com`. Jump to [Run the MCP server locally](#run-the-mcp-server-locally) if you’d rather run the server on your own machine instead.

## [​](#connect-your-mcp-client)Connect your MCP client

Every MCP client reads a JSON config file that lists the servers it should connect to. The shape is the same across clients; the file path differs.

### [​](#claude-code)Claude Code

Use the `claude mcp` CLI:

terminal

```
claude mcp add context_dev_api \
    --transport http \
    --header "x-context-dev-api-key: ctxt_secret_..." \
    https://context-dev.stlmcp.com
```

This writes to `~/.claude.json`. Restart Claude Code and the `context_dev_api` tool group appears in the tool picker.

### [​](#cursor)Cursor

The fast path is the install button: [](https://cursor.com/en-US/install-mcp?name=context_dev_api\&config=eyJuYW1lIjoiY29udGV4dF9kZXZfYXBpIiwidHJhbnNwb3J0IjoiaHR0cCIsInVybCI6Imh0dHBzOi8vY29udGV4dC1kZXYuc3RsbWNwLmNvbSIsImhlYWRlcnMiOnsieC1jb250ZXh0LWRldi1hcGkta2V5IjoiTXkgQVBJIEtleSJ9fQ==)After clicking it, open Cursor Settings → Tools & MCP → New MCP Server, paste your API key into the `x-context-dev-api-key` header value, and save. To configure manually, edit `~/.cursor/mcp.json`:

\~/.cursor/mcp.json

```
{
  "mcpServers": {
    "context_dev_api": {
      "transport": "http",
      "url": "https://context-dev.stlmcp.com",
      "headers": {
        "x-context-dev-api-key": "ctxt_secret_..."
      }
    }
  }
}
```

### [​](#vs-code)VS Code

Open the install link in VS Code: [Open in VS Code](https://vscode.stainless.com/mcp/%7B%22name%22%3A%22context_dev_api%22%2C%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fcontext-dev.stlmcp.com%22%2C%22headers%22%3A%7B%22x-context-dev-api-key%22%3A%22My%20API%20Key%22%7D%7D) VS Code prompts to confirm, then writes to your user `mcp.json`. Open it via Command Palette → “MCP: Open User Configuration” if you need to edit the API key.

mcp.json

```
{
  "servers": {
    "context_dev_api": {
      "type": "http",
      "url": "https://context-dev.stlmcp.com",
      "headers": {
        "x-context-dev-api-key": "ctxt_secret_..."
      }
    }
  }
}
```

### [​](#any-other-mcp-client)Any other MCP client

The [Model Context Protocol clients directory](https://modelcontextprotocol.io/clients) has the up-to-date list. Most clients accept the streamable-HTTP config shape:

mcp-config.json

```
{
  "mcpServers": {
    "context_dev_api": {
      "transport": "http",
      "url": "https://context-dev.stlmcp.com",
      "headers": { "x-context-dev-api-key": "ctxt_secret_..." }
    }
  }
}
```

If your client only supports stdio (Claude Desktop is the common one), see [Run the MCP server locally](#run-the-mcp-server-locally).

## [​](#how-code-mode-works)How Code Mode works

The server is built on the “Code Mode” tool scheme. Instead of one tool per API endpoint, the agent gets two tools and writes TypeScript SDK code against them:

1. **`search_docs`.** The agent queries the Context.dev SDK docs for the function and parameters it needs.
2. **`execute`.** The agent writes TypeScript that calls the Context.dev SDK. The server runs that code in a Stainless-hosted sandbox without network or filesystem access (other than the Context.dev API call itself) and returns whatever the code returns.

The benefit: the agent can compose multiple SDK calls into one tool invocation, branch on results, filter responses, and return only what you asked for. A single user prompt like “get stripe.com’s brand colors, logos, and pricing-page URL” turns into one tool call that runs `client.brand.retrieve()` and walks the response (`brand.colors`, `brand.logos`, `brand.links.pricing`), instead of a half-dozen back-and-forth rounds of single-purpose tool calls. You don’t need to know this is happening. From the agent’s side, it looks like calling a normal tool. From your side, it looks like the agent has the full Context.dev SDK in scope.

## [​](#verify-it-loaded)Verify it loaded

After installing, ask your agent something only Context.dev can answer:

> What are the brand colors for stripe.com?

The agent should call the Context.dev MCP `execute` tool and return Stripe’s actual brand colors (`#543cfb` “Meteor Shower” and a few secondaries). If it tries to describe the colors from training data instead of calling the tool, the server isn’t wired up. Re-check the config file path and the API key value.

## [​](#run-the-mcp-server-locally)Run the MCP server locally

Run the server on your own machine when you’d rather not connect to the hosted endpoint: for offline / air-gapped setups, when you want to inspect the tool definitions yourself, or when a client only supports stdio. You need Node 18+ installed.

### [​](#quick-start-stdio)Quick start (stdio)

terminal

```
export CONTEXT_DEV_API_KEY="ctxt_secret_..."
npx -y context.dev-mcp@latest
```

The server speaks MCP over stdio. Most clients launch this command themselves once you put it in their config; you only run it by hand to verify the package downloads and starts.

### [​](#launch-over-http)Launch over HTTP

terminal

```
# Streamable HTTP on a chosen port (default 3000).
npx -y context.dev-mcp@latest --transport=http --port=3000

# Or bind to a Unix socket.
npx -y context.dev-mcp@latest --transport=http --socket=/tmp/contextdev-mcp.sock
```

Authenticate to the local HTTP server with either `Authorization: Bearer <key>` or `x-context-dev-api-key`, the same headers the hosted server accepts.

### [​](#have-a-client-launch-the-server-for-you)Have a client launch the server for you

For clients that support stdio (Claude Desktop and most others), point the config at the `npx` command and the client will spawn it on demand:

mcp-config.json

```
{
  "mcpServers": {
    "context_dev_api": {
      "command": "npx",
      "args": ["-y", "context.dev-mcp@latest"],
      "env": { "CONTEXT_DEV_API_KEY": "ctxt_secret_..." }
    }
  }
}
```

For **Claude Desktop**, this config lives at `~/Library/Application Support/Claude/claude_desktop_config.json` (macOS) or `%APPDATA%\Claude\claude_desktop_config.json` (Windows). Restart Claude Desktop after editing; the hammer icon in the chat input lights up, and clicking it shows the Context.dev tools. For clients that support **local HTTP**, start the server with `--transport=http --port=3000` and point the config at `http://localhost:3000`:

mcp-config.json

```
{
  "mcpServers": {
    "context_dev_api": {
      "url": "http://localhost:3000",
      "headers": { "Authorization": "Bearer ctxt_secret_..." }
    }
  }
}
```

## [​](#next-steps)Next steps

## [Agent Quickstart](/agent-quickstart)

[The full agent setup: copyable system prompt, SKILL.md, and MCP, in one page.](/agent-quickstart)

## [SKILL.md](/install-skill)

[Install the drop-in skill file that teaches your agent the Context.dev API.](/install-skill)

## [API Reference](/api-reference/brand-intelligence/retrieve-brand-data-by-domain)

[The underlying endpoints the MCP server’s code-mode tool calls.](/api-reference/brand-intelligence/retrieve-brand-data-by-domain)

## [Brand Intelligence](/guides/get-brand-data)

[What the agent can resolve: name, domain, email, ticker, ISIN, transaction.](/guides/get-brand-data)

Was this page helpful?

[Install the Context.dev skill](/install-skill)

[Previous](/install-skill)

[Install the CLI](/install-cli)

[Next](/install-cli)

Ctrl+I

Assistant

Responses are generated using AI and may contain mistakes.

[Contact support](mailto:founders@context.dev)

----
url: https://docs.context.dev/nocode/microsoft-excel
----

> ## Documentation Index
>
> Fetch the complete documentation index at: [/llms.txt](/llms.txt)
>
> Use this file to discover all available pages before exploring further.

[Skip to main content](#content-area)

Logo Link URLs return image bytes directly. Pair them with Excel’s [`IMAGE()`](https://support.microsoft.com/en-us/office/image-function-7e112975-5e52-4f2a-b9da-1d913d51f5d5) function and any cell becomes a logo.

The `IMAGE()` function is available in Excel for Microsoft 365, Excel for Microsoft 365 for Mac, Excel for the web, Excel 2024, Excel 2024 for Mac, Excel for iPhone, and Excel for Android phones. It is **not** available in older perpetual-license desktop Excel versions.

## [​](#prerequisites)Prerequisites

* A Context.dev account with a Logo Link `publicClientId` (prefix `brandLL_`). Copy it from the [Logo Link dashboard](https://context.dev/dashboard/logolink).

## [​](#basic-usage)Basic usage

Use `IMAGE()` with a Logo Link URL:

```
=IMAGE("https://logos.context.dev/?publicClientId=brandLL_xxx&domain=github.com")
```

## [​](#dynamic-domains)Dynamic domains

Reference a cell containing the domain instead of hardcoding it. If cell `A2` holds `github.com`:

```
=IMAGE("https://logos.context.dev/?publicClientId=brandLL_xxx&domain=" & A2)
```

Drag the formula down a column to fetch logos for an entire list of domains.

## [​](#syntax)Syntax

From [Microsoft’s `IMAGE()` reference](https://support.microsoft.com/en-us/office/image-function-7e112975-5e52-4f2a-b9da-1d913d51f5d5):

```
=IMAGE(source, [alt_text], [sizing], [height], [width])
```

| Argument          | Purpose                                                   |
| ----------------- | --------------------------------------------------------- |
| `source`          | URL of the image (must use `https`). Required.            |
| `alt_text`        | Alternative text for accessibility. Optional.             |
| `sizing`          | Image sizing mode (see below). Optional.                  |
| `height`, `width` | Custom dimensions in pixels. Used only with `sizing = 3`. |

### [​](#sizing-modes)Sizing modes

| Value | Behavior                                                      |
| ----- | ------------------------------------------------------------- |
| `0`   | Fit the image in the cell and maintain aspect ratio (default) |
| `1`   | Fill the cell with the image; ignore aspect ratio             |
| `2`   | Use the original image size; may exceed the cell boundary     |
| `3`   | Customize the image size with `height` and `width`            |

Example with alt text and fill mode:

```
=IMAGE("https://logos.context.dev/?publicClientId=brandLL_xxx&domain=github.com", "GitHub logo", 1)
```

Adjust row height and column width so logos display at a reasonable size. Sizing mode `0` (fit and maintain aspect) usually looks best. Icons and monograms are square; wordmarks may be wider.

## [​](#fallbacks)Fallbacks

If a logo isn’t published for a domain, Logo Link automatically returns a generated **monogram** based on the domain name. Note that the monogram is an SVG, which Excel’s `IMAGE()` can’t render (see [Limitations](#limitations)), so for unknown domains the cell may stay blank rather than show the fallback.

## [​](#limitations)Limitations

* **No SVG.** Excel’s `IMAGE()` supports BMP, JPG/JPEG, GIF, TIFF, PNG, ICO, and WEBP (WEBP is unsupported on Web and Android). It does not render SVG. Most Logo Link responses for known brands are PNG, but the monogram fallback is SVG and won’t render, so pass a known domain when you can.
* **HTTPS only.** `IMAGE()` requires `https`. Logo Link is `https://logos.context.dev/...`, so this is already met.
* **No redirected URLs.** If the source URL redirects, Excel blocks it for security. Logo Link serves the image bytes directly, no redirects.
* **No auth-gated URLs.** If the source URL requires authentication, the image doesn’t render. Logo Link’s `publicClientId` is a query-string parameter, not auth, so it works.

## [​](#next-steps)Next steps

## [Google Sheets](/nocode/google-sheets)

[Same workflow in Google Sheets with the `IMAGE()` formula.](/nocode/google-sheets)

## [Logo Link reference](/guides/get-logo-from-url)

[All Logo Link URL options and the publicClientId setup.](/guides/get-logo-from-url)

## [Zapier integration](/nocode/zapier)

[Programmatic enrichment for spreadsheet rows beyond logos.](/nocode/zapier)

## [Logo Link dashboard](https://context.dev/dashboard/logolink)

[Grab your publicClientId and lock it to your own domain.](https://context.dev/dashboard/logolink)

Was this page helpful?

[Google Sheets](/nocode/google-sheets)

[Previous](/nocode/google-sheets)

Ctrl+I

Assistant

Responses are generated using AI and may contain mistakes.

[Contact support](mailto:founders@context.dev)

----
url: https://docs.context.dev/api-reference/web-extraction/scrape-fonts
----

> ## Documentation Index
>
> Fetch the complete documentation index at: [/llms.txt](/llms.txt)
>
> Use this file to discover all available pages before exploring further.

[Skip to main content](#content-area)

JavaScript

```
import ContextDev from 'context.dev';

const client = new ContextDev({
  apiKey: process.env['CONTEXT_DEV_API_KEY'], // This is the default and can be omitted
});

const response = await client.web.extractFonts();

console.log(response.code);
```

```
{
  "status": "<string>",
  "domain": "<string>",
  "fonts": [
    {
      "font": "<string>",
      "uses": [
        "<string>"
      ],
      "fallbacks": [
        "<string>"
      ],
      "num_elements": 123,
      "num_words": 123,
      "percent_words": 123,
      "percent_elements": 123
    }
  ],
  "code": 123,
  "fontLinks": {},
  "key_metadata": {
    "credits_consumed": 123,
    "credits_remaining": 123
  }
}
```

GET

/

web

/

fonts

JavaScript

```
import ContextDev from 'context.dev';

const client = new ContextDev({
  apiKey: process.env['CONTEXT_DEV_API_KEY'], // This is the default and can be omitted
});

const response = await client.web.extractFonts();

console.log(response.code);
```

```
{
  "status": "<string>",
  "domain": "<string>",
  "fonts": [
    {
      "font": "<string>",
      "uses": [
        "<string>"
      ],
      "fallbacks": [
        "<string>"
      ],
      "num_elements": 123,
      "num_words": 123,
      "percent_words": 123,
      "percent_elements": 123
    }
  ],
  "code": 123,
  "fontLinks": {},
  "key_metadata": {
    "credits_consumed": 123,
    "credits_remaining": 123
  }
}
```

Domain name to extract fonts from (e.g., 'example.com', 'google.com'). The domain will be automatically normalized and validated. You must provide either 'domain' or 'directUrl', but not both.

[​](#parameter-direct-url)

directUrl

string\<uri>

A specific URL to fetch fonts from directly, bypassing domain resolution (e.g., '<https://example.com/design-system>'). When provided, fonts are extracted from this exact URL. You must provide either 'domain' or 'directUrl', but not both.

[​](#parameter-max-age-ms)

maxAgeMs

integer

default:7776000000

Maximum age in milliseconds for cached data before the API performs a hard refresh. Defaults to 3 months (7776000000 ms). Values below 1 day (86400000 ms) are clamped to 1 day; values above 1 year (31536000000 ms) are clamped to 1 year.

Required range: `86400000 <= x <= 31536000000`

[​](#parameter-timeout-ms)

[​](#response-domain)

domain

string

required

The normalized domain that was processed

[​](#response-fonts)

fonts

object\[]

required

Array of font usage information

Show child attributes

[​](#response-code)

code

integer

required

HTTP status code, e.g., 200

[​](#response-font-links)

fontLinks

object

Font assets keyed by family name as it appears in the fonts array (non-generic names only). Clients match entries in fonts to pick a file URL from files. Omitted when no families resolve to Google or custom @font-face URLs.

[Scrape Styleguide](/api-reference/web-extraction/scrape-styleguide)

[Previous](/api-reference/web-extraction/scrape-styleguide)

[Classify NAICS industries](/api-reference/web-extraction/classify-naics-industries)

[Next](/api-reference/web-extraction/classify-naics-industries)

⌘I

Assistant

Responses are generated using AI and may contain mistakes.

[Contact support](mailto:founders@context.dev)