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 Trust API provides you with an overview of a website domain - allowing you to make the call on how much it can be trusted. We use attributes such as technology spend, time, relationships with other sites, current response, keywords and undisclosed methods to determine the trustworthiness of a domain.

The general access method is as follows:
https://api.builtwith.com/trustv2/api.[xml|json]?KEY=00000000-0000-0000-0000-000000000000&LOOKUP=[DOMAIN]

The response is built around a single, explainable Assessment.TrustLevel (Trusted, Neutral, Caution, VerificationRecommended, RestrictedContent, HighRisk or Unverified) with plain-English Assessment.Reasons behind it, plus a ContentSafety block that flags gambling, adult content, suspected scams and live placeholder (lorem ipsum) content - so nothing needs to be decoded from raw numbers or booleans to be understood by a human or an AI agent.

🤖 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 trust 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 Get Domain
https://api.builtwith.com/trustv2/api.xml?KEY=00000000-0000-0000-0000-000000000000&LOOKUP=hotelscombined.com

JSON Get Domain
https://api.builtwith.com/trustv2/api.json?KEY=00000000-0000-0000-0000-000000000000&LOOKUP=builtwith.com

JSON Get additional live lookup
https://api.builtwith.com/trustv2/api.json?KEY=00000000-0000-0000-0000-000000000000&LOOKUP=builtwith.com&LIVE=yes

Best Practices

If you are providing a list of newly registered domains always use the &LIVE=true option as our DB will always return Unverified for a domain it has no record of. If you are working through a large list provide &LIVE=true only if Assessment.TrustLevel comes back as 'Unverified' or 'VerificationRecommended' - this keeps throughput high.

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/trustv2/api.json" +
   "?KEY=00000000-0000-0000-0000-000000000000&LOOKUP=wayfair.com&LIVE=yes"),
};
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/trustv2/api.json"
params = {
    'KEY': '00000000-0000-0000-0000-000000000000',
    'LOOKUP': 'wayfair.com',
    'LIVE': 'yes'
}
response = requests.get(url, params=params)
print(response.json())
<?php
$url = "https://api.builtwith.com/trustv2/api.json";
$params = array(
    'KEY' => '00000000-0000-0000-0000-000000000000',
    'LOOKUP' => 'wayfair.com',
    'LIVE' => 'yes'
);
$url_with_params = $url . '?' . http_build_query($params);
$response = file_get_contents($url_with_params);
$data = json_decode($response, true);
print_r($data);
?>
const https = require('https');
const url = 'https://api.builtwith.com/trustv2/api.json?KEY='+
  '00000000-0000-0000-0000-000000000000&LOOKUP=wayfair.com&LIVE=yes';
https.get(url, (res) => {
    let data = '';
    res.on('data', (chunk) => {
        data += chunk;
    });
    res.on('end', () => {
        console.log(JSON.parse(data));
    });
}).on('error', (err) => {
    console.log('Error: ' + err.message);
});
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
public class BuiltWithAPI {
    public static void main(String[] args) throws Exception {
        String url = "https://api.builtwith.com/trustv2/api.json" +
"?KEY=00000000-0000-0000-0000-000000000000&LOOKUP=wayfair.com&LIVE=yes";
        URL obj = new URL(url);
        HttpURLConnection con = (HttpURLConnection) obj.openConnection();
        con.setRequestMethod("GET");
        BufferedReader in = new BufferedReader(
            new InputStreamReader(con.getInputStream()));
        String inputLine;
        StringBuffer response = new StringBuffer();
        while ((inputLine = in.readLine()) != null) {
            response.append(inputLine);
        }
        in.close();
        System.out.println(response.toString());
    }
}
require 'net/http'
require 'uri'
require 'json'
uri = URI('https://api.builtwith.com/trustv2/api.json')
uri.query = URI.encode_www_form({
    'KEY' => '00000000-0000-0000-0000-000000000000',
    'LOOKUP' => 'wayfair.com',
    'LIVE' => 'yes'
})
response = Net::HTTP.get_response(uri)
data = JSON.parse(response.body)
puts data
package main
import (
    "fmt"
    "io/ioutil"
    "net/http"
)
func main() {
    url := "https://api.builtwith.com/trustv2/api.json?"+
"KEY=00000000-0000-0000-0000-000000000000&LOOKUP=wayfair.com&LIVE=yes"
    resp, err := http.Get(url)
    if err != nil {
        panic(err)
    }
    defer resp.Body.Close()
    body, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        panic(err)
    }
    fmt.Println(string(body))
}
curl -X GET
"https://api.builtwith.com/trustv2/api.json?KEY=00000000-0000-0000-0000-000000000000&LOOKUP=wayfair.com&LIVE=yes"
Reference
GET Request Parameters
NameExamplesRequired
KEY00000000-0000-0000-0000-000000000000
This is your key, use this for lookups.
Yes
LOOKUPcnn.com
hotelscombined.com
Trust API supports subdomains and internal pages but only using the LIVE lookup feature of Trust API.
Yes
LIVEyes
Performs a live lookup of the website in question. This slows down the response but populates LiveVerification and lets us confirm a result of 'VerificationRecommended' or 'Unverified'. Consider calling this only when the non-LIVE response comes back as one of those two trust levels, to keep throughput high.
No
Response Object
Result - Result is the root object returned from the lookup. Every field is self-describing - names say exactly what they mean, booleans read like yes/no questions (Is..., Has...), and the TrustLevel enum and ContentSafety flags are returned as readable strings/booleans rather than numeric codes, so the response can be understood and acted on without cross-referencing this page.
NameExampleDescription
Domainhotelscombined.comThe domain/subdomain/url that was looked up.
AssessmentAssessment explained belowThe overall trust verdict for the domain, in plain language, plus why we reached it.
ContentSafetyContentSafety explained belowGambling, adult content, suspected scam and live placeholder (lorem ipsum) content flags.
BusinessProfileBusinessProfile explained belowWhat our database knows about this domain's technology history.
LiveVerificationLiveVerification explained belowOnly present when the request included &LIVE=yes. Result of checking the site right now.
Assessment
Assessment - The verdict: a single TrustLevel, the reasons behind it, and a one-line summary. This is the field to read first - ContentSafety/BusinessProfile/LiveVerification are the raw signals it was built from, kept in the response so you can drill in or apply your own policy on top.
NameExampleDescription
TrustLevelTrustedTrusted - established technology history and/or meaningful spend - a real, ongoing business.
Neutral - nothing suspicious found, but no strong positive signal either.
Caution - parked, showing placeholder content, or other signals worth a closer look.
VerificationRecommended - affiliate links on record but no live check performed yet - call again with &LIVE=yes.
RestrictedContent - gambling or adult content technology detected.
HighRisk - associated with a known scam.
Unverified - no record for this domain yet - call again with &LIVE=yes for a real-time check.
Summaryhotelscombined.com is assessed as Trusted: Domain has an established technology history spanning over a year.A ready-to-display, one-sentence explanation of the TrustLevel - useful for surfacing directly in a UI or an AI agent's response.
Reasons["Domain has an established technology history spanning over a year."]The specific signal(s) that drove the TrustLevel decision, in plain English.
ContentSafety
ContentSafety - Checked against every technology we've ever detected on the domain, with one exception: PlaceholderContent only reports technologies that are part of the site's currently live stack, so a domain that has since become a real business isn't flagged forever for old placeholder content.
NameExampleDescription
GamblingfalseTrue if the domain runs gambling-related technology.
AdultContentfalseTrue if the domain runs technology categorized as adult content.
SuspectedScamfalseTrue if the domain runs a technology we've identified as a known scam.
PlaceholderContentfalseTrue only if placeholder/lorem-ipsum content is part of the domain's currently live technology stack (not a stale, historical detection).
BusinessProfile
BusinessProfile - What our database knows about this domain's technology history. If IsIndexed is false, every other field in this block is left at its default and should be ignored.
NameExampleDescription
IsIndexedtrueTrue if this domain is in our database at all. If false, treat the domain as unverified rather than untrustworthy.
DomainAgeDays1642Days since our earliest technology record for this domain.
LastCrawledDaysAgo3Days since we last detected any technology change on this domain.
PremiumTechnologyCount5The number of premium (higher-confidence, paid-tier) technologies currently detected on the site.
HasActiveTechnologyStacktrueTrue if the domain currently has any actively tracked technologies (as opposed to only historical ones).
IsParkedDomainfalseTrue if the domain is using parked-page technology or otherwise looks parked.
IsEcommerceSitetrueTrue if the site runs e-commerce technology (a cart, checkout, or similar).
HasPaymentProcessingtrueTrue if the site runs a payment provider or processor.
HasAffiliateLinksfalseTrue if the site runs affiliate program advertising technology.
IsEstablishedBusinesstrueTrue once DomainAgeDays passes one year - a proxy for 'this looks like an ongoing business, not something newly stood up'.
EstimatedMonthlySpendUSD80Estimated average monthly technology spend across the domain, in USD.
LiveVerification
LiveVerification - Only present when the request included &LIVE=yes. Result of checking the domain's current live content, rather than relying on our indexed history.
NameExampleDescription
LookupSucceededtrueFalse if the live lookup itself failed (see LookupError) - the remaining fields in this block should be ignored when false.
LookupErrorThe remote name could not be resolvedThe error from trying to reach the website live, if LookupSucceeded is false.
IsParkedDomainfalseTrue if the live site is using parked-page technology or otherwise looks parked.
IsEcommerceSitetrueTrue if the live site runs e-commerce technology.
HasPaymentProcessingtrueTrue if the live site runs a payment provider or processor.
HasAffiliateLinkstrueTrue if the live site runs affiliate advertising technology.
EstimatedMonthlySpendUSD0Estimated monthly technology spend based on what's live on the page right now.
API Libraries
Node.js NPM

https://www.npmjs.com/package/builtwith-api
NPM package by Zach Caceres - https://github.com/zcaceres/builtwith-api

Microsoft .NET Nuget

https://www.nuget.org/packages/BuiltWith/
C# package by BuiltWith Pty Ltd - https://github.com/builtwith/BuiltWith-C-Client-API

Code Examples

https://github.com/builtwith/code-examples
Examples of all API endpoints in multiple languages

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.