Keyword Search API

Introduction

API endpoint that allows you to search for websites containing specific keywords.

The general access method is as follows -
https://api.builtwith.com/kws1/api.[json|csv]?KEY=00000000-0000-0000-0000-000000000000&KEYWORD=[KEYWORD]

🤖 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 keyword search API to find websites using the keyword perfume
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
Keyword Search Examples

JSON Search by keyword
https://api.builtwith.com/kws1/api.json?KEY=00000000-0000-0000-0000-000000000000&KEYWORD=perfume

JSON Search with limit
https://api.builtwith.com/kws1/api.json?KEY=00000000-0000-0000-0000-000000000000&KEYWORD=perfume&LIMIT=50

JSON Next page using offset
https://api.builtwith.com/kws1/api.json?KEY=00000000-0000-0000-0000-000000000000&KEYWORD=perfume&OFFSET=[last domain from previous result]

CSV Search by keyword
https://api.builtwith.com/kws1/api.csv?KEY=00000000-0000-0000-0000-000000000000&KEYWORD=perfume

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/kws1/api.json" +
                        "?KEY=00000000-0000-0000-0000-000000000000&KEYWORD=perfume"),
};
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/kws1/api.json"
params = {
    'KEY': '00000000-0000-0000-0000-000000000000',
    'KEYWORD': 'perfume'
}
response = requests.get(url, params=params)
print(response.json())
<?php
$url = "https://api.builtwith.com/kws1/api.json";
$params = array(
    'KEY' => '00000000-0000-0000-0000-000000000000',
    'KEYWORD' => 'perfume'
);
$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/kws1/api.json?KEY=00000000-0000-0000-0000-000000000000&KEYWORD=perfume';
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/kws1/api.json" +
                    "?KEY=00000000-0000-0000-0000-000000000000&KEYWORD=perfume";
        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/kws1/api.json')
uri.query = URI.encode_www_form({
    'KEY' => '00000000-0000-0000-0000-000000000000',
    'KEYWORD' => 'perfume'
})
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/kws1/api.json?KEY=00000000-0000-0000-0000-000000000000&KEYWORD=perfume"
    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/kws1/api.json?KEY=00000000-0000-0000-0000-000000000000&KEYWORD=perfume"
Reference
Parameters
The following GET parameters can be supplied for lookups
NameExamplesRequired
KEY00000000-0000-0000-0000-000000000000
This is your key, use this for lookups.
Yes
KEYWORDperfume
wordpress
Must be at least 4 letters, alphabetical characters only, and not a common stop word.
Yes
LIMIT100
Number of results to return. Minimum 16, maximum 1000. Defaults to 100.
No
OFFSETzoho.com
The last domain returned from the previous page. Used for keyset pagination.
No
Responses
Format: Keyword, Domains[], NextOffset
NameExampleDescription
KeywordperfumeThe keyword that was searched.
Domains["example.com","store.com"]Array of domain names containing the keyword.
NextOffsetzoho.comPass this value as OFFSET to retrieve the next page. Returns "END" when there are no more results.
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.