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

StatusMeaning
401Missing, invalid, or revoked API key.
429Monthly scan limit reached. The error message includes the upgrade link. Limits reset on the 1st of each month (UTC).
400Malformed 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.