BuiltWith Scraper

A domain in.
Its tech stack out.

Submit a list of domains and get back what each site is built with - CMS, ecommerce platform, analytics, CDN, hosting and web server, plus a single roll-up column listing everything detected. Newer runs add BuiltWith's own category breakdown on top.

one-time 500 free rows$0.002 per row afterone row per domainCSV · JSON · Excel
Read this first

Two export shapes,
not one.

This is the thing to know before you write an importer, because the column count is not stable across runs.

Every run returns nine lower-case columns: domain, then cms, ecommerce, javascript, analytics, cdn, marketing and server, and finally technologies - a comma-joined roll-up of what was detected. That set is the dependable core.

Newer runs return those nine plus twenty-five more: query, and twenty-four Title-Case columns carrying BuiltWith's own category names - Content Management System, Web Hosting Providers, SSL Certificates, Name Server and the rest. Thirty-four columns in total. The data dictionary below lists both sets and marks which is which.

Write the importer against the nine, and treat the twenty-five as present-if-present. A reader that indexes columns by position, or that assumes a fixed header, will break the first time it meets the other shape.

livescraper.app · what's verified
9 lower-case columns on every run
25 further columns on the newer runs
Column names measured from real exports
No per-run domain limit is documented!
Code against the nine; treat the rest as optional.
How it works

Domains in,
technologies out.

A domain is the entire input. There are no filters to configure.

  1. STEP 1Sign in to the platform.
  2. STEP 2Open the BuiltWith Scraper.
  3. STEP 3Paste your domains, one per line.
  4. STEP 4Pick your output format.
  5. STEP 5Click Get Data and read the stack.

Both forms work - a bare domain like stripe.com or a full URL like https://shopify.com.

Data dictionary

Nine columns always,
thirty-four on newer runs.

Measured from 9 real exports covering 12 rows and 9 distinct domains. The first nine appear in every run; the rest appeared only in the two most recent ones.

domain
The domain the row describes. Present on every row of every run.
cms
Content management system, where one was detected - e.g. Shopify.
ecommerce
Ecommerce platform, where one was detected - e.g. Shopify.
javascript
JavaScript framework or library - values seen include Next.js and jQuery.
analytics
Analytics and tag management - values seen include Google Analytics and Google Tag Manager.
cdn
Content delivery network - values seen include Cloudflare and CloudFront.
marketing
Marketing and engagement widgets - e.g. Intercom.
server
Web server or hosting platform - values seen include nginx, cloudflare and Vercel.
technologies
A comma-joined roll-up of everything detected for the domain. Convenient for a quick read; parse the individual columns rather than this one.
query
The domain as you submitted it, echoed back. Newer runs only.
Advertising
Advertising technologies. Empty in all four newer-shape rows we hold.
Analytics and Tracking
The category-level analytics detection, alongside the lower-case analytics.
Content Delivery Network
The category-level CDN detection, alongside the lower-case cdn.
Content Management System
The category-level CMS detection, alongside the lower-case cms.
Email Hosting Providers
Mail host for the domain - Google Workspace in every newer-shape row we hold.
Frameworks
Application frameworks - e.g. Next.js.
JavaScript Libraries and Functions
JavaScript libraries. Empty in all four newer-shape rows we hold.
Language
Declared page language - values seen are en-US and en.
Mobile
Mobile-related markup - Viewport Meta in every newer-shape row we hold.
Name Server
The domain's name servers, comma-joined. See the note below on ordering.
Payment
Payment technologies - e.g. Klarna.
Robots_txt
Whether a robots.txt was found, as the literal string Robots.txt. Note the underscore in the column name.
SSL Certificates
TLS detection, returned as the literal string HTTPS.
Verified CDN
A verified CDN attribution. Empty in all four newer-shape rows we hold.
Verified Link
A verified link attribution. Empty in all four newer-shape rows we hold.
Web Hosting Providers
Hosting provider - values seen are nginx and Cloudflare.
Web Master Registration
Site-verification services found - e.g. Google Search Console, Facebook.
Web Servers
Server software - values seen are nginx and cloudflare.
Widgets
On-page widgets - e.g. Intercom.
eCommerce
The category-level ecommerce detection, alongside the lower-case ecommerce. Note the lower-case first letter in the column name.
Audio / Video Media
Media technologies - e.g. HTML5 Video. Note the spaces around the slash in the column name.
Copyright
A copyright line lifted from the page. Unreliable - see the note below.
Shipping Providers
Shipping technologies. Empty in all four newer-shape rows we hold.
Syndication Techniques
Feed and syndication technologies. Empty in all four newer-shape rows we hold.

Counts, not percentages. The newer 34-column shape appears in only 4 of the 12 rows we hold, which is far too small a sample to express as a fill rate - so this table says "empty in all four" where that is what we measured, and claims nothing about how those columns behave at volume. The nine lower-case columns are on firmer ground: across all 12 rows, domain arrived every time, technologies on 10, server on 9, and cms, ecommerce and marketing on 3 each. Run a handful of your own domains on the free tier before you build around any single column.

Before you wire it up

Four notes for
whoever writes the importer.

Each of these came out of reading the exports rather than the documentation, which is why they are worth the space.

A domain that detects nothing still returns a row

Two of the twelve rows we hold came back with every field empty except domain - including technologies. That is a real outcome, not an error: the site simply matched nothing. Treat an empty row as a normal result rather than a failed lookup, and your row count will keep matching your input.

Name servers come back in a different order

The same domain run twice returned the same four name servers in two different orders inside Name Server. Split on the comma and compare as a set - diffing that field as a string will report a change that did not happen.

Copyright is not reliably a copyright line

In one export Copyright came back as hds-text--md">© - a fragment of an HTML class attribute that happened to sit next to the symbol, not a copyright statement. Do not display this field without checking it, and do not parse a company name out of it.

The two column sets overlap, and their casing differs

cms and Content Management System describe the same detection, as do cdn and Content Delivery Network. The values are not always spelled the same way: one row carried server as cloudflare and Web Hosting Providers as Cloudflare. Normalise case before you join or group on them.

Common workflows

Three jobs people
most often run here.

Where knowing what a site runs on changes what you do next.

Technographic targeting

Find the accounts already running your integration

If your product plugs into a specific platform, the platform is the qualifier. Running a domain list and filtering on cms, ecommerce or analytics separates the accounts where your integration works today from the ones where it would be a migration - two very different conversations, and worth knowing before the first email.

Sales · RevOps
Competitive research

See what a market is actually built on

Run every domain in a sector and count the values in cms, cdn and server. The result is a picture of what that market has standardised on, drawn from the sites themselves rather than from vendor case studies - and the outliers are usually the interesting part.

Strategy · Product
Partner and vendor checks

Sanity-check a stack before you integrate

Before committing engineering time to a partner integration, it helps to know what is on the other side. One row tells you the hosting, CDN, server and analytics a site runs, which is often enough to spot the mismatch early - or to confirm there isn't one.

Engineering · BD
Pricing

Pay only for the rows
you actually pull.

No subscription, no minimum, no per-seat licence. Your first 500 rows are on us - after that, pay-as-you-go.

Free tier

500 free rows - $0

Every new account, one-time. No credit card required. Worth spending a few of them on domains whose stack you already know, so you can see which columns fill for the kind of sites you care about.

$0 forever
Pay-as-you-go

$0.002 per row, after the free tier

Roughly $2 per 1,000 domains, one row per domain - exact to budget, because a domain that detects nothing still returns exactly one row.

Most popular
Enterprise

Custom · recurring tracking

Volume pricing, SLAs, dedicated workers and bespoke onboarding for teams re-checking a large domain set on a schedule. Tell us your numbers and we'll quote.

Talk to us
10% off your first paid run.Use code LIVESCRAPER10 at checkout.
Sign up
Pairs well with

The same domain,
other angles.

This tells you what a site runs on. These two tell you who owns it and how it performs.

The legal bit

Facts about a
website, not a person.

One of the lighter questions in the catalogue, and it is worth saying why rather than simply asserting it.

What a site is built with is published by the site itself. A server header, a script tag, a viewport meta tag and a DNS record are all things a browser reads on every visit - the detection here is the same observation, made deliberately and written down. There is no personal data in these columns: they describe software and infrastructure, not people.

Two honest caveats. The Copyright column lifts a line off the page, and on a one-person site that line can name an individual - treat those rows with the same care you would give contact-level data. And Name Server and Email Hosting Providers describe a domain's infrastructure, which is public but is also the kind of detail worth handling thoughtfully if you are publishing rather than analysing.

On our side: publicly available sources only, nothing behind a login, no third-party trackers on the data layer, and your exports auto-delete after 30 days.

livescraper.app · principles
Software and infrastructure, not people
Publicly available sources only
Nothing behind a login
Exports auto-delete (30 days)
Copyright can name a sole trader - treat with care!
Facts about a website, not about its owner.
Common questions

Things people
ask before signing up.

The questions we hear most. Anything else? Talk to us - humans, not bots, write the answers.

What exactly comes back?+
Nine columns on every run: domain, cms, ecommerce, javascript, analytics, cdn, marketing, server and technologies. Newer runs add query plus twenty-four Title-Case category columns - thirty-four in total. The data dictionary on this page lists all of them and marks which set each belongs to.
Why does my export have fewer columns than the table shows?+
Because there are two shapes. The nine lower-case columns appear in every run we have; the twenty-five additional ones appeared only in the two most recent. Write your importer against the nine and treat the rest as present-if-present, rather than indexing columns by position or assuming a fixed header.
What happens to a domain where nothing is detected?+
You still get a row - with the domain filled in and every other column empty, including technologies. Two of the twelve rows we hold came back that way. It is a real result rather than an error, and it means your output row count keeps matching your input.
Can I use the technologies column instead of the individual ones?+
For a quick read, yes - technologies is a comma-joined roll-up of what was detected. For anything programmatic, parse the individual columns. The roll-up's contents depend on which shape the run returned, so the same domain can produce a different string on a later run even when nothing about the site changed.
Why did the same domain return more technologies on a later run?+
Detection improves over time. One domain in our set returned two technologies in a June run and four in a July run, with no change to the site in between - the newer run simply recognised more. Treat the output as a snapshot of what was detectable on the day, not as a fixed property of the domain.
How many domains can I submit in one run?+
We are not going to quote a number, because nothing in the exports we hold or the service reference establishes one - the largest run in our sample is two rows. Start with a batch on the free tier and the estimator will price the job before it runs.
How much does it cost?+
The first 500 rows on a new account are free and one-time; after that it's $0.002 per row - about $2 per 1,000 domains - pay-as-you-go with no subscription. One row per domain makes it exact to budget. Credits don't expire and there's no monthly reset.

See what a site
is built with.

Paste your domains and get the CMS, ecommerce platform, analytics, CDN and server behind each one. Your first 500 rows are free - enough to check which columns fill for the kind of sites you care about.

Activates instantly · no card required

BuiltWith Scraper - reveal a site's tech stack at scale

Knowing what a website is built with changes how you approach it. A prospect already running the ecommerce platform your product integrates with is a different conversation from one that would have to migrate first; a competitor that has standardised on a particular CDN and analytics stack tells you something about how the market it sits in operates. The BuiltWith Scraper collects that at scale. Submit a list of domains - a bare domain like stripe.com or a full URL like https://shopify.com both work - and each comes back as a single row describing the technologies detected on that site.

Every run returns nine columns: the domain itself, then the CMS, ecommerce platform, JavaScript framework or library, analytics and tag management, CDN, marketing widgets and web server, and finally a comma-joined roll-up of everything found. Newer runs return those nine plus twenty-five more - the submitted query echoed back, and twenty-four columns carrying BuiltWith's own category names, among them Content Management System, Email Hosting Providers, Frameworks, Language, Mobile, Name Server, Payment, SSL Certificates, Web Hosting Providers, Web Master Registration, Widgets and Audio / Video Media. That two-shape behaviour is the single most important thing to understand before writing an importer: code against the nine that are always there and treat the rest as optional, because a reader that assumes a fixed header will break the first time it meets the other shape.

Four details are worth knowing in advance, all of them observed in real exports rather than taken from documentation. A domain where nothing is detected still produces a row, with only the domain column filled - that is an ordinary outcome, not a failure, and it keeps output row counts matching input. The name servers in a single field come back in a different order between runs of the same domain, so that column should be split on the comma and compared as a set rather than diffed as a string. The Copyright column is not dependable: in one export it returned a fragment of an HTML class attribute that happened to neighbour the copyright symbol, so it should not be displayed unchecked or parsed for a company name. And the lower-case and Title-Case column sets overlap, describing the same detections with occasionally different capitalisation of the values, which matters if you group or join on them.

On the legal side this is among the lighter services in the catalogue, for a straightforward reason: what a site is built with is information the site publishes to every visitor. A server header, a script tag and a DNS record are read by any browser on any visit; recording them deliberately is the same observation written down. None of the columns describe a person. The two caveats worth stating are that the Copyright column lifts a line from the page and can name an individual on a one-person site, and that infrastructure detail like name servers and mail hosting, while public, deserves thought if you intend to publish it rather than analyse it. Nothing behind a login is touched, no third-party trackers run on the data layer, and exports auto-delete after 30 days. Start free: your first 500 rows cost nothing and need no credit card.