Third-Party Detector Skill
Purpose
Identify third-party services integrated into the target's technology stack including payments, analytics, authentication, CRM, support, and other SaaS tools.
Input
Raw signals from Phase 2:
javascript_signals - Third-party script URLs, analytics globals
html_signals - Widget embeds, script tags
dns_signals - Service verification TXT records
http_signals - CSP allowed domains
job_signals - Tool mentions
Service Categories
Payment Processing
| Service |
Detection Signals |
Weight |
| Stripe |
js.stripe.com, Stripe.js, api.stripe.com in CSP |
40 |
| PayPal |
paypal.com scripts, PayPal buttons |
35 |
| Square |
squareup.com, Square SDK |
35 |
| Braintree |
braintreegateway.com |
35 |
| Adyen |
adyen.com scripts |
35 |
| Klarna |
klarna.com scripts |
30 |
| Affirm |
affirm.com scripts |
30 |
| Plaid |
plaid.com scripts (banking) |
35 |
Analytics & Tracking
| Service |
Detection Signals |
Weight |
| Google Analytics |
google-analytics.com, gtag, ga() |
40 |
| Google Tag Manager |
googletagmanager.com, dataLayer |
40 |
| Segment |
cdn.segment.com, analytics.js |
40 |
| Mixpanel |
cdn.mxpnl.com, mixpanel global |
40 |
| Amplitude |
cdn.amplitude.com |
40 |
| Heap |
heap-analytics.com |
35 |
| Hotjar |
static.hotjar.com, hj global |
35 |
| FullStory |
fullstory.com, FS global |
35 |
| Pendo |
pendo.io scripts |
35 |
| Posthog |
posthog.com, ph global |
35 |
Customer Support
| Service |
Detection Signals |
Weight |
| Intercom |
intercom.io, Intercom widget |
40 |
| Zendesk |
zendesk.com, zd-chat |
40 |
| Freshdesk |
freshdesk.com scripts |
35 |
| Drift |
drift.com, Drift widget |
35 |
| HubSpot Chat |
hubspot.com, hs-scripts |
35 |
| Crisp |
crisp.chat |
30 |
| Tawk.to |
tawk.to scripts |
30 |
| LiveChat |
livechat.com |
30 |
Authentication & Identity
| Service |
Detection Signals |
Weight |
| Auth0 |
auth0.com, Auth0 SDK |
40 |
| Okta |
okta.com scripts |
40 |
| Firebase Auth |
firebase.google.com/auth |
40 |
| Clerk |
clerk.dev scripts |
35 |
| AWS Cognito |
cognito-idp patterns |
35 |
| Azure AD |
login.microsoftonline.com |
35 |
CRM & Marketing
| Service |
Detection Signals |
Weight |
| Salesforce |
salesforce.com patterns |
40 |
| HubSpot |
hubspot.com, hs-scripts |
40 |
| Marketo |
marketo.com, munchkin |
35 |
| Mailchimp |
mailchimp.com scripts |
35 |
| SendGrid |
sendgrid.net TXT records |
35 |
| Intercom |
intercom.io (CRM features) |
35 |
| Pipedrive |
pipedrive.com |
30 |
| Pardot |
pardot.com |
35 |
Error & Performance Monitoring
| Service |
Detection Signals |
Weight |
| Sentry |
sentry.io, Sentry SDK |
40 |
| Datadog RUM |
datadoghq.com RUM |
40 |
| New Relic |
newrelic.com, NREUM |
35 |
| Bugsnag |
bugsnag.com |
35 |
| LogRocket |
logrocket.com |
35 |
| Rollbar |
rollbar.com |
35 |
A/B Testing & Experimentation
| Service |
Detection Signals |
Weight |
| Optimizely |
optimizely.com |
40 |
| LaunchDarkly |
launchdarkly.com |
40 |
| VWO |
vwo.com scripts |
35 |
| Google Optimize |
optimize.google.com |
35 |
| Split.io |
split.io |
35 |
| Statsig |
statsig.com |
35 |
CDN & Media
| Service |
Detection Signals |
Weight |
| Cloudinary |
cloudinary.com |
35 |
| imgix |
imgix.net |
35 |
| Vimeo |
vimeo.com, player.vimeo.com |
30 |
| YouTube |
youtube.com embeds |
30 |
| Wistia |
wistia.com |
30 |
Social & Communication
| Service |
Detection Signals |
Weight |
| Slack |
slack.com integrations |
30 |
| Discord |
discord.com widgets |
30 |
| Twitter/X |
twitter.com widgets, platform.twitter.com |
30 |
| Facebook |
facebook.com SDK, connect.facebook.net |
35 |
| LinkedIn |
linkedin.com tracking |
30 |
Detection Logic
def detect_third_party_services(signals):
results = []
# JavaScript/Script Tag Detection
for script_url in signals.javascript_signals.script_urls:
for service in THIRD_PARTY_SERVICES:
for pattern in service.script_patterns:
if pattern in script_url:
add_service(results, service.name, service.category, {
"type": "script_url",
"value": script_url,
"weight": service.weight
})
# JavaScript Global Detection
for global_var in signals.javascript_signals.globals:
for service in THIRD_PARTY_SERVICES:
if service.global_var and service.global_var in global_var:
add_service(results, service.name, service.category, {
"type": "js_global",
"value": global_var,
"weight": service.weight
})
# CSP Domain Detection
if signals.http_signals.csp:
csp_domains = extract_domains(signals.http_signals.csp)
for domain in csp_domains:
for service in THIRD_PARTY_SERVICES:
if any(pattern in domain for pattern in service.domain_patterns):
add_service(results, service.name, service.category, {
"type": "csp_domain",
"value": domain,
"weight": service.weight - 10 # Slightly lower weight
})
# DNS TXT Record Detection
for txt in signals.dns_signals.txt_records:
for service in THIRD_PARTY_SERVICES:
if service.txt_pattern and service.txt_pattern in txt:
add_service(results, service.name, service.category, {
"type": "dns_txt",
"value": txt,
"weight": service.weight
})
# Job Posting Detection
if signals.job_signals:
for tech_mention in signals.job_signals.tech_mentions:
for service in THIRD_PARTY_SERVICES:
if service.name.lower() in tech_mention.technology.lower():
add_service(results, service.name, service.category, {
"type": "job_posting",
"value": f"Mentioned in job postings",
"weight": 20 # Lower weight for job signals
})
return results
Output
{
"skill": "third_party_detector",
"results": {
"technologies": [
{
"name": "Stripe",
"category": "Payment Processing",
"signals": [
{
"type": "script_url",
"value": "https://js.stripe.com/v3/",
"weight": 40
},
{
"type": "csp_domain",
"value": "api.stripe.com in CSP",
"weight": 30
}
],
"total_weight": 70,
"integration_type": "Client-side SDK"
},
{
"name": "Google Analytics 4",
"category": "Analytics",
"signals": [
{
"type": "script_url",
"value": "https://www.googletagmanager.com/gtag/js",
"weight": 40
},
{
"type": "js_global",
"value": "gtag() function detected",
"weight": 35
}
],
"total_weight": 75,
"tracking_id": "G-XXXXXXXXXX"
},
{
"name": "Intercom",
"category": "Customer Support",
"signals": [
{
"type": "script_url",
"value": "https://widget.intercom.io/widget/",
"weight": 40
}
],
"total_weight": 40,
"integration_type": "Chat Widget"
},
{
"name": "Sentry",
"category": "Error Monitoring",
"signals": [
{
"type": "script_url",
"value": "https://browser.sentry-cdn.com/",
"weight": 40
}
],
"total_weight": 40,
"integration_type": "Client-side SDK"
},
{
"name": "Auth0",
"category": "Authentication",
"signals": [
{
"type": "csp_domain",
"value": "*.auth0.com in CSP",
"weight": 35
},
{
"type": "job_posting",
"value": "Auth0 mentioned in job requirements",
"weight": 20
}
],
"total_weight": 55
}
],
"services_by_category": {
"Payment Processing": ["Stripe"],
"Analytics": ["Google Analytics 4", "Google Tag Manager"],
"Customer Support": ["Intercom"],
"Error Monitoring": ["Sentry"],
"Authentication": ["Auth0"]
},
"integration_summary": {
"total_services": 5,
"categories_covered": 5,
"client_side_integrations": 4,
"server_side_likely": ["Auth0", "Stripe"]
}
}
}
Confidence Notes
Third-party detection confidence varies by signal type:
| Signal Type |
Confidence |
Notes |
| Script URL |
High (90%) |
Direct integration |
| JS Global |
High (85%) |
Library loaded |
| CSP Domain |
Medium (75%) |
May be unused |
| DNS TXT |
High (90%) |
Official verification |
| Job Posting |
Low (60%) |
May be planned/legacy |
Error Handling
- Missing scripts: May indicate server-side only integration
- Multiple analytics: Common - report all
- Deprecated services: Note if detected
1---2name: third-party-detector3description: Identifies third-party services including payments, analytics, auth, CRM, and support4---56# Third-Party Detector Skill78## Purpose910Identify third-party services integrated into the target's technology stack including payments, analytics, authentication, CRM, support, and other SaaS tools.1112## Input1314Raw signals from Phase 2:15- `javascript_signals` - Third-party script URLs, analytics globals16- `html_signals` - Widget embeds, script tags17- `dns_signals` - Service verification TXT records18- `http_signals` - CSP allowed domains19- `job_signals` - Tool mentions2021## Service Categories2223### Payment Processing2425| Service | Detection Signals | Weight |26|---------|-------------------|--------|27| Stripe | js.stripe.com, Stripe.js, api.stripe.com in CSP | 40 |28| PayPal | paypal.com scripts, PayPal buttons | 35 |29| Square | squareup.com, Square SDK | 35 |30| Braintree | braintreegateway.com | 35 |31| Adyen | adyen.com scripts | 35 |32| Klarna | klarna.com scripts | 30 |33| Affirm | affirm.com scripts | 30 |34| Plaid | plaid.com scripts (banking) | 35 |3536### Analytics & Tracking3738| Service | Detection Signals | Weight |39|---------|-------------------|--------|40| Google Analytics | google-analytics.com, gtag, ga() | 40 |41| Google Tag Manager | googletagmanager.com, dataLayer | 40 |42| Segment | cdn.segment.com, analytics.js | 40 |43| Mixpanel | cdn.mxpnl.com, mixpanel global | 40 |44| Amplitude | cdn.amplitude.com | 40 |45| Heap | heap-analytics.com | 35 |46| Hotjar | static.hotjar.com, hj global | 35 |47| FullStory | fullstory.com, FS global | 35 |48| Pendo | pendo.io scripts | 35 |49| Posthog | posthog.com, ph global | 35 |5051### Customer Support5253| Service | Detection Signals | Weight |54|---------|-------------------|--------|55| Intercom | intercom.io, Intercom widget | 40 |56| Zendesk | zendesk.com, zd-chat | 40 |57| Freshdesk | freshdesk.com scripts | 35 |58| Drift | drift.com, Drift widget | 35 |59| HubSpot Chat | hubspot.com, hs-scripts | 35 |60| Crisp | crisp.chat | 30 |61| Tawk.to | tawk.to scripts | 30 |62| LiveChat | livechat.com | 30 |6364### Authentication & Identity6566| Service | Detection Signals | Weight |67|---------|-------------------|--------|68| Auth0 | auth0.com, Auth0 SDK | 40 |69| Okta | okta.com scripts | 40 |70| Firebase Auth | firebase.google.com/auth | 40 |71| Clerk | clerk.dev scripts | 35 |72| AWS Cognito | cognito-idp patterns | 35 |73| Azure AD | login.microsoftonline.com | 35 |7475### CRM & Marketing7677| Service | Detection Signals | Weight |78|---------|-------------------|--------|79| Salesforce | salesforce.com patterns | 40 |80| HubSpot | hubspot.com, hs-scripts | 40 |81| Marketo | marketo.com, munchkin | 35 |82| Mailchimp | mailchimp.com scripts | 35 |83| SendGrid | sendgrid.net TXT records | 35 |84| Intercom | intercom.io (CRM features) | 35 |85| Pipedrive | pipedrive.com | 30 |86| Pardot | pardot.com | 35 |8788### Error & Performance Monitoring8990| Service | Detection Signals | Weight |91|---------|-------------------|--------|92| Sentry | sentry.io, Sentry SDK | 40 |93| Datadog RUM | datadoghq.com RUM | 40 |94| New Relic | newrelic.com, NREUM | 35 |95| Bugsnag | bugsnag.com | 35 |96| LogRocket | logrocket.com | 35 |97| Rollbar | rollbar.com | 35 |9899### A/B Testing & Experimentation100101| Service | Detection Signals | Weight |102|---------|-------------------|--------|103| Optimizely | optimizely.com | 40 |104| LaunchDarkly | launchdarkly.com | 40 |105| VWO | vwo.com scripts | 35 |106| Google Optimize | optimize.google.com | 35 |107| Split.io | split.io | 35 |108| Statsig | statsig.com | 35 |109110### CDN & Media111112| Service | Detection Signals | Weight |113|---------|-------------------|--------|114| Cloudinary | cloudinary.com | 35 |115| imgix | imgix.net | 35 |116| Vimeo | vimeo.com, player.vimeo.com | 30 |117| YouTube | youtube.com embeds | 30 |118| Wistia | wistia.com | 30 |119120### Social & Communication121122| Service | Detection Signals | Weight |123|---------|-------------------|--------|124| Slack | slack.com integrations | 30 |125| Discord | discord.com widgets | 30 |126| Twitter/X | twitter.com widgets, platform.twitter.com | 30 |127| Facebook | facebook.com SDK, connect.facebook.net | 35 |128| LinkedIn | linkedin.com tracking | 30 |129130## Detection Logic131132```python133def detect_third_party_services(signals):134 results = []135136 # JavaScript/Script Tag Detection137 for script_url in signals.javascript_signals.script_urls:138 for service in THIRD_PARTY_SERVICES:139 for pattern in service.script_patterns:140 if pattern in script_url:141 add_service(results, service.name, service.category, {142 "type": "script_url",143 "value": script_url,144 "weight": service.weight145 })146147 # JavaScript Global Detection148 for global_var in signals.javascript_signals.globals:149 for service in THIRD_PARTY_SERVICES:150 if service.global_var and service.global_var in global_var:151 add_service(results, service.name, service.category, {152 "type": "js_global",153 "value": global_var,154 "weight": service.weight155 })156157 # CSP Domain Detection158 if signals.http_signals.csp:159 csp_domains = extract_domains(signals.http_signals.csp)160 for domain in csp_domains:161 for service in THIRD_PARTY_SERVICES:162 if any(pattern in domain for pattern in service.domain_patterns):163 add_service(results, service.name, service.category, {164 "type": "csp_domain",165 "value": domain,166 "weight": service.weight - 10 # Slightly lower weight167 })168169 # DNS TXT Record Detection170 for txt in signals.dns_signals.txt_records:171 for service in THIRD_PARTY_SERVICES:172 if service.txt_pattern and service.txt_pattern in txt:173 add_service(results, service.name, service.category, {174 "type": "dns_txt",175 "value": txt,176 "weight": service.weight177 })178179 # Job Posting Detection180 if signals.job_signals:181 for tech_mention in signals.job_signals.tech_mentions:182 for service in THIRD_PARTY_SERVICES:183 if service.name.lower() in tech_mention.technology.lower():184 add_service(results, service.name, service.category, {185 "type": "job_posting",186 "value": f"Mentioned in job postings",187 "weight": 20 # Lower weight for job signals188 })189190 return results191```192193## Output194195```json196{197 "skill": "third_party_detector",198 "results": {199 "technologies": [200 {201 "name": "Stripe",202 "category": "Payment Processing",203 "signals": [204 {205 "type": "script_url",206 "value": "https://js.stripe.com/v3/",207 "weight": 40208 },209 {210 "type": "csp_domain",211 "value": "api.stripe.com in CSP",212 "weight": 30213 }214 ],215 "total_weight": 70,216 "integration_type": "Client-side SDK"217 },218 {219 "name": "Google Analytics 4",220 "category": "Analytics",221 "signals": [222 {223 "type": "script_url",224 "value": "https://www.googletagmanager.com/gtag/js",225 "weight": 40226 },227 {228 "type": "js_global",229 "value": "gtag() function detected",230 "weight": 35231 }232 ],233 "total_weight": 75,234 "tracking_id": "G-XXXXXXXXXX"235 },236 {237 "name": "Intercom",238 "category": "Customer Support",239 "signals": [240 {241 "type": "script_url",242 "value": "https://widget.intercom.io/widget/",243 "weight": 40244 }245 ],246 "total_weight": 40,247 "integration_type": "Chat Widget"248 },249 {250 "name": "Sentry",251 "category": "Error Monitoring",252 "signals": [253 {254 "type": "script_url",255 "value": "https://browser.sentry-cdn.com/",256 "weight": 40257 }258 ],259 "total_weight": 40,260 "integration_type": "Client-side SDK"261 },262 {263 "name": "Auth0",264 "category": "Authentication",265 "signals": [266 {267 "type": "csp_domain",268 "value": "*.auth0.com in CSP",269 "weight": 35270 },271 {272 "type": "job_posting",273 "value": "Auth0 mentioned in job requirements",274 "weight": 20275 }276 ],277 "total_weight": 55278 }279 ],280 "services_by_category": {281 "Payment Processing": ["Stripe"],282 "Analytics": ["Google Analytics 4", "Google Tag Manager"],283 "Customer Support": ["Intercom"],284 "Error Monitoring": ["Sentry"],285 "Authentication": ["Auth0"]286 },287 "integration_summary": {288 "total_services": 5,289 "categories_covered": 5,290 "client_side_integrations": 4,291 "server_side_likely": ["Auth0", "Stripe"]292 }293 }294}295```296297## Confidence Notes298299Third-party detection confidence varies by signal type:300301| Signal Type | Confidence | Notes |302|-------------|------------|-------|303| Script URL | High (90%) | Direct integration |304| JS Global | High (85%) | Library loaded |305| CSP Domain | Medium (75%) | May be unused |306| DNS TXT | High (90%) | Official verification |307| Job Posting | Low (60%) | May be planned/legacy |308309## Error Handling310311- Missing scripts: May indicate server-side only integration312- Multiple analytics: Common - report all313- Deprecated services: Note if detected