Website Technology Stack Detector
Pricing
from $0.02 / 1,000 item extracteds
Website Technology Stack Detector
Detect CMS, ecommerce, analytics, frameworks, marketing, hosting, and other technologies from public website signals.
Pricing
from $0.02 / 1,000 item extracteds
Rating
0.0
(0)
Developer
Fetch Cat
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
1
Monthly active users
19 days ago
Last modified
Categories
Features
Share
Detect visible website technologies from public domains or URLs and export one row per detected technology, including its category, confidence and supporting signal. This independent website technology stack detector scans the returned page without running JavaScript. It does not query BuiltWith or provide historical technology records.
Quick start
- Add public domains or HTTP(S) URLs under Domains or URLs.
- Start with a small Maximum domains value and optionally choose categories.
- Run the Actor, then export the dataset as JSON, CSV or Excel.
{"domains": ["wordpress.org", "shopify.com", "vercel.com"],"maxDomains": 3,"includeCategories": ["CMS", "Ecommerce", "Hosting"]}
Only signals visible in the returned page can be detected. Login-only, consent-dependent and dynamically loaded technologies may be missing.
Prefer a video guide? This short Apify walkthrough shows you how to set up and run an Actor. It uses a different Actor, but the setup steps are the same.
Ready-to-run examples
Choose a public example to see its settings before starting a run:
- Compare Website Frameworks, CMS, and Hosting
- Audit a SaaS Marketing Technology Stack
- Detect Ecommerce Platforms and Payment Tools
What you get
More than 60 curated signatures cover CMS, ecommerce, analytics, advertising, marketing, support, payments, frameworks, hosting, CDN, web servers and consent tools. Use the results to enrich lead lists, compare currently visible stacks or review a website's exposed marketing tools.
Each technology has a deterministic confidence score and a concise evidence label. Version values appear only when the matched signal exposes a version. Results follow input-target order, with technology names sorted within each target.
Who is it for?
- Technology research teams comparing the visible tools on selected public websites.
- Lead-enrichment teams adding source-supported technology matches to known domain lists.
- Website reviewers checking the available signals behind a detected product.
- Data teams reshaping per-technology rows into their own domain-level comparison sheets.
How you can use the data
- Compare three public website stacks. Use the existing
wordpress.org,shopify.comandvercel.cominput example with CMS, Ecommerce and Hosting categories. Group rows bynormalizedDomainin your own sheet and retaintechnologyName,categoryandevidenceDetailwith each match. - Qualify a detected tool before using it. Inspect
confidence,evidenceTypeandevidenceDetail. Confidence is signature-rule strength rather than a statistical probability or a complete-stack certification. - Review one public page in context. A URL can include a path, and the Actor inspects that page rather than exploring the whole site. Keep
sourceUrlandfinalUrlso a reviewer can understand what was checked. - Separate missing evidence from absence. Keep no-match or request-error status rows distinct from detected technologies. Missing matches do not establish that a website lacks a product, and the always-null first/last detection fields do not provide adoption or migration history.
Input settings
| Setting | API field | Purpose |
|---|---|---|
| Domains or URLs | domains | Required list of public domains or HTTP(S) URLs. |
| Maximum domains | maxDomains | Target cap. Form default 3. Set explicitly in API calls. |
| Include only categories | includeCategories | Optional category filter. Empty means all supported categories. |
| Maximum processing time | maxRunSeconds | Budget of 45–300 seconds. Default 300. |
| Resume unfinished work | resumeFromCheckpoint | Default true. Requires reuse of the same default key-value store. |
| Proxy configuration | proxyConfiguration | Optional existing proxy settings. Direct by default. See field help for supported choices. |
Example inputs
Use the Quick start input as a small first run. Adjust the fields described above for your own data.
Output data
The following abbreviated example shows the shape of a technology row. Values are illustrative, not a new live scan:
{"domain": "wordpress.org","normalizedDomain": "wordpress.org","technologyName": "WordPress","category": "CMS","confidence": 99,"version": null,"evidenceType": "meta","evidenceDetail": "WordPress generator"}
| Fields | Meaning |
|---|---|
domain, normalizedDomain | Original input and normalized hostname. |
sourceUrl, finalUrl | Requested and final URL. Final URL may be absent on request errors. |
statusCode, redirectCount | Response context when available. |
technologyName, category, subcategory | Detected product and classification. |
confidence, version | Rule strength, not statistical probability. Exposed version or null. |
evidenceType, evidenceDetail, sourceSection | Concise labels describing the matched signal. |
pageTitle, description, vendorUrl | Page title, technology description and vendor website. |
firstDetected, lastDetected | Always null: no historical database is consulted. |
scrapedAt | Detection timestamp. |
error | Reason on no-match or request-error status rows. |
A reachable page with no matching signature produces a status row with technologyName: null. Isolated request failures also produce status rows. If every target fails before analysis, the run fails. Completed records from other targets remain available. The optional RUN_SUMMARY key-value record reports progress and counts. PENDING_WORK holds resumable progress.
Download your results
Open your run's dataset, choose Export and select JSON, CSV or Excel. JSON keeps nested fields together. CSV and Excel are useful when you want to review the records in a spreadsheet.
See Apify's download and export guide for the available formats and field options.
Pricing
The Actor uses pay-per-event pricing: start is charged once when a new workflow begins, and item is charged for each saved detected-technology row. No-match and request-error status rows have no item charge.
Start with a small maxDomains. One domain can produce several technology rows and therefore multiple item events. Current rates are on the Pricing tab.
Tips for best results
- Start with a few known public domains. Set the domain cap explicitly and choose supported categories when only part of a stack matters.
- Keep the evidence with each match. Review the rule strength and evidence label before adding a technology to a lead record.
- Use the page URL you intend to inspect. A supplied path limits the observation to that page rather than a whole-site crawl.
- Check storage before relying on continuation. Resumable progress requires the same default key-value store. An ordinary new run does not automatically share it.
- Group technology rows downstream. The dataset does not return one combined company profile per domain.
Limits and caveats
Only public websites are supported. Credentials in target URLs, custom ports, IP literals, local names and private or reserved network destinations are rejected.
The Actor inspects the returned page without running JavaScript. Login-only, consent-dependent or dynamically loaded technologies can be missed. Access blocks can prevent analysis, and a missing technology is not proof that the website does not use it.
This is independent of BuiltWith and does not query its database, historical profiles, traffic estimates or contact records. Exposed versions appear only when a matched signal supplies one. First and last detection fields remain null.
A same-storage checkpoint continuation can avoid repeating completed work. An ordinary new run does not automatically share that storage. PENDING_WORK holds resumable progress, while the optional RUN_SUMMARY describes progress and counts. No-match and isolated request failures produce status rows. If every target fails before analysis, the run fails, while completed records from other targets remain available.
Automation and integrations
Save your settings for next time
Once you have an input that works for you, save it as an Apify task. This keeps your settings together so you can use them again without filling in the form from scratch.
Run on a schedule
Need fresh results regularly? You can schedule the Actor or a saved task to run at a time that suits you.
Each scheduled run collects the data again. If you want to compare results or highlight changes, add that step in your own workflow.
Send results to your other tools
Use n8n, Make or Zapier to connect this scraper to the rest of your workflow. For example, you could pass its results to an AI assistant or add records to a spreadsheet. Follow the Apify integration guides for your chosen tool.
For a custom connection, an Apify webhook can notify your app when a run finishes or fails. Your app can then fetch the results or handle the failure.
API usage
Want to collect this data from your own app or automation? The examples below send input to the scraper and show how to collect its results.
The Node.js and Python examples wait for the run to finish before reading its results. The cURL example starts the run and returns its details. Wait for that run to finish, then use its defaultDatasetId to fetch the results.
For setup instructions, see Apify's JavaScript client guide, Python client guide and Actor runs API reference.
cURL
curl -X POST 'https://api.apify.com/v2/acts/fetch_cat~builtwith-domain-tech-stack-scraper/runs' \-H "Authorization: Bearer $APIFY_TOKEN" \-H 'Content-Type: application/json' \--data @- <<'JSON'{"domains": ["wordpress.org","shopify.com","vercel.com"],"maxDomains": 3,"includeCategories": ["CMS","Ecommerce","Hosting"]}JSON
Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('fetch_cat/builtwith-domain-tech-stack-scraper').call({"domains": ["wordpress.org","shopify.com","vercel.com"],"maxDomains": 3,"includeCategories": ["CMS","Ecommerce","Hosting"]});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Python
import osfrom apify_client import ApifyClientclient = ApifyClient(os.environ['APIFY_TOKEN'])run = client.actor('fetch_cat/builtwith-domain-tech-stack-scraper').call(run_input={'domains': ['wordpress.org', 'shopify.com', 'vercel.com'], 'maxDomains': 3, 'includeCategories': ['CMS', 'Ecommerce', 'Hosting']})print(client.dataset(run['defaultDatasetId']).list_items().items)
MCP and AI agents
You can ask your AI assistant to collect data with Website Technology Stack Detector and help you work with the results. The scraper returns the data, and your assistant can then summarize it, compare records or prepare notes.
Connect your assistant through the Apify MCP server. MCP gives your assistant a way to find this scraper, run it and read the results. Follow the official setup and sign-in guide for your app.
Easier setup with an Apify plugin
If you use a supported coding assistant, the official Apify plugin can set up the connection for you. It connects your assistant to Apify and includes instructions for common tasks. Follow the guide for your particular app.
Use Apify AI in Console
Prefer to keep everything in Apify? Open Apify AI in Console and ask it to find Fetch Cat's Website Technology Stack Detector. You can describe the data you want and ask questions about the results.
Apify AI is currently in beta. It asks for confirmation before starting an Actor, and normal run charges apply.
Choose your assistant
- Claude and Claude Code (Anthropic): Apify setup guide.
- ChatGPT and Codex (OpenAI): Apify setup guides.
- Grok Bot (xAI): Apify plugin guide.
- Gemini CLI (Google): MCP server setup guide. Use the server URL below with the HTTP configuration supported by Gemini CLI.
Connect just this scraper
To keep your setup focused on this scraper, add this server configuration to a compatible MCP client:
{"mcpServers": {"apify": {"url": "https://mcp.apify.com?tools=fetch_cat/builtwith-domain-tech-stack-scraper"}}}
Sign in to Apify when your client asks. If your client uses a Bearer token instead, follow its setup guide and keep the token in its secure configuration. Configuration formats vary by app, so use the linked guide if your client needs a different format.
Use Apify's general server
Already connected to the general Apify MCP server at https://mcp.apify.com? You can use it to find this scraper without adding another server. Ask your assistant to use Website Technology Stack Detector by Fetch Cat, or give it the identifier fetch_cat/builtwith-domain-tech-stack-scraper.
Your assistant can check the available settings and retrieve the results from the returned run. If the run is still working, it should follow that run rather than start it again. Both connection options use Apify's hosted service.
Example requests
- “Use Fetch Cat’s BuiltWith Domain Tech Stack Scraper to retrieve visible technology data for wordpress.org, shopify.com and vercel.com, limiting the run to 3 domains and the CMS, Ecommerce and Hosting categories. Show detected products with their evidence and rule-strength scores.”
- “Collect visible technology data from this one public website page. Keep the requested and final URLs, available version information and evidence labels, without claiming a complete stack or JavaScript-rendered coverage.”
- “Collect supported CMS-signature matches for up to 2 public domains from my lead list. Separate detected technologies from no-match or request-error rows, and do not treat missing evidence as proof that a website has no CMS.”
Normal Apify charges apply. Check the live Pricing tab before asking your assistant to run a larger batch.
Pay with x402
If your AI agent has a funded wallet, it can pay for Apify usage through x402. This experimental option lets an agent use Apify without a conventional account.
Apify AGI provides a prepaid API token with a spending cap after payment. Your agent can use that token to run this scraper through the Apify API or an authenticated MCP connection.
Some MCP setups also support paying for each request directly. That is a different payment option, so check the official guide for its availability.
Follow the official guide for wallet setup, supported payment options and current terms. Apify handles the payments. Keep wallet keys and payment tokens in your agent's secure configuration.
Other ways for agents to pay
Apify also supports MPP for prepaid access through AGI and Skyfire for eligible Actors. If your agent already uses one of these, see the agentic payment guide to choose the right setup.
FAQ
Is this a BuiltWith API alternative?
It supports public website technology checks, but it is independent of BuiltWith and does not return BuiltWith's historical profiles, traffic estimates, contacts or technology-adoption database.
Can I export website tech stacks?
Yes. Download the dataset from Apify as CSV, Excel or JSON, or read it through the API. Each technology is a separate row, not one combined company profile.
Why did I get “No technologies detected”?
None of the enabled signatures matched the returned page. A category filter can also remove detections. The site may use server-side or dynamically loaded tools that are not visible to this scan.
Why did I get a request-error row?
The page could not be analyzed, for example because of an access block, network failure or unsupported response. A proxy cannot reveal content hidden behind login or client interaction.
Why are versions and historical dates empty?
Versions require an exposed signal. firstDetected and lastDetected are compatibility fields and always null.
Related Actors
- WHOIS & RDAP Domain Lookup — add domain registration and status data.
- Email MX Deliverability Verifier — inspect public mail infrastructure.
- Google Maps Lead Finder — find public business leads before technology enrichment.
- Website Content Crawler Lite — collect public website content alongside stack research.
- Website Contact Finder — find public contact details for researched websites.
Support and feedback
For custom additions or integrations, email hello@fetchcat.dev.
Found an error or have a feature request? Open an issue with the run URL, a non-sensitive input example and what you expected.
Need help sharing it? See Apify’s guide to sharing a run when reporting an issue. Sharing a run can give the developer access to its input, logs and results, so use a run that contains no sensitive data. Please leave out API tokens, passwords, cookies, private documents and personal data. Use a public sample URL or a redacted example instead.
Tried this scraper? We'd love to hear how it worked for you. Leave a review to help others choose the right tool and help us improve it. Your feedback means a lot to us.
Made with care for curious people, AI agents and the possibilities in data. ♥