Technology detection
Technology detection is the lightweight side of Insights. Use it when you want to know what stack a site runs without paying the cost of a full Lighthouse report.
Run technology detection only
Disable Lighthouse and keep only technologies enabled:
The following examples show how to use the Microlink API with CLI, cURL, JavaScript, Python, Ruby, PHP & Golang, targeting 'https://microlink.io' URL with 'insights' & 'meta' API parameters:
CLI Microlink API example
microlink https://microlink.io&insights.technologiescURL Microlink API example
curl -G "https://api.microlink.io" \
-d "url=https://microlink.io" \
-d "insights.technologies=true" \
-d "insights.lighthouse=false" \
-d "meta=false"JavaScript Microlink API example
import mql from '@microlink/mql'
const { data } = await mql('https://microlink.io', {
insights: {
technologies: true,
lighthouse: false
},
meta: false
})Python Microlink API example
import requests
url = "https://api.microlink.io/"
querystring = {
"url": "https://microlink.io",
"insights.technologies": "true",
"insights.lighthouse": "false",
"meta": "false"
}
response = requests.get(url, params=querystring)
print(response.json())Ruby Microlink API example
require 'uri'
require 'net/http'
base_url = "https://api.microlink.io/"
params = {
url: "https://microlink.io",
insights.technologies: "true",
insights.lighthouse: "false",
meta: "false"
}
uri = URI(base_url)
uri.query = URI.encode_www_form(params)
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Get.new(uri)
response = http.request(request)
puts response.bodyPHP Microlink API example
<?php
$baseUrl = "https://api.microlink.io/";
$params = [
"url" => "https://microlink.io",
"insights.technologies" => "true",
"insights.lighthouse" => "false",
"meta" => "false"
];
$query = http_build_query($params);
$url = $baseUrl . '?' . $query;
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET"
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #: " . $err;
} else {
echo $response;
}Golang Microlink API example
package main
import (
"fmt"
"net/http"
"net/url"
"io"
)
func main() {
baseURL := "https://api.microlink.io"
u, err := url.Parse(baseURL)
if err != nil {
panic(err)
}
q := u.Query()
q.Set("url", "https://microlink.io")
q.Set("insights.technologies", "true")
q.Set("insights.lighthouse", "false")
q.Set("meta", "false")
u.RawQuery = q.Encode()
req, err := http.NewRequest("GET", u.String(), nil)
if err != nil {
panic(err)
}
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
body, err := io.ReadAll(resp.Body)
if err != nil {
panic(err)
}
fmt.Println(string(body))
}import mql from '@microlink/mql'
const { data } = await mql('https://microlink.io', {
insights: {
technologies: true,
lighthouse: false
},
meta: false
})This is the best starting point when you only care about the site's stack, not its audit report.
What you get
Each technology entry includes:
name— the normalized technology nameconfidence— how confident the detector is, from0to100logo— the technology logo URLurl— the main website for that technologycategories— one or more categories such asAnalytics,CDN, orJavaScript frameworks
See the technologies reference for the detailed shape.
Technology detection vs Lighthouse
| If you need | Use |
|---|---|
| Frameworks, CMSs, CDNs, analytics tools, or payment providers | insights.technologies |
| Performance, SEO, accessibility, or best-practices audits | insights.lighthouse |
| Both stack and audit data | insights: true |
Reach for Lighthouse only when the workflow genuinely needs audit data.
Keep it smaller
If you want a smaller JSON payload, keep only the
insights field:The following examples show how to use the Microlink API with CLI, cURL, JavaScript, Python, Ruby, PHP & Golang, targeting 'https://microlink.io' URL with 'insights', 'meta' & 'filter' API parameters:
CLI Microlink API example
microlink https://microlink.io&insights.technologies&filter=insightscURL Microlink API example
curl -G "https://api.microlink.io" \
-d "url=https://microlink.io" \
-d "insights.technologies=true" \
-d "insights.lighthouse=false" \
-d "meta=false" \
-d "filter=insights"JavaScript Microlink API example
import mql from '@microlink/mql'
const { data } = await mql('https://microlink.io', {
insights: {
technologies: true,
lighthouse: false
},
meta: false,
filter: "insights"
})Python Microlink API example
import requests
url = "https://api.microlink.io/"
querystring = {
"url": "https://microlink.io",
"insights.technologies": "true",
"insights.lighthouse": "false",
"meta": "false",
"filter": "insights"
}
response = requests.get(url, params=querystring)
print(response.json())Ruby Microlink API example
require 'uri'
require 'net/http'
base_url = "https://api.microlink.io/"
params = {
url: "https://microlink.io",
insights.technologies: "true",
insights.lighthouse: "false",
meta: "false",
filter: "insights"
}
uri = URI(base_url)
uri.query = URI.encode_www_form(params)
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Get.new(uri)
response = http.request(request)
puts response.bodyPHP Microlink API example
<?php
$baseUrl = "https://api.microlink.io/";
$params = [
"url" => "https://microlink.io",
"insights.technologies" => "true",
"insights.lighthouse" => "false",
"meta" => "false",
"filter" => "insights"
];
$query = http_build_query($params);
$url = $baseUrl . '?' . $query;
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET"
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #: " . $err;
} else {
echo $response;
}Golang Microlink API example
package main
import (
"fmt"
"net/http"
"net/url"
"io"
)
func main() {
baseURL := "https://api.microlink.io"
u, err := url.Parse(baseURL)
if err != nil {
panic(err)
}
q := u.Query()
q.Set("url", "https://microlink.io")
q.Set("insights.technologies", "true")
q.Set("insights.lighthouse", "false")
q.Set("meta", "false")
q.Set("filter", "insights")
u.RawQuery = q.Encode()
req, err := http.NewRequest("GET", u.String(), nil)
if err != nil {
panic(err)
}
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
body, err := io.ReadAll(resp.Body)
if err != nil {
panic(err)
}
fmt.Println(string(body))
}import mql from '@microlink/mql'
const { data } = await mql('https://microlink.io', {
insights: {
technologies: true,
lighthouse: false
},
meta: false,
filter: "insights"
})Enable only technologies and filter down to
insights when you want the smallest useful JSON response.If the result looks wrong on a SPA, try
prerender: true. If the page is private, locale-dependent, or blocked, continue with troubleshooting.Next step
Learn how to generate and customize audit reports in Lighthouse reports.