# B2B Tech-Stack, Role Contact & llms.txt AI Readiness Enricher (`ausbizstack/b2b-tech-stack-contact-abn-enricher`) Actor

Global B2B lead, DNS/DMARC & AI GEO enricher for US, UK, EU, CA & AU agencies, Clay/n8n & MCP agents. Detects 130+ SaaS/POS/CRM stacks + SaaS spend, role contacts (0 personal emails), auto-generates /llms.txt & JSON-LD, and runs AU ABN & GST KYB.

- **URL**: https://apify.com/ausbizstack/b2b-tech-stack-contact-abn-enricher.md
- **Developed by:** [AusBizStack Intelligence](https://apify.com/ausbizstack) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $10.00 / 1,000 enriched b2b company records

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## B2B Website Tech-Stack, Role Contact & `llms.txt` AI Readiness Enricher (+ AU ABN KYB) — v2.0 Hall-of-Fame Edition

Turn any list of **US, UK, EU, Canadian, or Australian B2B domains and company websites** into deeply enriched, outreach-ready B2B intelligence records AND instant AI Search (`/llms.txt` + `JSON-LD`) agency deliverables in seconds—**with zero browser overhead, zero proxy configuration required, and strict Privacy-by-Design compliance (GDPR, CCPA, UK Data Protection Act, CAN-SPAM, Australian Privacy Act 1988 & Spam Act 2003).**

#### What Makes v2.0 the #1 B2B & AI GEO Enricher on Apify Store:

1. **130+ Global & Vertical B2B Tech-Stack Signatures + Monthly SaaS Spend Estimator (`estimatedMonthlySaaSSpendUsd`):** Detects CRM, RevOps, Live Chat/AI Voice, POS, Hospitality Reservations, Field Service, Property/Strata, Healthcare, Ecommerce, Payroll & Analytics—and estimates the target's monthly software spend in USD so you can filter straight to high-budget buyers.
2. **Non-Blocking DNS, Email Provider & Cybersecurity Posture Audit (`emailProvider`, `spfStatus`, `dmarcPolicy`, `securityHeadersScore`):** Queries live `MX`, `SPF`, and `_dmarc` records via DNS-over-HTTPS (`cloudflare-dns.com`) to identify `Google Workspace`, `Microsoft 365`, `Proofpoint`, or `Mimecast`, and flags missing DMARC (`none`/`missing`) or weak HTTP security headers.
3. **12-Crawler AI Search (GEO) Audit + Automatic `/llms.txt` & `JSON-LD` Fulfillment Generator (`generatedLlmsTxt` & `generatedJsonLd`):** Doesn't just tell you a prospect is missing `/llms.txt`—it **automatically synthesizes a ready-to-deploy `/llms.txt` Markdown index and `Organization` JSON-LD script** for every enriched domain.
4. **4 Built-In Agency Pitch Playbooks (`agencyPlaybooks`):** Ready-to-send 1-line outreach hooks for **AI SEO/GEO Agencies**, **RevOps/Automation Agencies**, **Paid Media/Ad Agencies**, and **IT/Cybersecurity MSPs**.
5. **Strictly Compliant Role-Based Business Contacts (`0` Personal Emails) + US/CA/UK/AU/INTL Phones + Built-In Official Australian ABN & GST KYB (`abr.business.gov.au`).**

***

### Why Global B2B Agencies, Clay/n8n Builders & MCP AI Agents Use This Actor

- **Built for Clay, n8n, Make, Zapier & Apify MCP (`mcp.apify.com`):** Accepts bare domains (`stripe.com`), full URLs (`https://dishoom.com`), or Australian ABNs/business names and returns flat, deterministic JSON with `countryDetected` (`US`, `UK`, `CA`, `EU`, `AU`, `Global`), `detectedTechStack`, `bookingSystem`, `roleEmails`, `phones`, `phoneRegions`, `geoReadinessScore`, `leadOpportunityScore`, and ready-to-send `salesAngles`.
- **Ultra-Fast HTTP Architecture:** Uses asynchronous HTTP/2 connection pooling instead of heavy headless browsers—enriching  at a fraction of standard compute cost.
- **Actionable Pitch Angles Out of the Box:** Automatically generates tailored `salesAngles` based on missing ad pixels (`Meta Pixel`, `Google Tag Manager`, `TikTok Pixel`, `LinkedIn Insight Tag`), active booking/POS/field-service software, missing `/llms.txt`, or blocked AI search crawlers.

***

### 1. 80+ Global & Regional Tech-Stack Signatures Detected

Automatically detects high-intent commercial software embedded in HTML, scripts, iframes, links, and HTTP headers across **US, UK, EU, Canadian, and Australian** businesses:

| Category | Detected Technologies & Platforms (81 Total) |
| :--- | :--- |
| **Global CRM & Marketing Automation** | `HubSpot`, `Salesforce`, `Klaviyo`, `Marketo`, `ActiveCampaign`, `Mailchimp`, `Intercom`, `Drift`, `Zendesk`, `Pipedrive`, `Zoho`, `Crisp Chat` |
| **Analytics, Product & Ad Pixels** | `Segment`, `PostHog`, `Mixpanel`, `Google Analytics 4`, `Google Tag Manager`, `Meta Pixel`, `TikTok Pixel`, `LinkedIn Insight Tag`, `Hotjar` |
| **Hospitality, Dining, Booking & POS** | `SevenRooms`, `OpenTable`, `Resy`, `Tock (ExploreTock)`, `Toast POS`, `Lightspeed`, `Square`, `Me&u`, `Mr Yum`, `Bopple`, `OrderUp`, `NowBookIt`, `Obee`, `TheFork`, `Quandoo`, `TableCheck`, `Roller`, `Rezdy`, `FareHarbor`, `SiteMinder`, `Cloudbeds`, `Little Hotelier`, `Humanitix`, `Eventbrite` |
| **Trades & Field Service (US/UK/CA/AU)** | `ServiceTitan`, `Housecall Pro`, `Jobber`, `ServiceM8`, `Tradify`, `Simpro`, `Fergus`, `AroFlo` |
| **Healthcare, Wellness & Scheduling** | `Cliniko`, `Halaxy`, `HotDoc`, `HealthEngine`, `Mindbody`, `Fresha`, `Timely`, `Calendly`, `Acuity Scheduling` |
| **Accounting, Payroll & Workforce** | `QuickBooks`, `Xero`, `Gusto`, `MYOB`, `Deputy`, `Employment Hero`, `Tanda` |
| **Ecommerce, CMS & Agentic Commerce** | `Shopify`, `WooCommerce`, `Stripe`, `UCP / WebMCP Commerce (/.well-known/ucp)`, `WineDirect / Commerce7`, `WithWine`, `Afterpay / Clearpay`, `Zip Pay`, `WordPress`, `Squarespace`, `Webflow`, `Wix` |

***

### 2. Multi-Page Role-Based Contact & Global Phone Extraction (`/` + `/contact` + `/about` + `/book`)

- **Role-Based Business Emails Only:** Crawls the homepage and up to 5 internal `/contact`, `/about`, `/book`, or `/support` subpages to extract `mailto:` links, Schema.org `email` properties, and visible contact addresses—strictly filtering for general company mailboxes (`info@`, `sales@`, `support@`, `bookings@`, `admin@`, `reception@`, `enquiries@`, `inquiries@`, `accounts@`, `billing@`, `office@`, `hello@`, `contact@`, `events@`, `reservations@`, `orders@`, `wholesale@`, ` strata@`, `property@`, `facilities@`, `dispatch@`, `quotes@`).
- **Global & Regional Phone Extraction (`phones` + `phoneRegions`):**
  - **US & Canada (`US/CA`):** `+1 (xxx) xxx-xxxx`, `(xxx) xxx-xxxx`, `xxx-xxx-xxxx`, `1-800-xxx-xxxx` (with NANP area-code/exchange validation).
  - **United Kingdom (`UK`):** `+44 20 xxxx xxxx`, `020 xxxx xxxx`, `01xxx xxxxxx`, `07xxx xxxxxx`, `0800 xxx xxxx`, `03xx xxx xxxx`.
  - **Australia (`AU`):** `+61 2/3/4/7/8 xxxx xxxx`, `02/03/04/07/08 xxxx xxxx`, `1300 xxx xxx`, `1800 xxx xxx` (with mathematical ATO modulus-89 filtering so 11-digit ABNs are never mistaken for phone numbers).
  - **International (`INTL`):** Standard E.164 international phone numbers (`+<country_code> ...`).
- **Automatic Country Routing (`countryDetected`):** Classifies each record as `US`, `UK`, `CA`, `EU`, `AU`, or `Global` using TLD, phone region, Schema.org postal address, and currency/locale headers.

***

### 3. 2026 AI Search & GEO Readiness Audit (`/llms.txt` + 10 AI Crawlers)

- **Agentic Markdown Discovery (`/llms.txt` & `/llms-full.txt`):** Verifies whether the domain publishes a structured Markdown index for LLMs and AI shopping/research agents, counting H1–H3 sections and curated links.
- **AI Crawler Access Audit (`/robots.txt`):** Parses `robots.txt` rules across **10 major AI crawlers** (`GPTBot`, `OAI-SearchBot`, `ChatGPT-User`, `ClaudeBot`, `Claude-SearchBot`, `PerplexityBot`, `Google-Extended`, `Applebot-Extended`, `Bytespider`, `CCBot`) to identify businesses accidentally blocking ChatGPT Search, Claude, or Perplexity citations.
- **JSON-LD & Sitemap Inspection:** Extracts `application/ld+json` Organization / LocalBusiness / Restaurant / MedicalBusiness entities and computes a **0–100 `geoReadinessScore`**.

***

### 4. Privacy-by-Design Compliance (GDPR, CCPA, UK DPA, CAN-SPAM & AU Privacy Act)

Unlike legacy scrapers that harvest personal employee emails and expose agencies to regulatory fines, this Actor enforces **strict Privacy-by-Design filtering at extraction time**:

- **Zero Personal Emails (`0` PII Harvesting):** Any `firstname.lastname@` or individual employee email address is discarded in memory and never written to the dataset.
- **100% Corporate Role Mailboxes:** Only departmental and role-based corporate contact addresses (`info@`, `sales@`, `support@`, `bookings@`, `admin@`, `reception@`, `enquiries@`, `accounts@`, `office@`, `hello@`, `contact@`, etc.) are returned in `emails` and `roleEmails`.
- **Safe for Automated Workflows:** Built for compliant B2B outreach, KYB verification, and agency audits across the **US (CAN-SPAM / CCPA), UK (UK GDPR / PECR), EU (GDPR), Canada (CASL), and Australia (Privacy Act 1988 & Spam Act 2003)**.

***

### 5. Built-In Bonus: Data from the Australian Business Register (ABR) (`abr.business.gov.au`) KYB Verification

Whenever the Actor encounters an Australian website (`.au` domain, on-page 11-digit ABN, or Australian company cues)—or when you pass an **11-digit ABN** or **Australian business name** directly in `targets`:

- **Mathematical ABN Checksum Validation:** Validates 11-digit numbers on the page using the official **Australian Taxation Office (ATO) modulo-89 algorithm**.
- **Live `abr.business.gov.au` KYB Lookup:** Automatically retrieves the authoritative **Legal Entity Name, ABN, ACN, Active Status & Effective Date, Entity Type (e.g., Australian Private Company, Fixed Unit Trust), GST Registration Status & Effective Date, State/Postcode, and Registered Trading Names**.
- **Optional `abrGuid` Official API Support:** Works out of the box with zero API keys via public ABR lookup, or queries the official **ABR Web Services JSON/XML API** first when an optional `abrGuid` is provided.

***

### Input Example (Global US / UK / AU Mix)

```json
{
    "targets": [
        "https://stripe.com",
        "https://dishoom.com",
        "https://www.canva.com",
        "80 158 929 938"
    ],
    "crawlContactPages": true,
    "maxContactPages": 2,
    "checkAiReadiness": true,
    "enrichAbn": true,
    "abrGuid": "",
    "abnStateFilter": "ALL",
    "concurrency": 5,
    "requestTimeoutSecs": 12
}
```

***

### Output Example

```json
[
  {
    "inputTarget": "https://dishoom.com",
    "targetType": "website",
    "countryDetected": "UK",
    "status": "ok",
    "companyName": "Dishoom",
    "websiteTitle": "Dishoom | Bombay Comfort Food in London, Edinburgh, Manchester & Birmingham",
    "domain": "dishoom.com",
    "websiteUrl": "https://www.dishoom.com/",
    "pagesCrawled": 3,
    "emails": [
      "hello@dishoom.com",
      "press@dishoom.com",
      "reservations@dishoom.com"
    ],
    "roleEmails": [
      "hello@dishoom.com",
      "press@dishoom.com",
      "reservations@dishoom.com"
    ],
    "phones": [
      "+44 20 7420 9320"
    ],
    "phoneRegions": [
      "UK"
    ],
    "socialLinks": {
      "instagram": "https://www.instagram.com/dishoom",
      "facebook": "https://www.facebook.com/dishoomlondon"
    },
    "detectedTechStack": [
      "SevenRooms",
      "Shopify",
      "Klaviyo",
      "Google Tag Manager",
      "Google Analytics 4",
      "Meta Pixel"
    ],
    "bookingSystem": "SevenRooms",
    "abn": null,
    "gstRegistered": null,
    "hasLlmsTxt": false,
    "hasRobotsTxt": true,
    "hasSitemapXml": true,
    "blockedAiBots": [],
    "allowedAiBotsCount": 10,
    "geoReadinessScore": 70,
    "leadOpportunityScore": 85,
    "salesAngles": [
      "Active booking/POS/FSM stack (SevenRooms) — pre-qualified for ecosystem integrations or workflow automation.",
      "Missing /llms.txt index — pitch 2026 AI Search / GEO optimization so ChatGPT, Claude & Perplexity cite their business."
    ],
    "scrapedAt": "2026-10-25T09:00:00.000000+00:00"
  },
  {
    "inputTarget": "https://www.canva.com",
    "targetType": "website",
    "countryDetected": "AU",
    "status": "ok",
    "companyName": "CANVA PTY LTD",
    "websiteTitle": "Canva: Visual Suite for Everyone",
    "domain": "canva.com",
    "websiteUrl": "https://www.canva.com",
    "pagesCrawled": 2,
    "emails": [
      "press@canva.com",
      "support@canva.com"
    ],
    "roleEmails": [
      "press@canva.com",
      "support@canva.com"
    ],
    "phones": [
      "+61 2 8000 0000"
    ],
    "phoneRegions": [
      "AU"
    ],
    "detectedTechStack": [
      "Stripe",
      "Segment",
      "Google Tag Manager",
      "Google Analytics 4"
    ],
    "bookingSystem": null,
    "abn": "80 158 929 938",
    "acn": "158 929 938",
    "abnStatus": "Active from 14 Jun 2012",
    "isActiveAbn": true,
    "entityType": "Australian Proprietary Company",
    "gstRegistered": true,
    "gstStatus": "Registered from 01 Jul 2012",
    "businessLocation": "NSW 2010",
    "abrUrl": "https://abr.business.gov.au/ABN/View?abn=80158929938",
    "hasLlmsTxt": true,
    "hasLlmsFullTxt": false,
    "geoReadinessScore": 90,
    "leadOpportunityScore": 85,
    "salesAngles": [
      "KYB Verified: CANVA PTY LTD (ABN 80 158 929 938, Australian Proprietary Company, GST Registered in NSW 2010)."
    ],
    "scrapedAt": "2026-10-25T09:00:00.000000+00:00"
  }
]
```

### API authentication

Pass your token as a header, never in the URL:

```bash
curl -X POST "https://api.apify.com/v2/acts/ausbizstack~b2b-tech-stack-contact-abn-enricher/run-sync-get-dataset-items" \
  -H "Authorization: Bearer YOUR_APIFY_TOKEN" -H "Content-Type: application/json" -d '{...}'
```

### ✅ Zero Charge for Failed Domains

You are charged only when real intelligence data is returned. Failed, timed-out or unreachable targets still appear in the dataset with `status` and an error reason, but cost **$0**.

# Actor input Schema

## `targets` (type: `array`):

Enter website domains or URLs (e.g., 'stripe.com', 'https://canva.com', 'https://xero.com') or Australian business names / 11-digit ABNs. Aliases `domains`, `urls`, `companies`, or `stores` are also supported via API.

## `domains` (type: `array`):

Optional API alias for `targets`. Pass an array of domains or URLs.

## `crawlContactPages` (type: `boolean`):

Automatically discover and crawl /contact, /about, and /locations pages to maximize role-based contact extraction and technology detection.

## `maxPagesPerDomain` (type: `integer`):

Maximum number of internal contact/about subpages to inspect per domain (1 to 5).

## `auditAiGeoReadiness` (type: `boolean`):

Checks for /llms.txt, /llms-full.txt, AI crawler rules in /robots.txt (GPTBot, ClaudeBot, PerplexityBot), and Schema.org JSON-LD, and generates a ready-to-deploy /llms.txt file for every company.

## `auditDnsEmailSecurity` (type: `boolean`):

Inspects DNS MX (Microsoft 365, Google Workspace, Proofpoint, Mimecast), SPF, DMARC policy (none/quarantine/reject), and HTTPS security headers (HSTS, CSP, X-Frame-Options).

## `roleOnlyEmails` (type: `boolean`):

Filter extracted email addresses to role-based business inboxes (info@, sales@, accounts@, support@, bookings@, admin@, privacy@) to maintain privacy compliance.

## `verifyAbn` (type: `boolean`):

Automatically verifies 11-digit Australian Business Numbers (with official ATO modulo-89 checksum validation), legal entity type, and GST registration status using data from the Australian Business Register (ABR) when an Australian domain (.au), printed website ABN, or ABN input is detected.

## `abrGuid` (type: `string`):

Optional: Data from the Australian Business Register (ABR) Web Services GUID (or set via ABR_GUID environment variable). If provided, queries the ABR JSON API first before falling back to public ABR lookup.

## `concurrency` (type: `integer`):

Number of parallel targets to enrich simultaneously (default 50, max 200).

## Actor input object example

```json
{
  "targets": [
    "https://stripe.com",
    "https://canva.com",
    "https://xero.com",
    "https://cliniko.com",
    "https://servicem8.com"
  ],
  "crawlContactPages": true,
  "maxPagesPerDomain": 2,
  "auditAiGeoReadiness": true,
  "auditDnsEmailSecurity": true,
  "roleOnlyEmails": true,
  "verifyAbn": true,
  "concurrency": 50
}
```

# Actor output Schema

## `leads` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "targets": [
        "https://stripe.com",
        "https://canva.com",
        "https://xero.com",
        "https://cliniko.com",
        "https://servicem8.com"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("ausbizstack/b2b-tech-stack-contact-abn-enricher").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "targets": [
        "https://stripe.com",
        "https://canva.com",
        "https://xero.com",
        "https://cliniko.com",
        "https://servicem8.com",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("ausbizstack/b2b-tech-stack-contact-abn-enricher").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "targets": [
    "https://stripe.com",
    "https://canva.com",
    "https://xero.com",
    "https://cliniko.com",
    "https://servicem8.com"
  ]
}' |
apify call ausbizstack/b2b-tech-stack-contact-abn-enricher --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,ausbizstack/b2b-tech-stack-contact-abn-enricher"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/DnjHmPvUrIqUekGt1/builds/3u5tqURaa5hpiSg29/openapi.json
