# Find Websites Using Any Technology: Lead Lists (`steady-scrape/tech-stack-lead-lists`) Actor

Find company websites that use Shopify, HubSpot, Klaviyo, Stripe or any of 7,000+ technologies. Filter by country, language, rank and freshness. Returns the full tech stack and social profiles per domain. Company-level data, no personal emails.

- **URL**: https://apify.com/steady-scrape/tech-stack-lead-lists.md
- **Developed by:** [SteadyScrape](https://apify.com/steady-scrape) (community)
- **Categories:** Lead generation, E-commerce, Marketing
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 1,000 domains

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

## Websites Using Any Technology: Tech Stack Lead Lists

Get a **list of company websites that use a given technology**: every US store on **Shopify + Klaviyo**, every site running **HubSpot**, **Stripe**, **Salesforce**, **Intercom** or any of **7,000+ technologies**. Each row is one company domain with its country, language, domain rank, the full detected **tech stack** and company social profiles. It's built for SaaS sales and RevOps teams, agencies, app developers and investors who need technographic lead lists without a BuiltWith-style subscription. **Price: $0.005 per domain delivered ($5 per 1,000) plus $0.015 per run, and empty runs are free.**

Made by **SteadyScrape (steady-scrape)**. Note: we are not the similarly named "steadyscrape" account on Apify.

### What you can do with it

1. **Sell to users of a tool you integrate with or replace.** A Klaviyo partner agency pulls every Shopify + Klaviyo store in the US with rank above 150 and starts outreach that week.
2. **Competitive displacement.** A live-chat startup lists sites using a competitor's widget in the UK and Germany, then filters by rank to find accounts worth a call.
3. **Find new adopters every week.** Schedule a run with **"Flag domains that are new since the last run"** turned on to get the sites that newly match, such as stores that just switched to your ecosystem.
4. **Market sizing for investors and product teams.** See how many sites match a technology by country (`matchingInDatabase` in the run summary) and which other tools those sites use alongside it.
5. **Shopify app and theme marketing.** Use the `shopify_apps` category or a specific app name to find stores that use a complementary (or competing) app.

### Input

- **Technologies:** 1–10 names, e.g. `Shopify`, `HubSpot`, `Klaviyo`, `Stripe`, `Salesforce`, `WooCommerce`, `Google Tag Manager`. Capitals and spaces don't matter (`hubspot`, `woo commerce` and `Meta Pixel` all work). **With two or more names, a site must use all of them.** A misspelt name fails at once with suggestions, and nothing is charged.
- **Technology categories** (optional): sites using *any* tool in a category, e.g. `crm`, `live_chat`, `payment_processors`, `marketing_automation`, `ecommerce`, `reviews`, `buy_now_pay_later`, `cookie_compliance`, `shopify_apps`.
- **Keywords** (optional): narrow to a niche by the site's title or description, e.g. `coffee`, `skincare`, `dental`.
- **Filters:** countries (ISO codes), site languages, minimum and maximum **domain rank** (a 0–1000 authority score; higher means a bigger site), and **last seen within N days** (365 by default).
- **Output:** max domains (up to 5,000 per run), sort order, skip platform subdomains (`*.myshopify.com` and similar), the full tech stack, and the opt-in phone and generic email columns.

Example: *US Shopify stores that also use Klaviyo, seen in the last 180 days*

```json
{
  "technologies": ["Shopify", "Klaviyo"],
  "countries": ["US"],
  "lastSeenWithinDays": 180,
  "maxResults": 50
}
```

### Output

One row per company website. A sample from a real run (October 2026), trimmed:

| domain | countryCode | domainRank | matchedTechnologies | paymentProcessors | liveChat | analytics | linkedinUrl / instagramUrl | lastSeen |
|---|---|---|---|---|---|---|---|---|
| thegithubshop.com | US | 633 | Klaviyo, Shopify | | | | linkedin.com/company/github | 2026-10-17 |
| shop.hulu.com | US | 562 | Klaviyo, Shopify | | Ada | Google Analytics | | 2026-10-17 |
| xtendlife.com | US | 546 | Klaviyo, Shopify | Recharge | | | instagram.com/xtend.life | 2026-10-27 |

Full record:

```json
{
  "domain": "xtendlife.com",
  "rootDomain": "xtendlife.com",
  "url": "https://xtendlife.com",
  "title": "Xtendlife | Official Site | Supplements & Skincare",
  "countryCode": "US",
  "languageCode": "en",
  "domainRank": 546,
  "matchedTechnologies": ["Klaviyo", "Shopify"],
  "ecommercePlatforms": ["Cart Functionality", "Shopify"],
  "marketingAutomation": ["Klaviyo"],
  "paymentProcessors": ["Recharge"],
  "technologyCount": 11,
  "facebookUrl": "https://www.facebook.com/XtendLife",
  "instagramUrl": "https://www.instagram.com/xtend.life/",
  "youtubeUrl": "https://www.youtube.com/user/XtendLifeChannel",
  "lastSeen": "2026-10-27T06:40:08Z",
  "dataAgeDays": 0,
  "technologies": ["Amazon Web Services", "Cloudflare", "Klaviyo", "Recharge", "Shopify", "..."],
  "techStack": {"ecommerce": ["Shopify", "Cart Functionality"], "marketing_automation": ["Klaviyo"], "payment_processors": ["Recharge"], "...": ["..."]}
}
```

Ready-made columns: `ecommercePlatforms`, `cms`, `paymentProcessors`, `marketingAutomation`, `crm`, `analytics`, `liveChat`, `advertisingPixels`, `reviews` and `shopifyApps`, plus LinkedIn, X/Twitter, Facebook, Instagram, YouTube, TikTok and Pinterest URLs. With tracking on, each row also gets `isNewSinceLastRun`. A run summary (matching domains in the database, the query used, charges) is saved to the `OUTPUT` record. Export as CSV, Excel or JSON, or pull it over the API.

#### Company-level data only

- **No personal emails.** Email addresses are never output by default, and those found in descriptions are masked. Turn on **generic company emails** to get role mailboxes only (`info@`, `sales@`, `support@`, `hello@`…). Addresses that look like a named person's are always dropped.
- **Phones are opt-in.** Turn on **phone numbers** to get the numbers a company lists on its own site. Leave it off if you target sole traders in the EU, UK or Quebec, where a one-person business's number can count as personal data.
- No people, job titles or LinkedIn profiles of individuals.

### Pricing

Pay per event. You pay only for domains delivered. Runs with no matches, invalid input or provider errors are **not charged**, and neither are skipped platform subdomains. The Actor respects your **maximum charge per run** and requests only as many domains as fit.

| Event | Price | When it's charged |
|---|---|---|
| Run start | $0.015 per run | Once per run, only if at least one domain is returned |
| Domain | $0.005 per domain | Each company website delivered |
| Actor start (Apify) | $0.00005 per run | Apify's standard start event |

Worked example: **1,000 Shopify + Klaviyo stores cost about $5.02** ($0.015 run start + 1,000 × $0.005 + $0.00005 Apify start), and a 100-domain test list costs about $0.52. A run that finds nothing costs only the $0.00005 Apify start event.

### How it compares

| | This Actor | Shopify-only store lists | Single-site tech lookups | Technographic subscriptions |
|---|---|---|---|---|
| Find sites by technology | Any of 7,000+ | Shopify (sometimes WooCommerce) | No (you bring the domains) | Yes |
| Combine technologies (A and B) | Yes | Rarely | No | Usually |
| Full tech stack per row | Yes | Partly | Yes | Yes |
| Pricing | Per domain, no subscription | Per store | Per lookup | Monthly plan |
| Personal emails | Never | Often included | Varies | Varies |

Honest limits: this is a **regularly refreshed database**, not a live crawl at run time, so a site that installed a tool yesterday may not show yet (check `lastSeen`). Coverage is broad but not every website on the internet is in it. A typical row lists 5–20 detected technologies, which is fewer than a full paid technographic profile. The country is unknown (`null`) or `WW` for many smaller sites, so a country filter returns only sites with a known country. Technology detection reads the public website, so back-office tools that leave no trace on the site (for example a CRM used only internally) can't be detected.

### FAQ

**Where does the data come from?** From a licensed web technology database (Wappalyzer-style detection run across millions of sites by our data provider). No browser and no scraping happen at run time, so runs take seconds and never get blocked.

**How fresh is it?** Every row has `lastSeen` (when the crawler last visited the site and saw its stack) and `dataAgeDays`. In our October 2026 tests, most top sites had been seen within the last few weeks. The default filter keeps only sites seen in the last 365 days; set 90 or 180 for fresher lists.

**How do I find the exact technology name?** Type it the way you'd say it. Case, spaces and dots don't matter, and a wrong name returns the closest matches. Category names are listed in the input field's help text.

**Can I get "uses A but not B"?** Not as a filter yet. Run with A, turn on the full tech stack, and filter out rows whose `technologies` contain B in your spreadsheet or workflow.

**Why is my list shorter than the market-share sites claim?** Those count every page, including subdomains and parked or test stores. This Actor counts company domains, skips platform subdomains by default, and applies your freshness filter.

**Can I get contacts of decision-makers?** No, by design. This Actor returns company-level data. Pair it with your own CRM enrichment if you need people.

**Is it legal to use this data?** It describes publicly visible company websites. You are responsible for following the marketing and privacy laws that apply to your outreach (for example the GDPR, PECR, CAN-SPAM, CASL and Quebec's Law 25) and for honouring opt-outs.

### Integrations

- **Schedules:** run it weekly with new-domain tracking to get a feed of new adopters.
- **API:** start runs and download results from any language via the Apify API, or call it synchronously with `run-sync-get-dataset-items`.
- **Make, Zapier and n8n:** use the Apify app or node to push new domains into HubSpot, Salesforce, Pipedrive, Google Sheets or Slack.
- **MCP and AI agents:** add it to Claude, Cursor or any MCP client through the Apify MCP server, and ask in plain language, for example "find 200 German Shopware stores that use Klaviyo".

### More from SteadyScrape

- [ATS Job Scraper](https://apify.com/steady-scrape/ats-job-feed): see which roles your target accounts are hiring for, straight from their career sites (Greenhouse, Lever, Ashby, Workday and more).
- [Career Site Jobs Search](https://apify.com/steady-scrape/career-jobs-search): search open jobs by keyword across tens of thousands of company career sites. A hiring spike is a buying signal.
- [Company Data by Domain](https://apify.com/steady-scrape/company-profile-by-domain): name, logo, description, industry and social links for a list of domains, from each company's own site. Enrich the sites on your tech lead list.
- [AI Visibility & Share of Voice Tracker](https://apify.com/steady-scrape/ai-brand-visibility-tracker): see whether ChatGPT and Perplexity mention, rank and cite your brand versus your competitors.

See every **SteadyScrape (steady-scrape)** Actor on [our Apify profile](https://apify.com/steady-scrape).

Questions or a filter you need? Open an issue on the Issues tab.

# Actor input Schema

## `technologies` (type: `array`):

1-10 technology names, e.g. Shopify, HubSpot, Klaviyo, Stripe, Salesforce, Intercom, WooCommerce, Google Tag Manager. Capitals and spaces don't matter. With 2+ names you get sites that use ALL of them (e.g. Shopify + Klaviyo). A misspelt name fails at once with suggestions and costs nothing.

## `technologyCategories` (type: `array`):

Instead of (or as well as) named technologies: sites using ANY tool in a category, e.g. crm, live_chat, payment_processors, marketing_automation, ecommerce, reviews, buy_now_pay_later, cookie_compliance, shopify_apps. See the README for the full list.

## `keywords` (type: `array`):

Narrow to a niche, e.g. coffee, skincare, dental, software. Matches the site's title, meta description or meta keywords.

## `countries` (type: `array`):

2-letter ISO country codes (any of them), e.g. US, GB, CA, AU, DE. Leave empty for worldwide.

## `languages` (type: `array`):

2-letter language codes (any of them), e.g. en, de, fr, es.

## `minDomainRank` (type: `integer`):

Domain rank is a 0-1000 backlink authority score (higher = bigger, better-known site). Use it to skip tiny or brand-new sites, e.g. 150.

## `maxDomainRank` (type: `integer`):

Skip the very largest sites, e.g. 500 for SMB lists.

## `lastSeenWithinDays` (type: `integer`):

Only sites the provider's crawler visited (and saw the technology on) in the last N days. Keeps lists fresh. Empty = any date.

## `maxResults` (type: `integer`):

Up to 5,000 domains per run. You pay per domain delivered.

## `sortBy` (type: `string`):

Order of the list. Biggest sites first is best for most lead lists; 'most recently seen' surfaces the freshest records.

## `skipPlatformSubdomains` (type: `boolean`):

Drop free platform addresses like \*.myshopify.com, \*.wixsite.com or \*.github.io, which aren't a company's own domain. Skipped rows are never charged.

## `includeFullTechStack` (type: `boolean`):

Adds every detected technology (flat list and grouped by category). Handy columns like ecommercePlatforms, crm, paymentProcessors and marketingAutomation are always included.

## `includePhones` (type: `boolean`):

Company phone numbers published on the website. Off by default; a one-person business's phone can count as personal data in the EU, UK and Quebec.

## `includeGenericEmails` (type: `boolean`):

Adds role mailboxes found on the site (info@, sales@, support@, hello@, contact@...). Named people's addresses are never output.

## `trackNewDomains` (type: `boolean`):

For scheduled runs: remembers the domains returned for this exact search and adds isNewSinceLastRun to every row (new adopters of a technology). The first run saves a baseline.

## Actor input object example

```json
{
  "technologies": [
    "Shopify",
    "Klaviyo"
  ],
  "countries": [
    "US"
  ],
  "lastSeenWithinDays": 180,
  "maxResults": 50,
  "sortBy": "domainRankDesc",
  "skipPlatformSubdomains": true,
  "includeFullTechStack": true,
  "includePhones": false,
  "includeGenericEmails": false,
  "trackNewDomains": false
}
```

# Actor output Schema

## `overview` (type: `string`):

One row per company website.

## `stack` (type: `string`):

Key tools per domain.

## `summary` (type: `string`):

Totals, the query used and charges.

# 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 = {
    "technologies": [
        "Shopify",
        "Klaviyo"
    ],
    "countries": [
        "US"
    ],
    "lastSeenWithinDays": 180,
    "maxResults": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("steady-scrape/tech-stack-lead-lists").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 = {
    "technologies": [
        "Shopify",
        "Klaviyo",
    ],
    "countries": ["US"],
    "lastSeenWithinDays": 180,
    "maxResults": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("steady-scrape/tech-stack-lead-lists").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 '{
  "technologies": [
    "Shopify",
    "Klaviyo"
  ],
  "countries": [
    "US"
  ],
  "lastSeenWithinDays": 180,
  "maxResults": 50
}' |
apify call steady-scrape/tech-stack-lead-lists --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,steady-scrape/tech-stack-lead-lists"
        }
    }
}
```

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/TU9fbmBr3qgMXQP2V/builds/LCOH5tsf3Q6EKyLEY/openapi.json
