{"id":46384563,"url":"https://github.com/builtwith/builtwith-official-cli","last_synced_at":"2026-05-08T06:53:42.392Z","repository":{"id":342188944,"uuid":"1173172064","full_name":"builtwith/builtwith-official-cli","owner":"builtwith","description":"Non-interactive, scriptable CLI for the BuiltWith API — pipeline-friendly with JSON/table/CSV output and structured exit codes","archived":false,"fork":false,"pushed_at":"2026-05-08T04:18:12.000Z","size":83,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-05-08T06:25:16.487Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/builtwith.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-03-05T04:38:24.000Z","updated_at":"2026-05-08T04:17:14.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/builtwith/builtwith-official-cli","commit_stats":null,"previous_names":["builtwith/builtwith-cli"],"tags_count":11,"template":false,"template_full_name":null,"purl":"pkg:github/builtwith/builtwith-official-cli","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/builtwith%2Fbuiltwith-official-cli","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/builtwith%2Fbuiltwith-official-cli/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/builtwith%2Fbuiltwith-official-cli/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/builtwith%2Fbuiltwith-official-cli/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/builtwith","download_url":"https://codeload.github.com/builtwith/builtwith-official-cli/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/builtwith%2Fbuiltwith-official-cli/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32770544,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-08T02:36:36.067Z","status":"ssl_error","status_checked_at":"2026-05-08T02:36:07.210Z","response_time":54,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-03-05T07:08:12.801Z","updated_at":"2026-05-08T06:53:42.385Z","avatar_url":"https://github.com/builtwith.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# BuiltWith CLI 🔍\n\n\u003e Non-interactive, scriptable CLI for the [BuiltWith API](https://api.builtwith.com) — designed for automation, CI/CD pipelines, and AI agent consumption.\n\n```bash\nbw domain lookup shopify.com --format table\nbw domain lookup shopify.com --nopii | jq '.Results[0].Technologies[].Name'\nbw change lookup shopify.com --since \"last month\"\nbw live feed --duration 60 \u003e events.ndjson\nbw mcp   # start MCP server for Claude Desktop, VS Code, etc.\n```\n\n## 🤔 Why this exists\n\nThe [BuiltWith TUI](https://github.com/builtwith/builtwith-tui) is great for interactive exploration. This CLI is intentionally different:\n\n- **stdout = data only** (JSON/table/CSV) — safe to pipe anywhere\n- **stderr = human output** (spinners, errors, debug info)\n- **Structured exit codes** — scripts can distinguish auth failures from rate limits from network errors\n- **Multiple auth paths** — works in CI with env vars, locally with rc files, or inline with `--key`\n\n---\n\n## 📦 Installation\n\n```bash\nnpm install -g builtwith-official-cli\n```\n\nOr run directly without installing:\n\n```bash\nnpx builtwith-official-cli domain lookup example.com --key YOUR_KEY\n```\n\nRegisters as both `bw` (short) and `builtwith` (discoverable).\n\n---\n\n## 🔑 Authentication\n\nAPI key is resolved in priority order:\n\n| Priority | Method |\n|---|---|\n| 1 | `--key \u003cvalue\u003e` CLI flag |\n| 2 | `BUILTWITH_API_KEY` environment variable |\n| 3 | `.builtwithrc` in current directory |\n| 4 | `.builtwithrc` in home directory |\n\n`.env` files in the current directory are loaded automatically, so `BUILTWITH_API_KEY=xxx` in `.env` works too.\n\n**`.builtwithrc` format:**\n```json\n{\"key\": \"YOUR_API_KEY\"}\n```\n\nCopy `.builtwithrc.example` to get started:\n```bash\ncp .builtwithrc.example ~/.builtwithrc\n# then edit with your key\n```\n\n---\n\n## 💻 Commands\n\n### 🌐 Domain\n\n```bash\nbw domain lookup \u003cdomain\u003e [flags]\n```\n\n| Flag | Description |\n|---|---|\n| `--nopii` | Exclude PII data |\n| `--nometa` | Exclude meta data |\n| `--noattr` | Exclude attribution data |\n| `--liveonly` | Only currently-live technologies |\n| `--fdrange \u003cYYYYMMDD-YYYYMMDD\u003e` | First-detected date range |\n| `--ldrange \u003cYYYYMMDD-YYYYMMDD\u003e` | Last-detected date range |\n\n```bash\nbw domain lookup shopify.com\nbw domain lookup shopify.com --format table\nbw domain lookup shopify.com --nopii --liveonly | jq '.Results[0].Technologies[].Name'\nbw domain lookup shopify.com --fdrange 20240101-20241231\n```\n\n### 🔄 Change\n\n```bash\nbw change lookup \u003cdomain[,domain2]\u003e [--since \u003cdate\u003e]\n```\n\n```bash\nbw change lookup shopify.com\nbw change lookup shopify.com,builtwith.com --since \"last month\"\n```\n\n### 📋 Lists\n\n```bash\nbw lists tech \u003ctech\u003e [--offset \u003cn\u003e] [--limit \u003cn\u003e]\n```\n\n```bash\nbw lists tech WordPress\nbw lists tech Shopify --limit 50 --offset 100\n```\n\n### 🔗 Relationships\n\n```bash\nbw relationships lookup \u003cdomain\u003e\n```\n\n### 🆓 Free\n\n```bash\nbw free lookup \u003cdomain\u003e\n```\n\n### 🏢 Company\n\n```bash\nbw company find \u003cname\u003e\n```\n\n```bash\nbw company find \"Shopify\"\n```\n\n### 🏷️ Tags\n\n```bash\nbw tags lookup \u003clookup\u003e\n```\n\n### 💡 Recommendations\n\n```bash\nbw recommendations lookup \u003cdomain\u003e\n```\n\n### ↪️ Redirects\n\n```bash\nbw redirects lookup \u003cdomain\u003e\n```\n\n### 🔤 Keywords\n\n```bash\nbw keywords lookup \u003cdomain\u003e\n```\n\n### 📈 Trends\n\n```bash\nbw trends tech \u003ctech\u003e\n```\n\n```bash\nbw trends tech React\n```\n\n### 🛍️ Products\n\n```bash\nbw products search \u003cquery\u003e [--page \u003cn\u003e] [--limit \u003cn\u003e]\n```\n\n```bash\nbw products search \"coffee maker\"\nbw products search \"running shoes\" --page 2 --limit 50\n```\n\n### 🛡️ Trust\n\n```bash\nbw trust lookup \u003cdomain\u003e\n```\n\n### 🔎 Vector Search\n\n```bash\nbw vector search \u003cquery\u003e [--limit \u003cn\u003e]\n```\n\n```bash\nbw vector search \"react framework\"\nbw vector search \"ecommerce platform\" --limit 20\n```\n\n### 🔐 Auth\n\nObtain a temporary `bw-` prefixed API token via browser approval — no API key needed to run this command.\n\n```bash\nbw auth login\n```\n\nFlow:\n1. Prints a `builtwith.com` URL — open it in your browser and click **Approve**\n2. Polls automatically every 5 seconds\n3. Prints the `access_token` (`bw-...`) on approval — use it as `BW_API_KEY`\n\n### 💳 Payment\n\nManage API credits autonomously.\n\n```bash\nbw payment balance           # current credit balance\nbw payment config            # limits, pricing, monthly usage\nbw payment purchase \u003ccredits\u003e # purchase credits (minimum 2000)\n```\n\n```bash\nbw payment balance\nbw payment purchase 2000\n```\n\n### 👤 Account\n\n```bash\nbw account whoami\nbw account usage\n```\n\n### 📡 Live Feed\n\nStream live technology detection events as [NDJSON](https://jsonlines.org/), one event per line.\n\n```bash\nbw live feed [--duration \u003cseconds\u003e]\n```\n\n```bash\n# Stream indefinitely (Ctrl+C to stop)\nbw live feed\n\n# Capture 60 seconds of events\nbw live feed --duration 60 \u003e events.ndjson\n\n# Pipe to jq in real time\nbw live feed | jq --unbuffered '.domain'\n```\n\n---\n\n## 🚩 Global Flags\n\nAvailable on every command:\n\n| Flag | Description |\n|---|---|\n| `--key \u003capikey\u003e` | API key (highest priority) |\n| `--format \u003cfmt\u003e` | `json` (default) \\| `table` \\| `csv` |\n| `--no-color` | Disable color on stderr |\n| `--dry-run` | Print request URL (key masked) and exit |\n| `--debug` | Print HTTP metadata to stderr |\n| `--quiet` | Suppress spinner/info stderr output |\n\n---\n\n## 🖨️ Output Formats\n\n### JSON (default)\n\n```bash\nbw domain lookup example.com | jq '.Results[0].Technologies[].Name'\n```\n\n### Table\n\n```bash\nbw domain lookup example.com --format table\n```\n\n### CSV\n\n```bash\nbw domain lookup example.com --format csv \u003e results.csv\n```\n\n---\n\n## 🚦 Exit Codes\n\nScripts can use exit codes to handle different failure modes:\n\n| Code | Meaning |\n|---|---|\n| `0` | ✅ Success |\n| `1` | 💥 Unexpected error |\n| `2` | 🔐 Auth failure (missing key, 401, 403) |\n| `3` | 🔍 Not found (404) |\n| `4` | ⏱️ Rate limit (429) |\n| `5` | ⚠️ Other API error |\n| `6` | 🌐 Network failure |\n| `7` | ❌ Invalid input |\n| `8` | 🛑 Interrupted (SIGINT) |\n\n```bash\nbw domain lookup example.com\ncase $? in\n  0) echo \"success\" ;;\n  2) echo \"check your API key\" ;;\n  4) echo \"rate limited — slow down\" ;;\n  6) echo \"network error\" ;;\nesac\n```\n\n---\n\n## 🔧 Pipeline Examples\n\n```bash\n# Get all live tech names for a domain\nbw domain lookup shopify.com --liveonly | \\\n  jq -r '.Results[0].Technologies[].Name' | sort\n\n# Check if a domain uses WordPress\nbw domain lookup example.com --quiet --liveonly | \\\n  jq -e '.Results[0].Technologies[] | select(.Name == \"WordPress\")' \u003e /dev/null \\\n  \u0026\u0026 echo \"uses WordPress\"\n\n# Export tech stack to CSV\nbw domain lookup shopify.com --format csv \u003e shopify-tech.csv\n\n# Capture 5 minutes of live events\nbw live feed --duration 300 --quiet \u003e feed.ndjson\n\n# Find all sites using a technology (paginated)\nfor offset in 0 20 40 60 80; do\n  bw domain lists tech React --offset $offset --limit 20 --quiet\ndone | jq -s 'add'\n\n# CI/CD: fail build if domain check fails\nbw domain lookup mysite.com --key \"$BUILTWITH_API_KEY\" --quiet || exit 1\n```\n\n---\n\n## 🐛 Dry Run \u0026 Debugging\n\n```bash\n# Preview the URL that would be called (key is masked)\nbw domain lookup example.com --key MYKEY --dry-run\n# → https://api.builtwith.com/v22/api.json?KEY=REDACTED\u0026LOOKUP=example.com\n\n# See HTTP response metadata\nbw domain lookup example.com --debug\n```\n\n---\n\n## 🤖 MCP Server\n\n`bw mcp` starts a [Model Context Protocol](https://modelcontextprotocol.io) server over stdio, exposing all BuiltWith API endpoints as structured tools that any MCP-compatible client can call — Claude Desktop, VS Code, Cursor, Zed, and more.\n\n```bash\nbw mcp\nbw mcp --key YOUR_API_KEY   # pass key inline instead of env/rc file\nbw mcp --debug              # log JSON-RPC traffic to stderr\n```\n\n### ⚙️ Client configuration\n\nAdd to your MCP client config (e.g. `claude_desktop_config.json`):\n\n```json\n{\n  \"mcpServers\": {\n    \"builtwith\": {\n      \"command\": \"bw\",\n      \"args\": [\"mcp\"]\n    }\n  }\n}\n```\n\nIf your API key isn't in an env var or `.builtwithrc`, pass it inline:\n\n```json\n{\n  \"mcpServers\": {\n    \"builtwith\": {\n      \"command\": \"bw\",\n      \"args\": [\"mcp\", \"--key\", \"YOUR_API_KEY\"]\n    }\n  }\n}\n```\n\n### 🧰 Available tools\n\n| Tool | Description |\n|---|---|\n| `domain_lookup` | 🌐 Technology stack for a domain (supports `nopii`, `liveonly`, date ranges) |\n| `change_lookup` | 🔄 Technology additions and removals for one or more domains |\n| `lists_tech` | 📋 Domains currently using a technology |\n| `relationships_lookup` | 🔗 Related domains (shared infra, ownership) |\n| `free_lookup` | 🆓 Free-tier category counts for a domain |\n| `company_find` | 🏢 Domains associated with a company name |\n| `tags_lookup` | 🏷️ Domains related to an IP or tag attribute |\n| `recommendations_lookup` | 💡 Technology recommendations for a domain |\n| `redirects_lookup` | ↪️ Live and historical redirect chains |\n| `keywords_lookup` | 🔤 Keyword data for a domain |\n| `trends_tech` | 📈 Historical adoption trend for a technology |\n| `products_search` | 🛍️ Search ecommerce products across indexed stores |\n| `trust_lookup` | 🛡️ Trust/quality score for a domain |\n| `vector_search` | 🔎 Semantic search across technologies and categories |\n| `payment_balance` | 💳 Get current Agent Payment API credit balance |\n| `payment_config` | ⚙️ Retrieve payment limits and pricing configuration |\n| `payment_purchase` | 🛒 Purchase API credits (minimum 2000) |\n| `account_whoami` | 👤 Authenticated account identity |\n| `account_usage` | 📊 API usage statistics |\n| `agent-auth-start` | 🔐 Start Device-Code Authorization (no API key required) |\n| `agent-auth-token` | 🔐 Poll for authorization result and access token (no API key required) |\n\n### 🔬 Implementation note\n\nThe MCP server is implemented as a pure JSON-RPC 2.0 stdio server with no additional dependencies — auth, HTTP calls, and error handling all use the same code paths as the regular CLI commands.\n\n---\n\n## 🛠️ Development\n\n```bash\ngit clone https://github.com/builtwith/builtwith-cli\ncd builtwith-cli\nnpm install\nnpm test        # 24 tests, node:test built-in (no extra framework)\n```\n\n```bash\n# Run without installing globally\nnode bin/bw.js domain lookup example.com --key YOUR_KEY\n```\n\n---\n\n## 🔗 Related\n\n- [BuiltWith TUI](https://github.com/builtwith/builtwith-tui) — interactive terminal UI for the BuiltWith API\n- [BuiltWith API Docs](https://api.builtwith.com) — full API reference\n\n---\n\n## 📄 License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbuiltwith%2Fbuiltwith-official-cli","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbuiltwith%2Fbuiltwith-official-cli","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbuiltwith%2Fbuiltwith-official-cli/lists"}