<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Henley Wing</title>
    <description>The latest articles on Forem by Henley Wing (@henley_wing_9424eb9a3177c).</description>
    <link>https://forem.com/henley_wing_9424eb9a3177c</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3730786%2F93b095fa-acda-4ab5-9d25-2182c154d0bf.webp</url>
      <title>Forem: Henley Wing</title>
      <link>https://forem.com/henley_wing_9424eb9a3177c</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/henley_wing_9424eb9a3177c"/>
    <language>en</language>
    <item>
      <title>I analyzed 100K HubSpot customers - here's what I learned</title>
      <dc:creator>Henley Wing</dc:creator>
      <pubDate>Sat, 04 Apr 2026 21:18:29 +0000</pubDate>
      <link>https://forem.com/henley_wing_9424eb9a3177c/i-analyzed-100k-hubspot-customers-heres-what-i-learned-32a1</link>
      <guid>https://forem.com/henley_wing_9424eb9a3177c/i-analyzed-100k-hubspot-customers-heres-what-i-learned-32a1</guid>
      <description>&lt;p&gt;If you work at a HubSpot agency, build &lt;a href="https://ecosystem.hubspot.com/marketplace/apps" rel="noopener noreferrer"&gt;apps on the HubSpot platform&lt;/a&gt;, or just want to understand who actually uses HubSpot and how, this article is for you.&lt;/p&gt;

&lt;p&gt;I started with the customer list published by &lt;a href="https://bloomberry.com/data/hubspot/" rel="noopener noreferrer"&gt;Bloomberry&lt;/a&gt;, which tracks 108,269 companies running HubSpot. They find these companies by scanning DNS records, the technical config files every company publishes when they set up an email or web tool.&lt;/p&gt;

&lt;p&gt;HubSpot leaves specific fingerprints in those records: &lt;a href="https://knowledge.hubspot.com/marketing-email/manage-email-authentication-in-hubspot" rel="noopener noreferrer"&gt;SPF entries&lt;/a&gt; that authorize HubSpot to send email on a company's behalf, CNAME records pointing to HubSpot-hosted subdomains, and tracking pixels tied to HubSpot's servers. If a company is running HubSpot, those records don't lie. I took that raw list and dug in.&lt;/p&gt;

&lt;p&gt;Here's what the data shows.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Software companies use HubSpot at nearly 10x the average rate.
&lt;/h2&gt;

&lt;p&gt;Ranking by raw customer count is boring. Software Development comes first, then IT Services, then Financial Services. That just tells you which industries have a lot of companies in general.&lt;/p&gt;

&lt;p&gt;The more useful metric is a multiplier: compared to all 2 million domains in the dataset, how much more likely is a company in a given industry to be running HubSpot?&lt;/p&gt;

&lt;p&gt;Software Development comes in at 9.6x. A software company is nearly ten times more likely to be on HubSpot than the average business. Almost every software company that does marketing eventually ends up here.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. The other over-indexing industries are more surprising than you'd expect.
&lt;/h2&gt;

&lt;p&gt;After software, the industries most disproportionately likely to use HubSpot are:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Market Research (5.8x).&lt;/strong&gt; Their entire business is built on educating buyers and building credibility over time. HubSpot's content and nurture tools are a natural fit.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;E-Learning (4.9x).&lt;/strong&gt; These companies attract, educate, and convert prospects over long consideration cycles. That's textbook inbound marketing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Financial Services (4.4x).&lt;/strong&gt; Fintech skews this up, but traditional financial services firms are in the mix too. Compliance constraints limit many channels, pushing companies toward owned tools like HubSpot.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Medical Equipment (3.9x) and Biotech (3.7x).&lt;/strong&gt; Both sell through long, relationship-driven cycles to hospitals and procurement committees. A deal that takes 18 months and involves six stakeholders is exactly what HubSpot is built for.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Marketing and Advertising Services (3.5x each).&lt;/strong&gt; Agencies use the tools they recommend to clients. HubSpot's partner program also gives certified agencies referral revenue, making adoption a business decision as much as a product one.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. The typical HubSpot customer is smaller than most people assume.
&lt;/h2&gt;

&lt;p&gt;The single biggest segment, at 42% of all users, is companies with 11 to 50 employees. Companies with fewer than 200 employees account for 86% of the entire customer base. Past 200 employees, adoption drops off as companies move toward Marketo or Salesforce Marketing Cloud.&lt;/p&gt;

&lt;p&gt;The breakdown looks very different depending on which HubSpot product you're looking at:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Free CRM.&lt;/strong&gt; 78% of users have fewer than 10 employees. This is not a customer base. It's a top-of-funnel acquisition strategy: get millions of tiny businesses in the door, convert the ones that grow.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Service Hub&lt;/strong&gt; (helpdesk, live chat, knowledge base). Over half of users have fewer than 10 employees. At that scale it usually means one chat widget and a basic help center. Only 4 companies with more than 10,000 employees use it at all.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Content Hub&lt;/strong&gt; (websites, landing pages, blogs). The most even spread of any product. Website needs exist at every company size, so the distribution is flatter across the board.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sales Hub&lt;/strong&gt; (CRM, pipelines, deals). Reaches furthest up the size curve. The tail at larger companies is healthier than any other HubSpot product, and 0.8% of Sales Hub users have more than 10,000 employees, compared to just 0.1% for Service Hub.&lt;/p&gt;

&lt;p&gt;If you're selling to HubSpot customers, the specific product they run is one of the best signals you have about their size.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. HubSpot has genuinely caught Salesforce in the mid-market.
&lt;/h2&gt;

&lt;p&gt;I polled 972 sales leaders in March 2026 with one question: what is your company's main CRM?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.salesforce.com" rel="noopener noreferrer"&gt;Salesforce&lt;/a&gt; came in at 43% (419 companies). HubSpot at 41% (397 companies). Twenty-two companies separated them. At that sample size, that is a statistical tie.&lt;/p&gt;

&lt;p&gt;A decade ago this wasn't close. Salesforce was the default for any company that took sales seriously, and HubSpot was a marketing tool with a free CRM bolted on. That is no longer the case.&lt;/p&gt;

&lt;p&gt;Real companies in the poll running HubSpot as their primary CRM include Zapier, Bitwarden, GitKraken, CoinGecko, DataSnipper, UpGuard, Unstructured, and Rinsed. These are not small companies kicking the tires. They are funded, growing businesses with real sales teams operating entirely out of HubSpot.&lt;/p&gt;




&lt;h2&gt;
  
  
  5. HubSpot and Salesforce are not fighting over the same customers anymore.
&lt;/h2&gt;

&lt;p&gt;The near-tie masks something more interesting: the two platforms have quietly split into different markets.&lt;/p&gt;

&lt;p&gt;HubSpot wins at companies with faster sales cycles, technical buyers, and self-serve growth motions. Businesses where a prospect can sign up, try the product, and convert without ever talking to a sales rep. Bitwarden, Unstructured, Flowcode, and Rinsed all fit this profile.&lt;/p&gt;

&lt;p&gt;Salesforce wins where deals are complex, contracts are large, and buying involves multiple departments over months. Rippling, Toast, Notion, Superhuman, and Betterment are all in that camp. These are businesses where the CRM needs deep customization and a dedicated admin team.&lt;/p&gt;

&lt;p&gt;They're both called CRMs. They're serving increasingly different businesses. That matters a lot if you're an agency deciding which platform to specialize in.&lt;/p&gt;




&lt;h2&gt;
  
  
  6. Finland uses HubSpot more than any other country.
&lt;/h2&gt;

&lt;p&gt;The US has the most HubSpot users in absolute terms at 48,289 companies. But adjusted for how many total businesses exist in each country, the rankings look very different.&lt;/p&gt;

&lt;p&gt;Finnish companies are 5.9x more likely to be running HubSpot than average. Norway is at 5.1x. New Zealand at 4.6x. The US at 4.2x. Australia at 4.1x. Sweden, Denmark, and Belgium all make the top 15.&lt;/p&gt;

&lt;p&gt;The Nordics showing up this heavily is striking. Small markets by population, but they produce a disproportionate number of tech-forward businesses that adopt modern marketing tools early.&lt;/p&gt;

&lt;p&gt;Japan at 5.1x is the most surprising entry. American B2B SaaS tools typically struggle there due to language barriers and a preference for domestic software. Japan tying Norway suggests HubSpot has made inroads that most US software companies never manage.&lt;/p&gt;

&lt;p&gt;Israel at 3.9x makes complete sense. One of the densest startup ecosystems in the world relative to population. Israeli startups adopt modern go-to-market tools early and HubSpot benefits from that disproportionately.&lt;/p&gt;




&lt;h2&gt;
  
  
  7. HubSpot is third in email marketing by domain count, and that's actually a compliment.
&lt;/h2&gt;

&lt;p&gt;I looked at which email marketing tool each of the 2 million domains in the dataset was configured to use, by reading DNS records. The breakdown:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://bloomberry.com/data/mailchimp/" rel="noopener noreferrer"&gt;Mailchimp&lt;/a&gt;: 41.8%&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.brevo.com" rel="noopener noreferrer"&gt;Brevo&lt;/a&gt;: 16%&lt;/li&gt;
&lt;li&gt;HubSpot: 15.1%&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.klaviyo.com" rel="noopener noreferrer"&gt;Klaviyo&lt;/a&gt;: 13.1%&lt;/li&gt;
&lt;li&gt;Constant Contact: 4.3%&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.pardot.com" rel="noopener noreferrer"&gt;Pardot&lt;/a&gt;: 3.9%&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Third place sounds like a demotion. It isn't. Mailchimp and Brevo users are often just sending a monthly newsletter. HubSpot customers are typically running their entire marketing operation through the platform: forms, landing pages, ad tracking, CRM, chat, support, and email all wired together. Third by domain count likely means first by revenue per customer.&lt;/p&gt;




&lt;h2&gt;
  
  
  8. Brevo is the story most people in the HubSpot world are ignoring.
&lt;/h2&gt;

&lt;p&gt;16% market share. More customers than HubSpot by raw count. And it barely registers in most marketing technology conversations.&lt;/p&gt;

&lt;p&gt;Brevo rebranded from Sendinblue in 2023 and has been quietly winning on price. It costs considerably less than HubSpot at almost every tier. A lot of companies land on Brevo when they outgrow Mailchimp but can't justify HubSpot's pricing, particularly in European and Latin American markets.&lt;/p&gt;

&lt;p&gt;For HubSpot agencies and developers, this matters. Brevo represents a large pool of companies that opted out of HubSpot specifically because of cost. They're not on Salesforce. They're one clear value conversation away from switching.&lt;/p&gt;




&lt;h2&gt;
  
  
  The bottom line
&lt;/h2&gt;

&lt;p&gt;108,269 companies are running HubSpot. It's statistically tied with Salesforce in the mid-market. Software companies adopt it at nearly 10x the average rate. The typical customer is an 11 to 50 person company, probably in tech, probably in the US or Northern Europe.&lt;/p&gt;

&lt;p&gt;If you're a HubSpot agency, the clearest opportunity is in industries that over-index but aren't obvious: medical equipment, biotech, financial services. Complex buying cycles, real budget, and not yet heavily targeted by HubSpot-specialized agencies.&lt;/p&gt;

&lt;p&gt;If you're a developer building on the platform, Sales Hub and Content Hub users skew larger and are worth approaching differently than Service Hub users.&lt;/p&gt;

&lt;p&gt;And if you're just trying to understand the landscape: HubSpot is no longer a marketing tool with a CRM attached. It's a full business platform, and the data backs that up.&lt;/p&gt;

</description>
      <category>analytics</category>
      <category>datascience</category>
      <category>marketing</category>
      <category>saas</category>
    </item>
    <item>
      <title>How to Find Any Company's Tech Stack (A Developer's Guide)</title>
      <dc:creator>Henley Wing</dc:creator>
      <pubDate>Sat, 21 Feb 2026 16:33:24 +0000</pubDate>
      <link>https://forem.com/henley_wing_9424eb9a3177c/how-to-find-any-companys-tech-stack-a-developers-guide-53h7</link>
      <guid>https://forem.com/henley_wing_9424eb9a3177c/how-to-find-any-companys-tech-stack-a-developers-guide-53h7</guid>
      <description>&lt;p&gt;Let me be upfront about why most tech stack tools are kind of useless for developers.&lt;/p&gt;

&lt;p&gt;Tools like Wappalyzer and BuiltWith scrape cookies, meta tags, and frontend JavaScript. They'll tell you a company uses React and Google Analytics. Cool. But you probably already guessed that. &lt;/p&gt;

&lt;p&gt;What you actually want to know is: &lt;em&gt;what does their backend look like?&lt;/em&gt; What's their data infrastructure?  Do they use Datadog or Grafana for observability? What does their auth layer look like?&lt;/p&gt;

&lt;p&gt;That information doesn't show up in a browser. It lives in DNS records, HTTP headers, subdomains, job postings, and public repos. And you can get all of it for free if you know where to look.&lt;/p&gt;

&lt;p&gt;This guide is organized by depth — starting with the most technical, developer-specific methods and working toward the simpler passive ones. Skip to whatever level you need.&lt;/p&gt;




&lt;h2&gt;
  
  
  Table of Contents
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Part 1: Infrastructure Recon (Get your hands dirty)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;1. Inspect API response headers with curl&lt;/li&gt;
&lt;li&gt;2. Extract third-party domains from network calls&lt;/li&gt;
&lt;li&gt;3. Read Content Security Policy headers&lt;/li&gt;
&lt;li&gt;4. Enumerate subdomains and trace them to cloud providers&lt;/li&gt;
&lt;li&gt;5. Search Cisco Umbrella DNS traffic logs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Part 2: Passive Signals (High signal, zero effort)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;6. Look up DNS TXT records&lt;/li&gt;
&lt;li&gt;7. Check their GitHub, NPM, and Hugging Face orgs&lt;/li&gt;
&lt;li&gt;8. Read subprocessor lists and trust centers&lt;/li&gt;
&lt;li&gt;9. Check their status page&lt;/li&gt;
&lt;li&gt;10. Mine historical job postings&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Part 1: Infrastructure Recon
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Inspect API response headers with curl
&lt;/h3&gt;

&lt;p&gt;This is the fastest technique in this entire guide for developers. Most companies expose an API at a predictable URL — &lt;code&gt;api.company.com&lt;/code&gt; or &lt;code&gt;api.company.io&lt;/code&gt;. You don't need credentials. Just hit it and read what comes back.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-sI&lt;/span&gt; https://api.company.com/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Even a 401, 403, or 404 response is packed with information. The infrastructure fingerprints itself in the headers.&lt;/p&gt;

&lt;p&gt;Here's what you're looking for:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Header&lt;/th&gt;
&lt;th&gt;What it means&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Apigw-Requestid&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;AWS API Gateway&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;X-Amzn-RequestId&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;AWS Lambda / API Gateway&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;X-Cache: Hit from cloudfront&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;AWS CloudFront CDN&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;X-Kong-*&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Kong API Gateway&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;X-Azure-Ref&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Azure API Management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Server: AkamaiGHost&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Akamai CDN&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Server: cloudflare&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Cloudflare&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Server: openresty&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Nginx-based (common with Kong)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;X-Powered-By: Express&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Node.js + Express&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;X-MuleSoft-*&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;MuleSoft API management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;X-Apigee-*&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Google Apigee&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Server: Mashery Proxy&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Mashery/TIBCO API management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;x-envoy-upstream-service-time&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Envoy proxy (often means Istio service mesh)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Via: 1.1 vegur&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Heroku routing layer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;x-vercel-*&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Vercel deployment&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;x-render-*&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Render deployment&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt; Running &lt;code&gt;curl -sI https://api.utilimarc.com/&lt;/code&gt; returns a 404, but the &lt;code&gt;Apigw-Requestid&lt;/code&gt; header is a dead giveaway for AWS API Gateway. The &lt;code&gt;Apigw-&lt;/code&gt; prefix is specific to AWS — no other provider uses it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Go further:&lt;/strong&gt; Also try &lt;code&gt;curl -sI https://company.com&lt;/code&gt; to check their web infra. The CDN, load balancer, and sometimes even the backend framework leak through the top-level domain's headers too.&lt;/p&gt;




&lt;h3&gt;
  
  
  2. Extract third-party domains from network calls
&lt;/h3&gt;

&lt;p&gt;Every page load is a treasure map. The browser fetches scripts, fonts, pixels, and analytics from dozens of third-party services — all of which have unique hostnames that identify the vendor.&lt;/p&gt;

&lt;p&gt;Open Chrome DevTools (F12), go to the Console tab, and run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;[...&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="nx"&gt;performance&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getEntriesByType&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;resource&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;r&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;URL&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;hostname&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
      &lt;span class="k"&gt;catch&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;})&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;Boolean&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;)]&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;h&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;h&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;includes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;location&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;hostname&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sort&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This gives you every distinct third-party hostname loaded by the page, deduplicated and sorted, with the first-party domain filtered out.&lt;/p&gt;

&lt;p&gt;What you'll typically find:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Observability:&lt;/strong&gt; &lt;code&gt;browser-intake.datadoghq.com&lt;/code&gt;, &lt;code&gt;ingest.sentry.io&lt;/code&gt;, &lt;code&gt;rs.fullstory.com&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Feature flags:&lt;/strong&gt; &lt;code&gt;app.launchdarkly.com&lt;/code&gt;, &lt;code&gt;events.split.io&lt;/code&gt;, &lt;code&gt;featureflags.statsig.com&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A/B testing:&lt;/strong&gt; &lt;code&gt;api.eppo.cloud&lt;/code&gt;, &lt;code&gt;cdn.optimizely.com&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CDN/infra:&lt;/strong&gt; &lt;code&gt;cdn.company.cloudfront.net&lt;/code&gt; (CloudFront), &lt;code&gt;*.fastly.net&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Auth:&lt;/strong&gt; &lt;code&gt;company.auth0.com&lt;/code&gt;, &lt;code&gt;cognito-idp.*.amazonaws.com&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Logging/metrics:&lt;/strong&gt; &lt;code&gt;logs.browser-intake-datadoghq.com&lt;/code&gt;, &lt;code&gt;api.honeycomb.io&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Pro tip:&lt;/strong&gt; Do this on the authenticated app (&lt;code&gt;app.company.com&lt;/code&gt;), not just the marketing site. The marketing page is often a static site or different stack entirely. The actual product is where the interesting infra shows up — real-time event pipelines, feature flagging, product analytics, the works.&lt;/p&gt;

&lt;p&gt;Paste the hostname list into an LLM and ask it to map each domain to a product. This is faster and more up-to-date than any static tool, since new vendor domains get recognized immediately.&lt;/p&gt;




&lt;h3&gt;
  
  
  3. Read Content Security Policy headers
&lt;/h3&gt;

&lt;p&gt;CSP is a security feature that tells browsers which domains a site is allowed to load resources from or send data to. But for your purposes, it's a complete manifest of vendor integrations — because if a domain is in the CSP, the app is explicitly using it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to find it:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open Chrome DevTools → Network tab&lt;/li&gt;
&lt;li&gt;Enable &lt;strong&gt;Preserve log&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Reload and click around the app&lt;/li&gt;
&lt;li&gt;Filter by &lt;strong&gt;Fetch/XHR&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Click any request → &lt;strong&gt;Headers&lt;/strong&gt; → look for &lt;code&gt;Content-Security-Policy&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The CSP will be a long string of directives like &lt;code&gt;connect-src&lt;/code&gt;, &lt;code&gt;script-src&lt;/code&gt;, and &lt;code&gt;img-src&lt;/code&gt;, each followed by a list of allowed domains.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Real example from Monday.com's CSP:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;monday.zendesk.com&lt;/code&gt; → uses Zendesk for support&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;monday.lightning.force.com&lt;/code&gt; → Salesforce integration&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;monday.vitally.io&lt;/code&gt; → Vitally for CS&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;o474786.ingest.sentry.io&lt;/code&gt; → &lt;strong&gt;Sentry&lt;/strong&gt; for error tracking&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;*.launchdarkly.com&lt;/code&gt; → &lt;strong&gt;LaunchDarkly&lt;/strong&gt; for feature flags&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;app.datadoghq.com&lt;/code&gt; → &lt;strong&gt;Datadog&lt;/strong&gt; for observability&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Copy the entire CSP value and throw it into an LLM: &lt;em&gt;"What developer tools and SaaS products correspond to these domains in this Content Security Policy?"&lt;/em&gt; You'll get a categorized breakdown in seconds.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Not every site sets a CSP, and CSPs are sometimes set only on certain responses. If you don't see it, move on — but when it's there, it's one of the most explicit tech signals available.&lt;/p&gt;




&lt;h3&gt;
  
  
  4. Enumerate subdomains and trace them to cloud providers
&lt;/h3&gt;

&lt;p&gt;Companies don't run everything on &lt;code&gt;www&lt;/code&gt;. As infrastructure grows, services get their own subdomains — owned by different teams, deployed independently, with separate access controls. And they're often named &lt;em&gt;very&lt;/em&gt; literally.&lt;/p&gt;

&lt;p&gt;A subdomain called &lt;code&gt;kafka-prod-b2.company.com&lt;/code&gt; tells you exactly what's running there. Same for &lt;code&gt;elastic.company.com&lt;/code&gt;, &lt;code&gt;grafana.internal.company.com&lt;/code&gt;, or &lt;code&gt;consul.company.com&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Finding subdomains:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The easiest free option is &lt;a href="https://pentest-tools.com" rel="noopener noreferrer"&gt;pentest-tools.com&lt;/a&gt; — they give you two free reports, which is enough for a research session. Enter the domain and get a list of discovered subdomains.&lt;/p&gt;

&lt;p&gt;For a command-line approach, &lt;a href="https://github.com/owasp-amass/amass" rel="noopener noreferrer"&gt;Amass&lt;/a&gt; is the gold standard:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;amass enum &lt;span class="nt"&gt;-passive&lt;/span&gt; &lt;span class="nt"&gt;-d&lt;/span&gt; company.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or use &lt;a href="https://github.com/projectdiscovery/subfinder" rel="noopener noreferrer"&gt;subfinder&lt;/a&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;subfinder &lt;span class="nt"&gt;-d&lt;/span&gt; company.com &lt;span class="nt"&gt;-silent&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Real example — Nokia's subdomains:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;elastic0.cbrs.iot.nokia.com         → Elasticsearch
kafka-prod-b2.enso.saas.nokia.com   → Kafka in production
pfsense.iot.nokia.com               → pfSense firewall
grafana.cbrs.iot.nokia.com          → Grafana dashboards
consul.cbrs.iot.nokia.com           → HashiCorp Consul
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Just reading the names: they're running an ELK-adjacent stack with Kafka for streaming, Consul for service discovery, and Grafana for dashboards. That's a detailed architecture picture without touching a single line of code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Trace subdomains to cloud providers:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Once you have a list, run &lt;code&gt;dig&lt;/code&gt; on interesting ones:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dig +short kafka-prod-b2.enso.saas.nokia.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then look up the IP in a tool like &lt;a href="https://ipinfo.io" rel="noopener noreferrer"&gt;ipinfo.io&lt;/a&gt; or just check the PTR record:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dig +short &lt;span class="nt"&gt;-x&lt;/span&gt; &amp;lt;IP&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If it resolves to &lt;code&gt;*.compute.amazonaws.com&lt;/code&gt; → AWS. &lt;code&gt;*.googleusercontent.com&lt;/code&gt; → GCP. &lt;code&gt;*.azure.com&lt;/code&gt; → Azure. Repeat across a few subdomains and you'll quickly see which cloud(s) they're on. Many large companies are multi-cloud, and the subdomain patterns often tell you which workloads live where.&lt;/p&gt;




&lt;h3&gt;
  
  
  5. Search Cisco Umbrella DNS traffic logs
&lt;/h3&gt;

&lt;p&gt;This one is genuinely underused and feels like a cheat code.&lt;/p&gt;

&lt;p&gt;Cisco Umbrella (formerly OpenDNS) operates one of the world's largest DNS resolver networks. Every day, they publish the top 1 million most queried domains and subdomains through their infrastructure — the &lt;strong&gt;Cisco Umbrella Popularity List&lt;/strong&gt;. It's free, public, and updated daily.&lt;/p&gt;

&lt;p&gt;Why this is different from subdomain enumeration: enumeration tools find subdomains that &lt;em&gt;exist&lt;/em&gt;. The Umbrella list shows subdomains that are &lt;em&gt;actively being used&lt;/em&gt;, based on real DNS traffic. This means you'll catch third-party SaaS tools with company-specific subdomains that would never appear in a passive scan.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Download and search it:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Download&lt;/span&gt;
curl &lt;span class="nt"&gt;-O&lt;/span&gt; http://s3-us-west-1.amazonaws.com/umbrella-static/top-1m.csv.zip
unzip top-1m.csv.zip

&lt;span class="c"&gt;# Search for a company&lt;/span&gt;
&lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="s2"&gt;"autodesk"&lt;/span&gt; top-1m.csv
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Or do it in Python:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;csv&lt;/span&gt;

&lt;span class="n"&gt;company&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;autodesk&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;top-1m.csv&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;reader&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;csv&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;reader&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;matches&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[(&lt;/span&gt;&lt;span class="n"&gt;rank&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;domain&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;rank&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;domain&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;reader&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;company&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;domain&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;lower&lt;/span&gt;&lt;span class="p"&gt;()]&lt;/span&gt;

&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;rank&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;domain&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;matches&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Rank &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;rank&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;domain&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;What I found when searching for "autodesk":&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;autodeskfeedback.az1.qualtrics.com     → Qualtrics for surveys
autodesk.enterprise.slack.com          → Slack Enterprise Grid
autodesk.pagerduty.com                 → PagerDuty for incident management
autodeskglobal.okta.com                → Okta for identity/SSO
autodeskglobal-ssl.mktoweb.com         → Marketo for marketing automation
autodesk.splunkcloud.com               → Splunk for log analysis
*.autodesk.com.edgekey.net             → Akamai CDN
notifications.api.autodesk.com         → Dedicated notifications microservice
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;From one grep, you can see their incident management stack (PagerDuty), their identity provider (Okta), their SIEM (Splunk), and their CDN (Akamai). Paid technographic tools almost never surface these, because they focus on frontend detection.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Caveat:&lt;/strong&gt; This only works for companies with enough external traffic to appear in the top million. Smaller startups likely won't show up. But for anything mid-size or larger, it's one of the highest-signal free techniques available.&lt;/p&gt;




&lt;h2&gt;
  
  
  Part 2: Passive Signals
&lt;/h2&gt;

&lt;p&gt;These methods require less technical effort but often reveal tools that the recon techniques above will completely miss — especially backend business tooling, internal SaaS, and vendor relationships.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. Look up DNS TXT records
&lt;/h3&gt;

&lt;p&gt;When a SaaS tool needs to verify domain ownership for SSO or SAML integration, they require you to add a TXT record to DNS. These records persist long after the integration is live. They're public, unfakeable, and one of the strongest signals that a company actually uses a product.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Command line:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dig TXT company.com +short
&lt;span class="c"&gt;# Or for more detail:&lt;/span&gt;
dig TXT company.com ANY
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Or use a GUI:&lt;/strong&gt; &lt;a href="https://dnschecker.org" rel="noopener noreferrer"&gt;dnschecker.org&lt;/a&gt; → choose "TXT" record type.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Real example — OpenAI's TXT records reveal:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;notion-domain-verification=...        → Notion
atlassian-domain-verification=...     → Jira / Confluence
docker-verification=...               → Docker Hub
postman-domain-verification=...       → Postman
ms-domain-verification=...            → Azure AD / M365
miro-verification=...                 → Miro
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Other dev-tool-related patterns to look for:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;TXT record prefix&lt;/th&gt;
&lt;th&gt;Product&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;docker-verification&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Docker Hub&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;postman-domain-verification&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Postman&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;atlassian-domain-verification&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Jira, Confluence&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;stripe-verification&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Stripe&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;datadog-...&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Datadog&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;pagerduty-verification&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;PagerDuty&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;github-challenge-...&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;GitHub Enterprise / SSO&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;1password-site-verification&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;1Password Teams&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;sentry-...&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Sentry&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;linear-...&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Linear&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;If a verification record exists, someone on the IT or infra team had to explicitly add it. That's a confirmed active integration.&lt;/p&gt;




&lt;h3&gt;
  
  
  7. Check their GitHub, NPM, and Hugging Face orgs
&lt;/h3&gt;

&lt;p&gt;Takes about 60 seconds and often reveals the most direct, unambiguous evidence of what a company actually builds with.&lt;/p&gt;

&lt;h4&gt;
  
  
  GitHub
&lt;/h4&gt;

&lt;p&gt;Start at &lt;code&gt;github.com/{company-name}&lt;/code&gt;. Even if it's not linked from their website, it's usually guessable. Try the obvious names.&lt;/p&gt;

&lt;p&gt;What to look at:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Language breakdown:&lt;/strong&gt; GitHub shows a bar graph of languages across public repos. 40 repos in Go? That's a Go shop. Python-heavy with some Rust? That's a signal too.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Repo names:&lt;/strong&gt; Companies often open-source internal tooling, SDKs, and infrastructure modules. Names like &lt;code&gt;company-terraform-modules&lt;/code&gt;, &lt;code&gt;company-kafka-consumer&lt;/code&gt;, or &lt;code&gt;company-k8s-operators&lt;/code&gt; are literal descriptions of their infra.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dependency files:&lt;/strong&gt; Open any repo and check:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Node projects&lt;/span&gt;
&lt;span class="nb"&gt;cat &lt;/span&gt;package.json | jq &lt;span class="s1"&gt;'.dependencies, .devDependencies'&lt;/span&gt;

&lt;span class="c"&gt;# Python projects  &lt;/span&gt;
&lt;span class="nb"&gt;cat &lt;/span&gt;requirements.txt
&lt;span class="nb"&gt;cat &lt;/span&gt;pyproject.toml

&lt;span class="c"&gt;# Go projects&lt;/span&gt;
&lt;span class="nb"&gt;cat &lt;/span&gt;go.mod

&lt;span class="c"&gt;# Ruby&lt;/span&gt;
&lt;span class="nb"&gt;cat &lt;/span&gt;Gemfile

&lt;span class="c"&gt;# Java/Kotlin&lt;/span&gt;
&lt;span class="nb"&gt;cat &lt;/span&gt;build.gradle
&lt;span class="nb"&gt;cat &lt;/span&gt;pom.xml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You don't need to understand the code. Just read the dependency names. A Python repo importing &lt;code&gt;pyspark&lt;/code&gt;, &lt;code&gt;delta-spark&lt;/code&gt;, and &lt;code&gt;airflow&lt;/code&gt; tells you their data engineering stack. A Node repo pulling in &lt;code&gt;@opentelemetry/api&lt;/code&gt; tells you they're doing structured observability with OpenTelemetry.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub Actions workflows:&lt;/strong&gt; This is often overlooked. Check &lt;code&gt;.github/workflows/&lt;/code&gt; in any repo. The workflow YAML files show their CI/CD setup, which testing tools they use, and what cloud they deploy to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Look for things like:&lt;/span&gt;
&lt;span class="c"&gt;# - uses: aws-actions/configure-aws-credentials  → AWS&lt;/span&gt;
&lt;span class="c"&gt;# - uses: google-github-actions/auth             → GCP&lt;/span&gt;
&lt;span class="c"&gt;# - uses: hashicorp/setup-terraform              → Terraform&lt;/span&gt;
&lt;span class="c"&gt;# - uses: docker/build-push-action               → Docker&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  NPM
&lt;/h4&gt;

&lt;p&gt;Search &lt;code&gt;npmjs.com&lt;/code&gt; for the company name, or try &lt;code&gt;npmjs.com/~{org-name}&lt;/code&gt;. Published packages reveal the frontend frameworks they use and what internal tools they've built and open-sourced. A company publishing a design system built on React and Storybook tells you a lot about their frontend stack.&lt;/p&gt;

&lt;h4&gt;
  
  
  Hugging Face
&lt;/h4&gt;

&lt;p&gt;Head to &lt;code&gt;huggingface.co/{company-name}&lt;/code&gt;. Useful for any company doing ML work:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Models:&lt;/strong&gt; What architectures are they using? Fine-tuning on what base models?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Datasets:&lt;/strong&gt; What kind of data do they work with?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Spaces:&lt;/strong&gt; Demo apps that show their framework choices (Gradio, Streamlit, etc.)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Team size:&lt;/strong&gt; The member count gives a rough sense of ML team scale.&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  8. Read subprocessor lists and trust centers
&lt;/h3&gt;

&lt;p&gt;Companies that handle personal data — especially for EU customers — are often legally required to disclose every third-party service that touches that data. These are &lt;strong&gt;subprocessors&lt;/strong&gt;, and the lists get published in "Trust Center" or "Security" pages.&lt;/p&gt;

&lt;p&gt;For developers, this is the fastest way to find out what SaaS infra a company is paying for: cloud providers, auth platforms, monitoring tools, data platforms.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to find them:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Google: "[company name] subprocessors"
Google: "[company name] trust center"
Look: footer links labeled "Trust," "Security," or "Privacy"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Example from NewDays.ai's Trust Center:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Just from one screenshot, you can confirm: AWS for cloud, Auth0 for authentication, Sentry for error monitoring. That's three confirmed infrastructure choices in 30 seconds.&lt;/p&gt;

&lt;p&gt;If the list is long, paste it into an LLM and ask it to group by function: &lt;em&gt;"Here is a subprocessor list. Categorize each vendor by function: cloud infrastructure, auth/identity, observability, data storage, CI/CD, etc."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Not every company publishes one. But when they do, it's the most honest signal available — it's literally a receipt of their operational stack.&lt;/p&gt;




&lt;h3&gt;
  
  
  9. Check their status page
&lt;/h3&gt;

&lt;p&gt;Status pages (&lt;code&gt;status.company.com&lt;/code&gt;, or hosted on Atlassian Statuspage, Instatus, or Better Uptime) are designed for customer communication. But they contain two things that are valuable for tech recon:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The components list reveals architecture.&lt;/strong&gt; The way a company breaks down their services tells you a lot. Separate components for &lt;code&gt;US-East&lt;/code&gt;, &lt;code&gt;EU-West&lt;/code&gt;, and &lt;code&gt;APAC&lt;/code&gt; confirm multi-region. Separate statuses for &lt;code&gt;API&lt;/code&gt;, &lt;code&gt;WebSockets&lt;/code&gt;, &lt;code&gt;Background Jobs&lt;/code&gt;, and &lt;code&gt;CDN&lt;/code&gt; tell you how they've segmented their infrastructure.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Incident history reveals hidden dependencies.&lt;/strong&gt; When systems fail, companies explain why — and that explanation often names an upstream vendor. This is especially powerful for finding security and infrastructure tools that never show up in DNS or network calls.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt; After the CrowdStrike outage on July 19, 2024, dozens of companies posted status page incidents explicitly mentioning CrowdStrike. No scanner, DNS lookup, or job posting would ever reveal a company uses CrowdStrike EDR. But their own status page did.&lt;/p&gt;

&lt;p&gt;The technique: if a vendor had a major outage on a known date, search status pages for companies that reported issues on the same day mentioning that vendor. You now have a list of confirmed customers.&lt;/p&gt;




&lt;h3&gt;
  
  
  10. Mine historical job postings
&lt;/h3&gt;

&lt;p&gt;When a company hires, they list the exact tools the hire will use. Engineering roles are obvious, but also look at: SRE and DevOps postings (infra stack), data engineering roles (pipeline tools), platform engineering (internal dev platform), and security roles (SIEM, EDR, vulnerability management).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The problem:&lt;/strong&gt; Most companies only have a few active listings, and old ones disappear from LinkedIn and career pages.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The solution:&lt;/strong&gt; The &lt;a href="https://web.archive.org" rel="noopener noreferrer"&gt;Wayback Machine&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Paste the company's careers page URL (not an individual job listing) into the Wayback Machine and you'll find archived snapshots going back years. Browse old job listings that are no longer live and collect the technologies mentioned.&lt;/p&gt;

&lt;p&gt;Once you've collected 8–10 postings across different roles:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Paste all job descriptions into an LLM and ask:
"Extract every specific technology, tool, framework, or platform 
mentioned across these job descriptions, count how many postings 
each appears in, and group them by category."
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Frequency is the signal. If &lt;code&gt;Terraform&lt;/code&gt;, &lt;code&gt;Kubernetes&lt;/code&gt;, and &lt;code&gt;ArgoCD&lt;/code&gt; show up across 6 out of 8 engineering postings, that's the real infra stack. If &lt;code&gt;Jenkins&lt;/code&gt; shows up once in a posting from 2021, they've probably moved on.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Don't only look at engineering jobs.&lt;/strong&gt; A Platform Engineering posting mentioning &lt;code&gt;Backstage&lt;/code&gt; tells you they're building an internal developer platform. An SRE posting mentioning &lt;code&gt;PagerDuty&lt;/code&gt;, &lt;code&gt;Prometheus&lt;/code&gt;, and &lt;code&gt;Grafana&lt;/code&gt; tells you their observability stack. A Data Engineering posting mentioning &lt;code&gt;dbt&lt;/code&gt;, &lt;code&gt;Airflow&lt;/code&gt;, and &lt;code&gt;Snowflake&lt;/code&gt; tells you their data warehouse setup.&lt;/p&gt;




&lt;h2&gt;
  
  
  Putting It All Together
&lt;/h2&gt;

&lt;p&gt;Different techniques reveal different layers of the stack. Here's a practical workflow depending on what you're trying to find:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"What cloud/infra do they run?"&lt;/strong&gt;&lt;br&gt;
→ Subdomain enumeration → &lt;code&gt;dig&lt;/code&gt; A records to cloud IP ranges → curl API headers&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"What does their observability stack look like?"&lt;/strong&gt;&lt;br&gt;
→ Extract third-party domains from network requests → Job postings (SRE/DevOps roles) → DNS TXT records for tools like Datadog, New Relic, Honeycomb&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"What's their data/ML infrastructure?"&lt;/strong&gt;&lt;br&gt;
→ GitHub repos (look for Airflow DAGs, dbt models, Spark configs) → Hugging Face org → Job postings for data engineers&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"What does their auth/security stack look like?"&lt;/strong&gt;&lt;br&gt;
→ DNS TXT records (&lt;code&gt;okta-domain-verification&lt;/code&gt;, &lt;code&gt;onelogin-domain-verification&lt;/code&gt;) → Subprocessor lists → Status page incidents mentioning security vendors&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"What CI/CD and dev tools do they use?"&lt;/strong&gt;&lt;br&gt;
→ GitHub Actions workflows in public repos → DNS TXT records (GitHub, Postman, Docker) → Job postings for platform/DevOps roles&lt;/p&gt;




&lt;h2&gt;
  
  
  Quick Reference
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# API header fingerprint&lt;/span&gt;
curl &lt;span class="nt"&gt;-sI&lt;/span&gt; https://api.company.com/

&lt;span class="c"&gt;# DNS TXT records&lt;/span&gt;
dig TXT company.com +short

&lt;span class="c"&gt;# Subdomain enumeration&lt;/span&gt;
subfinder &lt;span class="nt"&gt;-d&lt;/span&gt; company.com &lt;span class="nt"&gt;-silent&lt;/span&gt; | &lt;span class="nb"&gt;tee &lt;/span&gt;subdomains.txt

&lt;span class="c"&gt;# Trace subdomain to cloud&lt;/span&gt;
dig +short company.com | xargs &lt;span class="nt"&gt;-I&lt;/span&gt;&lt;span class="o"&gt;{}&lt;/span&gt; curl &lt;span class="nt"&gt;-s&lt;/span&gt; ipinfo.io/&lt;span class="o"&gt;{}&lt;/span&gt;

&lt;span class="c"&gt;# Cisco Umbrella search&lt;/span&gt;
curl &lt;span class="nt"&gt;-O&lt;/span&gt; http://s3-us-west-1.amazonaws.com/umbrella-static/top-1m.csv.zip
unzip top-1m.csv.zip &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="s2"&gt;"company"&lt;/span&gt; top-1m.csv

&lt;span class="c"&gt;# Browser: extract third-party domains&lt;/span&gt;
&lt;span class="o"&gt;[&lt;/span&gt;...new Set&lt;span class="o"&gt;(&lt;/span&gt;performance.getEntriesByType&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"resource"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;.map&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;r&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;{&lt;/span&gt;try&lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="k"&gt;return &lt;/span&gt;new URL&lt;span class="o"&gt;(&lt;/span&gt;r.name&lt;span class="o"&gt;)&lt;/span&gt;.hostname&lt;span class="o"&gt;}&lt;/span&gt;catch&lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="k"&gt;return &lt;/span&gt;null&lt;span class="o"&gt;}})&lt;/span&gt;.filter&lt;span class="o"&gt;(&lt;/span&gt;Boolean&lt;span class="o"&gt;))]&lt;/span&gt;.filter&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;h&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;!&lt;/span&gt;h.includes&lt;span class="o"&gt;(&lt;/span&gt;location.hostname&lt;span class="o"&gt;))&lt;/span&gt;.sort&lt;span class="o"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;Every technique here is free. The recon tools (Amass, subfinder) are open-source. The DNS lookups are public by design. The Cisco Umbrella list is published daily. GitHub repos and NPM packages are intentionally public.&lt;/p&gt;

&lt;p&gt;I also built an API around these techniques. &lt;a href="https://github.com/HenleyChiu/Bloomberry" rel="noopener noreferrer"&gt;I released it here in Github&lt;/a&gt; if you want to poke around.&lt;/p&gt;

&lt;p&gt;If you're lazy, and looking for free/paid tools that do all or any of the above, I compiled a &lt;a href="https://bloomberry.com/blog/i-tried-6-wappalyzer-alternatives-these-are-the-few-i-liked/" rel="noopener noreferrer"&gt;huge list of tech stack lookup tools&lt;/a&gt; you can use as an alternative to Wappalyzer or Builtwith.&lt;/p&gt;

</description>
      <category>webdev</category>
    </item>
  </channel>
</rss>
