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.
Local preview. API access and SDK releases are pending.
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.
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
- domain
- Requested public hostname, normalized to lowercase ASCII
- url
- Homepage URL after redirects; requested HTTPS URL if no homepage response was received
- checked_at
- Successful check time in UTC. Cached reads retain it. Null when the check did not complete
- scope
- homepage or site. Site covers a bounded set of discovered pages
- pages
- Successfully checked HTML pages. Zero when no page could be checked
- partial
- 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
- cms
- Detected CMS platforms and site builders
- servers
- Detected web servers
- frameworks
- Detected frameworks, such as Next.js or Express
- ecommerce
- Detected ecommerce platforms, such as Shopify or WooCommerce
- analytics
- Detected analytics tools
- chat
- Detected chat tools
- payments
- Detected payment tools
- hosting
- Detected hosting and edge services, such as Vercel or Cloudflare
- technology
- Stable code within each category array entry, such as wordpress or nextjs
- name
- Display name within each category array entry
- version
- 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 preview 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 and preview behavior
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.
The local playground runs without account authentication or billing. Its preview headers identify the simulated plan. Production API access remains disabled.
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