tech-stack-snapshot
Produce a technology-stack snapshot for one or more companies — what CRM, marketing automation, sales engagement, data warehouse, analytics, conversation intelligence, and other tools they have tagged in ZoomInfo's database. Groups detected products by category, surfaces displacement plays for competitive tools, integration angles for partner tools, and coverage gaps honestly. Resolves mixed-identifier inputs (IDs / names / domains) with explicit ambiguity surfacing. Useful for sales prospecting, account-based selling, competitive battle-card prep, integration partner research, technographic signal analysis, B2B prospecting. Triggers on phrases like "what tech does X use", "tech stack for", "technographic snapshot", "what's in their stack", "do they use Salesforce", "competitive displacement angle".
What this skill does
# Tech Stack Snapshot
Per-company tech-stack snapshot grouped by category, with displacement angles for competitive tools and integration angles for partner tools — anchored on the user's GTM context. Resolves mixed-identifier inputs, queries `search_companies` with `techAttributeTagList` to check each product in a curated universe, and presents both the detected stack and the gaps honestly.
## How it works
`search_companies` accepts `techAttributeTagList` (tech-product IDs) as a filter:
```
search_companies(
companyId="<input IDs, comma-separated>",
techAttributeTagList=<one product ID>,
pageSize=<N>
) → returns subset of input companies that have that product tagged
```
Iterate over a curated universe of ~30–50 high-relevance tech products → build a company × product matrix → group by category and pair with GTM-context-anchored plays.
## The bar
1. **Resolution accuracy 100%** — every input bucketed; never silently picked.
2. **Detections are binary and verified** — ✅ comes from a non-zero `search_companies` result; ❌ means no tag. Never invent presence.
3. **Output is grouped by category.**
4. **Recommended plays anchor on GTM context.**
5. **Coverage gaps surfaced honestly** — absence = "no tag detected", not "no tool used."
## Always-on context: `get_gtm_context`
Every run calls `get_gtm_context(detailed: true)`. Drives:
- Which categories are in scope (sales-focused vs. dev-focused).
- Which detected tools map to displacement vs. integration angles.
- Framing of recommended plays (anchored on specific value props).
## Scope
Snapshots are **company-level**. Per-person tech-skill data is out of scope.
## Input
- **Companies (required)** — list of ZI IDs / names / domains / mixed CSV.
- **Categories of interest (optional)** — any of: `sales`, `marketing`, `analytics`, `data`, `conversation_intelligence`, `intent_abm`, `cdp`, `devops`, `security`, `customer_service`, `collaboration`. Default = first 7 (B2B SaaS sales motion).
- **Custom universe (optional)** — `["product_id_1", ...]` to override curated default.
- **Use case (default `sales_prep`)** — `sales_prep`, `battle_card`, `integration_partner_research`, `displacement_targeting`. Affects play framing.
## The curated universe (default)
~30 anchor products across 7 categories. The skill resolves vendors and products at runtime via `lookup` — see §3.5 below for the canonical enumeration paths. The default anchor set:
| Category | Anchor vendors | Anchor products |
|---|---|---|
| **CRM** | Salesforce, HubSpot, Microsoft | Salesforce (generic 713) + Salesforce Sales Cloud, HubSpot CRM, Microsoft Dynamics CRM |
| **Marketing Automation** | Marketo, HubSpot, Salesforce, Oracle | Marketo Engage + Marketo (generic 172), HubSpot Marketing Hub + HubSpot (generic 248), Salesforce Pardot, Salesforce Marketing Cloud, Eloqua |
| **Sales Engagement** | Outreach, Salesloft, Salesforce | Outreach, Salesloft, Salesforce Inbox |
| **Data Warehouse** | Snowflake, Google, Databricks, Amazon | Snowflake, BigQuery, Databricks, Redshift |
| **BI / Analytics** | Salesforce, Microsoft, Google, Mixpanel, Amplitude | Tableau, PowerBI, Looker, Mixpanel, Amplitude |
| **Conversation Intelligence** | Gong, ZoomInfo | Gong, Chorus |
| **Intent / ABM** | 6sense, Demandbase, ZoomInfo | 6sense, Demandbase, ZoomInfo Intent |
| **CDP** | Segment, Treasure Data | Segment, Treasure Data |
**Always include both generic vendor IDs AND specific sub-products** — companies tagged with the generic ID won't surface if only sub-products are checked. Salesforce has 70+ tagged products; the universe must include each vendor's major sub-products.
User can extend / narrow per run.
## Enumerating the full tech taxonomy via `lookup`
The orchestrator does NOT need to memorize ZoomInfo's tech taxonomy — every list is enumerable from `lookup` at runtime. Three calls give you the entire surface area:
| Goal | `lookup` call | Returns |
|---|---|---|
| **All tech categories** | `lookup` with `fields: [{fieldName: "tech-categories"}]` | The full enum of top-level categories (20 categories like Sales, Marketing, IT Infrastructure, DevOps, Security, etc.) with their sub-category trees. Use this to decide which categories are in scope or to extend beyond the default 7. |
| **Vendors in a category** | `lookup` with `fields: [{fieldName: "tech-vendors"}]` + `category` or `parentCategory` filter (or `fuzzyMatch=<vendor name>` for a single-vendor lookup) | The full enum of vendors. Filter by category to expand the universe systematically (e.g., all CDP vendors); filter by `fuzzyMatch` to resolve a specific vendor name. |
| **Products for a vendor** | `lookup` with `fields: [{fieldName: "tech-products"}]` + **required** `vendor` (or `category` / `parentCategory`) filter | All products that vendor has tagged. `tech-products` REQUIRES at least one of `vendor`, `category`, or `parentCategory` — calling it without a filter returns 0. Note that single vendors can have many sub-products (e.g., Salesforce has 70+ products tagged). |
Use this path when the user asks "what categories of tech does ZI track?" / "what vendors exist in the [X] category?" / "what are all the products for [vendor]?" — and when extending the universe beyond the default 7 categories without hardcoding new entries.
`lookup` quirk to respect: multi-field requests with per-field `fuzzyMatch` can silently fail on the second field. Call once per fieldName when using `fuzzyMatch`.
## Workflow
### 1. Pull GTM context (always)
`get_gtm_context(detailed: true)`. Capture competitors (displacement framing), offerings (integration framing), strategic priorities, ICP (sanity-check).
### 2. Honor input data first
Use user-supplied categories / custom universe / use case. Default only for missing fields.
### 3. Resolve identifiers (four-bucket routing — same as `score-accounts`)
- **Numeric ZI ID** → auto-resolved.
- **Domain** → `search_companies(companyWebsite)`. Single match → auto-resolved. Multiple → ambiguous.
- **Name** → `search_companies(companyName)`. Dominant top match → auto-resolved. Clear top with plausible alternatives → verified. No dominant winner → ambiguous.
- **No match** → failed.
100% resolution accuracy. Probe only resolved + verified rows.
**Domain-confirmation gate (mandatory for high-collision names).** When `search_companies(companyName=X)` returns >100 matches AND no strong GTM tiebreaker, require domain confirmation. Never silently auto-pick — the cost is wasted MCP calls AND misleading output.
**Duplicate-record detection (mandatory).** If two+ candidates share same domain root, ≤20% revenue diff, AND same metro/country → flag suspected duplicate. **Probe BOTH records and union the detections** — tags may be split across entries (record A might have Salesforce; record B might have HubSpot). Annotate `[from A]` / `[from B]` in the output.
Probing one record and reporting "no detections" is the failure mode this rule prevents.
### 4. Build the product universe
For each category in scope:
- `lookup tech-vendors fuzzyMatch=<vendor>` — one call per anchor vendor (multi-field fuzzyMatch is unreliable). For category-wide expansion, use `lookup tech-vendors` with a `category` or `parentCategory` filter instead of fuzzyMatch — returns the full vendor list for that category.
- `lookup tech-products vendor=<resolved-vendor-name>` — returns the vendor's full product catalogue; select anchor products by name match. Requires at least one of `vendor`, `category`, or `parentCategory`.
- Aggregate to `{product_id, product_name, category, vendor}`.
To enumerate the full tech taxonomy (categories → vendors → products) instead of hardcoding, see the table in "Enumerating the full tech taxonomy via `lookup`" above.
If custom universe supplied, skip this step; attach category metadata for grouping.
### 5. Probe each product against the input company list
For each product ID, run **one batched call** (not one-per-company):
```
search_companies(
compaRelated in Data & Analytics
clawarr-suite
IncludedComprehensive management for self-hosted media stacks (Sonarr, Radarr, Lidarr, Readarr, Prowlarr, Bazarr, Overseerr, Plex, Tautulli, SABnzbd, Recyclarr, Unpackerr, Notifiarr, Maintainerr, Kometa, FlareSolverr). Deep library exploration, analytics, dashboard generation, content management, request handling, subtitle management, indexer control, download monitoring, quality profile sync, library cleanup automation, notification routing, collection/overlay management, and media tracker integration (Trakt, Letterboxd, Simkl).
querying-soql
IncludedSOQL query generation, optimization, and analysis with 100-point scoring. Use this skill when the user needs SOQL/SOSL authoring or optimization: natural-language-to-query generation, relationship queries, aggregates, query-plan analysis, and performance or safety improvements for Salesforce queries. TRIGGER when: user writes, optimizes, or debugs SOQL/SOSL queries, touches .soql files, or asks about relationship queries, aggregates, or query performance. DO NOT TRIGGER when: bulk data operations (use handling-sf-data), Apex DML logic (use generating-apex), or report/dashboard queries.
app-store-optimization
IncludedApp Store Optimization (ASO) toolkit for researching keywords, analyzing competitor rankings, generating metadata suggestions, and improving app visibility on Apple App Store and Google Play Store. Use when the user asks about ASO, app store rankings, app metadata, app titles and descriptions, app store listings, app visibility, or mobile app marketing on iOS or Android. Supports keyword research and scoring, competitor keyword analysis, metadata optimization, A/B test planning, launch checklists, and tracking ranking changes.
habit-flow
IncludedAI-powered atomic habit tracker with natural language logging, streak tracking, smart reminders, and coaching. Use for creating habits, logging completions naturally ("I meditated today"), viewing progress, and getting personalized coaching.
app-store-optimization
IncludedApp Store Optimization (ASO) toolkit for researching keywords, analyzing competitor rankings, generating metadata suggestions, and improving app visibility on Apple App Store and Google Play Store. Use when the user asks about ASO, app store rankings, app metadata, app titles and descriptions, app store listings, app visibility, or mobile app marketing on iOS or Android. Supports keyword research and scoring, competitor keyword analysis, metadata optimization, A/B test planning, launch checklists, and tracking ranking changes.
visualizing-data
IncludedBuilds dashboards, reports, and data-driven interfaces requiring charts, graphs, or visual analytics. Provides systematic framework for selecting appropriate visualizations based on data characteristics and analytical purpose. Includes 24+ visualization types organized by purpose (trends, comparisons, distributions, relationships, flows, hierarchies, geospatial), accessibility patterns (WCAG 2.1 AA compliance), colorblind-safe palettes, and performance optimization strategies. Use when creating visualizations, choosing chart types, displaying data graphically, or designing data interfaces.