How to use it: 3 steps
- Make a free Apify accountApify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us.
- Paste your input and press StartNo code needed: you fill in a form (the input). It already has a working example. For example:
apify.comin Websites. Each start is one run. - Download the resultsWhen the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too.
This tool is an Apify Actor: a small program that runs on Apify. You can also run it on a schedule, for example every Monday. New to it? Read how it works, step by step and the 8 words you need first.
What it does
Find out which technologies a website uses today. Give a list of domains or URLs, and the Actor loads each page, matches it against 7,600+ technology fingerprints and returns one row per site: CMS, ecommerce platform, analytics, CDN, web server, frameworks and payments, with versions and confidence where the page shows them. No login, no API key.
- Technologies list. Each technology has a name, categories, a version (when the page shows one) and a confidence from 0 to 100.
- Ready columns.
cms,ecommerce,analytics,cdn,server,frameworkandpaymentare short lists of names, so you can filter a table without opening the full list. - Live result. The check happens during your run.
detectedAtsays when, andfinalUrlshows where redirects ended. - Optional browser mode. With
useBrowser: true, each page is opened in headless Chrome. This also finds technologies that appear only after JavaScript runs (JavaScript globals, background requests). It is slower and costs more. - Clear errors. A site that cannot be checked gets a row with
status: "error"and a code likeDNS_NOT_FOUND,BLOCKEDorTIMEOUT. An error is never shown as an empty stack.
Good for
- Find leads that use a given platform: run your domain list and filter
ecommercefor Shopify orcmsfor WordPress. - Check a competitor's or a client's stack before a pitch or an audit: CMS version, analytics, tag manager, CDN.
- Enrich a CRM or spreadsheet with technographic columns for many domains in one run.
- Give an AI agent a quick way to answer "what is this site built with?".
Not a good fit
- One page per input URL. The Actor does not crawl the whole site. Technologies used only on other pages (checkout, blog, app) are found only if you add those URLs.
- No history. It shows what the page uses now, not what the site used in the past. It does not check DNS, mail (MX/SPF) or SSL records.
- No security or vulnerability scanning, and no logged-in pages. Only public pages are checked; local, private and internal addresses are refused.
- Detection is based on public signals. A technology that leaves no trace in the page, headers or scripts cannot be found. Sites behind strong bot protection may return
BLOCKED.
Who uses it
Agencies and freelancers
Check a client's stack before a pitch or audit.
Sales teams
Find leads that use Shopify, WordPress or another platform.
CRM owners
Add technology columns to a long domain list.
Price
Pay per event: you pay for each result the tool saves, plus a small start fee for each run. The price includes Apify platform costs. Apify bills you, not us. Prices below are for the Apify free plan.
| What you pay for | Price | When |
|---|---|---|
| Start fee | $0.007 | Charged once per run. This tool uses 1 GB of memory or less by default; more memory costs more. |
| Site checked | $0.0018 (from $0.0015 on paid Apify plans) | One website the Actor contacted in HTTP mode: a complete row, or an error the site or network gave (blocked, timeout, DNS, HTTP status). Duplicates, rejected input lines and internal errors are free. |
| Site checked in a browser | $0.0035 (from $0.003 on paid Apify plans) | One website the Actor contacted with JavaScript rendering on (useBrowser): a complete row, or an error the site or network gave. Duplicates, rejected input lines and internal errors are free. |
Examples
- One website: about $0.0088.
- 1,000 websites: about $1.81.
- Every day 100 websites, for 30 days: about $5.61 a month.
Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed. That is enough for about 2,700 websites.
Prices checked on 24 October 2026. See the current price on Apify.
Questions
Why does it find fewer tools than BuiltWith?
BuiltWith shows history. This tool checks the live page now.
Does it crawl the whole site?
No. It checks one page per URL you give.
Do I pay for sites that fail?
Yes, if the site was contacted. Duplicates and bad input lines are free.
Why is the version often empty?
Many sites hide versions. The tool shows only what the page reveals.
Do I need an account, cookies or an API key for the sites?
No. The Actor reads public pages like a visitor who is not logged in.
How accurate is the version?
The version comes from what the page shows: a meta generator tag, a script file name or a header. Many sites hide versions, so version is often null.
Details
Step by step on Apify
- Open the Input tab. The Websites field is prefilled with
apify.com,shopify.comandwordpress.org. - Replace them with your own domains or URLs, one per line (up to 1,000; up to 500 in browser mode).
- Keep Render JavaScript in a browser off (the default) for a fast, cheap check.
- Click Start.
- Open the Output tab. The Overview view shows one row per site with
cms,ecommerce,analytics,cdnandserver. The Technologies view shows the full list.
Use cases
| Task | Input | You get | Key fields | Next step |
|---|---|---|---|---|
| Build a lead list by platform | urls (domains from your CRM) | One row per site | url, ecommerce, cms, technologyCount | Export CSV, filter, import to CRM |
| Competitor or client audit | urls + useBrowser: true | Full technology list | technologies[].name, version, categories | Report or spreadsheet |
| Check one category only | urls + categories: ["Analytics"] | Filtered technology list | technologies, analytics | Google Sheets |
| Regular stack check | urls on a schedule | Row with date | detectedAt, cms, cdn | Compare runs over time |
| AI agent question | urls (MCP) | One row per site | cms, ecommerce, analytics, cdn, server | Agent answer |
Tips for better results
- Use browser mode for sites that load tools with JavaScript.
- Add extra URLs, like the checkout page, to find tools used there.
- Filter the ready cms or ecommerce column in a spreadsheet.
Limits and good to know
- Up to 1,000 URLs per run in HTTP mode and up to 500 in browser mode. One page per URL
- Each request has 15 seconds, and each site 30 seconds in total, with up to 3 attempts after network errors, timeouts, 429 and 5xx answers. Up to 5 redirects. Only the first 5 MB of a page are read
- Speed: in HTTP mode, 1,000 domains took about 11 minutes in our test; in browser mode, about 3–4 seconds per site (100 sites in about 6 minutes), so 500 sites fit the default one-hour timeout. In browser mode each site has at most 45 seconds
- If the run is near its timeout, the Actor stops starting new sites and saves what it has (
reason: "TIME_LIMIT") - The fingerprint data is enthec/webappanalyzer (GPL-3.0), used unchanged. Technology names and trademarks belong to their owners
For developers
Sample result
One result from a real test run, in JSON. Real values change from run to run. In Excel or CSV each field is a column.
{
"url": "wordpress.org",
"finalUrl": "https://wordpress.org/",
"status": "complete",
"httpStatus": 200,
"technologies": [
{ "name": "WordPress", "categories": ["CMS", "Blogs"], "version": "7.2", "confidence": 100, "website": "https://wordpress.org" },
{ "name": "Gutenberg", "categories": ["WordPress plugins", "Editors"], "version": "24.1.0", "confidence": 100, "website": "https://github.com/WordPress/gutenberg" },
{ "name": "Nginx", "categories": ["Web servers", "Reverse proxies"], "version": null, "confidence": 100, "website": "https://nginx.org/en" },
{ "name": "Google Tag Manager", "categories": ["Tag managers"], "version": null, "confidence": 100, "website": "https://www.google.com/tagmanager" }
],
"technologyCount": 13,
"cms": ["WordPress"],
"ecommerce": [],
"analytics": [],
"cdn": [],
"server": ["Nginx"],
"framework": [],
"payment": [],
"mode": "http",
"pageTitle": "Blog Tool, Publishing Platform, and CMS – WordPress.org",
"detectedAt": "2026-10-14T02:41:57.061Z",
"fingerprintsVersion": "enthec/webappanalyzer@eea872a",
"fingerprintsLicence": "GPL-3.0-only",
"error": null
}Use it from code
Actor ID: cliqtomedia/tech-stack-detector. You need your Apify API token from Apify Console → Settings → API & Integrations.
from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("cliqtomedia/tech-stack-detector").call(run_input={
"urls": [
"apify.com",
"shopify.com",
"wordpress.org"
],
"useBrowser": False
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~tech-stack-detector/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"urls": ["apify.com", "shopify.com", "wordpress.org"], "useBrowser": false}'# pip install langchain-apify
# set APIFY_TOKEN in your environment
from langchain_apify import ApifyActorsTool
tool = ApifyActorsTool("cliqtomedia/tech-stack-detector")
result = tool.invoke({"run_input": {"urls": ["apify.com", "shopify.com", "wordpress.org"], "useBrowser": False}})
print(result)The cURL call waits for the results, up to 300 seconds. For longer runs, start a run (/runs) and get the results with a webhook or by checking the run. Apify API docs. LlamaIndex, MCP for AI agents and the JavaScript client: AI agents & MCP.
Data fields (19)
| Field | Type | Meaning |
|---|---|---|
url | string | URL or domain as given in the input |
finalUrl | string | Page URL after redirects; null if no response |
status | string | complete or error |
httpStatus | integer | HTTP status of the final response |
technologies | array | Detected technologies: name, categories, version, confidence (0-100), website |
technologyCount | integer | Number of technologies in the list |
cms | array | CMS names |
ecommerce | array | Ecommerce platforms |
analytics | array | Analytics tools |
cdn | array | CDNs |
server | array | Web servers |
framework | array | JavaScript and web frameworks |
payment | array | Payment processors |
mode | string | http or browser |
pageTitle | string | Page <title> |
detectedAt | string | ISO time of the check |
fingerprintsVersion | string | Fingerprint data source and commit |
fingerprintsLicence | string | Licence of the fingerprint data |
error | object | code and message when status is error |
Input settings (4)
The main fields of the input form. With the API you send them as JSON.
| Setting | Name in the API | Type | Example value |
|---|---|---|---|
| Websites required | urls | array | ["apify.com", "shopify.com", "wordpress.org"] |
| Render JavaScript in a browser | useBrowser | boolean | false |
| Only these categories | categories | array | [] |
| Parallel sites | maxConcurrency | integer | 10 |
Use cases with this tool
Each guide shows all the steps and the other tools.