Website Tech Stack Detector with Evidence
Pricing
$3.00 / 1,000 website checks
Website Tech Stack Detector with Evidence
Detect CMS, analytics, ecommerce and web frameworks from public HTML and headers. Export supporting evidence and compare technology changes across runs.
Pricing
$3.00 / 1,000 website checks
Rating
0.0
(0)
Developer
Kiro Zhang
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Security
Limited permissionsShare
Turn a list of company websites into an evidence-backed technology inventory. Use it to qualify CMS migration prospects, maintain an agency client inventory, or detect changes in a recurring website check.
Who this is for
For agencies qualifying CMS migrations, sales teams enriching an existing company list, and developers checking client websites. Bring the website URLs you already have; this Actor does not discover companies or contacts.
Start with at most 10 result rows: the Actor event charges for that batch are at most $0.03 at the listed rate. Set both maxResults and the run's maximum charge before starting.
Quick start
Open the Input tab, paste your input and run. A small example:
{"urls": ["https://www.wordpress.org/","https://www.shopify.com/"],"maxResults": 10}
What you receive
One row per successfully fetched HTML page, including the final URL, page title, technology names, categories and up to three pieces of evidence per technology. Evidence comes from script and stylesheet URLs, generator metadata, selected headers and framework attributes. The detector contains 60 focused signatures across CMS, ecommerce, analytics, marketing, support, payments, hosting and frameworks.
Examples include WordPress, Shopify, WooCommerce, Webflow, Wix, Next.js, Nuxt, Google Analytics, Google Tag Manager, HubSpot, Stripe and Cloudflare. A detection means a matching public artifact was observed; it does not establish an active subscription or paid customer relationship.
Compare repeated checks
Paste the earlier dataset rows into previousResults. The Actor matches key and compares technologyNames, producing comparison (no_baseline, unchanged or changed) and changedFields. A new run always fetches fresh pages. Baselines are explicit input, never shared account-wide state.
Scope and limitations
This is a lightweight server-HTML check. It does not execute JavaScript, traverse the entire site, read private pages or query a commercial technology database. A technology loaded after consent or in a client-only application may be missed. Zero matches means no supported signatures were found in the fetched page, not that the site has no technology. Version numbers and employee contacts are not inferred. Robots rules and access refusals are respected.
Pricing and limits
$3 per 1,000 delivered website check results ($0.003 each). There is no Actor startup fee. Standard platform usage is included in this Actor's event price. A successfully delivered dataset row triggers one charge; error diagnostics live in RUN_SUMMARY and are not chargeable rows. Repeated runs are new checks and may return the same item again. The Pricing tab is authoritative.
Use the run's maximum charge setting and maxResults to control spending. No proxy subscription or external API key is required. Runs use 256 MB by default. For large batches, raise the run timeout or split the input; a hard timeout may leave an incomplete dataset. The presence of a finished RUN_SUMMARY helps distinguish completed processing from interrupted runs.
Export and integrations
Use the Output tab to inspect results and the summary. Download JSON, CSV or Excel from the dataset, or use Apify's API, Make, Zapier or n8n to pass the output into your existing workflow. Nested evidence is most faithfully preserved in JSON. The default dataset belongs to the run; no external destination receives results automatically.
An API client can start kirozhang/website-tech-stack-evidence with the JSON above, wait for completion and read its default dataset. Set your Apify token in the client's credential store, never inside the input URLs.
Troubleshooting
Read RUN_SUMMARY.errors and limitReasons first. A partial run may contain useful rows; it must not be treated as exhaustive. All-target failure marks the run failed. A valid search with no matches can succeed with zero rows. For support, open an Issue on this Actor with the run ID, expected behavior and a public example target. Remove credentials and private data from your report.
Example output
Illustrative excerpt from a real verification run; values change over time.
{"url": "https://www.wordpress.org/","title": "Blog Tool, Publishing Platform, and CMS | WordPress.orgWordPress.orgWordPress.orgCode is Poetry","technologyNames": ["Nginx","WordPress"],"technologyCount": 2,"comparison": "no_baseline","checkedAt": "2026-11-06T12:35:35.990Z"}
Workflows and questions
Weekly client technology inventory
- Start with 5–10 client URLs and inspect the evidence behind each match.
- Save the resulting JSON, including
keyandtechnologyNames. - On the next check, send those rows as
previousResultswith the same URLs. Filtercomparison: "changed"for review. - Keep each dated dataset. A scheduled run with a static baseline keeps comparing against that baseline; your workflow must explicitly supply the previous run's rows to advance it.
Common questions
Is this a Wappalyzer or BuiltWith database export? No. It performs a fresh public-page check using its own focused signatures. Use the returned evidence to decide whether a match is useful.
Can it identify every technology on a site? It inspects server HTML and selected headers without a browser. Client-only and consent-gated scripts can be absent.
Can I use CSV? Yes, for a flat inventory. Keep JSON when you need nested evidence or a baseline for the next run.
API quick start
Save the Quick start JSON as input.json. Put your Apify token in the APIFY_TOKEN environment variable through your usual secret store, then run:
curl --fail-with-body --max-time 200 \--request POST \--header "Authorization: Bearer $APIFY_TOKEN" \--header "Content-Type: application/json" \--data-binary @input.json \"https://api.apify.com/v2/acts/kirozhang~website-tech-stack-evidence/run-sync-get-dataset-items?timeout=180&memory=256&maxTotalChargeUsd=0.10&format=json&clean=true" \--output results.json
This example starts a real run and applies a $0.10 charge ceiling. The smaller maxResults cap still applies. An empty array can be a valid no-match result; inspect the run and RUN_SUMMARY in Console. If the connection times out, check Console before retrying, since the run may already exist. For larger exports, use the asynchronous API shown on this Actor's API tab and read the dataset after the run finishes.
Scheduling and workflow tools
After a successful small run, save a task with your production input. Apify schedules can run that task regularly. In Make, Zapier or n8n, store the token in the connection credentials, run this Actor, wait for completion, and read its dataset. Configure your own destination explicitly; this Actor does not send emails or post messages automatically. Each scheduled run may incur charges, including repeated results.