Technologies
Find out what a website is built with: its CMS or e-commerce platform, JavaScript frameworks and libraries, analytics and tag managers, CDN, web server, programming language, payment providers, chat widgets and more — each with its version when the page gives it away.
Detection matches what the page shows against an open, community-maintained fingerprint database — over 7,000 technologies. The page is rendered in a real browser first, so what it loads with JavaScript is found too. It calls no model and costs 1 credit per call. See Credits.
Detect technologies
Body parameters
- Name
url- Type
- string
- Required
- Required
- Description
- The absolute URL of the page to process. Rendered with headless Chrome, so JavaScript runs and redirects are followed. It must not include a username or password (
https://user:pass@example.com).
- Name
page_options- Type
- object
- Description
- Wait for the page, and remove ads, cookie banners or your own elements from it before it is read — gone from this result, not merely hidden. See Page options.
- Name
residential- Type
- boolean
- Description
- Fetch the page from a residential exit — an address on a home broadband line rather than one in a datacentre. Reach for it when a site serves you less than it serves a browser, or nothing at all. Defaults to
false. Adds 25 credits per page fetch on top of what the operation costs, and its results are kept separate from the ordinary ones.
- Name
report_to- Type
- string
- Description
- Webhook URL — an
httporhttpsaddress URLpipe POSTs the result to when it's ready. Optional: without it we deliver to your project's default endpoint if it has one, and otherwise send no webhook at all — the result still waits for you at GET /result/:token. A value we cannot deliver to returns422. Ignored on async=truerequest. Deliveries can be signed so your endpoint can verify they came from us.
- Name
sync- Type
- boolean
- Description
- Process the request synchronously, returning the result inline in the response. Defaults to
false(async: return a token now, and either receive the result at a webhook or fetch it with GET /result/:token). See Async & sync modes for the full contract.
- Name
max_age- Type
- string | integer
- Description
- How fresh a cached result must be to be accepted. Either an integer number of seconds (
3600) or a duration string of the form"<number> <unit>"— unitss/min/h/d/w(e.g."2 hours","3 days","30m"). Defaults to7 days, clamped to a max of30 days;0always bypasses the cache. See Caching for all accepted units.
- Name
labels- Type
- object
- Description
- Your own keys to find and account for this request by — a client, a project, a campaign:
{"client": "acme"}. Returned with the result, in the webhook and in theX-Labelsheader, and your dashboard filters history and totals credits by them. Up to 16 keys; string values. See Labels.
Response
Content type application/json — an object with every technology detected, most certain first.
curl -X POST https://urlpipe.dev/technologies \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"url": "https://example.com"}'import requests
res = requests.post(
"https://urlpipe.dev/technologies",
headers={"Authorization": "Bearer YOUR_API_KEY"},
json={"url": "https://example.com"},
)const res = await fetch("https://urlpipe.dev/technologies", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({ url: "https://example.com" }),
})$ch = curl_init("https://urlpipe.dev/technologies");
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"Authorization: Bearer YOUR_API_KEY",
"Content-Type: application/json",
],
CURLOPT_POSTFIELDS => json_encode(["url" => "https://example.com"]),
]);
$response = curl_exec($ch);{
"final_url": "https://example.com/",
"technologies": [
{
"name": "WordPress",
"slug": "wordpress",
"version": "6.4.2",
"confidence": 100,
"categories": [
{ "slug": "cms", "name": "CMS" },
{ "slug": "blogs", "name": "Blogs" }
],
"website": "https://wordpress.org",
"description": "WordPress is a free and open-source content management system…",
"cpe": "cpe:2.3:a:wordpress:wordpress:*:*:*:*:*:*:*:*",
"detected_by": ["html", "meta", "script_src"],
"implied_by": []
},
{
"name": "PHP",
"slug": "php",
"version": "8.2.1",
"confidence": 100,
"categories": [{ "slug": "programming-languages", "name": "Programming languages" }],
"website": "https://php.net",
"description": "PHP is a general-purpose scripting language…",
"cpe": "cpe:2.3:a:php:php:*:*:*:*:*:*:*:*",
"detected_by": ["headers"],
"implied_by": ["WordPress"]
}
]
}Response fields
- Name
final_url- Type
- string | null
- Description
- The address the page ended on after its redirects — the same one the
X-Final-Urlheader carries.
- Name
technologies- Type
- object[]
- Description
- Every technology detected, most certain first.
- Name
technologies[].name- Type
- string
- Description
- The technology's name.
- Name
technologies[].slug- Type
- string
- Description
- A stable identifier: the name in lower case, with hyphens.
- Name
technologies[].version- Type
- string | null
- Description
- The version, when the page gives it away.
- Name
technologies[].confidence- Type
- integer
- Description
- How sure the detection is, 0–100. Most fingerprints are conclusive on their own and score 100; weaker ones add up.
- Name
technologies[].categories- Type
- object[]
- Description
- What kind of technology it is, as
slugandname— e.g.cms,analytics,cdn.
- Name
technologies[].website- Type
- string | null
- Description
- The technology's own website.
- Name
technologies[].description- Type
- string | null
- Description
- A sentence on what it is.
- Name
technologies[].cpe- Type
- string | null
- Description
- Its CPE 2.3 name, for looking it up in vulnerability databases such as the NVD.
- Name
technologies[].detected_by- Type
- string[]
- Description
- The signals that gave it away:
html,meta,headers,cookies,js,dom,script_src,scripts,css,text,url,xhr,cert_issuer,dns,robots. Empty for a technology that is only implied.
- Name
technologies[].implied_by- Type
- string[]
- Description
- The detected technologies that imply this one — WordPress implies PHP and MySQL.
What is read
Every signal the fingerprint database describes, read from the one visit to the page, plus the site's DNS records and its robots.txt. Nothing else on the site is requested.
- The rendered HTML: meta tags, script URLs, inline scripts and styles, the markup and the visible text.
- The response headers of the page itself, and the TLS certificate's issuer.
- Every cookie the visit was handed, third-party ones included.
- Every script the page loaded, including the ones a tag manager added after load — their URLs and their contents — the contents of its stylesheets, and the hosts it called with XHR or fetch.
- The page's JavaScript globals (e.g. jQuery.fn.jquery for the jQuery version) and its live DOM.
- The domain's DNS records — MX, NS, SOA and CNAME — which give away its mail provider, its DNS host and the CDN in front of it.
- The site's robots.txt.
page_options apply: blocking ads also hides the ad networks from the result.Responses
Whatever the status, the response carries metadata headers: the result token, whether it was served from cache and how old that result is, how long we took, what it cost in credits, and the allowance you have left.
200 OK422 Unprocessable Entity429 Too Many Requests504 Gateway Timeout401 UnauthorizedTry it live — no API key needed
Run this endpoint against any URL right in your browser.