Clean technographics API for sales, recruiting, investing, and market research.
curl -sS "https://techstackintel.com/v1/lookup?domain=stripe.com"
Qualify accounts and tailor outreach with a structured view of what they run.
Ground screening in the real toolchain candidates work with day to day.
Compare vendor footprints across a portfolio in minutes, not weeks.
Benchmark adoption and spot whitespace with consistent categories.
Built for automation and analysis — not screenshots.
| Typical scraper pages | TechStackIntel |
|---|---|
| HTML-heavy, brittle selectors | Stable JSON keyed by taxonomy slugs |
| One site at a time | GET /v1/lookup + batch POST |
| Opaque confidence | Evidence + confidence on each row |
Same examples as our live API — copy and run.
Proof: The full JSON below is the live GET /v1/lookup shape for the demo domain (includes merged taxonomy on each stack row).
curl -sS "https://techstackintel.com/v1/lookup?domain=stripe.com"
curl -sS -X POST "https://techstackintel.com/v1/batch/lookup" \
-H "content-type: application/json" \
-d '{"domains":["stripe.com","vercel.com"]}'
tsi lookup stripe.com # same as curl; set TSI_API_BASE=https://techstackintel.com
Example response for stripe.com — your integrations should treat this as the canonical envelope.
{
"nextAction": "ok",
"data": {
"company": {
"domain": "stripe.com",
"companyKey": "stripe-com",
"segment": "startup",
"stack": {
"ci-cd": {
"evidence": {
"value": "GitHub Actions",
"confidence": 0.82,
"refreshedAt": "2026-03-20T12:00:00.000Z"
},
"taxonomy": {
"slug": "ci-cd",
"name": "CI/CD",
"parent_slug": "engineering",
"level": 2,
"business_domain": "Engineering",
"owner_role": "Platform Engineer",
"spend_sensitivity": "high",
"security_sensitivity": "high",
"duplication_risk": "medium",
"strategic_importance": "critical",
"status": "active",
"description": "Build test release and deployment pipelines"
}
},
"observability": {
"evidence": {
"value": "Datadog",
"confidence": 0.78,
"refreshedAt": "2026-03-20T12:00:00.000Z"
},
"taxonomy": {
"slug": "observability",
"name": "Observability",
"parent_slug": "engineering",
"level": 2,
"business_domain": "Engineering",
"owner_role": "Platform Engineer",
"spend_sensitivity": "critical",
"security_sensitivity": "high",
"duplication_risk": "high",
"strategic_importance": "critical",
"status": "active",
"description": "Monitoring logging tracing and reliability tooling"
}
},
"web-analytics": {
"evidence": {
"value": "Google Analytics",
"confidence": 0.7,
"refreshedAt": "2026-03-20T12:00:00.000Z"
},
"taxonomy": {
"slug": "web-analytics",
"name": "Web Analytics",
"parent_slug": "marketing",
"level": 2,
"business_domain": "Marketing",
"owner_role": "Growth Lead",
"spend_sensitivity": "medium",
"security_sensitivity": "medium",
"duplication_risk": "high",
"strategic_importance": "high",
"status": "active",
"description": "Website traffic and conversion analytics"
}
}
}
},
"cacheStatus": "hit",
"schemaVersion": "1.0.0"
}
}
Contribute evidence and help verify detected vendors — same pipeline as our LLM workflow, framed around outcomes.
Fix prompt (paste this back into the same LLM chat, then replace the JSON above with the new output):
Same endpoint as the button: POST /v1/contribute/research
curl -sS -X POST "https://techstackintel.com/v1/contribute/research" \
-H "content-type: application/json" \
-d "{\"domain\":\"stripe.com\",\"research\":{\"nextAction\":\"ok\",\"data\":{\"company\":{\"domain\":\"stripe.com\",\"companyKey\":\"stripe-com\",\"segment\":\"startup\",\"stack\":{\"ci-cd\":{\"evidence\":{\"value\":\"GitHub Actions\",\"confidence\":0.82,\"refreshedAt\":\"2026-03-20T12:00:00.000Z\"}}}},\"cacheStatus\":\"miss\",\"schemaVersion\":\"1.0.0\"}}}"
Send POST /auth/magic with JSON {"email":"you@company.com"}, then open the magic link. Use X-Api-Key or Authorization: Bearer … on subsequent calls.
Free for exploration. Pro/Scale for teams and automation — contact after product-market fit.
A/B prompt for research assistants — copy into ChatGPT, Claude, or another LLM.
Build a technographics snapshot for stripe.com.
Critical: Before writing stack keys, fetch https://techstackintel.com/v1/taxonomy and use only the "slug" values that appear there as object keys under company.stack. If a tool does not map cleanly, pick the closest slug or omit the row — do not invent slugs like "email-hosting" or "business-intelligence" unless that exact slug exists in the taxonomy response.
Sources to use (public only):
• DNS MX and TXT (SPF, DKIM, DMARC, verification records)
• Customer stories, case studies, press
• Job postings naming tools
• Docs, developer portals, status pages
Each stack entry: { "evidence": { "value": string|null, "confidence": 0..1, "refreshedAt": ISO8601 UTC } }.
Output one JSON object only, no markdown fences, matching a successful https://techstackintel.com/v1/lookup response shape with "cacheStatus": "miss" and "schemaVersion": "1.0.0". No "taxonomy" keys on stack rows.
Instructs the LLM to reply with only one line — a URL. Uses claim key b00a54bdd6531de265e34dcc966ceda9 (this page load) and parameter p (base64url JSON). Opening the URL submits, validates, and shows a comparison table.
You are producing a technographics handoff for stripe.com using TechStackIntel.
Your ONLY output must be one line: a full URL the user can click. No markdown, no code fences, no prose, no explanation, no labels before or after.
The URL must begin exactly with:
https://techstackintel.com/v1/contribute/research/view?k=b00a54bdd6531de265e34dcc966ceda9&p=
After that prefix, append the base64url encoding (RFC 4648 URL-safe alphabet: use - and _, no padding =) of the UTF-8 bytes of a single-line minified JSON object.
That JSON must be the full TechStackIntel POST body wrapper — the same shape as POST /v1/contribute/research — not only inner lookup data:
{"domain":"<hostname>","research":{"nextAction":"ok","data":{"company":{"domain":"<hostname>","companyKey":"<lowercase-slug>","segment":"<optional>","stack":{"<taxonomy-slug>":{"evidence":{"value":"<string|null>","confidence":<0-1>,"refreshedAt":"<ISO8601>"}}}},"cacheStatus":"miss","schemaVersion":"1.0.0"}}}
Research using public sources only:
- DNS: MX and TXT records
- Customer stories, case studies, testimonials, press
- Job descriptions
- Public docs, developer docs, API references, status pages
Requirements:
- Top-level keys: only "domain" and "research" (omit "meta" unless you have a specific reason).
- research may only include "nextAction" and "data"; nextAction must be "ok".
- schemaVersion must equal exactly "1.0.0" (current taxonomy bundle).
- company.domain must match the top-level "domain" field (normalized hostname).
- companyKey must match /^[a-z0-9][a-z0-9-]{0,126}$/ — lowercase slug with letters, digits, hyphens only (no dots); derive from the hostname (e.g. for example.com use "example").
- company.stack must be a non-empty object; each key must be a taxonomy "slug" from https://techstackintel.com/v1/taxonomy; each value must be only { "evidence": { "value", "confidence", "refreshedAt" } }.
- Omit stack rows you cannot ground; do not invent vendors or tools.
- evidence.confidence must be a number from 0 through 1; evidence.refreshedAt must be a valid ISO 8601 date-time string.
- evidence.value: string or null; if a string, plain text only, at most 512 characters; company.segment at most 64 characters if present.
- cacheStatus must be "miss".
- Keep the entire query parameter p at most 12000 characters; if needed, use fewer stack rows but never an empty stack.
Use only taxonomy slugs whose "slug" values appear in https://techstackintel.com/v1/taxonomy. The claim key in parameter k is fixed — it must stay exactly: b00a54bdd6531de265e34dcc966ceda9
Do not alter k. Build p from minified JSON only.
Silently validate before answering:
1. Full wrapper is present under {"domain","research"}.
2. schemaVersion is exactly "1.0.0".
3. company.domain matches top-level domain; companyKey matches the slug rules above.
4. stack is non-empty and every slug exists in the taxonomy JSON.
5. JSON is minified to one line.
6. p is base64url of UTF-8 JSON with no padding.
7. Final output is exactly one URL and nothing else.
If any validation fails, correct it before output.
Same envelope as GET /v1/lookup: nextAction + data.company.stack keyed by taxonomy slugs, with evidence only on each row (we merge category metadata server-side).
{
"nextAction": "ok",
"data": {
"company": {
"domain": "stripe.com",
"companyKey": "stripe-com",
"segment": "startup",
"stack": {
"ci-cd": {
"evidence": {
"value": "GitHub Actions",
"confidence": 0.82,
"refreshedAt": "2026-03-20T12:00:00.000Z"
}
},
"observability": {
"evidence": {
"value": "Datadog",
"confidence": 0.78,
"refreshedAt": "2026-03-20T12:00:00.000Z"
}
},
"web-analytics": {
"evidence": {
"value": "Google Analytics",
"confidence": 0.7,
"refreshedAt": "2026-03-20T12:00:00.000Z"
}
}
}
},
"cacheStatus": "miss",
"schemaVersion": "1.0.0"
}
}