BuiltWith Scraper | Tech Stacks and Top Sites
Pricing
from $1.36 / 1,000 websites
BuiltWith Scraper | Tech Stacks and Top Sites
BuiltWith scraper for technology stacks and Top Sites rankings. Get every technology detected on any website with category, tags, rank and AI Index, or list the top sites of 40 countries with company name, tech spend, sales revenue and traffic. Build technographic lead lists, no API key needed.
Pricing
from $1.36 / 1,000 websites
Rating
0.0
(0)
Developer
SilentFlow
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
5 days ago
Last modified
Categories
Share
BuiltWith Scraper
Turn BuiltWith into a table: the full technology stack of any list of websites, or the ranked Top Sites of a country with company name, tech spend and traffic, one row per website. 100 top sites with their companies in a few seconds, 361 technologies for shopify.com in one page.
How it works

- You type websites, or pick a country. Paste domains one per line (
shopify.com,https://www.stripe.com/) to get their technology profiles. Leave the list empty and pick a country to walk BuiltWith's Top Sites ranking instead, all sites or online stores only. - Each website is read once. A profile gives every technology BuiltWith detects on the site with its category, tags and description, plus the BuiltWith rank, the AI Index and the site age. A ranking page gives 100 sites with rank, company, country, monthly tech spend, sales revenue, social reach and traffic tier.
- One row comes back per website. 22 fields, the same shape in both modes, with 7 fields per technology. Ready for a CRM import, a spreadsheet, a warehouse or an AI pipeline.
โจ Why teams choose this over other BuiltWith scrapers
Looking up prospects one by one on builtwith.com? Copying the Top Sites pages into a sheet by hand? Cleaning "Upgrade to Advanced" placeholders and text ranges like "1K to 5K" out of another scraper's output?
- ๐งฉ Every technology, named and categorised. A profile row lists each technology BuiltWith shows on the public page (361 for shopify.com, in 26 categories) with its category, tags, description, link and icon. No placeholder rows, no nested trees: one flat list you can filter with a single expression.
- ๐ The Top Sites ranking as data. Pick one of 40 countries or the Global list, choose all sites or online stores only, and get the ranking 100 rows per page, up to 2,000 rows per list, with the company name on each row. The most used BuiltWith actors on the Store cannot read this list at all.
- ๐ต Numbers you can sort. Tech spend, sales revenue, social reach and employees are integers in USD or units, never "1K to 5K". Dates are RFC 3339. Unknown values are
null, never empty strings. - ๐ข Company on every ranked site. Company name and a registration id such as an SEC CIK where BuiltWith has one, without an extra tab or a second actor.
- ๐ค AI readiness and site age on every profile. The AI Index (0 to 100), the registration date and the date of the last technology detection sit on the row, next to the BuiltWith rank.
- ๐ Two jobs, one form. Profile the websites you name, or rank a market. Turn on one switch and every ranked site also carries its full technology stack.
- ๐ No account, no API key. Click Start on the prefilled form and the first 100 rows arrive in seconds.
๐ฏ What you can do with BuiltWith data
| Team | What they build |
|---|---|
| Sales and SDR | A prospect list enriched with the tools each website runs, to pitch the accounts on a competitor's stack or on a stack their product integrates with |
| Growth and marketing | The 2,000 biggest online stores of a country with revenue and spend estimates, as the seed of an outbound campaign |
| RevOps and data | A technographic column set in the CRM, refreshed monthly by a scheduled run over the account domains |
| Competitive intelligence | A monthly snapshot of competitors' stacks: which analytics, CRM, payment or CDN vendor they add or drop |
| Market research | Adoption of a technology among the top sites of ten countries, computed from the technologies column |
| Investors and analysts | The infrastructure and AI readiness of a target and its peers before a call |
| Agencies | A list of high-spend websites in a market that still run an outdated platform, for migration offers |
| Security and compliance | The third-party scripts, hosts and vendors present on a portfolio of company websites |
๐ฅ Input parameters
Type websites, or pick a country. The form works as prefilled: the Top Sites of the United States, 100 rows.
| Parameter | Type | Default | What it does |
|---|---|---|---|
domains | array | none | Websites to profile, one per line. A domain (shopify.com) or a full address (https://www.stripe.com/) both work. When this list has at least one entry, the Top Sites options are ignored. |
topSitesCountry | select | United-States | Used when the list is empty: the Top Sites ranking to walk. Global or one of 40 countries. |
maxItems | integer | 100 | Rows to save. With websites, the first N of the list. With Top Sites, the ranking in order until N rows: 100 is one page, 2000 is a whole list. |
๐ Top sites
| Parameter | Type | Default | What it does |
|---|---|---|---|
ecommerceOnly | boolean | false | Only the online stores of the ranking, each with its estimated monthly sales revenue. |
๐ Output
| Parameter | Type | Default | What it does |
|---|---|---|---|
includeTechnologies | boolean | false | Read the technology profile of every ranked site: full technology list, categories, AI Index and site age on each row. Profiles are read about ten seconds apart, so 100 sites take around 20 minutes. Websites you name always include their technologies. |
โ๏ธ Advanced
| Parameter | Type | Default | What it does |
|---|---|---|---|
debugMode | boolean | false | Detailed run log. Leave off. |
๐ Output data
One row per website. Both modes share the same 22 fields; a field the source does not give is null.
A ranked site (Top Sites mode):
{"id": "vimeo.com","url": "https://builtwith.com/vimeo.com","domain": "vimeo.com","companyName": "Vimeo, Inc","companyId": "SEC CIK 1837686","technologies": null,"technologiesCount": null,"techCategories": null,"rank": 1,"techSpend": 10000,"salesRevenue": null,"socialFollowers": 200000,"employees": null,"traffic": "Very High","aiIndex": null,"country": "United States","firstRegisteredAt": null,"lastDetectedAt": null,"faviconUrl": "https://x.cdnpi.pe/serve/KVuyZOOMz70Ak8bG/vimeo.com","dataType": "topSite","isLiveLookup": false,"scrapedAt": "2026-09-20T09:12:41Z"}
A technology profile (website list mode, technologies shortened):
{"id": "shopify.com","url": "https://builtwith.com/shopify.com","domain": "shopify.com","companyName": null,"companyId": null,"technologies": [{"name": "Hubspot","category": "Analytics and Tracking","tags": ["CRM", "Marketing Automation", "Lead Generation", "Inbound Marketing", "Sales Enablement", "Content Marketing", "Email Marketing"],"description": "Hubspot provides marketing information and leads via inbounding marketing software.","link": "https://trends.builtwith.com/analytics/Hubspot","iconUrl": "https://x.cdnpi.pe/serve/CmBSWOMPjh6lEXhc-b4d87b2c/hubspot.com","isSubTechnology": false},{"name": "Google Universal Analytics","category": "Analytics and Tracking","tags": null,"description": "The analytics.js JavaScript snippet is a new way to measure how users interact with your website.","link": "https://trends.builtwith.com/analytics/Google-Universal-Analytics","iconUrl": "https://x.cdnpi.pe/serve/UPASDUCKmLywn7PY-caac43be/google.com","isSubTechnology": true}],"technologiesCount": 361,"techCategories": ["Analytics and Tracking", "Widgets", "Language", "eCommerce", "Frameworks", "Content Delivery Network", "Mobile", "Payment"],"rank": 999900,"techSpend": null,"salesRevenue": null,"socialFollowers": null,"employees": null,"traffic": null,"aiIndex": 100,"country": null,"firstRegisteredAt": "2005-03-11T00:00:00Z","lastDetectedAt": "2026-09-19T00:00:00Z","faviconUrl": null,"dataType": "profile","isLiveLookup": false,"scrapedAt": "2026-09-20T09:12:44Z"}
With includeTechnologies on, a ranked site carries both halves: the ranking columns and the technologies list.
๐๏ธ Data fields
22 fields per row. technologies holds 7 fields per entry.
| Group | Field | Type | Description |
|---|---|---|---|
| Identity | id | string | The domain, stable across runs |
| Identity | url | string | The BuiltWith profile page, permanent |
| Identity | domain | string | Root domain as BuiltWith keys it |
| Identity | companyName | string or null | Company behind the site (Top Sites rows) |
| Identity | companyId | string or null | Registration id BuiltWith links, such as SEC CIK 1837686 |
| Content | technologies | array or null | One entry per detected technology, see below |
| Content | technologiesCount | integer or null | Number of technologies on the profile |
| Content | techCategories | array or null | Distinct categories, in page order |
| Measures | rank | integer or null | Position in BuiltWith Top Sites |
| Measures | techSpend | integer or null | Estimated monthly technology spend, USD, lower bound |
| Measures | salesRevenue | integer or null | Estimated monthly sales revenue, USD, online stores only |
| Measures | socialFollowers | integer or null | Combined social media followers, lower bound |
| Measures | employees | integer or null | Approximate employee count when BuiltWith shows one |
| Measures | traffic | string or null | Traffic tier: Very High, High, Medium, Low |
| Measures | aiIndex | integer or null | BuiltWith AI Index, 0 to 100 |
| Place and time | country | string or null | Country of the site |
| Place and time | firstRegisteredAt | string or null | Domain registration date, RFC 3339 |
| Place and time | lastDetectedAt | string or null | Date of the last technology detection, RFC 3339 |
| Media | faviconUrl | string or null | Site icon served by BuiltWith |
| Meta | dataType | string | profile or topSite |
| Meta | isLiveLookup | boolean | True when BuiltWith had no cached profile and scanned the site on the spot: a shorter technology list, no rank, AI Index or dates |
| Meta | scrapedAt | string | When the row was read, RFC 3339 UTC |
Each entry of technologies:
| Field | Type | Description |
|---|---|---|
name | string | Technology name as BuiltWith spells it |
category | string | BuiltWith category card: Analytics and Tracking, Widgets, eCommerce, Frameworks, Payment, Web Hosting Providers, ... |
tags | array or null | Sub-category badges, hidden "show more" ones included |
description | string or null | BuiltWith's one-line description |
link | string or null | Trends page of the technology |
iconUrl | string or null | Technology icon |
isSubTechnology | boolean | True when BuiltWith indents it under the previous entry |
url and link are permanent addresses. iconUrl and faviconUrl are served by BuiltWith's image CDN and have stayed valid for months in our tests.
๐ Examples
Rank the top 100 sites of the United States
The prefilled form. One ranking page, company names included.
{"topSitesCountry": "United-States","maxItems": 100}
Get the technology stack of your prospects
One row per domain with every technology, the rank, the AI Index and the site age.
{"domains": ["shopify.com", "stripe.com", "airbnb.com", "notion.so", "figma.com"],"maxItems": 5}
List the 500 biggest online stores of France with their revenue
Five ranking pages, salesRevenue filled on every row.
{"topSitesCountry": "France","ecommerceOnly": true,"maxItems": 500}
Build a technographic dataset of Germany's top 200 sites
Every ranked site with its full technology list. About 200 profile pages, read ten seconds apart: allow 40 minutes.
{"topSitesCountry": "Germany","includeTechnologies": true,"maxItems": 200}
Export a whole country list
The complete ranking of a list, 2,000 rows.
{"topSitesCountry": "United-Kingdom","maxItems": 2000}
Find which of your accounts run HubSpot
Profile the account domains, then filter the technologies column on name in your sheet or notebook.
{"domains": ["https://www.zendesk.com/", "https://www.atlassian.com/", "https://www.gitlab.com/", "https://www.hashicorp.com/"],"maxItems": 50}
๐ค Copy to your AI assistant
Paste this block into Claude, ChatGPT or Cursor to give it full context about this scraper:
You have access to the BuiltWith Scraper on Apify: silentflow/builtwith-scraperTwo modes, one row per website in both:- Website list: set "domains" (array of strings, domains or URLs). Each row is the technology profile of one domain.- Top Sites: leave "domains" empty and set "topSitesCountry" (string enum: Global, United-States, United-Kingdom, Canada, Australia, New-Zealand, Germany, France, Netherlands, Italy, Spain, Mexico, India, Japan, Switzerland, China, Russia, Sweden, Norway, Brazil, Indonesia, Turkey, Saudi-Arabia, Argentina, Poland, Belgium, Thailand, Austria, Israel, Hong-Kong, Denmark, Singapore, Malaysia, South-Korea, Philippines, Pakistan, Chile, Finland, Vietnam, Czech-Republic, Romania). Each row is one ranked site.Input schema:- domains (array of strings, optional): websites to profile; wins over Top Sites when non-empty- topSitesCountry (string, default "United-States"): ranking to walk when domains is empty- maxItems (integer, default 100): rows to save; a Top Sites list holds up to 2000 rows- ecommerceOnly (boolean, default false): Top Sites, online stores only, adds salesRevenue- includeTechnologies (boolean, default false): Top Sites, also read each site's profile (technologies, aiIndex, dates)- debugMode (boolean, default false)Output per row (22 fields): id (string, the domain), url (string), domain (string), companyName (string|null), companyId (string|null), technologies (array|null of {name, category, tags (array|null), description, link, iconUrl, isSubTechnology}), technologiesCount (integer|null), techCategories (array|null), rank (integer|null), techSpend (integer|null, USD per month), salesRevenue (integer|null, USD per month), socialFollowers (integer|null), employees (integer|null), traffic (string|null), aiIndex (integer|null), country (string|null), firstRegisteredAt (RFC 3339|null), lastDetectedAt (RFC 3339|null), faviconUrl (string|null), dataType ("profile"|"topSite"), scrapedAt (RFC 3339).Output per row also has isLiveLookup (boolean): true when BuiltWith scanned the site live instead of serving its cached profile. Profile rows carry technologies, rank, aiIndex and dates; Top Sites rows carry company, spend, revenue, social, traffic and country. Profiles are read about 10 seconds apart. No account or API key needed. Use apify-client for Python or JavaScript.
๐ป Integrations
Enrich a CRM account list with technographics (Python)
from apify_client import ApifyClientclient = ApifyClient("YOUR_APIFY_TOKEN")accounts = ["zendesk.com", "atlassian.com", "gitlab.com", "hashicorp.com"]run = client.actor("silentflow/builtwith-scraper").call(run_input={"domains": accounts,"maxItems": len(accounts),})for row in client.dataset(run["defaultDatasetId"]).iterate_items():names = {t["name"] for t in row["technologies"] or []}crm = sorted(n for n in names if n in {"Hubspot", "Salesforce", "Zoho CRM", "Pipedrive"})print(row["domain"], row["technologiesCount"], "technologies, CRM:", ", ".join(crm) or "none")
Build a lead list of high-spend online stores (JavaScript)
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });const run = await client.actor('silentflow/builtwith-scraper').call({topSitesCountry: 'France',ecommerceOnly: true,maxItems: 500,});const { items } = await client.dataset(run.defaultDatasetId).listItems();const leads = items.filter((s) => (s.salesRevenue ?? 0) >= 1000000 && s.companyName).map((s) => ({ rank: s.rank, domain: s.domain, company: s.companyName, revenue: s.salesRevenue, traffic: s.traffic }));console.table(leads.slice(0, 20));
Measure a technology's share of a market (Python, CSV out)
import csvfrom collections import Counterfrom apify_client import ApifyClientclient = ApifyClient("YOUR_APIFY_TOKEN")run = client.actor("silentflow/builtwith-scraper").call(run_input={"topSitesCountry": "Germany","includeTechnologies": True,"maxItems": 200,})share = Counter()rows = list(client.dataset(run["defaultDatasetId"]).iterate_items())for row in rows:for tech in row["technologies"] or []:if tech["category"] == "Content Management System":share[tech["name"]] += 1with open("cms-share-germany.csv", "w", newline="") as f:writer = csv.writer(f)writer.writerow(["cms", "sites", "share"])for name, n in share.most_common():writer.writerow([name, n, round(n / len(rows), 3)])
Refresh a technographic sheet every month (Apify CLI)
$apify call silentflow/builtwith-scraper --input '{"domains": ["shopify.com", "stripe.com"], "maxItems": 2}'
Schedule the same input from the Apify Console and connect the Google Sheets integration to the run's dataset.
๐ Performance
Measured on 20 September 2026 on the live site.
| Run | Rows | Time |
|---|---|---|
| Top Sites, United States, 100 rows (the default input) | 100 | about 10 seconds |
| Top Sites, France, online stores only, 200 rows | 200 | about 20 seconds |
| 5 website profiles | 5 | about 2 minutes |
| Top Sites with technologies, 25 rows | 25 | about 5 minutes |
| Metric | Value |
|---|---|
| Fields per row | 22, plus 7 per technology |
| Sites per ranking page | 100 |
| Technologies on a large profile | several hundred (361 for shopify.com) |
| Depth of a Top Sites list | 20 pages, 2,000 rows |
| Limit per run | no fixed limit: maxItems is yours to set |
๐พ Data export
Every run stores its rows in a dataset you can download as JSON, CSV, Excel, XML or HTML from the Storage tab, or pull from the API:
https://api.apify.com/v2/datasets/{DATASET_ID}/items?format=csv&token=YOUR_TOKEN
The dataset has two ready-made table views: Websites (website, company, country, rank, tech spend, social reach, traffic, technologies, profile link) and Technology profiles (website, technologies count, categories, AI Index, rank, registered, last detection, profile link). Schedules, webhooks and the Apify integrations (Google Sheets, Slack, Zapier, Make, n8n) work on top of the same dataset. In CSV and Excel the technologies list is flattened into columns; keep JSON when you need the nested list as is.
๐ก Tips for best results
- Use root domains. BuiltWith keys profiles on the registrable domain:
shopify.com, nothelp.shopify.com. Full addresses are reduced to the domain for you. - Start from the ranking, then profile. Walk a country list first, pick the rows you care about, and run a second job with those domains. It is faster than turning
includeTechnologieson for a whole list. - Filter on
techCategoriesbeforetechnologies. The category list is short and tells you in one look whether a site has an eCommerce platform, a CRM or a payment provider. - Read
technologiesCountto judge a profile. A site with fewer than ten technologies is often a parked or redirecting domain. - Keep
maxItemsa multiple of 100 for Top Sites. Each page is 100 rows; asking for 250 reads three pages and keeps 250. - Schedule monthly, not daily. BuiltWith's rankings and profiles move slowly; a monthly run catches vendor changes without re-reading the same rows.
- Give profile runs time. Profiles are read about ten seconds apart on purpose, and a profile BuiltWith is still preparing is asked again half a minute later. A list of 100 domains is a 20-minute run, not a 20-second one.
โ FAQ
What exactly does the scraper read? BuiltWith's public Technology Profile page of a domain (every technology listed, rank, AI Index, site age) and the public Top Sites ranking pages (rank, company, country, spend, revenue, social reach, employees, traffic).
Do I need a BuiltWith account or API key? No. Both pages are public. Nothing to sign up for and nothing to paste.
Is the technology list complete? It contains every technology BuiltWith names on the public profile, with the count on the row. First and last detection dates per technology, and technologies removed over time, sit behind BuiltWith's paid plans and are not part of the output.
What does rank mean?
The position in BuiltWith Top Sites, a ranking BuiltWith computes from site age and technology spend, not from traffic. A profile row shows the site's position in the whole ranking; a Top Sites row shows its position in the list you asked for.
What is techSpend?
BuiltWith's estimate of the monthly cost of the paid technologies found on the site, in USD, as a lower bound. The Top Sites pages show 10,000 for every site in their first pages; the exact figure appears on the paid tabs of the site.
Which countries are available? Global and 40 countries: United States, United Kingdom, Canada, Australia, New Zealand, Germany, France, Netherlands, Italy, Spain, Mexico, India, Japan, Switzerland, China, Russia, Sweden, Norway, Brazil, Indonesia, Turkey, Saudi Arabia, Argentina, Poland, Belgium, Thailand, Austria, Israel, Hong Kong, Denmark, Singapore, Malaysia, South Korea, Philippines, Pakistan, Chile, Finland, Vietnam, Czech Republic and Romania.
How many rows can a Top Sites list give? 20 pages of 100, so 2,000 rows per list. All sites and online stores are two different lists, so a country gives up to 4,000 distinct rows.
Can I profile thousands of domains?
Yes. Domains are read in order until maxItems, duplicates are skipped, and a domain BuiltWith does not know yields no row and a note in the run log. Very large lists take longer; split them across scheduled runs if you want fresh rows every day.
Why is companyName null on some ranked sites?
BuiltWith has no company on file for that domain. The field is null rather than an empty string so your filters stay honest.
Why are technologies null on my Top Sites rows?
The ranking pages do not list technologies. Turn includeTechnologies on to read each site's profile, or run the domains you care about through the website list.
What is a live lookup?
When BuiltWith has no cached profile for a domain it scans the site on the spot and answers with what it finds: a shorter technology list and no rank, AI Index or dates. The row is flagged isLiveLookup: true so you can tell it from a full profile. Run the domain again a few days later to get the full profile once BuiltWith has built it.
Why did a profile run take longer than expected? Profiles are read about ten seconds apart, and a profile BuiltWith is still preparing is asked again half a minute later, up to three times. The run log says which domains are waiting. Domains BuiltWith kept behind its human test after three rounds get no row and a note in the log; run them again later.
How fresh is the data?
Live: every run reads the pages at run time, no cache. lastDetectedAt tells you when BuiltWith last saw a technology on the site.
What happens when a run ends without rows? The run finishes with a status message that says why: unknown domains, an empty list, or a source that did not answer. No error rows are written to the dataset.
โ๏ธ Legal
This Actor extracts publicly available data from builtwith.com. It does not bypass any login, paywall or CAPTCHA. Users are responsible for complying with BuiltWith's terms of use and applicable data protection laws (GDPR, CCPA, and PIPL where relevant). The output describes companies and websites, not individuals; where a company name or registration id appears, handle it as business data. The data returned is informational; verify accuracy for regulated use cases.
๐ Related scrapers
- Website Tech Stack Scraper: detect the technologies of any website live, from the page itself.
- Domain Enricher: company data behind a list of domains.
- Storeleads Scraper: online stores by platform with sales estimates.
- Company Data Scraper: firmographics for a list of companies.
๐ฌ Support
Need something this scraper doesn't do yet? We ship features fast.
- Feature requests go straight to our backlog
- Enterprise needs? We do custom integrations and high-volume plans
- Pricing questions? Check the Monetization tab on the actor page
Response time: usually under 24 hours.
Check out our other scrapers: silentflow on Apify