Use lookup when an agent has a product's website and needs to know what it is built with. It does not need the MadeWithStack slug.
curl "https://www.madewithstack.com/api/v1/lookup?url=https://parsewise.ai"
What it answers from
Lookup answers only from approved listings that passed editorial review. It does not scan, crawl, or fingerprint sites that are not in the directory, so every stack it returns has been reviewed.
Matching
- The scheme,
www., path, and query string are ignored:https://www.example.com/pricingandexample.comresolve the same way. - A subdomain falls back to its parent domain.
app.example.comreturns theexample.comlisting withmatch: "parent_domain". - IP addresses, non-http schemes, and values without a domain return
400 VALIDATION_ERROR.
Not listed
When no approved listing uses the domain, the response is still 200 with listed: false and next_action_code: "SUBMIT_PRODUCT". Pending and rejected submissions are never revealed. If the human owns the product, point them to POST /api/v1/submit.
MCP
The same lookup is available as the lookup_by_url tool on the hosted MCP server.
/api/v1/lookupAnswers "what is this site built with?" from reviewed directory data, without needing the MadeWithStack slug.
Auth
No API keys. No account auth. Public JSON endpoints only.
Review model
Read-only endpoint over approved listings.
Cache
Cached at the edge for 5 minutes.
Example request
curl "https://www.madewithstack.com/api/v1/lookup?url=https://parsewise.ai"
Query parameters
| Field | Type | Required | Description |
|---|---|---|---|
url | string | Yes | Website URL or bare domain. Scheme, www, path, and query are ignored; a subdomain falls back to its parent domain. |
Responses
Listed
The domain belongs to an approved listing.
{
"listed": true,
"domain": "parsewise.ai",
"match": "exact",
"product": {
"slug": "parsewise",
"name": "Parsewise",
"status": "approved",
"tools": [
"..."
]
},
"stack": [
{
"slug": "supabase",
"name": "Supabase",
"category": "database",
"href": "https://www.madewithstack.com/built-with/supabase"
}
],
"listing_url": "https://www.madewithstack.com/product/parsewise",
"next_action_code": null
}Not listed
No approved listing uses this domain.
{
"listed": false,
"domain": "example.com",
"match": null,
"product": null,
"stack": [],
"next_action_code": "SUBMIT_PRODUCT",
"message": "example.com is not an approved MadeWithStack listing. Pending and rejected submissions are not shown.",
"submit_url": "https://www.madewithstack.com/api/v1/submit",
"submit_docs_url": "https://www.madewithstack.com/docs/api/submit"
}Error codes
| Code | Status | Meaning |
|---|---|---|
VALIDATION_ERROR | 400 | Missing, malformed, or unsupported request data. |
INTERNAL_ERROR | 500 | Unexpected server error. Retry later. |
Operational notes
- Call this when you have a product's URL or domain and need its stack, or need to know whether it is already listed before submitting it.
- Answers only from approved, editorially reviewed listings. It does not scan or fingerprint unlisted sites.
- match is exact when the host matches the listing domain, or parent_domain when a subdomain such as app.example.com resolved to example.com.
- A not-listed result is a 200 response with listed=false, not an error. Pending and rejected submissions are never revealed.
- Missing or malformed url values, IP addresses, and non-http schemes return 400 VALIDATION_ERROR.