Website Tech Stack Scraper - Detect Technologies in Bulk
Pricing
from $1.05 / 1,000 results
Website Tech Stack Scraper - Detect Technologies in Bulk
Find out which technologies a website runs on, for hundreds of company domains in one run. For every domain you get the detected technologies with version, confidence, category and website (CMS, e-commerce platform, analytics, tag managers, CDN, hosting, JavaScript frameworks, payment, marketing too
Pricing
from $1.05 / 1,000 results
Rating
0.0
(0)
Developer
Martin Petrov
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 hours ago
Last modified
Categories
Security
Limited permissionsShare
Tech Stack Lookup API - Detect Technologies, Bulk, MCP
Which CMS, shop platform, analytics, CDN and email provider does a company use? BuiltWith and Wappalyzer subscriptions cost hundreds of dollars a month, and sales and lead-gen teams need the tech stack of hundreds of prospect companies at once. This actor gives you the same kind of answer per domain for $2 per 1,000 websites, with no subscription and no API key.
Give it a list of domains. It makes one polite request to each homepage, matches 3,500+ open technology fingerprints, reads the MX and SPF records to find the email provider, and returns one clean row per domain. Works from the Apify API, from the console, and from AI agents via MCP.
What you get per domain
- Technologies with version, confidence, categories and website (CMS, e-commerce, analytics, tag managers, CDN, hosting, web servers, JavaScript frameworks, payment processors, marketing and support tools, security).
- Shortcuts for filters and CRM columns:
cms,ecommerce,analytics,emailProvider,cdn,technologyNames,categories. - Company info: page title, meta description, generator and the company's own social profile links (LinkedIn, X/Twitter, Facebook, Instagram, YouTube, TikTok, GitHub).
- Only-new mode: alerts when a domain adds or drops a technology (a prospect moves from WooCommerce to Shopify, a competitor installs a new analytics tool).
Quick start (API)
curl -X POST "https://api.apify.com/v2/acts/martin10291~website-tech-stack-detector/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"domains": ["shopify.com", "stripe.com", "hubspot.com"], "includeDns": true}'
Use from AI agents (MCP)
Add this actor to the Apify MCP server at https://mcp.apify.com and your agent can call it as a tool:
https://mcp.apify.com?tools=martin10291/website-tech-stack-detector
Example prompt: "What CMS and email provider do these 20 companies use?" The agent passes the domains and reads back cms, ecommerce and emailProvider from the rows.
Input
| Field | Type | Default | Description |
|---|---|---|---|
domains | array | 5 example sites | Domains or URLs to analyse. The homepage is fetched once per site. |
includeDns | boolean | true | Read MX and TXT records to detect the email provider and SPF senders. |
includeCompanyInfo | boolean | true | Add title, description, generator and social profile links. |
minConfidence | integer | 50 | Only report technologies with at least this confidence (0-100). |
maxConcurrency | integer | 10 | Websites fetched in parallel (1-30). |
monitorId | string | empty | Set it to switch on only-new mode (see below). |
Output example
{"domain": "wordpress.org","finalUrl": "https://wordpress.org/","statusCode": 200,"technologies": [{"name": "WordPress", "version": null, "confidence": 100, "categories": ["CMS", "Blogs"], "website": "https://wordpress.org"},{"name": "Nginx", "version": null, "confidence": 100, "categories": ["Web servers", "Reverse proxies"], "website": "http://nginx.org/en"}],"categories": ["Blogs", "CMS", "Reverse proxies", "Web servers"],"technologyNames": ["WordPress", "Nginx", "PHP", "MySQL"],"cms": "WordPress","ecommerce": null,"analytics": [],"emailProvider": null,"cdn": null,"title": "WordPress.org","description": "...","socialLinks": {"twitter": "https://twitter.com/WordPress"},"added": null,"removed": null,"error": null,"checkedAt": "2026-11-05T10:00:00Z"}
Rows for sites that cannot be reached are still returned, with error set and empty technology lists. A RUN_SUMMARY record in the key-value store holds domainsIn, itemsOut, failed, lastError, durationSec and fingerprintsVersion.
Only-new mode: technology change alerts
Set monitorId (for example "prospects-q4"). The actor remembers the technology set of every domain under that ID. On the next run it outputs only domains whose stack changed, with added[] and removed[]. The first run with a new ID reports every domain as new (added = everything). Schedule the actor daily or weekly and connect a webhook or an Apify integration to get alerts. Use one ID per watch list.
FAQ
How accurate is it? Detection matches the open Wappalyzer fingerprints against the response headers, cookies, HTML, script URLs, meta tags and DNS records. Fingerprints that need a running browser (JavaScript globals, rendered DOM) are not used, so some client-side-only tools will be missed. Use confidence to judge weak signals.
Why is a site missing technologies or showing HTTP 403? Some sites block automated requests. Their headers and DNS are still analysed, but page-content signals are missing. The actor sends one honest request with its own User-Agent and does not use proxies or evasion.
Does it crawl the whole site? No, it analyses the homepage only (or the exact URL you pass).
Is it legal? It reads public homepage content and public DNS records of companies. No personal data is collected; social links are the company's own profiles.
How fast is it? About 30 domains in 40 seconds at the default concurrency of 10.
How is it priced? Pay per result, $2 per 1,000 rows.
Notice
Fingerprints: Wappalyzer (MIT) v6.10.54, 3,588 technologies. The license text is in src/data/LICENSE. Not affiliated with Wappalyzer or BuiltWith.
Use it as an integration (chain it after another actor)
This actor can run automatically after any actor whose results contain a website or domain.
- Open the source actor in Apify Console and go to the Integrations tab.
- Click Add integration -> Actor, pick this actor and set Dataset to
{{resource.defaultDatasetId}}(leavedomainsempty). Set your other options and save. - When the source run finishes, this actor reads its dataset and processes every row. The field is detected automatically; set Dataset field if your column has another name.
You can also start it by hand with datasetId (pick a dataset or paste its ID) to process an existing dataset.
Good sources to chain from:
- compass/crawler-google-places (Google Maps Scraper)
- martin10291/local-business-leads-osm
- martin10291/shopify-app-store-scraper (developerWebsite)
- martin10291/apple-podcasts-scraper (website)
- any lead list with a website/domain column