Search by task, endpoint, field, or error.
Stack API
Identify the technologies observed on a website.
Look up the technologies used on a website's homepage. Get its CMS platforms, servers, frameworks and other tools, with versions and the time of the check. Try Stack.
Look up a website
Parameters 1
- domainstring · path · required
Public hostname only, including an optional subdomain. Internationalized names and a trailing dot are accepted. URLs, paths, ports, IP addresses and private names return 400.
Length: 0 to 254 characters
import { parseAPI } from '@parseapi/sdk';
const parse = parseAPI("YOUR_API_KEY");
const result = await parse.stack("wordpress.org");
console.log(result);Run on your server with a secret key. Calling from a browser or app?
{
"domain": "wordpress.org",
"url": "https://wordpress.org/",
"checked_at": "2026-09-21T01:06:18.169Z",
"scope": "homepage",
"pages": 1,
"partial": true,
"cms": [
{
"technology": "wordpress",
"name": "WordPress",
"version": null
}
],
"servers": [
{
"technology": "nginx",
"name": "nginx",
"version": null
}
],
"frameworks": [],
"ecommerce": [],
"analytics": [],
"chat": [],
"payments": [],
"hosting": []
}Pass a domain such as wordpress.org. One lookup checks its homepage and follows allowed redirects. The API uses your existing key and version 2.0.0. Each lookup uses one request.
Domain format and response fields
Subdomains and internationalized domain names are supported. Use the hostname alone, without a URL scheme, path or port. IP addresses and private hostnames return 400. The response retains the requested domain and reports the final URL.
Response fields
- domainstring
- Requested public hostname, normalized to lowercase ASCII
- urlstring
- Homepage URL after redirects; requested HTTPS URL if no homepage response was received
- checked_atstring or null
- Successful check time in UTC. Cached reads retain it. Null when the check did not complete
- scopestring
- homepage or site. Site covers a bounded set of discovered pages
- pagesinteger
- Successfully checked HTML pages. Zero when no page could be checked
- partialboolean or null
- True for homepage-only results or unchecked in-scope pages. False only for a finished bounded discovered set. Null when no page could be checked
- cmsarray or null
- Detected CMS platforms and site builders
- serversarray or null
- Detected web servers
- frameworksarray or null
- Detected frameworks, such as Next.js or Express
- ecommercearray or null
- Detected ecommerce platforms, such as Shopify or WooCommerce
- analyticsarray or null
- Detected analytics tools
- chatarray or null
- Detected chat tools
- paymentsarray or null
- Detected payment tools
- hostingarray or null
- Detected hosting and edge services, such as Vercel or Cloudflare
- technologystring
- Stable code within each category array entry, such as wordpress or nextjs
- namestring
- Display name within each category array entry
- versionstring or null
- Version within each category array entry. Null when unknown or conflicting
Read the result
Each category is a list: cms, servers, frameworks, ecommerce, analytics, chat, payments and hosting. Each entry has a stable technology code, a display name and nullable version. Empty means no match on the checked pages. A check that could not inspect any page returns null categories and checked_at.
scope identifies homepage or site coverage, and pages counts successfully checked HTML pages. The current API checks one homepage and returns partial: true. A site inventory is also partial when known pages remain unchecked. partial: false means the bounded discovered set was checked; it does not mean every page on the website was found. No successful page returns pages: 0 and partial: null.
Successful checks are reused for up to 24 hours. checked_at always records the original check time. Failed checks can be retried after 15 minutes.
Stack reads the returned homepage HTML and headers. Technologies loaded only after JavaScript runs or on other pages may be absent. Versions are null when they are missing or conflicting.
Request timing
Allow 35 seconds for a fresh check in a custom HTTP client. The SDKs use this default for Stack. An explicit timeout setting takes precedence. Cached checks can return sooner.
Handle errors
Invalid domains or unsupported options return 400. Authentication and key restrictions use 401 or 403. Request limits use 429. Service configuration failures return 503. API version 1.0.0 does not include Stack.
Questions? Email