Tech Stack Recon
Reverse-engineer a company's sales and marketing tech stack from public signals.
How to use it
- Hit Copy SKILL.md — or use the Claude Code line below to get every file.
- Claude: ⋯ → Download .md, then Customize → Skills → Add → Upload skill.
ChatGPT: make a Project and paste it into Instructions.
Neither? Paste it at the top of a new chat — it works for that chat. - Describe your job in plain words. The AI follows the skill from there.
npx degit gooseworks-ai/goose-skills/skills/competitive-intel/capabilities/tech-stack-teardown#main ~/.claude/skills/tech-stack-teardownFor one project only, change the path to .claude/skills/tech-stack-teardown. This skill also uses Next.js, recon.py — copying SKILL.md alone won't be enough. See the folder on GitHub.
Not working?
- Check which app you pasted it into — the steps above name the right one.
- Some skills need the paid tier of Claude or ChatGPT.
Paste into Claude, ChatGPT or Cursor.
Show the full text326 lines
Tech Stack Recon
Reverse-engineer a company's sales, marketing, and outbound infrastructure from public signals. No login, no API access to their tools needed — everything is derived from DNS records, website source code, technology profiling, blacklist databases, and public complaints.
What It Detects
| Category | Tools Detected |
|---|---|
| CRM | HubSpot, Salesforce (via SPF, website pixels, DNS) |
| Cold Email Tools | Smartlead, Instantly, Outreach, Salesloft, Lemlist (via SPF, DKIM, TXT records, website source) |
| People Databases | Apollo, ZoomInfo, Clearbit, 6sense (via website tracker scripts) |
| Email Delivery | SendGrid, Amazon SES, Postmark, Mailgun, Mandrill (via SPF includes, DKIM selectors) |
| Email Marketing | Mailchimp, Brevo, ActiveCampaign, Klaviyo (via DKIM selectors) |
| Ad Retargeting | LinkedIn Insight Tag, Facebook Pixel, AdRoll, Reddit Ads, Twitter Ads (via Apify profiler + source) |
| Website Builder | Webflow, Framer, Next.js, WordPress (via Apify profiler + source) |
| Chat / Support | Intercom, Drift, Crisp, Zendesk (via website source) |
| Analytics | Google Analytics, Segment, Mixpanel, Amplitude, PostHog, Heap (via website source) |
| Outbound Domains | Separate cold sending domains (via SPF-only Google Workspace + redirect to primary) |
How It Works
The skill runs 5 layers of detection, each revealing different signals:
Layer 1: DNS Records (Free, instant)
MX → Primary email provider (Google Workspace, Microsoft 365, etc.)
SPF → Every service authorized to send email on their behalf
DKIM → Cryptographic proof of which tools actually send email
DMARC → Email authentication policy (how strict they are)
TXT → Misc verifications (Smartlead tracking domains, tool verifications)
CNAME → Subdomains pointing to third-party services
This is the highest-signal layer. SPF and DKIM don't lie — if SendGrid is in their SPF, they use SendGrid.
Layer 2: Website Source Inspection (Free, instant)
Fetches the target website and searches HTML for:
- Tracking pixels (Apollo, REB2B, HubSpot, Facebook, LinkedIn)
- Script tags loading third-party tools
- Meta tags and framework signatures
- Hidden form handlers and API endpoints
Layer 3: Apify Technology Profiler (Pay-per-use, ~$0.005/domain)
Runs justa/technology-profiling-engine actor for deep detection of 7,000+ technologies using 8-tier inspection with confidence scores. Catches tools that don't appear in source code (loaded dynamically, via GTM, etc.).
Layer 4: Blacklist Checks (Free, instant)
Queries 6 major DNS-based blacklists:
- Spamhaus (zen.spamhaus.org)
- Barracuda (b.barracudacentral.org)
- SpamCop (bl.spamcop.net)
- SORBS (dnsbl.sorbs.net)
- SURBL (multi.surbl.org)
- URIBL (black.uribl.com)
Layer 5: Public Complaint Search (Free)
Web searches for spam complaints on Trustpilot, Reddit, SpamCop forums, and general web. Also searches for the company + tool names to find public mentions of their stack.
Cost
| Component | Cost |
|---|---|
| DNS queries | Free |
| Website source fetch | Free |
| Blacklist checks | Free |
| Web searches | Free |
| Apify Technology Profiler | ~$0.005 per domain |
Typical costs:
| Scenario | Domains | Est. Cost |
|---|---|---|
| Single company | 1 | ~$0.005 |
| Small batch | 5 | ~$0.025 |
| Large batch | 20 | ~$0.10 |
Skip the Apify profiler with --no-apify for free-only analysis (DNS + source + blacklists).
Setup
1. Required
# dig (DNS lookups) — included on macOS/Linux
which dig
# curl (website source fetch) — included on macOS/Linux
which curl
# Python 3 with requests + dotenv
pip3 install requests python-dotenv
2. Optional (for Apify Technology Profiler)
# Get your token at https://console.apify.com/account/integrations
# Add to .env:
APIFY_API_TOKEN=apify_api_YOUR_TOKEN_HERE
Usage
Single Company
python3 scripts/recon.py --domains pump.co
Batch of Companies
python3 scripts/recon.py --domains "dili.ai,pump.co,runautomat.com"
Free-Only Mode (No Apify)
python3 scripts/recon.py --domains pump.co --no-apify
Output to File
python3 scripts/recon.py --domains "dili.ai,pump.co" --output /path/to/report.md
JSON Output
python3 scripts/recon.py --domains pump.co --json
What the Script Does
For each domain:
- DNS Scan — Queries MX, SPF, DKIM (18 common selectors), DMARC, TXT records, and 30+ common subdomains (email, tracking, click, bounce, send, smtp, mail, etc.)
- Website Source Scan — Fetches the homepage HTML and greps for 40+ known tool signatures (script URLs, pixel IDs, tracking domains)
- Apify Technology Profile (optional) — Runs deep 8-tier technology detection for 7,000+ technologies with confidence scores
- Blacklist Check — Queries 6 DNS-based blacklists for the domain
- Outbound Domain Detection — Checks if common variations of the domain exist (get[name].com, try[name].com, [name]reach.com, etc.) and analyzes their DNS for cold outbound patterns
- Report Generation — Produces a structured markdown report with confirmed tools, evidence, email auth assessment, blacklist status, and an overall assessment
Agent Integration
When using this skill as an agent, follow this flow:
- User provides one or more company domains
- Run
recon.pyfor all domains (confirm Apify cost if > 5 domains) - Present the report — group findings by:
- Confirmed tools (with evidence)
- Email authentication (SPF/DKIM/DMARC assessment)
- Deliverability (blacklist status + spam complaints)
- Notable signals (outbound domains, missing DMARC, SPF gaps)
- If batch, include a comparative summary table at the end
Agent Without the Script
The agent can perform all checks manually using built-in tools:
DNS checks — Use Bash tool:
dig +short MX example.com
dig +short TXT example.com
dig +short TXT _dmarc.example.com
dig +short TXT selector._domainkey.example.com
dig +short CNAME subdomain.example.com
Website source scan — Use Bash tool:
curl -sL https://www.example.com | grep -oi 'pattern1\|pattern2\|pattern3' | sort -u
Blacklist checks — Use Bash tool:
dig +short example.com.zen.spamhaus.org A
Apify profiler — Use Bash tool with Python:
# See scripts/recon.py for the full implementation
Spam complaints — Use WebSearch tool:
"example.com" spam OR unsolicited OR "cold email" OR blacklist
DNS Record Cheat Sheet
SPF Includes → Tool Identification
| SPF Include | Tool |
|---|---|
_spf.google.com |
Google Workspace |
spf.protection.outlook.com |
Microsoft 365 |
sendgrid.net |
SendGrid |
amazonses.com |
Amazon SES |
*.hubspotemail.net |
HubSpot |
*.rsgsv.net or servers.mcsv.net |
Mailchimp/Mandrill |
spf.mandrillapp.com |
Mandrill (Mailchimp transactional) |
mail.zendesk.com |
Zendesk |
*.freshdesk.com |
Freshdesk |
spf.mailjet.com |
Mailjet |
spf.brevo.com |
Brevo (Sendinblue) |
_spf.salesforce.com |
Salesforce |
mktomail.com |
Marketo |
postmarkapp.com |
Postmark |
mailgun.org |
Mailgun |
DKIM Selectors → Tool Identification
| Selector Pattern | Tool |
|---|---|
google._domainkey |
Google Workspace |
selector1._domainkey / selector2._domainkey |
Microsoft 365 |
s1._domainkey / s2._domainkey → *.sendgrid.net |
SendGrid |
k1._domainkey → *.mcsv.net or dkim.mcsv.net |
Mailchimp |
k2._domainkey / k3._domainkey → dkim2.mcsv.net / dkim3.mcsv.net |
Mailchimp |
mandrill._domainkey |
Mandrill |
pm._domainkey |
Postmark |
smtp._domainkey |
Generic SMTP |
em._domainkey |
Various (check CNAME target) |
TXT Records → Tool Identification
| TXT Pattern | Tool |
|---|---|
open.sleadtrack.com |
Smartlead (custom tracking domain) |
hubspot-developer-verification=* |
HubSpot |
anthropic-domain-verification-* |
Anthropic (Claude) |
MS=* |
Microsoft 365 |
google-site-verification=* |
Google Search Console |
slack-domain-verification=* |
Slack |
atlassian-domain-verification=* |
Atlassian (Jira/Confluence) |
docusign=* |
DocuSign |
facebook-domain-verification=* |
Facebook/Meta |
_github-pages-challenge-* |
GitHub Pages |
stripe-verification=* |
Stripe |
Website Source Patterns → Tool Identification
| Pattern in HTML | Tool |
|---|---|
assets.apollo.io/micro/website-tracker |
Apollo.io (visitor tracking) |
hs-script or js.hs-scripts.com |
HubSpot |
px.ads.linkedin.com |
LinkedIn Insight Tag |
connect.facebook.net or fbq( |
Facebook Pixel |
snap.licdn.com |
LinkedIn Insight Tag |
cdn.segment.com |
Segment |
cdn.mxpnl.com or mixpanel |
Mixpanel |
cdn.amplitude.com |
Amplitude |
app.posthog.com or posthog |
PostHog |
widget.intercom.io |
Intercom |
js.driftt.com |
Drift |
client.crisp.chat |
Crisp |
static.zdassets.com |
Zendesk |
s3-us-west-2.amazonaws.com + reb2b |
REB2B |
clearbit.com/tag.js or reveal |
Clearbit Reveal |
6sc.co or 6sense |
6sense |
tag.demandbase.com |
Demandbase |
d.adroll.com |
AdRoll |
googletagmanager.com |
Google Tag Manager |
gtag('config', 'G-*') |
Google Analytics 4 |
Cold Outbound Domain Patterns
A separate domain is being used for cold email if it has:
- Google Workspace MX (or similar) but no product/marketing email tools in SPF
- SPF that only includes
_spf.google.com(sending from raw mailboxes) - A 301/302 redirect to the company's primary domain
- No website content of its own
- Domain name follows patterns like:
[brand]reach.com,get[brand].com,try[brand].com,meet[brand].com,[brand]hq.com
DMARC Assessment Guide
| Policy | Meaning | Assessment |
|---|---|---|
p=reject |
Reject unauthenticated email | Strong — best practice |
p=quarantine |
Send to spam if unauthenticated | Good — enforcing |
p=none |
Monitor only, don't enforce | Weak — anyone can spoof the domain |
| No DMARC record | No policy at all | Missing — wide open to spoofing |
Troubleshooting
"No tools detected"
- The company may be very early-stage with minimal tooling
- Some tools (like Apollo used only for prospecting, not sending) leave no DNS trace
- LinkedIn Sales Navigator, Clay enrichment, and similar tools don't leave public signals
- Try the Apify profiler if you only ran free-only mode
"SPF has Google only but they use Smartlead/Instantly"
- This is normal. Smartlead and Instantly typically connect to Google Workspace mailboxes via SMTP and send through Google — so SPF passes via Google's include. The cold email tool itself doesn't need its own SPF entry.
- Look for Smartlead's
open.sleadtrack.comin TXT records or website source as confirmation.
"Apify profiler timed out"
- Some sites take longer to load. The profiler has a 3-minute timeout.
- Retry once. If it fails again, rely on DNS + source code analysis.
"artisan.ai resolves but redirects to Afternic"
- The domain is parked/for sale. Check common alternatives:
.co,.com,.io. - Wildcard DNS (all subdomains resolve to the same IP) is a sign of a parked domain.
Links
- Apify Technology Profiling Engine
- Apify API Token
- MXToolbox — manual verification
- Spamhaus Domain Lookup
| 1 | |
| 2 | name tech-stack-teardown |
| 3 | description > |
| 4 | Reverse-engineer a company's sales and marketing tech stack from public signals. |
| 5 | Detects CRMs, cold email tools, people databases, ad pixels, email delivery services, |
| 6 | and outbound sending domains via DNS records, website source inspection, Apify technology |
| 7 | profiling, blacklist checks, and public spam complaint searches. Works on single companies |
| 8 | or batches. Outputs a structured markdown report per company. |
| 9 | tags [competitive-intel] |
| 10 | |
| 11 | |
| 12 | # Tech Stack Recon |
| 13 | |
| 14 | Reverse-engineer a company's sales, marketing, and outbound infrastructure from public signals. No login, no API access to their tools needed — everything is derived from DNS records, website source code, technology profiling, blacklist databases, and public complaints. |
| 15 | |
| 16 | ## What It Detects |
| 17 | |
| 18 | | Category | Tools Detected | |
| 19 | |----------|---------------| |
| 20 | | **CRM** | HubSpot, Salesforce (via SPF, website pixels, DNS) | |
| 21 | | **Cold Email Tools** | Smartlead, Instantly, Outreach, Salesloft, Lemlist (via SPF, DKIM, TXT records, website source) | |
| 22 | | **People Databases** | Apollo, ZoomInfo, Clearbit, 6sense (via website tracker scripts) | |
| 23 | | **Email Delivery** | SendGrid, Amazon SES, Postmark, Mailgun, Mandrill (via SPF includes, DKIM selectors) | |
| 24 | | **Email Marketing** | Mailchimp, Brevo, ActiveCampaign, Klaviyo (via DKIM selectors) | |
| 25 | | **Ad Retargeting** | LinkedIn Insight Tag, Facebook Pixel, AdRoll, Reddit Ads, Twitter Ads (via Apify profiler + source) | |
| 26 | | **Website Builder** | Webflow, Framer, Next.js, WordPress (via Apify profiler + source) | |
| 27 | | **Chat / Support** | Intercom, Drift, Crisp, Zendesk (via website source) | |
| 28 | | **Analytics** | Google Analytics, Segment, Mixpanel, Amplitude, PostHog, Heap (via website source) | |
| 29 | | **Outbound Domains** | Separate cold sending domains (via SPF-only Google Workspace + redirect to primary) | |
| 30 | |
| 31 | ## How It Works |
| 32 | |
| 33 | The skill runs 5 layers of detection, each revealing different signals: |
| 34 | |
| 35 | ### Layer 1: DNS Records (Free, instant) |
| 36 | |
| 37 | |
| 38 | MX → Primary email provider (Google Workspace, Microsoft 365, etc.) |
| 39 | SPF → Every service authorized to send email on their behalf |
| 40 | DKIM → Cryptographic proof of which tools actually send email |
| 41 | DMARC → Email authentication policy (how strict they are) |
| 42 | TXT → Misc verifications (Smartlead tracking domains, tool verifications) |
| 43 | CNAME → Subdomains pointing to third-party services |
| 44 | |
| 45 | |
| 46 | This is the highest-signal layer. SPF and DKIM don't lie — if SendGrid is in their SPF, they use SendGrid. |
| 47 | |
| 48 | ### Layer 2: Website Source Inspection (Free, instant) |
| 49 | |
| 50 | Fetches the target website and searches HTML for: |
| 51 | Tracking pixels (Apollo, REB2B, HubSpot, Facebook, LinkedIn) |
| 52 | Script tags loading third-party tools |
| 53 | Meta tags and framework signatures |
| 54 | Hidden form handlers and API endpoints |
| 55 | |
| 56 | ### Layer 3: Apify Technology Profiler (Pay-per-use, ~$0.005/domain) |
| 57 | |
| 58 | Runs `justa/technology-profiling-engine` actor for deep detection of 7,000+ technologies using 8-tier inspection with confidence scores. Catches tools that don't appear in source code (loaded dynamically, via GTM, etc.). |
| 59 | |
| 60 | ### Layer 4: Blacklist Checks (Free, instant) |
| 61 | |
| 62 | Queries 6 major DNS-based blacklists: |
| 63 | Spamhaus (zen.spamhaus.org) |
| 64 | Barracuda (b.barracudacentral.org) |
| 65 | SpamCop (bl.spamcop.net) |
| 66 | SORBS (dnsbl.sorbs.net) |
| 67 | SURBL (multi.surbl.org) |
| 68 | URIBL (black.uribl.com) |
| 69 | |
| 70 | ### Layer 5: Public Complaint Search (Free) |
| 71 | |
| 72 | Web searches for spam complaints on Trustpilot, Reddit, SpamCop forums, and general web. Also searches for the company + tool names to find public mentions of their stack. |
| 73 | |
| 74 | ## Cost |
| 75 | |
| 76 | | Component | Cost | |
| 77 | |-----------|------| |
| 78 | | DNS queries | Free | |
| 79 | | Website source fetch | Free | |
| 80 | | Blacklist checks | Free | |
| 81 | | Web searches | Free | |
| 82 | | Apify Technology Profiler | ~$0.005 per domain | |
| 83 | |
| 84 | **Typical costs:** |
| 85 | | Scenario | Domains | Est. Cost | |
| 86 | |----------|---------|-----------| |
| 87 | | Single company | 1 | ~$0.005 | |
| 88 | | Small batch | 5 | ~$0.025 | |
| 89 | | Large batch | 20 | ~$0.10 | |
| 90 | |
| 91 | Skip the Apify profiler with `--no-apify` for free-only analysis (DNS + source + blacklists). |
| 92 | |
| 93 | ## Setup |
| 94 | |
| 95 | ### 1. Required |
| 96 | |
| 97 | |
| 98 | # dig (DNS lookups) — included on macOS/Linux |
| 99 | which dig |
| 100 | |
| 101 | # curl (website source fetch) — included on macOS/Linux |
| 102 | which curl |
| 103 | |
| 104 | # Python 3 with requests + dotenv |
| 105 | pip3 install requests python-dotenv |
| 106 | |
| 107 | |
| 108 | ### 2. Optional (for Apify Technology Profiler) |
| 109 | |
| 110 | |
| 111 | # Get your token at https://console.apify.com/account/integrations |
| 112 | # Add to .env: |
| 113 | APIFY_API_TOKEN=apify_api_YOUR_TOKEN_HERE |
| 114 | |
| 115 | |
| 116 | ## Usage |
| 117 | |
| 118 | ### Single Company |
| 119 | |
| 120 | |
| 121 | python3 scripts/recon.py --domains pump.co |
| 122 | |
| 123 | |
| 124 | ### Batch of Companies |
| 125 | |
| 126 | |
| 127 | python3 scripts/recon.py --domains "dili.ai,pump.co,runautomat.com" |
| 128 | |
| 129 | |
| 130 | ### Free-Only Mode (No Apify) |
| 131 | |
| 132 | |
| 133 | python3 scripts/recon.py --domains pump.co --no-apify |
| 134 | |
| 135 | |
| 136 | ### Output to File |
| 137 | |
| 138 | |
| 139 | python3 scripts/recon.py --domains "dili.ai,pump.co" --output /path/to/report.md |
| 140 | |
| 141 | |
| 142 | ### JSON Output |
| 143 | |
| 144 | |
| 145 | python3 scripts/recon.py --domains pump.co --json |
| 146 | |
| 147 | |
| 148 | ## What the Script Does |
| 149 | |
| 150 | For each domain: |
| 151 | |
| 152 | **DNS Scan** — Queries MX, SPF, DKIM (18 common selectors), DMARC, TXT records, and 30+ common subdomains (email, tracking, click, bounce, send, smtp, mail, etc.) |
| 153 | **Website Source Scan** — Fetches the homepage HTML and greps for 40+ known tool signatures (script URLs, pixel IDs, tracking domains) |
| 154 | **Apify Technology Profile** (optional) — Runs deep 8-tier technology detection for 7,000+ technologies with confidence scores |
| 155 | **Blacklist Check** — Queries 6 DNS-based blacklists for the domain |
| 156 | **Outbound Domain Detection** — Checks if common variations of the domain exist (get[name].com, try[name].com, [name]reach.com, etc.) and analyzes their DNS for cold outbound patterns |
| 157 | **Report Generation** — Produces a structured markdown report with confirmed tools, evidence, email auth assessment, blacklist status, and an overall assessment |
| 158 | |
| 159 | ## Agent Integration |
| 160 | |
| 161 | When using this skill as an agent, follow this flow: |
| 162 | |
| 163 | User provides one or more company domains |
| 164 | Run `recon.py` for all domains (confirm Apify cost if > 5 domains) |
| 165 | Present the report — group findings by: |
| 166 | **Confirmed tools** (with evidence) |
| 167 | **Email authentication** (SPF/DKIM/DMARC assessment) |
| 168 | **Deliverability** (blacklist status + spam complaints) |
| 169 | **Notable signals** (outbound domains, missing DMARC, SPF gaps) |
| 170 | If batch, include a comparative summary table at the end |
| 171 | |
| 172 | ### Agent Without the Script |
| 173 | |
| 174 | The agent can perform all checks manually using built-in tools: |
| 175 | |
| 176 | **DNS checks** — Use `Bash` tool: |
| 177 | |
| 178 | dig +short MX example.com |
| 179 | dig +short TXT example.com |
| 180 | dig +short TXT _dmarc.example.com |
| 181 | dig +short TXT selector._domainkey.example.com |
| 182 | dig +short CNAME subdomain.example.com |
| 183 | |
| 184 | |
| 185 | **Website source scan** — Use `Bash` tool: |
| 186 | |
| 187 | curl -sL https://www.example.com | grep -oi 'pattern1\|pattern2\|pattern3' | sort -u |
| 188 | |
| 189 | |
| 190 | **Blacklist checks** — Use `Bash` tool: |
| 191 | |
| 192 | dig +short example.com.zen.spamhaus.org A |
| 193 | |
| 194 | |
| 195 | **Apify profiler** — Use `Bash` tool with Python: |
| 196 | |
| 197 | # See scripts/recon.py for the full implementation |
| 198 | |
| 199 | |
| 200 | **Spam complaints** — Use `WebSearch` tool: |
| 201 | |
| 202 | "example.com" spam OR unsolicited OR "cold email" OR blacklist |
| 203 | |
| 204 | |
| 205 | ## DNS Record Cheat Sheet |
| 206 | |
| 207 | ### SPF Includes → Tool Identification |
| 208 | |
| 209 | | SPF Include | Tool | |
| 210 | |-------------|------| |
| 211 | | `_spf.google.com` | Google Workspace | |
| 212 | | `spf.protection.outlook.com` | Microsoft 365 | |
| 213 | | `sendgrid.net` | SendGrid | |
| 214 | | `amazonses.com` | Amazon SES | |
| 215 | | `*.hubspotemail.net` | HubSpot | |
| 216 | | `*.rsgsv.net` or `servers.mcsv.net` | Mailchimp/Mandrill | |
| 217 | | `spf.mandrillapp.com` | Mandrill (Mailchimp transactional) | |
| 218 | | `mail.zendesk.com` | Zendesk | |
| 219 | | `*.freshdesk.com` | Freshdesk | |
| 220 | | `spf.mailjet.com` | Mailjet | |
| 221 | | `spf.brevo.com` | Brevo (Sendinblue) | |
| 222 | | `_spf.salesforce.com` | Salesforce | |
| 223 | | `mktomail.com` | Marketo | |
| 224 | | `postmarkapp.com` | Postmark | |
| 225 | | `mailgun.org` | Mailgun | |
| 226 | |
| 227 | ### DKIM Selectors → Tool Identification |
| 228 | |
| 229 | | Selector Pattern | Tool | |
| 230 | |-----------------|------| |
| 231 | | `google._domainkey` | Google Workspace | |
| 232 | | `selector1._domainkey` / `selector2._domainkey` | Microsoft 365 | |
| 233 | | `s1._domainkey` / `s2._domainkey` → `*.sendgrid.net` | SendGrid | |
| 234 | | `k1._domainkey` → `*.mcsv.net` or `dkim.mcsv.net` | Mailchimp | |
| 235 | | `k2._domainkey` / `k3._domainkey` → `dkim2.mcsv.net` / `dkim3.mcsv.net` | Mailchimp | |
| 236 | | `mandrill._domainkey` | Mandrill | |
| 237 | | `pm._domainkey` | Postmark | |
| 238 | | `smtp._domainkey` | Generic SMTP | |
| 239 | | `em._domainkey` | Various (check CNAME target) | |
| 240 | |
| 241 | ### TXT Records → Tool Identification |
| 242 | |
| 243 | | TXT Pattern | Tool | |
| 244 | |-------------|------| |
| 245 | | `open.sleadtrack.com` | **Smartlead** (custom tracking domain) | |
| 246 | | `hubspot-developer-verification=*` | HubSpot | |
| 247 | | `anthropic-domain-verification-*` | Anthropic (Claude) | |
| 248 | | `MS=*` | Microsoft 365 | |
| 249 | | `google-site-verification=*` | Google Search Console | |
| 250 | | `slack-domain-verification=*` | Slack | |
| 251 | | `atlassian-domain-verification=*` | Atlassian (Jira/Confluence) | |
| 252 | | `docusign=*` | DocuSign | |
| 253 | | `facebook-domain-verification=*` | Facebook/Meta | |
| 254 | | `_github-pages-challenge-*` | GitHub Pages | |
| 255 | | `stripe-verification=*` | Stripe | |
| 256 | |
| 257 | ### Website Source Patterns → Tool Identification |
| 258 | |
| 259 | | Pattern in HTML | Tool | |
| 260 | |----------------|------| |
| 261 | | `assets.apollo.io/micro/website-tracker` | Apollo.io (visitor tracking) | |
| 262 | | `hs-script` or `js.hs-scripts.com` | HubSpot | |
| 263 | | `px.ads.linkedin.com` | LinkedIn Insight Tag | |
| 264 | | `connect.facebook.net` or `fbq(` | Facebook Pixel | |
| 265 | | `snap.licdn.com` | LinkedIn Insight Tag | |
| 266 | | `cdn.segment.com` | Segment | |
| 267 | | `cdn.mxpnl.com` or `mixpanel` | Mixpanel | |
| 268 | | `cdn.amplitude.com` | Amplitude | |
| 269 | | `app.posthog.com` or `posthog` | PostHog | |
| 270 | | `widget.intercom.io` | Intercom | |
| 271 | | `js.driftt.com` | Drift | |
| 272 | | `client.crisp.chat` | Crisp | |
| 273 | | `static.zdassets.com` | Zendesk | |
| 274 | | `s3-us-west-2.amazonaws.com` + `reb2b` | REB2B | |
| 275 | | `clearbit.com/tag.js` or `reveal` | Clearbit Reveal | |
| 276 | | `6sc.co` or `6sense` | 6sense | |
| 277 | | `tag.demandbase.com` | Demandbase | |
| 278 | | `d.adroll.com` | AdRoll | |
| 279 | | `googletagmanager.com` | Google Tag Manager | |
| 280 | | `gtag('config', 'G-*')` | Google Analytics 4 | |
| 281 | |
| 282 | ### Cold Outbound Domain Patterns |
| 283 | |
| 284 | A separate domain is being used for cold email if it has: |
| 285 | Google Workspace MX (or similar) but **no product/marketing email tools** in SPF |
| 286 | SPF that only includes `_spf.google.com` (sending from raw mailboxes) |
| 287 | A 301/302 redirect to the company's primary domain |
| 288 | No website content of its own |
| 289 | Domain name follows patterns like: `[brand]reach.com`, `get[brand].com`, `try[brand].com`, `meet[brand].com`, `[brand]hq.com` |
| 290 | |
| 291 | ## DMARC Assessment Guide |
| 292 | |
| 293 | | Policy | Meaning | Assessment | |
| 294 | |--------|---------|------------| |
| 295 | | `p=reject` | Reject unauthenticated email | Strong — best practice | |
| 296 | | `p=quarantine` | Send to spam if unauthenticated | Good — enforcing | |
| 297 | | `p=none` | Monitor only, don't enforce | Weak — anyone can spoof the domain | |
| 298 | | No DMARC record | No policy at all | **Missing** — wide open to spoofing | |
| 299 | |
| 300 | ## Troubleshooting |
| 301 | |
| 302 | ### "No tools detected" |
| 303 | The company may be very early-stage with minimal tooling |
| 304 | Some tools (like Apollo used only for prospecting, not sending) leave no DNS trace |
| 305 | LinkedIn Sales Navigator, Clay enrichment, and similar tools don't leave public signals |
| 306 | Try the Apify profiler if you only ran free-only mode |
| 307 | |
| 308 | ### "SPF has Google only but they use Smartlead/Instantly" |
| 309 | This is normal. Smartlead and Instantly typically connect to Google Workspace mailboxes via SMTP and send **through** Google — so SPF passes via Google's include. The cold email tool itself doesn't need its own SPF entry. |
| 310 | Look for Smartlead's `open.sleadtrack.com` in TXT records or website source as confirmation. |
| 311 | |
| 312 | ### "Apify profiler timed out" |
| 313 | Some sites take longer to load. The profiler has a 3-minute timeout. |
| 314 | Retry once. If it fails again, rely on DNS + source code analysis. |
| 315 | |
| 316 | ### "artisan.ai resolves but redirects to Afternic" |
| 317 | The domain is parked/for sale. Check common alternatives: `.co`, `.com`, `.io`. |
| 318 | Wildcard DNS (all subdomains resolve to the same IP) is a sign of a parked domain. |
| 319 | |
| 320 | ## Links |
| 321 | |
| 322 | [Apify Technology Profiling Engine] |
| 323 | [Apify API Token] |
| 324 | [MXToolbox] — manual verification |
| 325 | [Spamhaus Domain Lookup] |
| 326 |