AI Tooling Detector avatar

AI Tooling Detector

Pricing

from $2.55 / 1,000 domain analyzeds

Go to Apify Store
AI Tooling Detector

AI Tooling Detector

Detects whether a company declares, deploys, or charges for AI. Returns a flat Clay-ready row with an AI maturity tier, detected AI vendors, llms.txt status, and pricing-page evidence.

Pricing

from $2.55 / 1,000 domain analyzeds

Rating

0.0

(0)

Developer

Mamba Labs

Mamba Labs

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

2 days ago

Last modified

Features

Limited permissions

Share

🤖 What can AI Tooling Detector do?

Give it a company domain and it tells you whether that company just talks about AI, actually runs AI tooling on its site, or charges money for AI. One flat row per domain.

Most AI detectors return a boolean, which is close to useless for targeting. "Published an llms.txt" and "bills $0.99 per AI resolution" are the same answer to a yes-or-no question and completely different sales situations. This actor returns a four-level ai_maturity tier with the evidence behind it.

📦 What you get⚙️ Features and integrations
🪜 Four-level maturity tier, not a boolean
💳 Pricing-page commercialization detection
🔍 52 AI vendor fingerprints across 5 categories
🧾 33 flat fields, snake_case, one row per domain
🤖 26 AI crawler policies read from robots.txt
✅ Validated llms.txt, not just a 200
🚧 Explicit blocked flag, never a silent no
⬇️ Export to JSON, CSV, Excel, HTML or XML

Bought by teams selling AI infrastructure, AI-adjacent tooling, or anything where "already pays for AI" and "still only talking about AI" are two different pitches.

🚫 This is not a full tech stack detector. It looks only at AI signals. If you want the general marketing and sales stack, use Tech Stack Detector.

💡 Why use AI Tooling Detector?

If you want to findFilter on
Companies that already pay for AIai_maturity = "commercialized"
Companies talking about AI but not shipping itai_maturity = "declared"
Companies running a specific vendordetected_tool_names, detected_categories
A quote to paste into an emailevidence
Rows you can trustblocked = false, confidence
What was checked and what was notsignals_fired, signals_missing

🪜 The ai_maturity ladder, and why it is strict

TierWhat it meansWhat proves it
commercializedThe company charges for AIAI credits, token allowances, an AI add-on, an AI-named plan, or a per-outcome AI price on the pricing page
deployedAI tooling is running on the siteAn AI-native vendor, a direct inference endpoint, or an AI-capable platform backed by AI copy
declaredThe company says AI, nothing observableA validated llms.txt, AI crawler rules in robots.txt, or weighted marketing copy
noneNo signal firedNothing

Each rung needs its own class of evidence. An llms.txt can never on its own reach deployed, and a chat widget can never on its own reach commercialized. That is what stops the tier from collapsing back into a boolean.

The vendor list covers support agents (Sierra, Decagon, Ada, Intercom Fin, Forethought), AI search (Glean, Algolia, Inkeep, Kapa), personalization (Mutiny, Dynamic Yield), direct inference endpoints (OpenAI, Anthropic, Azure OpenAI, Bedrock, Gemini, Groq, Together, Fireworks), vector stores and app frameworks.

📋 What data can AI Tooling Detector extract?

33 fields per domain. The ones buyers use:

FieldWhat it holds
ai_maturitynone, declared, deployed or commercialized
uses_aiThe boolean, if you really want it
confidenceHow much the verdict rests on
detected_toolsVendor, category, whether it is AI-native, and the matching evidence
detected_tool_names, detected_categoriesFlattened for filtering
ai_pricing_detected, ai_pricing_score, pricing_urlThe commercialization evidence
has_llms_txt, llms_txt_url, llms_txt_reject_reasonValidated, with the reason when rejected
has_ai_txtWhether an ai.txt is published
robots_ai_directivesPer crawler: agent, policy, and the rule that produced it
ai_copy_matches, ai_copy_weightWhich marketing patterns fired, and how heavily
evidenceQuotable strings behind the verdict
signals_fired, signals_missingWhat ran and what did not
blocked, blocked_reasonBot challenge, reported rather than hidden
is_js_renderedThe page was a client-rendered shell
http_status, resolved_url, fetch_errorTransport detail
is_summary_row, notice, checked_atRun bookkeeping
vendors_requestedThe vendor filter this row was run with; null when every vendor was reported
row_statusok, error (the fetch failed, was blocked, or the run ran out of time; never charged), or notice (a summary row)
error_reasonWhy the row is an error or a notice; null on an ok row
billable_events_jsonThis row's billing receipt, for example [{"event":"domain-analyzed","count":1}]

Every row carries every key. A value that is unknown is null, never a missing key.

⚠️ Read confidence and signals_missing before you trust a none. A verdict built on one reachable page should not be read like a verdict built on five. A domain behind a bot challenge comes back blocked: true at low confidence, never as a confident no, because without that flag a challenged domain looks identical to a company with no AI at all.

🛠️ How to detect a company's AI adoption

  1. Open the Input tab and put a domain in domain, or a list in domains for batch mode.
  2. Leave check_pricing on true. Turning it off makes runs faster but caps every result at deployed, since commercialized can only be proven on a pricing page.
  3. Click Start.
  4. Read ai_maturity for the answer and evidence for the quote.
  5. Suppress rows where blocked is true before you act on a negative.

🧪 Using it in Clay

Add an Apify enrichment column, point it at this actor, and map your domain column to domain. Every output field lands as its own Clay column.

Useful follow-on filters:

  • Companies that already buy AI: ai_maturity = "commercialized"
  • Companies that talk about AI but have not shipped it: ai_maturity = "declared"
  • Suppress unreliable rows: blocked = false AND confidence >= 0.6

📦 Batch mode

Put an array in domains and it takes precedence over domain. batchSize controls how many run concurrently, 1 to 10. The actor is HTTP only, no browser and no proxy, at 256MB, so batches finish in seconds.

Rows are written batch by batch as each one finishes, so a long list never loses the rows already done. The run keeps 90 seconds of its own timeout in reserve and caps every request by the time left. A domain it could not start or finish in time still gets a row, with

blocked_reason: "timed_out"
, uses_ai: null, and no charge, and the status message counts them. Rerun those domains, or give the run a longer timeout.

💵 How much does it cost to detect AI tooling?

You are charged once per domain analyzed (the domain-analyzed event). A domain the actor could not read is not charged: a blocked homepage (blocked: true), a homepage that would not load (fetch_error set), an analysis error, and a domain the run ran out of time for (

blocked_reason: "timed_out"
) all return a labeled row with billable_events_json: "[]".

PlanPer domainPer 1,000 domains
Free$0.003$3.00
Bronze$0.00285$2.85
Silver$0.0027$2.70
Gold$0.00255$2.55

There is also a start event, actor-start, at $0.00005, charged once per run.

💳 Free Apify plans get 1,000 results per calendar month; paid plans are unlimited. When the free cap is reached the run exits cleanly with a notice row rather than an error. Repeat lookups inside 7 days are served from cache; a cached row is still charged domain-analyzed.

Maximum charge

The actor honors the maximum cost per run you set in Apify: it stops analyzing once another row would not fit, and when the platform reports the limit reached it stops cleanly and keeps every row already charged. You can also set max_charge_usd on the Input tab as a second ceiling.

⌨️ Input

Everything is on the Input tab. The options worth explaining:

FieldTypeDefaultWhat it does
domainstringintercom.comA single company domain. Ignored when domains is filled.
domainsarray[]Batch mode. Takes precedence over domain.
vendorsarrayallReport only these AI vendors. See below.
check_pricingbooleantrueFetch and score the pricing page. Off caps results at deployed.
batchSizeinteger5Domains analyzed concurrently, 1 to 10.
request_timeout_msinteger9000Per-request timeout, 3000 to 20000.
skipCachebooleanfalseIgnore the 7 day result cache.
max_charge_usdnumbernoneOptional ceiling in USD for this run's charges. The run stops before crossing it.
qa_test_modebooleanfalseInternal: emit a single summary row and skip all network work. API only, not on the form.

🎯 Reporting on one vendor

vendors narrows the answer to the AI tools you care about, which turns this actor into competitive intelligence for any one of the 52 fingerprinted vendors.

{ "domains": ["stripe.com", "notion.so"], "vendors": ["sierra"] }

Selectable vendors, by category:

CategoryVendors
SupportSierra, Decagon, Ada, Forethought, Intercom Fin, Ultimate.ai, Netomi, Yellow.ai, Cognigy, Kore.ai, Chatbase, Voiceflow, Sendbird AI, Intercom, Zendesk, Drift, Gorgias, Freshworks Freddy, Tidio Lyro, Crisp, Kustomer
SalesQualified Piper, HubSpot Breeze
SearchAlgolia, Glean, Inkeep, Kapa.ai, Mendable
PersonalizationMutiny, Dynamic Yield
InferenceOpenAI API, Anthropic API, Azure OpenAI, AWS Bedrock, Google Gemini API, Cohere, Mistral, Groq, Together AI, Fireworks AI, Replicate, Perplexity API, Hugging Face, OpenRouter, Cloudflare AI Gateway
Vector DBPinecone, Weaviate, Qdrant
FrameworkVercel AI SDK, LangChain, LlamaIndex, assistant-ui

Three things worth knowing:

  • Detection is unchanged. Every fingerprint is still evaluated on every run. The filter shapes the answer, not the work, so a filtered run costs exactly what an unfiltered one costs and reuses the same cache.
  • The AI maturity read is never narrowed. ai_maturity, confidence, uses_ai, the llms.txt and robots.txt checks and the pricing score all measure the company's own AI posture, not a vendor list. A row filtered to Sierra still reports honestly that the company is commercialized; it simply does not list the other tools it also found.
  • Evidence is filtered in step. Vendor evidence lines for tools you did not ask about are dropped. Every llms.txt, robots.txt, pricing and copy line stays, because those are what the maturity read is built from.

vendors_requested on every row records what you asked for, so a row listing one tool is never confused with a row where only one tool was looked for.

📤 Output

One flat row per domain, exportable as JSON, CSV, Excel, HTML or XML.

{
"domain": "intercom.com",
"resolved_url": "https://www.intercom.com/",
"http_status": 200,
"ai_maturity": "commercialized",
"uses_ai": true,
"confidence": 1,
"has_llms_txt": true,
"llms_txt_url": "https://intercom.com/llms.txt",
"detected_tools": [
{"vendor": "Intercom Fin", "category": "support", "ai_native": true, "confidence": "high", "evidence": "markup match: fin.ai"}
],
"detected_tool_names": "Intercom Fin",
"detected_categories": ["support"],
"ai_copy_weight": 8,
"ai_pricing_detected": true,
"ai_pricing_score": 10,
"pricing_url": "https://www.intercom.com/pricing",
"evidence": ["AI priced per resolved outcome: \"$0.99 per Fin outcome\""],
"signals_fired": ["llms_txt", "vendor_fingerprint", "pricing_commercialization"],
"signals_missing": ["ai_txt", "robots_ai_directives"],
"blocked": false,
"is_js_rendered": false,
"fetch_error": null,
"checked_at": "2026-08-05T17:20:00.000Z",
"row_status": "ok",
"error_reason": null,
"billable_events_json": "[{\"event\":\"domain-analyzed\",\"count\":1}]"
}

💡 Tips

  • ai_maturity = "declared" is the most interesting segment for most sellers. Those companies have publicly committed to AI and have not yet bought the thing that delivers it.
  • Always pair a negative with blocked = false. It is the single cheapest quality gate here.
  • Keep check_pricing on. It is the only route to the commercialized tier.
  • Use vendors when you are building a displacement list for one tool. The row stays narrow and so does the export.
  • Paste evidence straight into the email. It is stored precisely so a rep can quote it.

⚠️ Known limits

Vendor recall is capped by what the server sends. Modern chat widgets are injected by client-side JavaScript, so a company running an AI widget that never appears in the served markup will read as declared rather than deployed. Adding a browser would raise recall, and would also raise the memory floor to 1024MB and the price with it. The tradeoff was made deliberately in favor of price.

Anti-bot challenges block a minority of domains, concentrated in large consumer brands and retail. Those rows come back blocked: true rather than silently negative. No proxy is configured by default.

commercialized requires a reachable pricing page. Companies that gate pricing behind "contact sales" cannot be proven to commercialize AI from the outside.

declared is a claim, not a deployment. That is exactly why it is a separate rung, but do not read it as adoption.

llms.txt is a high-precision positive whose absence proves nothing. Most companies have not published one, including companies deep into AI.

Fingerprints need maintenance. Vendors change script URLs, and a fingerprint that has not been refreshed goes quietly stale rather than failing loudly. Read signals_fired to see what actually matched.

❓ FAQ

Why is a company I know uses AI coming back as declared?

Almost always because its AI widget is injected by client-side JavaScript and never appears in the served markup. Check is_js_rendered.

What happens when a site blocks the actor?

The row is still emitted, flagged blocked: true with a blocked_reason, and confidence is pinned low. You never get a silent false negative, and a blocked row is not charged.

Why did /llms.txt not count?

A lot of single-page apps answer /llms.txt with their HTML shell. Those return has_llms_txt: false with an llms_txt_reject_reason, so the strongest signal in the pack stays clean.

Does the run ever return nothing?

No. The run always produces at least one dataset item. If no domain was supplied, or the free-tier cap was reached, you get one notice row with is_summary_row: true. Every domain you sent gets its own row, including one the run ran out of time for, which reads blocked_reason: "timed_out" and is not charged.

Is there an MCP server?

Yes. This actor is a tool on the Mamba Labs GTM Suite server, which exposes the whole fleet through one install.

🧩 Want other GTM data?

Mamba Labs builds a fleet of enrichment actors that share one flat output convention:

ActorActor ID
Account Hiring WatchgRAZA5WBi1r6L0gy7
Agent Accessibility AuditoranxbRv0lKrpQ1pnua
Agent to Brokerage ResolverePRRGLxOGyaVHO4dI
AI Answer Visibility TrackerRJZvzKniYK4nswcMg
AI List Extractor for Any WebsiteD5hOdIez45M0NX5jD
AI Tooling DetectorEwkHhmqiuJgRoVEbE
Amazon Product, Price, and Stock TrackerMtJPZoyjJ3IeqTFyo
Amazon Top Reviews Scraperwh6Mq6G6BlW1CRPwx
API Deprecation and Breaking Change MonitorpHsbS3xXUK8Jqutz5
App Store and Google Play Review MonitorMaCMEhGrbchxQZ92G
B2B Reddit Conversation MonitorSoDryzzsjmY3SsiyG
B2B Social Video TranscriptsdG2UYVKE2e4zfDucK
Bluesky Brand Presence MappereLpxzP4IuXznlFVND
Bluesky Posts ScraperKldSjS7wjoeZ7vQGm
Brand Sponsor FinderPPgK6xrgOmvL7Nrys
Bulk WHOIS and RDAP Domain Age LookupMTrkG5FLU6SjqLdJY
Business PDF Field ExtractorvM7JCk0CMAx5W0oJh
Career Change Signal EnginevX2Yga1a6wGaXaP14
Company Careers Page Jobs, 17 ATS BoardsizP0rfIgf5YaRZfIh
Company Change Event FeedoX44rS0fkEJ3rXLWe
Company Discovery List Builderjch0HdaZnpbMqlcGS
Company Firmographic EnricherYlUtLWjfPpqykmB8g
Company Funding RecordOFS4Mt1gyYNtGfUbE
Company Headcount EstimatoraHC4GROnNt6kfZe5r
Company Identity Resolverlr8fTRAmZCBZmuwwh
Company Role Email, Phone and Address Finder4mMncKaJykiq94grz
Company Social Presence Mapper4k6CCemkgBDz18m2h
Competitor Price, Stock, and Changelog MonitoryxdgCbUQ4PYQWwRNU
Contact Classifier0lGSeYJmniXhGANnO
Contractor License Search, CA, TX, WA, OR, LAWBYK3CPI2kdeq4bP1
CRM Contact Job Change CheckerL8UbEmMJC1XYPSZOb
Domain Deliverability Checker0tVgxI7A6o9jMlxmc
Domain to LinkedIn URL Resolver3HtnSaqPHOg1Qg5gx
Ecommerce Platform Profiler5G2NeYjBbQTjaTn9L
Ecommerce Store DiscoveryPeHu4sLyFvQHXUUrX
Email List Verifier, Bring Your Own KeyCzVJ4NlaCKk80xpgE
Event Presence IndexWLhMy8fMDgsxdYxv5
Eventbrite Events Scrapersgc6znyrbjOy5Yk9f
Expert Witness Finder, US and AustraliaLIpwlgfE3LaQBaXd4
Facebook Posts ScraperT6jxIeq4ua0SLXnqG
Funding and Press Signal ScannerFS13X6dhQVgX3XOM6
GDPR Cookie Banner and Consent CheckerTrKyOS0KBoGC35nbr
GitHub Followers and Following ExportSGNxDmFb9v3tRDaFI
GitHub Organization Signal ScannerahF8RRpv5mzPao5CN
Google Ads Transparency Center Scraper by Domain1eOwxhBVxzvOXAm4s
Google Maps Places ScraperSuvHCNJ7pIuw6gn54
Google Trends ScraperOeDzaACKmBYJXzHZk
GTM Hiring Signal ScraperD7O1SA2EqwHGsGr1P
GTM Signals AggregatorxKdRfnfFNkdMpFuNs
Healthcare Provider NPI EnricherMrgbHzcpDq3mOv9Df
ICP Fit ScorerW161DT8W4kW55dMFh
Influencer Change Monitord2VVgahNL6UmcLkhg
Influencer Lead List BuilderKnmByszcv135yM30G
Influencer Profile ScraperEqEnklDVMIcB1V499
Influencer Search Across TikTok, Instagram and YouTubetpkedmloIIWtXx6sg
Influencer Talent Agency LookupzCuX4Mgyg6JvXgGzd
Instagram Facebook Brand Presence MapperHXh65I0JBjPsunbY8
Integration and Marketplace Presence MapperV0guNuvM85Q61f2gj
Job Board Keyword Signal Scanner4DvqpvhMR74NLcDDY
Job Posting MonitorQCfICD9kOPiOdj5iI
Journalist and Media List BuildermAfizsZC8qRoR0ecS
Launch Directory List BuildercRq3bmvEZxZtioQ7U
Lead File Import CheckerRwlGVXTf46LqZdUgt
Legal Entity ResolverKHFyPCDIx7CyqULYm
Link in Bio Scraper and Newsletter DetectorOorucdheTIgu7RFzK
LinkedIn Company Page MapperzOPm6A9JEhUGcIdFW
LinkedIn Jobs FeedSH6N0d8cz46BhCC8B
LinkedIn Post TrackeroiGLNPuaf5BRaz9K5
Local Business Lead BuilderqMN97aoHhsAS5bznV
Local Rank and Map Pack Trackergv0kyHGDIg8XscclB
Lookalike Companies from Seed Domainse2O426WBAbLLQL4Z2
Manufacturer and Supplier FinderQcsdmd0lUfPzVkonh
MCP Server Change and Health MonitorIeqjWF9U0BdDQFY08
Media URL TranscriberSyfr7Ya3EsHgWfrB6
Meta Ad Library Ads by Company, Graph APIJ1GWlSXfSGU3u8Wng
Mobile Phone Waterfall6OOgPktf7RIa5XCOP
Multi Platform Social Posts and CommentsicFuHR1EzDvUcfCQ5
Netherlands Rental ListingssGKGsbwoX18lFb6dR
New Hire FindercKuc38p4nYHNF3IW8
Newly Registered Companies, UK, Norway, Finland, Franceg2WfZhWvCtc57g2Jo
News and Media Mention Monitorgol1PPUKrsIk4QLBd
News Site Article ArchiveNjcF3UD8791raFNHh
Newsletter Sponsor TrackerqSwpqxD1TiPZpLQHv
Open Tender and RFP FinderkPTGz6t6TFoUUyfaO
Outbound Stack Detectorv43UJC8r7qW7cBSTG
Page Finder and ExtractorTpurgcOZbVnknlaiC
Partner and Member Directory ExtractorZX0XJPPUvnFJxeC1a
People Finder & Email VerifierLEgloG7tWgQl4o6TD
Person LinkedIn URL ResolverssuyPV8LnEsL8qbnb
Person Social Footprint MapperjfQXa2zW9FHCJot9K
Personal Email to Company ResolverAefT5Ye6YNPFQwJBf
Pinterest Brand Presence Mapperd1HvjZfKhgvWsoEwn
Podcast Guest and Host Findero2MGSvgbSLeeXOsIo
Private Company Funding HistoryH02K3rQIVOYpnLYc3
Product Hunt Daily Launches with Maker DomainsO4VX63drWK9Y9x641
Property Owner Records0J7ovG1iaZpQD1P0T
Prospect Engineq9rT6v64nUJdPexOQ
Public Feature Board and Roadmap MonitorrcHF5gj5r2Vqnry35
Publishing Frequency TrackerTbLwaUUATdYb6wp4N
Recent Funding Rounds FeedKueVp9MOz7iOoAgDp
Reddit Brand Presence MapperpKQZmDaT70SEb54bZ
Reddit Search and Thread Scraper4Gsth5cP2Xt9V2xDN
Reporting Window FinderuINxR7a1IW8qUTRUX
Research Topic Institutions and AuthorsOH8ANqt7bCKbo72Gk
Semrush Domain Metrics3dqa0abJrpssHtrYL
Sequencer Event PollerS6s8Rjd61tGdrMRk4
Sequencer Lead Push0Jv27VeWM5tSZQs9x
Shopify App Store and Chrome Web Store ListingsgaY0BzkLyN77mD3wI
Site Crawler for Links and TableslLLJ6JxZ4XqN8ULz0
Streaming Subscription Prices by CountrytbMroS2Zyn57bW17E
Substack Newsletter and Posts ScraperUEFsdwiPLmPNVy9xd
Team Page People Extractorj8a9zX0k4mNbvDbWK
Tech Stack Signal Detectorqyd7nNyqFPelQViBx
Tennis Match Datav3OX6zxXHZOf2yurO
Threads Posts by Keyword, Exact Match2OT8K8RiEEWtaj2MW
Ticketmaster Event PricesCrvPX4IwLXQX9bls1
TikTok Brand Presence Mapperfco8FvoJcSafbeyd1
TikTok Video Statsuz9Q3cEycRgA6NfqA
Trustpilot Reputation Enricher3lIqfCt61j4hqE1xz
US and UK Contract Award Winners by CompanyzhEtllASykOcx9hJ8
US Import Records Buyer FinderVIMafpKF5ggOw0COU
VC and Accelerator Portfolio List BuilderchH8hrfuoqqolW06m
Website Accessibility Checker, WCAG 2.2 AAP3jBj3FRghKEhX52z
Website Phrase and Business Model ClassifierCBuZ9k7sRwBeiKiCS
Website Traffic Rank EstimatorGnOFUzlNVIoXgeJjH
Work Email WaterfallOT6xqTFThC0Rjf7Zj
Workplace Program DetectorLi6pPDhqbdzFz3h7G
X Brand Presence MapperoLOgadhHUkNAyDA3w
YouTube Channel and Video List ScrapertxaAjeBqgj5MStFE4
YouTube Channel Email FinderIDgKZcmeeuunUbccN
YouTube Channel from Company Domain6hSpD3kd2s2IQ4VSs
Zillow Listing DetailsyG4zM0Enfsw2NefJ1

Every actor in the suite takes a domain or a company and returns one flat row, so they stack in the same Clay table without reshaping anything.

🆘 Support

Something wrong, or a vendor the actor misses? Open an issue on the Issues tab with the domain and the row, and we will look at it.

ℹ️ Sourcing and legal. Every signal comes from pages the company publishes itself, read directly over HTTP with no proxy: the homepage, the pricing page, robots.txt, llms.txt and ai.txt. The row describes what a company published, not what it runs internally. You are responsible for how you use the output.

Built by Mamba Labs.