---
title: "Search the website tech-stack dataset"
method: GET
path: "/datasets/techstack/search"
tags: ["Datasets"]
---

# Search the website tech-stack dataset

`GET /datasets/techstack/search`

## Request

- Base URL: `https://api.crawlora.net/api/v1`
- URL: `https://api.crawlora.net/api/v1/datasets/techstack/search`
- Auth: API key in header `x-api-key`

Searches the website tech-stack index (dataset id enum value `techstack`) — one record per site listing the web technologies it is built with (frameworks, CMS, e-commerce, analytics, CDNs, servers, and more), BuiltWith / Wappalyzer-style. The reverse-index filters are the point: repeat `technology` to require several at once (AND), `any_of` to match at least one (OR), and `not` to exclude — e.g. sites on `Shopify` and `Klaviyo` but not `Recharge`. Sort enum: `relevance`, `rank_asc`, `tech_count_desc`, `domain_asc`, `crawled_desc`. render_tier enum: `http`, `browser`. Billing: this search costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).

## Query parameters

- `q` string
- `technology` string[]
- `any_of` string[]
- `not` string[]
- `category` string
- `cms` string
- `ecommerce` string
- `cdn` string
- `web_server` string
- `server_language` string
- `tld` string
- `render_tier` 'http' | 'browser'
- `seed_source` string
- `has_captcha` boolean
- `is_infrastructure` boolean
- `reachable` boolean
- `min_tech_count` integer
- `run_id` string
- `sort` 'relevance' | 'rank_asc' | 'tech_count_desc' | 'domain_asc' | 'crawled_desc'
- `page` integer
- `page_size` integer

## Headers

- `x-api-key` string, required

## Response `200`

OK

- DatasetsTechstackSearchResponseDoc
  - `code` integer
  - `data` DatasetsTechstackSearchResponse
    - `dataset` string: Identifier of the dataset queried (`techstack`).
    - `items` EsTechstackRecord[]: Matching website technology records on this page.
      - `analytics` string[]: Analytics, tag manager and tracking pixel technologies detected on the site.
      - `block_matched` string[]: block/challenge marker strings that matched, when FailureReason is a block/challenge classification
      - `categories` string[]: distinct, sorted; category facets
      - `category` string: optional seed category (usually empty)
      - `cdn` string: Main CDN, hosting or platform provider detected on the site.
      - `cms` string: single-value rollups (denormalized from Technologies for cheap facets/filters)
      - `detector_version` string: Version of the technology detection rules used for this record.
      - `domain` string: identity
      - `ecommerce` string: Ecommerce platform detected on the site.
      - `failure_reason` string: failure diagnostics: populated whenever a probe attempt didn't fully pass, even if the site still counts as reachable (e.g. a blocked page returning a non-5xx status). Unset for a fully passing site.
      - `final_url` string: URL that produced the adopted body (after www. fallback / redirects)
      - `has_captcha` boolean: Whether a CAPTCHA technology was detected on the site.
      - `is_infrastructure` boolean: IsInfrastructure flags a backend CDN/DNS/cloud-vendor/registry hostname (e.g. cloudfront.net, gtld-servers.net) rather than a real, human-navigable website. Best-effort heuristic: a false negative (unflagged) is not proof a domain is a real site.
      - `method_version` string: Version of the scan procedure used to collect this record.
      - `probe_error` string: raw transport error's first line (e.g. "context deadline exceeded", "no such host"), when there was one
      - `probed_at` string: RFC3339 — when last probed
      - `rank` integer: Tranco rank when seeded from the top-1M list
      - `reachable` boolean: Whether the site answered the probe.
      - `render_tier` string: provenance / reproducibility
      - `run_date` string: Time the scan run started, in UTC (RFC 3339).
      - `run_id` string: Identifier of the scan run that produced this record.
      - `scan_method` string: Method used to scan the site, for example `http_scan`.
      - `schema_version` integer: Version of the record format.
      - `scheme` string: URL scheme the site was reached with, `https` or `http`.
      - `secondary_only_technology_names` string[]: technology names detected ONLY via a fetched secondary page, not the homepage alone; a subset of TechnologyNames
      - `secondary_page_categories` string[]: which categories were successfully fetched and contributed content, sorted (careers|login|blog|status|signup|docs|contact|trust|cart)
      - `secondary_pages` EsTechstackSecondaryPage[]: full audit trail: every discovered candidate, fetched or not; detail view, stored not indexed
        - `category` string: Kind of page found on the homepage navigation: `careers`, `login`, `blog`, `status`, `signup`, `docs`, `contact`, `trust` or `cart`.
        - `fetched` boolean: Whether the page was loaded successfully. False when it was blocked or timed out.
        - `url` string: Address of the page found on the homepage navigation.
      - `secondary_pages_discovered` integer: secondary-page telemetry: populated when the crawl looked for extra non-homepage pages (opt-in per run) and discovered at least one on the homepage nav for this domain. "Discovered" and "fetched" are deliberately distinct: a candidate can be found on the homepage nav but still fail to fetch (e.g. blocked or timed out) — that failure is recorded in SecondaryPages (Fetched=false), not silently dropped.
      - `secondary_pages_fetched` integer: count that were ACTUALLY fetched successfully and contributed content; <= SecondaryPagesDiscovered
      - `seed_source` string: tranco | internal-harvest
      - `server_language` string: Server-side language or web framework detected on the site.
      - `source_url` string: the exact seed URL probed
      - `status` integer: HTTP status code of the last probe attempt.
      - `tech_count` integer: Number of distinct technologies detected on the site.
      - `technologies` EsTechstackTechnology[]: detections (the payload)
        - `categories` string[]: Categories the technology belongs to, such as `CDN` or `Analytics`.
        - `confidence` string: How sure the detection is: `high`, `medium` or `low`.
        - `evidence` string: Signal the technology was recognised from, such as `header: cf-ray`.
        - `name` string: Technology name, such as `Shopify` or `Cloudflare`.
        - `version` string: Version of the technology, when the site exposes it.
      - `technology_names` string[]: flattened for AND/NOT term filters + facets
      - `tld` string: Top-level domain of the site, such as `com`.
      - `web_server` string: Web server software detected on the site.
    - `page` integer: Page number returned.
    - `page_size` integer: Number of items per page.
    - `sort` string: Sort order applied.
    - `total` integer: Total number of records matching the filters.
  - `msg` string

## Other responses

- `400`: Bad Request
- `429`: Too Many Requests
- `500`: Internal Server Error

---

[API](https://skmtc.dev/crawlora/apis/crawlora-api.md) · [All operations](https://skmtc.dev/crawlora/apis/crawlora-api/llms.txt) · [OpenAPI document](https://skmtc.dev/crawlora/apis/crawlora-api/revisions/0497899e2016?raw)
