GTM Tech Stack Signal Enrichment
Pricing
from $15.00 / 1,000 results
GTM Tech Stack Signal Enrichment
Detects which GTM tools a company uses on their website. Returns CRM, sequencer, and marketing automation flags as a flat Clay-ready row. Covers HubSpot, Salesforce, Marketo, Apollo, Outreach, and more. No JSON parsing required. MCP-ready for Claude Desktop, Cursor, and AI agent workflows.
Pricing
from $15.00 / 1,000 results
Rating
0.0
(0)
Developer
Mamba Labs
Maintained by CommunityActor stats
1
Bookmarked
7
Total users
4
Monthly active users
3 days ago
Last modified
Categories
Share
GTM tech stack detection for Clay. Flat boolean output. No JSON parsing required.
What's New
- Pricing reduced. $0.015 per result, down from $0.07. No subscription, no contract.
- Free tier added. Free Apify-plan users get 15 results per calendar month (resets monthly, counts only successful detections); paid plans are unlimited. Upgrade: https://apify.com/pricing.
- Clay table template and function available. Pre-built table plus a reusable Clay Function. Open the template →
- Detection is actually running. Prior versions shipped with a base Docker image that had no Chromium binary. Every run in production was silently failing at
chromium.launch()and returning all-false. v0.2.1 switches the base image toapify/actor-node-playwright-chrome:20which includes Chromium at the path Playwright expects. - Detection errors now surface in the output. When the browser fails to launch or every fingerprint lookup errors out,
detection_erroris set totrueanddetection_error_reasoncarries the specific failure (for exampletimeout,error: net::ERR_...). Production failures no longer hide behind a row of false booleans. - Input field rename. Primary field is now
domainto match Actor 1. Legacycompany_domainandurlare still accepted for backward compatibility. Existing Clay tables keep working. - Apollo fingerprint updated. New cookie patterns (
dwnjrn,zp__initial_landing_page) match what Apollo's current marketing site actually sets. - Ground truth regression test.
tests/ground_truth.jsruns the actor against six domains whose marketing sites carry detectable fingerprints. Five of six must pass before any release push.
Overview
Takes a company domain or URL, renders the page with headless Chromium, and returns a single flat row with boolean flags for each GTM tool detected. Drop it into a Clay HTTP Request column and filter on gtm_tool_count > 0 to qualify your list instantly.
Who this is for
- Clay users building outbound qualification tables who need GTM tool flags without writing formula columns
- GTM agencies enriching lead lists with tech stack signals at scale
- RevOps teams segmenting accounts by CRM, sequencer, and marketing automation usage
Input
| Field | Type | Required | Notes |
|---|---|---|---|
domain | String | Yes | Bare company domain. Example: stripe.com. No https://, no www., no trailing slash. |
company_domain | String | No | Deprecated. Still accepted for backward compatibility with existing Clay tables. |
url | String | No | Deprecated. Still accepted. |
crawl_additional_pages | Boolean | No | Default true. Set to false for homepage-only runs. |
Output
Every field is present in every row. No nested JSON. Ready to use as a Clay enrichment column.
| Field | Type | Description |
|---|---|---|
domain | String | Normalized domain from input (new primary key) |
company_domain | String | Same value as domain. Present for backward compatibility. |
crm_detected | String | hubspot / salesforce / marketo / pardot / none |
seq_tool_detected | String | outreach / salesloft / apollo / instantly / intercom / drift / none |
uses_hubspot | Boolean | HubSpot CRM or Marketing Hub detected |
uses_salesforce | Boolean | Salesforce detected |
uses_clay | Boolean | Clay detected |
uses_apollo | Boolean | Apollo.io detected |
uses_outreach | Boolean | Outreach detected |
uses_gong | Boolean | Gong detected |
uses_zoominfo | Boolean | ZoomInfo detected |
uses_drift | Boolean | Drift detected |
uses_intercom | Boolean | Intercom detected |
uses_marketo | Boolean | Marketo detected |
marketing_automation_detected | String | marketo / pardot / hubspot / none |
gtm_tool_count | Integer | Count of true boolean fields |
tech_stack_signal | String | high / medium / low |
detection_error | Boolean | True if every fingerprint call returned a browser error or timeout |
detection_error_reason | String | Specific error reason when detection_error is true (for example timeout, error: ENOENT). Null otherwise. |
run_date | ISO Date | Timestamp of the run |
Sample output:
{"domain": "hubspot.com","company_domain": "hubspot.com","crm_detected": "hubspot","seq_tool_detected": "none","uses_hubspot": true,"uses_salesforce": false,"uses_clay": false,"uses_apollo": false,"uses_outreach": false,"uses_gong": false,"uses_zoominfo": false,"uses_drift": false,"uses_intercom": false,"uses_marketo": false,"marketing_automation_detected": "hubspot","gtm_tool_count": 1,"tech_stack_signal": "medium","detection_error": false,"detection_error_reason": null,"run_date": "2026-04-06T09:03:47.744Z"}
Clay gate column: gtm_tool_count > 0
How signal strength is derived
| Strength | Criteria |
|---|---|
| high | CRM detected AND sequencer detected AND 3 or more total tools |
| medium | CRM or sequencer detected, 1 to 2 total tools |
| low | At least 1 tool detected, no CRM and no sequencer |
Clay Table Template
A pre-built Clay table template is available with the enrichment column, formula columns, and views ready to use.
The template includes:
- A Run Apify Actor enrichment column wired to mambalabs/gtm-tech-stack-signal-scraper
- Eight formula columns for CRM, sequencer, and tool detection flags
- A qualifier column for downstream gating
A reusable Clay Function is also available: Open the function →. Use the function when you want updates to the detection logic to propagate automatically. Use the template when you want a static copy to modify.
Manual setup
One flat row per domain, Clay-ready. Add this actor as a Run Apify Actor enrichment column in any Clay table with a company_domain column.
Input mapping:
- Apify Actor: mambalabs/gtm-tech-stack-signal-scraper
- Input Data: {"domain": "[company_domain pill]"}
- Run condition: company_domain is not empty
Output fields map directly to Clay formula columns using dot notation:
- {{actor_output}}?.uses_hubspot
- {{actor_output}}?.uses_marketo
- {{actor_output}}?.uses_intercom
- {{actor_output}}?.crm_detected
- {{actor_output}}?.seq_tool_detected
- {{actor_output}}?.gtm_tool_count
- {{actor_output}}?.tech_stack_signal
- {{actor_output}}?.detection_error
Gate downstream tables on gtm_tool_count > 0 or tech_stack_signal = high to focus on companies running real GTM infrastructure.
Pricing
$0.015 per result. Pay per event, billed per domain processed. No subscription, no seat license, no contract.
| Volume | Cost |
|---|---|
| 100 domains | $1.50 |
| 1,000 domains | $15.00 |
| 10,000 domains | $150.00 |
We recently reduced pricing across the Mamba Labs actor suite to bring more value to GTM teams running enrichment at scale.
Free tier vs paid usage
| Plan | Limit |
|---|---|
| Free Apify plan | 15 results per calendar month (resets on the 1st) |
| Any paid Apify plan | Unlimited results, no cap |
Free-plan usage is counted cumulatively across all of your runs in a month, not per run, so each single-domain run draws from the same monthly allowance. Only successful detections count against the allowance; a run that errors out (bot-block, timeout) does not consume a result. How it behaves when you hit the limit:
- Within the monthly allowance: the domain is detected and returned normally.
- Already at the limit: the run exits immediately with no result and an upgrade message in the run status, before any browser cost is incurred.
Upgrade to any paid Apify plan for unlimited detection: https://apify.com/pricing. Paid-plan runs are never capped and incur no usage tracking.
Known Limitations
Bot-protected domains may return negative results. Sites fronted by Cloudflare Enterprise, Akamai Bot Manager, or PerimeterX often serve a challenge page or stub to headless Chromium requests from a datacenter IP. The detector navigates successfully, captures an empty stub HTML, and returns all-false with detection_error: false (no error was actually thrown, the browser got a valid 200 response). Known examples include salesforce.com, zoominfo.com, and marketo.com. If you need those, flag the rows for manual review. A stealth-mode build with residential proxies is a candidate for a future coverage-expansion release.
Backend-only tools with no web pixel are out of scope. Clay, Salesloft, Instantly, Lemlist, and server-side Segment leave no public client-side signal on a customer's website. The fingerprints file marks these with detectable: false by design. Do not expect uses_clay: true even on companies you know use Clay. This is documented, not a bug.
Vendor marketing sites reflect their marketing stack, not their product. outreach.io runs Marketo on its marketing site. apollo.io runs HubSpot plus Intercom. gong.io runs Marketo. drift.com runs Marketo post-Salesloft-acquisition. The actor reports what the page actually uses, which is the correct outbound-qualification signal. "This company uses Outreach" is not inferable from "outreach.io's marketing site loads Marketo scripts," and we do not hard-code self-domain shortcuts.
Tools loaded only behind authenticated pages will not be detected. The actor crawls the homepage and up to two public pages (pricing, product). Dashboards, customer portals, and auth-gated paths are unreachable.
Heavily obfuscated CDN routing can reduce script src accuracy. Cookie names and JS global variables are checked as primary signals to partially compensate, but companies that fully mask outbound requests through Cloudflare Workers or Fastly with custom domains may still slip through.
LinkedIn Sales Navigator is not detectable and was removed in v0.2.0.
Issues and Feature Requests
Found a bug or want to request a feature? Open an issue in the Issues tab above. Response time: typically within 48 hours.
Related Actors
All Mamba Labs actors output flat, Clay-ready JSON. Use them together or individually.
- GTM Hiring Signal Scraper, $0.05/result. Detects GTM hiring activity on Greenhouse, Lever, and Ashby. Returns role counts, signal tags, and velocity tracking.
- GTM Signals Aggregator, $0.09/result. Runs hiring and tech stack detection in one call. Returns a composite score, recommended action, and plain-English summary.
- Job Board Keyword Signal Scanner, $0.05/result. Scans Greenhouse, Lever, Ashby, Workday, and Rippling for any role category you define. GTM, Engineering, Finance, or custom keywords.
- Domain to LinkedIn URL Resolver, $0.006/result. Resolves company domains to LinkedIn URLs with confidence scoring, firmographics, and social links in one flat row.
- ICP Fit Scorer, $0.05/result. Scores companies against your ICP using weighted signals. Returns icp_score 0-100, icp_tier A-D, and per-signal breakdown.
Use with MCP (AI Agents)
This actor is callable as a tool over MCP (Model Context Protocol) by AI clients like Claude Desktop, Cursor, VS Code (GitHub Copilot), Windsurf, and any other MCP-compatible client. Apify hosts the MCP server at mcp.apify.com, so no custom server code is needed.
What this actor does in an MCP context
Give an AI agent a company domain and it returns a flat row of GTM tech stack signals: which CRM, sequencer, and marketing automation tools the company runs on its marketing site. Useful for outbound qualification, account research, and ICP scoring inside an agent loop.
Example prompts:
- "What CRM does stripe.com use?"
- "Does notion.so run HubSpot or Salesforce?"
- "Detect the marketing automation stack on shopify.com and tell me if they use Marketo or Pardot."
Supported MCP clients
Claude Desktop, Cursor, VS Code (GitHub Copilot), Windsurf, and any MCP-compatible client.
Setup: Hosted server (recommended)
Add this entry to your MCP client config. The OAuth variant prompts you to authorize on first connect, so no token sits in your config file.
OAuth (recommended):
{"mcpServers": {"mamba-labs-tech-stack": {"url": "https://mcp.apify.com?tools=mambalabs/gtm-tech-stack-signal-scraper"}}}
Bearer token:
{"mcpServers": {"mamba-labs-tech-stack": {"url": "https://mcp.apify.com?tools=mambalabs/gtm-tech-stack-signal-scraper","headers": {"Authorization": "Bearer YOUR_APIFY_TOKEN"}}}}
Setup: Full Mamba Labs GTM Suite
Load all 6 Mamba Labs GTM actors as tools in a single MCP server entry.
OAuth:
{"mcpServers": {"mamba-labs-gtm-suite": {"url": "https://mcp.apify.com?tools=mambalabs/gtm-hiring-signal-scraper,mambalabs/gtm-tech-stack-signal-scraper,mambalabs/gtm-signals-aggregator,mambalabs/job-board-keyword-signal-scanner,mambalabs/domain-to-linkedin-url-resolver,mambalabs/icp-fit-scorer"}}}
Bearer token:
{"mcpServers": {"mamba-labs-gtm-suite": {"url": "https://mcp.apify.com?tools=mambalabs/gtm-hiring-signal-scraper,mambalabs/gtm-tech-stack-signal-scraper,mambalabs/gtm-signals-aggregator,mambalabs/job-board-keyword-signal-scanner,mambalabs/domain-to-linkedin-url-resolver,mambalabs/icp-fit-scorer","headers": {"Authorization": "Bearer YOUR_APIFY_TOKEN"}}}}
Setup: Local server (for development and testing)
npx @apify/actors-mcp-server --tools mambalabs/gtm-tech-stack-signal-scraper
Full suite:
npx @apify/actors-mcp-server --tools mambalabs/gtm-hiring-signal-scraper,mambalabs/gtm-tech-stack-signal-scraper,mambalabs/gtm-signals-aggregator,mambalabs/job-board-keyword-signal-scanner,mambalabs/domain-to-linkedin-url-resolver,mambalabs/icp-fit-scorer
What the output looks like
One flat JSON row per domain, well under 2KB. Every field is always present. Key fields:
domain: normalized input domaincrm_detected: hubspot, salesforce, marketo, pardot, or noneseq_tool_detected: outreach, salesloft, apollo, instantly, intercom, drift, or nonemarketing_automation_detected: marketo, pardot, hubspot, or nonegtm_tool_count: integer count of detected toolstech_stack_signal: high, medium, or lowdetection_erroranddetection_error_reason: surface real browser failures so agents do not treat empty results as confirmed negatives- Per-tool booleans:
uses_hubspot,uses_salesforce,uses_apollo,uses_outreach,uses_gong,uses_zoominfo,uses_drift,uses_intercom,uses_marketo,uses_clay
Billing
MCP runs use the same pay-per-event pricing as direct API or Console runs. Each successful result costs $0.015.
Notes
This actor uses headless Chromium on Apify infrastructure. The MCP client does not need to run a browser locally. Typical run time 5 to 15 seconds.
Part of the Mamba Labs GTM Suite
This actor is part of the Mamba Labs GTM Suite. See all 6 actors at https://apify.com/mambalabs
Built by Mamba Labs

