Find and qualify company websites by their detected technologies using Crawlora's tech-stack dataset and live website checks. Use for technology-based account lists, integration targeting, or qualifying an existing domain list.
Installs into .claude/skills of the current project.
Are you the author of techstack-prospecting?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/crawlora-org-techstack-prospecting)
---
name: techstack-prospecting
description: Find and qualify company websites by their detected technologies using Crawlora's tech-stack dataset and live website checks. Use for technology-based account lists, integration targeting, or qualifying an existing domain list.
---
# Tech-stack prospecting
Find websites matching a technology profile, then verify the most relevant
candidates. Detected software supports technical fit; it does not establish
budget, willingness to buy, or the identity of a decision-maker.
## Setup
Set `CRAWLORA_API_KEY` to your key from [crawlora.net](https://crawlora.net).
Run the bundled `scripts/crawlora.sh` from this skill directory or by absolute
path. It uses `x-api-key` at `https://api.crawlora.net/api/v1`; keep the key in
the environment. Read [reference/endpoints.md](reference/endpoints.md) for exact
filters and optional live-detection parameters.
## Workflow
1. Translate the brief into required technologies, acceptable alternatives,
excluded technologies, company-fit criteria, and a target list size. If the
user supplies domains, start with those rather than discovering a new list.
2. Use `/datasets/techstack/facets?facet=technology` to discover common exact
labels, and `/datasets/techstack/search` for candidates. Facets return only
the top 50 buckets, not a complete list of accepted technology names; observed
`technology_names` in search/item results can supply other exact labels.
3. Use repeated query keys for Boolean filters: `technology` is AND, `any_of`
is OR, and `not` excludes. Do not send a comma-joined string as a substitute.
`q` is a domain substring search, not a search over company descriptions.
Normally set `is_infrastructure=false`; add `reachable=true` when appropriate.
`page_size` is at most 100 and `page * page_size` cannot exceed 10,000.
4. Fetch `/datasets/techstack/items/{domain}` for evidence, confidence,
the returned freshness fields (`probed_at`, `run_date`, or `crawled_at` when
present), and `run_id`. Keep a consistent run when comparing dataset
counts. A 404 means the domain is absent from the index, not that it lacks
the technology; a live check can still answer the user's question.
5. Refresh selected candidates using `POST /web/techstack` with flat
`{"url":"https://..."}`. Inspect `/web/scrape` output for business fit when
needed, and `/brand/retrieve` for domain identity. Label discrepancies between
stored and live observations. A live homepage-only scan may miss technology
previously observed on a cart, docs, or other secondary page.
6. Deduplicate by normalized domain, preserving genuinely distinct storefronts.
Merge different domains into one company only when public evidence supports
that relationship. Apply the user's criteria and explain each qualification.
```sh
scripts/crawlora.sh /datasets/techstack/facets facet=technology ecommerce=Shopify
scripts/crawlora.sh /datasets/techstack/search \
technology=Shopify technology=Klaviyo is_infrastructure=false page_size=10
```
## Output and limits
Return a table or CSV with domain, company identity when verified, matching
technologies, detection confidence/evidence, dataset refresh time, live-check
time/status, fit rationale, and source URLs. Preserve unknowns.
- `not=Klaviyo` means the dataset did not detect Klaviyo, not proof the site
does not use it. Private/backend-only tools may leave no public evidence.
- `reachable=true` alone does not prove a usable page was fetched. Inspect
`failure_reason` and related status fields when present before trusting absence.
- Technology counts are counts within this corpus/run, not internet-wide market
share. Do not infer company geography from a TLD alone.
- Bound live checks to the shortlist. Back off on `429`, retry a transient
`5xx` once, and stop on `401`/`403`. Check application `code`. A failed refresh
leaves a dataset-only observation, not a confirmed current installation.
- Exporting a research list does not authorize outreach or a CRM write.