API
Wappalyzer's REST APIs fetch and analyze web pages in real-time to identify technologies.
Server URL
https://api.wappalyzer.com/
Response codes
HTTP code | Description |
---|---|
200 |
The request was completed successfully |
202 |
The request has been accepted for processing |
400 |
There was an error with the request |
403 |
Authorisation failure (missing or incorrect API key) |
429 |
Usage plan quota exceeded |
In less common scenarios, other response codes may be used. To verify that a request was successful, check for a 2xx code. A 4xx code indicates a problem with the request. A 5xx code means a server-side error occurred.
Error types
Type | Description |
---|---|
RESPONSE_NOT_OK |
The server did not respond with a 200 HTTP code |
NO_RESPONSE |
The server did not respond in time |
NO_HTML_DOCUMENT |
The server response did not include a HTML document |
Authentication
Wappalyzer uses API keys to provide authorized access to its API.
Request header | Value |
---|---|
X-Api-Key |
<Your API key> |
Demo API key
Use the API key below to try the APIs before purchasing a subscription. It's good for ten requests per day across all APIs.
wappalyzer.api.demo.key
Usage
To determine the remaining quota and limits associated with your plan, query the relevant resource URL with /usage
appended.
Note that this request will also be counted towards your subscription quota.
The remaining quota value is updated periodically and should be treated as an estimate only.
Example request
curl -H "X-Api-Key: wappalyzer.api.demo.key" https://api.wappalyzer.com/lookup/v1/usage
Example response (200)
{ "api": { "throttle": { "rateLimit": 10 }, "quota": { "limit": 100000, "period": "MONTH" } }, "plan": { "name": "api_lookup_medium", "quota": { "remaining": 97520 } } }
Resources
Lookup API
Look up a domain in the Wappalyzer database.
Resource URI
lookup/v1/
Resource information
Method | GET |
Execution | Synchronous / Asynchronous (when call yields no results) |
Authentication required | Yes |
Response format | JSON |
Request timeout | 30s |
Rate limit | 1 request / second on the Small plan 10 requests / second on the Medium and Large plans |
Resource parameters
Name | Required | Description | Example |
---|---|---|---|
url |
Yes | URL of the web page to analyze | https://example.com |
callback_url |
No | A POST request will be made to the callback URL upon completion of the request, no more than two minutes later | https://example.com |
denoise |
No | Filter out low confidence results (true (default) or false ) |
false |
Example request
curl -H "X-Api-Key: wappalyzer.api.demo.key" \ https://api.wappalyzer.com/lookup/v1/?url=https://example.com&callback_url=https://example.com
Example response (200)
Results are grouped by month and may contain data from anywhere between six months ago and today. If guaranteed up-to-date information is required, consider using the Crawl API instead.
[ { "monthYear": "01-2018", "languages": [ ], "applications": [ { "name": "WordPress", "categories": [ "Blog", "CMS" ], "versions": [ ], "hits": 0 } ] } ]
The hits
value is the number of times users of the browser extension
have visited the website that month. It can be used as a rough indicator of traffic.
Example response (202)
If no results are found and callback_url
is specified, the domain will be fetched and analysed using
the Crawl API as a fallback. The callback URL will be called within two minutes of completing
the request.
if no callback URL is specified, a 404 response code will be returned instead. This call will still be counted towards the subscription quota.
{ "status": "received" }
Example callback response
{ "url": "https://example.com", "applications": [ { "name": "WordPress", "confidence": "100", "version": "", "icon": "WordPress.svg", "website": "https://wordpress.com", "categories": [ { "1": "CMS" } ] } ] }
Analyze API
Fetch and analyze a single web page.
Resource URI
analyze/v1/
Resource information
Method | GET |
Execution | Synchronous |
Authentication required | Yes |
Response format | JSON |
Request timeout | 15s |
Rate limit | 1 request / second on the Small plan 10 requests / second on the Medium and Large plans |
Resource parameters
Name | Required | Description | Example |
---|---|---|---|
url |
Yes | URL of the web page to analyze | https://example.com |
Example request
curl -H "X-Api-Key: wappalyzer.api.demo.key" \ https://api.wappalyzer.com/analyze/v1/?url=https://example.com
Example response (success)
{ "status": "success", "applications": [ { "name": "WordPress", "confidence": "100", "version": "", "icon": "WordPress.svg", "website": "https://wordpress.com", "categories": [ { "1": "CMS" } ] } ] ]
Example response (error)
{ "status": "error", "errors": [ { "type": "RESPONSE_NOT_OK", "message": "Response was not ok" } ], "applications": [] }
Crawl API
Fetch and analyze multiple web pages on a domain by recursively following links. The crawler fetches up to 25 pages.
Resource URI
crawl/v1/
Resource information
Method | GET |
Execution | Asynchronous |
Authentication required | Yes |
Response format | JSON |
Request timeout | 5s (callback response timeout: 5m) |
Rate limit | 1 request / second on the Small plan 10 requests / second on the Medium and Large plans |
Resource parameters
Name | Required | Description | Example |
---|---|---|---|
url |
Yes | URL of the first web page to analyze | https://example.com |
callback_url |
Yes | A POST request will be made to the callback URL upon completion of the request, no more than two minutes later | https://example.com |
Example request
curl -H "X-Api-Key: wappalyzer.api.demo.key" \ https://api.wappalyzer.com/crawl/v1/?url=https://example.com&callback_url=https://example.com
Example response (202)
{ "status": "received" }
Example callback response (success)
{ "url": "https://example.com", "applications": [ { "name": "WordPress", "confidence": "100", "version": "", "icon": "WordPress.svg", "website": "https://wordpress.com", "categories": [ { "1": "CMS" } ] } ], "status": "success" }
Example callback response (error)
{ "url": "https://example.com", "applications": [], "status": "error", "errors": [ { "type": "RESPONSE_NOT_OK", "message": "Response was not ok" } ] }