Library
A typed TypeScript wrapper for the BuiltWith API with Zod-validated responses and full ESM support.
Quick Start
Create a client with your API key. All methods return typed, Zod-validated responses.
import { createClient } from "builtwith-api";
const client = createClient(process.env.BUILTWITH_API_KEY!);
// Free lookup — no API key required
const profile = await client.free("google.com");
// Full domain lookup with options
const details = await client.domain("example.com", {
onlyLiveTechnologies: true,
});Methods
free(lookup)
Basic technology profile for a single domain. Available on free API plans.
const profile = await client.free("stripe.com");
// profile.domain, profile.groups, profile.first, profile.lastdomain(lookup, params?)
Detailed technology profile with metadata, spend history, and attributes.
// Single domain
const result = await client.domain("example.com");
// Multiple domains (up to 16)
const results = await client.domain(["example.com", "stripe.com"]);
// With filters
const filtered = await client.domain("example.com", {
onlyLiveTechnologies: true,
hideAll: true,
noPII: true,
});Parameters:
| Name | Type | Description |
|---|---|---|
hideAll | boolean | Hide description text and links |
hideDescriptionAndLinks | boolean | Hide description and links only |
onlyLiveTechnologies | boolean | Only return currently live technologies |
noMetaData | boolean | Exclude company metadata |
noAttributeData | boolean | Exclude attribute data |
noPII | boolean | Exclude personally identifiable information |
firstDetectedRange | string | Filter by first detected date range |
lastDetectedRange | string | Filter by last detected date range |
domainLive(lookup)
Real-time technology scan. Same response shape as domain(), but scans the site live.
const live = await client.domainLive("example.com");lists(technology, params?)
Find domains using a specific technology.
const shopifySites = await client.lists("Shopify");
// With pagination
const page2 = await client.lists("Shopify", {
offset: shopifySites.NextOffset,
});
// Filter by date
const recent = await client.lists("React", {
since: "2024-01-01",
includeMetaData: true,
});trends(technology, params?)
Technology adoption trends and coverage data.
const trends = await client.trends("jQuery");
// trends.Tech.coverage.live, trends.Tech.coverage.ten_k, etc.relationships(lookup)
Find related domains that share identifiers (analytics IDs, ad accounts, etc.).
const related = await client.relationships("example.com");
// related.Relationships[].Identifiers[].Matches[]keywords(lookup)
Get SEO keywords associated with domains.
const kw = await client.keywords("example.com");
// kw.Keywords[].Keywords[]trust(lookup, params?)
Domain trust and verification scoring.
const trust = await client.trust("example.com");
// trust.DBRecord.Established, trust.DBRecord.Ecommerce, etc.
// With keyword checking
const trustWords = await client.trust("example.com", {
words: "shop,buy,discount",
live: true,
});companyToUrl(companyName, params?)
Find domains associated with a company name.
const domains = await client.companyToUrl("Google");
// Filter by TLD
const comOnly = await client.companyToUrl("Google", {
tld: "com",
amount: 10,
});tags(lookup)
Get tracking and analytics tags found on a domain.
const tags = await client.tags("example.com");recommendations(lookup)
Get technology recommendations for a domain.
const recs = await client.recommendations("example.com");redirects(lookup)
Get inbound and outbound redirect chains.
const redirects = await client.redirects("example.com");
// redirects.Inbound[], redirects.Outbound[]product(query)
Search for products across e-commerce sites.
const products = await client.product("wireless headphones");
// products.shops[].Products[]Response Format
By default, responses are JSON (parsed and validated). You can request other formats:
const client = createClient(API_KEY, { responseFormat: "xml" });
const xml = await client.free("example.com"); // returns raw XML stringSupported formats: json, xml, txt, csv, tsv
WARNING
Non-JSON formats return raw strings without type validation.
Error Handling
try {
const result = await client.free("example.com");
} catch (err) {
if (err instanceof Error) {
// API errors: "BuiltWith API error 401: ..."
// Validation errors: ZodError with detailed field info
console.error(err.message);
}
}