Tech Stack
Detect the frameworks, CMS, analytics, CDN, hosting and other technologies a domain runs, from a live homepage fetch plus link graph signals.
GET
/v1/tech-stack2 credits (refunded on failure)API keyDetects the technologies behind a domain. It fetches the homepage live and matches fingerprints in the HTML and response headers, and in parallel looks up link graph data to catch technologies the homepage does not show directly. Use it for lead enrichment, competitor research or platform targeting.
Request
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
domain | string | Yes | none | Bare domain such as vercel.com. No scheme, path or port. |
Example
curl "https://api.rankparse.com/v1/tech-stack?domain=vercel.com" \
-H "X-API-Key: rp_your_key"import requests
resp = requests.get(
"https://api.rankparse.com/v1/tech-stack",
params={"domain": "vercel.com"},
headers={"X-API-Key": "rp_your_key"},
timeout=45,
)
resp.raise_for_status()
for tech in resp.json()["data"]["technologies"]:
print(tech["category"], tech["name"], tech["confidence"])const res = await fetch(
"https://api.rankparse.com/v1/tech-stack?domain=vercel.com",
{ headers: { "X-API-Key": process.env.RANKPARSE_API_KEY } }
);
if (!res.ok) throw new Error(`${res.status}: ${await res.text()}`);
const { data } = await res.json();
for (const t of data.technologies) console.log(t.category, t.name, t.confidence);Response
{
"domain": "vercel.com",
"data": {
"domain": "vercel.com",
"technologies": [
{ "name": "Next.js", "category": "framework", "confidence": "definite" },
{ "name": "React", "category": "framework", "confidence": "high" },
{ "name": "Cloudflare", "category": "cdn", "confidence": "definite" },
{ "name": "Vercel", "category": "hosting", "confidence": "definite" },
{ "name": "Google Analytics 4", "category": "analytics", "confidence": "definite" }
],
"server": "cloudflare",
"x_powered_by": null,
"response_time_ms": 241
},
"credits_used": 2,
"credits_remaining": 998
}Response fields
| Field | Type | Description |
|---|---|---|
technologies | array | Detected technologies, live detections first, then any link graph additions. Each has name, category and confidence. Empty when nothing matched. |
technologies[].category | string | One of the categories below. |
technologies[].confidence | string | definite, high or medium. |
server | string or null | Value of the homepage Server header. |
x_powered_by | string or null | Value of the homepage X-Powered-By header. |
response_time_ms | integer | Time taken by the live homepage fetch. |
Categories
| Category | Examples |
|---|---|
framework | Next.js, Nuxt, Gatsby, React, Vue, Angular, Svelte, Remix, Astro |
cms | WordPress, Ghost, Webflow, Framer, Squarespace, Wix, Drupal |
ecommerce | Shopify, WooCommerce, BigCommerce, Magento |
analytics | Google Analytics, GTM, Meta Pixel, Hotjar, PostHog, Plausible, Segment |
cdn | Cloudflare, AWS CloudFront, Fastly, Akamai |
hosting | Vercel, Netlify, Fly.io, Render, Railway |
email_marketing | Klaviyo, Mailchimp, ConvertKit |
ab_testing | Optimizely, VWO, AB Tasty |
payments | Stripe, PayPal, Paddle |
crm | HubSpot, ActiveCampaign |
support | Intercom, Zendesk, Crisp, Drift |
Confidence levels
definite: a unique identifier in the headers or HTML (for example thecf-rayheader means Cloudflare).high: a strong pattern match (for example__NEXT_DATA__in the HTML means Next.js).medium: a weaker signal that can produce false positives.
Behavior and limits
- Two sources, merged by name. The live homepage fetch takes precedence. Technologies that the link graph lookup finds but the live page does not show (for example a script or CDN host the site links to) are added. The response does not mark which source produced each entry.
- Lookup budget. The link graph lookup is cut off after 12 seconds; if it is slow, you get the live result alone rather than waiting.
- Homepage only. Live detection reads the homepage's HTML and headers. Technologies loaded only after JavaScript runs may be missed, and inner pages are not inspected.
- Fetch limits. 8 second timeout for the homepage, 2 MB body cap, up to 5 redirects, public hosts only. See Page SEO for the fetch rules.
- Billing. Costs 2 credits; refunded automatically on any non-2xx response. Invalid or private domains are rejected before billing. Subject to the standard 60 requests per minute limit.
Errors
| Status | Code | When |
|---|---|---|
400 | invalid_url | domain is missing, not a bare domain, or longer than 253 characters. |
400 | private_ip | Domain is a private, reserved or local host. |
400 | response_too_large | The homepage exceeded 2 MB. |
401 | invalid_api_key | Missing, invalid or revoked key. |
402 | insufficient_credits | Balance below 2 credits. |
402 | spend_cap_reached | Monthly spend cap reached. |
429 | rate_limited | More than 60 requests per minute. |
503 | fetch_failed | The homepage was unreachable or redirected too many times. |
503 | timeout | The homepage did not respond within 8 seconds. |
See Errors for the shared error format.
Related
MCP tool: get_tech_stack.