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.

🤖 AI Agent Prompt
Reference https://api.builtwith.com/llms.txt and
https://raw.githubusercontent.com/builtwith/builtwith-ai-sdk/refs/heads/main/README.md
Add builtwith AI api to my app as a client. Make a call to the domain API for the domain hotelscombined.com
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

You can supply your key as a query string parameter or as an HTTP header:

  • Query string: ?KEY=00000000-0000-0000-0000-000000000000
  • HTTP header: Authorization: API 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
  • 64 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 Jobs API

Submit a JSON list of root domains. Small batches return results immediately; large batches return a job id for background processing.

POST https://api.builtwith.com/v22/domain/bulk?KEY=00000000-0000-0000-0000-000000000000
Content-Type: application/json

{ "lookups": ["a.com", "b.com"], "options": { "noMeta": false, "noPii": true, "hideText": false, "hideDL": false, "liveOnly": false } }

Synchronous response (small batches) matches the Domain API response format.

Asynchronous response example:

{ "job_id": "00000000-0000-0000-0000-000000000000", "status": "queued", "count": 250, "sync_max": 32 }

Check job status:

GET https://api.builtwith.com/v22/domain/bulk/00000000-0000-0000-0000-000000000000?KEY=00000000-0000-0000-0000-000000000000

Status response example:

{ "job_id": "00000000-0000-0000-0000-000000000000", "status": "processing", "created_utc": "2026-02-03T12:00:00Z", "count": 250 }

Retrieve results (one-time download):

GET https://api.builtwith.com/v22/domain/bulk/00000000-0000-0000-0000-000000000000/result?KEY=00000000-0000-0000-0000-000000000000

Result response is a JSON array of domain result objects. Results are deleted after first access.

Bulk File Drop 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"