Products

Tech Stack Checker API: what any website is built with

Send a list of URLs and get back what each site is running: the content management system and its plugins, the ecommerce platform, the analytics and tag managers, the JavaScript frameworks, the payment and chat widgets, the web server and the CDN. Version numbers come back wherever the page states one. Fifty URLs per call, one plain fetch each, no browser anywhere.

POST/v1/tech/detect

200POST /v1/tech/detect
{
  "data": [
    {
      "url": "techcrunch.com",
      "final_url": "https://techcrunch.com/",
      "status": "ok",
      "http_status": 200,
      "technologies": [
        {
          "name": "WordPress",
          "categories": [
            "CMS",
            "Blogs"
          ],
          "version": "6.9.7"
        },
        {
          "name": "PHP",
          "categories": [
            "Programming languages"
          ],
          "version": null
        },
        {
          "name": "MySQL",
          "categories": [
            "Databases"
          ],
          "version": null
        },
        {
          "name": "Yoast SEO",
          "categories": [
            "SEO",
            "WordPress plugins"
          ],
          "version": "25.1"
        },
        {
          "name": "Nginx",
          "categories": [
            "Web servers",
            "Reverse proxies"
          ],
          "version": null
        },
        "… 6 more technologies"
      ],
      "tech_names": [
        "WordPress",
        "PHP",
        "MySQL",
        "Yoast SEO",
        "Nginx",
        "…"
      ],
      "tech_slugs": [
        "wordpress",
        "php",
        "mysql",
        "yoast-seo",
        "nginx",
        "…"
      ],
      "tech_count": 11,
      "categories": [
        "CMS",
        "Databases",
        "SEO",
        "Security",
        "Tag managers",
        "…"
      ],
      "scan_time_ms": 885
    },
    "… 1 more URL"
  ],
  "meta": {
    "request_id": "req_0d4a17c9b2e5",
    "credits_used": 2,
    "latency_ms": 1904
  }
}

What you get

Every field in the response.

FieldMeaning
url, final_urlThe URL you sent, and the address the fetch ended at after any redirects. Send a bare domain or a full URL to any page; both are accepted
statusok when the page was read and answered. A URL we could not reach, one our own safety guard refused, one whose path the site's robots.txt disallows, one that was not a web page at all and one that ran out of time are each marked instead, and none of them is charged for. So is filtered, a page whose every finding your own category filter removed
http_statusThe status code the site answered with, or null when nothing answered at all
technologies[]One entry per finding: name, categories, and version where the page states one. A technology another one implies is included in its own right, so WordPress brings PHP and MySQL with it
tech_names[]The same findings as a flat list of proper names, the column to put in a spreadsheet
tech_slugs[]The same findings as slugs, the form the tech_stack field uses elsewhere in Locomint, for joining a batch against records you already hold
tech_countHow many technologies were found on that URL
categories[]Every category present on the site, so a batch can be sorted by what sites use rather than by which particular product they chose
scan_time_msHow long that URL took, the fetch included

How it works

What happens between your request and the response.

One fetch per URL

Each page is requested once, from a datacenter address, the way a browser asks for it the first time. What comes back is what gets matched: the HTML, the response headers, the cookies the server sets, the meta tags and the script URLs on the page. Nothing is rendered, which is why fifty sites finish in seconds and cost a credit each rather than the price of a browser.

Matched against 7,610 fingerprints

The findings come from an open fingerprint set of 7,610 technologies in 107 categories, from content management systems and ecommerce platforms to analytics, tag managers, frameworks, payment processors, chat widgets, web servers, CDNs and WordPress plugins. 5,834 of them can be recognised from what a server sends, and those are the ones this endpoint reads.

Versions where the page states them

A version is reported only when the site gives it away, in a generator tag, a script filename or a plugin's own query string. Nothing is inferred from a release date, so a missing version means the site did not say rather than that the software is old.

Stops at a refusal

Public pages only, at a conservative pace. Each site's robots.txt is read before its page and a disallowed path is not fetched at all. A site that answers with a challenge or a rate limit ends the attempt there: it is never retried through a different address, and either way that row comes back marked and free.

Pricing

One credit system for every endpoint.

One credit per URL actually read, and between one and fifty URLs in a call. A URL we could not fetch, one our safety guard refused and one that ran out of time all come back marked and cost nothing. It uses no proxy bandwidth, so the free plan's 75 credits a month cover 75 sites.

See pricing

Run it on Apify.

For bigger runs, or without writing any code, the same engine runs on Apify as the listing below. Apify bills per result, so there is no subscription and nothing to pay us, and Apify's own free plan includes $5 of usage a month with no card.

Questions

Things people ask about the Tech Stack Checker API.

Does it need a browser?

No, and that is the whole design. One ordinary HTTP request per URL, the same one a browser makes first, and the answer is read out of the HTML, the response headers, the cookies the server sets and the script URLs on the page. No browser is started and no JavaScript runs, which is what keeps fifty URLs to a few seconds and one credit a site.

How many technologies can it find?

7,610 are indexed, in 107 categories. 5,834 of those can be recognised from what a server sends without running any code, and that is the set this endpoint works from. On real sites it is the difference between naming the platform and naming the platform, its plugins, the analytics, the tag manager, the web server, the CDN and the language underneath.

What will it miss?

Anything a site only reveals once JavaScript has run. About a quarter of the fingerprint set is written that way, because it looks for a variable a script creates in the browser, and we do not run the browser, so those are not claimed. In practice a single-page app that renders everything client-side returns less than a server-rendered site of the same size, and a version is absent whenever the page never printed one.

How fresh are the fingerprints?

They are pinned to one commit of the upstream set rather than pulled live, so the same page checked twice gives the same answer and nothing shifts under a job halfway through. The pin is moved deliberately, and the safety and timing checks are re-run against hostile input before it moves.

Where do the technology fingerprints come from?

Technology detection matches each page against an open fingerprint set maintained by the enthec/webappanalyzer project, used under the GPL-3.0 and pinned to a specific commit. Locomint runs those fingerprints on its own servers and returns the results; the fingerprint data itself is not redistributed.

Does it read robots.txt?

This API does, before it reads the page: a path a site disallows for a general client is not fetched at all, comes back as robots_disallowed with the rule quoted, and costs no credit - so a site that excludes crawlers returns no technologies here. The Tech Stack Detector listing on Apify is deliberately the other way round: it reads whatever list of pages you give it, because you are naming pages you already mean to look at rather than turning a crawler loose. Neither one ever works around a block: a challenge or a rate limit ends that row and is never retried through another address. Pick the API when you want those rules applied for you.

How is this different from the Company Enrichment API?

Same detection engine, different question. Company enrichment starts from a domain and returns the company: what the site says it is, its email addresses, its social profiles, and the technologies as one part of that record. This starts from a list of URLs, any page and not just a homepage, returns the technologies and nothing else, and takes fifty at a time.