Forency API
One endpoint to detect the technology stack of any website. Get a free key on the dashboard (100 scans/month, no card).
Quickstart
curl -X POST https://forency.io/api/v1/lookup \
-H "Authorization: Bearer fcy_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"url": "https://competitor.com"}'JavaScript:
const res = await fetch("https://forency.io/api/v1/lookup", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.FORENCY_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({ url: "https://competitor.com" }),
});
const { data } = await res.json();
console.log(data.primaryStack, data.technologyNames);Python:
import os, requests
res = requests.post(
"https://forency.io/api/v1/lookup",
headers={"Authorization": f"Bearer {os.environ['FORENCY_API_KEY']}"},
json={"url": "https://competitor.com"},
)
data = res.json()["data"]
print(data["primaryStack"], data["technologyNames"])Endpoints
POST /api/v1/lookup
Body {"url": "https://example.com"}. Scans one URL. Counts as 1 scan.
POST /api/v1/batch
Body {"urls": [...]} with 1-25 URLs, scanned concurrently. Counts as one scan per URL.
Response shape
{
"success": true,
"data": {
"url": "https://example.com",
"finalUrl": "https://example.com/",
"statusCode": 200,
"technologies": { "CMS": ["WordPress"], "Analytics": ["Google Analytics"] },
"technologyNames": ["Google Analytics", "MySQL", "PHP", "WordPress"],
"categories": ["Analytics", "CMS", "Databases", "Programming languages"],
"signals": {
"isShopify": false, "isWordPress": true, "isWebflow": false,
"hasEcommercePlatform": false, "usesReact": false, "usesNextJs": false,
"hasAnalytics": true, "hasMarketingPixel": false,
"hasPaymentProvider": false, "hasChatWidget": false,
"hasMarketingAutomation": false, "hasSecurityHeaders": true
},
"primaryStack": "WordPress",
"techCount": 4,
"categoryCount": 4,
"serverInfo": { "server": "nginx", "contentType": "text/html" },
"analyzedAt": "2026-08-27T16:00:00.000Z",
"error": null
}
}Errors and limits
| Status | Meaning |
|---|---|
| 401 | Missing, invalid, or revoked API key. |
| 429 | Monthly scan limit reached. The error message includes the upgrade link. Limits reset on the 1st of each month (UTC). |
| 400 | Malformed body. |
Unreachable or timed-out sites return success: false with the reason in error — the scan still counts, since the fetch was attempted. Page fetches time out at 10 seconds.
MCP server
Forency gives AI agents (Claude, Cursor, and any MCP-compatible assistant) direct access to tech stack lookups. Two ways to connect.
Hosted (no install)
Add this URL in any client that supports remote MCP servers, with your API key as a Bearer token:
https://forency.io/api/mcp
Some clients let you pass the key in the URL instead: https://forency.io/api/mcp?api_key=fcy_YOUR_KEY
Also listed on Smithery, which handles the connection for you.
Local (npm)
For clients that run MCP servers locally:
{
"mcpServers": {
"forency": {
"command": "npx",
"args": ["-y", "forency-mcp"],
"env": { "FORENCY_API_KEY": "fcy_YOUR_KEY" }
}
}
}Either way you get the same three tools: lookup_tech_stack(url), batch_lookup(urls), and compare_stacks(urls). Then just ask: “What tech stack does competitor.com run?”
Playground
The homepage scanner is free without a key: 10 scans/day per IP.