Domain API

API Credit Usage

You need to login or signup to use the BuiltWith API. After logging in your actual API key will be shown here.

Introduction

The BuiltWith Domain API provides XML, JSON, CSV, XLSX access to the technology information of a website which includes all technical information as found on detailed lookups at builtwith.com and additional meta data where available.

Authentication

You must provide your API key in each lookup. Our endpoints are HTTPS only, providing key encryption. Never expose your API key.

Your API Key is
00000000-0000-0000-0000-000000000000

Get Domain Example
XML Format
https://api.builtwith.com/v22/api.xml?KEY=00000000-0000-0000-0000-000000000000&LOOKUP=hotelscombined.com
JSON Format
https://api.builtwith.com/v22/api.json?KEY=00000000-0000-0000-0000-000000000000&LOOKUP=hotelscombined.com
CSV Format
https://api.builtwith.com/v22/api.csv?KEY=00000000-0000-0000-0000-000000000000&LOOKUP=hotelscombined.com
Get Multiple Domains Example
Multiple Domains CSV (up to 16)
https://api.builtwith.com/v22/api.json?KEY=00000000-0000-0000-0000-000000000000&LOOKUP=hotelscombined.com,builtwith.com
CSV with Worksheets per Domain
https://api.builtwith.com/v22/api.csv?KEY=00000000-0000-0000-0000-000000000000&LOOKUP=hotelscombined.com,builtwith.com
High Throughput Lookups
Ultra Fast High Performance API
https://api.builtwith.com/v22/api.json?KEY=00000000-0000-0000-0000-000000000000&HIDETEXT=yes&NOMETA=yes&NOPII=yes&NOATTR=yes&LOOKUP=site1.com,site2.com,site3.com,site4.com,site5.com,site6.com,site7.com,site8.com,site9.com,site10.com,site11.com,site12.com,site13.com,site14.com,site15.com,site16.com
  • 16 Root Domains or Subdomains Only Per Lookup
  • Text, Meta, Attributes, Contacts all removed
  • Removes live lookup of results if not in our database

For even higher throughput contact us about dedicated endpoint solutions.

Bulk Domain Lookup

You can drop a list of root domains into the bulk lookup system instead of doing GET requests.

Code Examples

Here are implementation examples in different programming languages for making API requests:

var client = new HttpClient();
var request = new HttpRequestMessage
{
    Method = HttpMethod.Get,
    RequestUri = new Uri("https://api.builtwith.com/v22/api.json" +
        "?KEY=00000000-0000-0000-0000-000000000000&LOOKUP=wayfair.com"),
};
using (var response = await client.SendAsync(request))
{
    response.EnsureSuccessStatusCode();
    var body = await response.Content.ReadAsStringAsync();
    Console.WriteLine(body);
}
import requests
url = "https://api.builtwith.com/v22/api.json"
params = {
    "KEY": "00000000-0000-0000-0000-000000000000",
    "LOOKUP": "wayfair.com"
}
response = requests.get(url, params=params)
response.raise_for_status()
print(response.text)
<?php
$url = "https://api.builtwith.com/v22/api.json?KEY=
                        00000000-0000-0000-0000-000000000000&LOOKUP=wayfair.com";
$curl = curl_init();
curl_setopt_array($curl, [
    CURLOPT_URL => $url,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => [
        "Accept: application/json"
    ]
]);
$response = curl_exec($curl);
$httpCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
curl_close($curl);
if ($httpCode === 200) {
    echo $response;
} else {
    echo "Error: HTTP " . $httpCode;
}
?>
const url = "https://api.builtwith.com/v22/api.json?KEY=" +
                        "00000000-0000-0000-0000-000000000000&LOOKUP=wayfair.com";
fetch(url)
    .then(response => {
        if (!response.ok) {
            throw new Error(`HTTP error! status: ${response.status}`);
        }
        return response.text();
    })
    .then(data => {
        console.log(data);
    })
    .catch(error => {
        console.error('Error:', error);
    });
import java.net.URI;
import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; public class ApiExample { public static void main(String[] args) throws Exception { String url = "https://api.builtwith.com/v22/api.json?KEY= 00000000-0000-0000-0000-000000000000&LOOKUP=wayfair.com"; HttpClient client = HttpClient.newHttpClient(); HttpRequest request = HttpRequest.newBuilder() .uri(URI.create(url)) .GET() .build(); HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString()); if (response.statusCode() == 200) { System.out.println(response.body()); } else { System.err.println("Error: HTTP " + response.statusCode()); } } }
require 'net/http'
require 'uri'
url = URI('https://api.builtwith.com/v22/api.json?KEY=
                        00000000-0000-0000-0000-000000000000&LOOKUP=wayfair.com')
begin
  response = Net::HTTP.get_response(url)
  if response.code == '200'
    puts response.body
  else
    puts "Error: HTTP #{response.code}"
  end
rescue StandardError => e
  puts "Error: #{e.message}"
end
package main
import (
    "fmt"
    "io"
    "net/http"
)
func main() {
    url := "https://api.builtwith.com/v22/api.json?KEY=
                        00000000-0000-0000-0000-000000000000&LOOKUP=wayfair.com"
    resp, err := http.Get(url)
    if err != nil {
        fmt.Printf("Error: %v\n", err)
        return
    }
    defer resp.Body.Close()
    if resp.StatusCode != http.StatusOK {
        fmt.Printf("Error: HTTP %d\n", resp.StatusCode)
        return
    }
    body, err := io.ReadAll(resp.Body)
    if err != nil {
        fmt.Printf("Error reading response: %v\n", err)
        return
    }
    fmt.Println(string(body))
}
curl -X GET \
  "https://api.builtwith.com/v22/api.json?KEY=
                        00000000-0000-0000-0000-000000000000&LOOKUP=wayfair.com" \
  -H "Accept: application/json"
# Alternative with URL parameters separated for readability:
curl -G \
  "https://api.builtwith.com/v22/api.json" \
  -d "KEY=00000000-0000-0000-0000-000000000000" \
  -d "LOOKUP=wayfair.com" \
  -H "Accept: application/json"
API Reference
GET Request Parameters
NameExamplesRequired
KEY00000000-0000-0000-0000-000000000000
This is your key, use this for lookups.
Yes
LOOKUPcnn.com
example.com
All lookups must be a root domain.
Multi-Lookup: Parse up to 16 domains as CSV (cnn.com,about.com,builtwith.com)
Yes
HIDETEXTyes
Hide technology description, link, tag and category fields.
No
HIDEDLyes
Hide technology description and link fields (keep tag and categories).
No
LIVEONLYyes
Only return technologies considered to be live.
No
TRUSTyes
Same as additional Trust API call - uses additional API Credit.
No
NOMETAyes
No meta data (address, names etc.) returned. Improves performance.
No
NOPIIyes
Remove people names/emails. EU and California PII automatically removed.
No
NOATTRyes
No attributes data returned. Improves performance.
No
Response Object
Format: Result -> Paths[Path -> Technologies[Technology]],Meta,Attributes
Results
NameExampleDescription
Lookuphotelscombined.comThe domain that was looked up.
ResultThe technology lookupExplained below.
IsDBTrue/False/MisleadingIf lookup used database or visited site, or if profile is 'Misleading' (user generated content site).
Spend4364Average monthly USD tech spend based on detected technologies.
SalesRevenue29853826Estimated monthly USD sales revenue for eCommerce (0 for non-eCommerce).
SpendHistory[{"D":1140042000000,"S":100},...]Date/Spend array across domain coverage - max 60 periods between first/last indexed.
MetaMeta object explained belowAll meta data associated with this domain.
AttributesAttributes object explained belowAll attribute data associated with this domain.
FirstIndexed2012-07-29T14:00:00ZEarliest index point for entire domain.
LastIndexed2014-07-29T14:00:00ZMost recent index point for entire domain.
Paths
NameExampleDescription
Domaindisney.comThe root domain
UrlddValue of 'dd' means path data built from multiple sub-pages (domain-only lookups).
SubDomainblogSubdomain (e.g., 'blog' + 'disney.com' = blog.disney.com profile).
FirstIndexed2012-07-29T14:00:00ZEarliest index point for this path.
LastIndexed2014-07-29T14:00:00ZMost recent index point for this path.
Technology
NameExampleDescription
NameTwitter PlatformName of the technology found.
ParentJQueryParent technology name (for versions etc.).
DescriptionThis page embeds the twitter platform...Description of technology found on page.
Linkhttps://twitter.com/about/resourcesLink to technology website.
IsPremiumnoIs this paid technology? Values: yes, no, maybe.
TagjavascriptBase category. See categories index.
CategoriesSocial SDKArray of sub-categories for the tag.
FirstDetected2012-07-29T14:00:00ZDate technology first detected by BuiltWith.
LastDetected2018-04-30T14:00:00ZDate technology last detected. See update endpoint.
Meta
NameExampleDescription
ARank2323213Page Rank between 1 and 100,000,000
QRank12121Transco Page Traffic Rank between 1 and 1,000,000
Majestic23231Majestic Rank between 1 and 1,000,000
Umbrella6423Umbrella Global Router Traffic Rank between 1 and 1,000,000
CompanyNameRodale Inc.Valid incorporated company name
CitySan FranciscoValid city name for supported countries
Postcode94105Valid zip/postal code
StateCAValid state/country
CountryUSISO 3166-1 alpha-2 country code
VerticalTechnology and ComputingOne of these categories or blank.
[Telephones]+1-650-745-0728Valid international telephone numbers
[Emails]support@site.comValid domain emails
[Social]https://x.com/websiteSocial presence
[Names]Name→Joe→Joe Bloggs
Level→CEO
Email→→joe.bloggs@twitter.com
Names, emails and job titles.
Attributes
NameExampleDescription
MJRank2312Majestic Rank to 1m
Followers1000Brand Followers - Groups (1000 = 1000+ but <2000)..
ProductCount40SKU Product Count
Response Headers
NameExampleDescription
X-API-CREDITS-AVAILABLE322442Lookup credits available under your ID.
X-API-CREDITS-USED3442Lookup credits you have used.
X-API-CREDITS-REMAINING34242Lookup credits remaining.
X-RATELIMIT-CURRENT-CONCURRENT2Amount of concurrent requests you are making.
X-RATELIMIT-CURRENT-PERSECOND2Amount of requests per second you are making
X-RATELIMIT-LIMIT-CONCURRENT8The maximum concurrent rate before 429 errors.
X-RATELIMIT-LIMIT-PERSECOND10The maximum requests per second before 429 errors.
Rate Limiting

Maximum 8 concurrent requests - with maximum of 10 requests per second - please ensure you remain below this or you will get 429 errors.

For rate limit removals contact us about dedicated endpoint solutions.

Rate Limit Error Format{"error":"Rate limit exceeded","maxConcurrentRequests":8,"maxRequestsPerSecond":1,"currentConcurrentRequests":0,"currentRequestsInWindow":1,"retryAfterSeconds":1}
Special Domains

We maintain two lists of use for you when looking up domains. Ignore lists and BuiltWith Suffix lists.

Ignore List
This is our own internal list of domains we do not index. They are either blocked, contains too many misleading technologies or too many subdomains with user generated content.

BuiltWith Suffix List
This is based on the Public Suffix List but includes many additional entries for companies with subdomains that should be considered top level domains. This list provides us with better visibility for internal websites for example it brings northernbeaches.nsw.gov.au to the top level over nsw.gov.au.

Ignore Domains (XML, JSON or TXT)
https://api.builtwith.com/ignoresv1/api.json
Suffix Domains (XML, JSON or TXT)
https://api.builtwith.com/suffixv1/api.json
Error Codes

Note error messages in this format cannot be guaranteed, your implementation should also consider non-200 response codes as errors. The Lookup property will be null (json) or not provided (xml) if the error is server related. View all potential well-formed error codes.

Terms of Use

Our standard terms cover the use all of our APIs.

In general, you can use the API to enhance your product in many ways. The only limitation is you cannot resell the data as-is or provide duplicate functionality to builtwith.com and its associated services.