# Old Websites Businesses Leads (`xmiso_scrapers/old-websites-businesses-leads`) Actor

Get unique leads of businesses that seem to have outdated websites. Find potential clients for web design, development, SEO, modernization, and other digital services. Leads are automatically prefiltered candidates, not guaranteed to be 100% accurate.

- **URL**: https://apify.com/xmiso\_scrapers/old-websites-businesses-leads.md
- **Developed by:** [Miso](https://apify.com/xmiso_scrapers) (community)
- **Categories:**
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $9.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## 📦 Old Website Business Leads Scraper

Scrape a list of businesses with **old, outdated, or technically dated websites** from Google Maps business data.

### How are these businesses identified?

Our prefiltering process analyzes business websites for signals commonly associated with older websites, outdated technology, legacy HTML structure, or websites that may benefit from modernization.

⚠️ **Note:** This dataset is **not a guaranteed list of websites that require redesign**.

***

### 💼 Business Ideas: How You Can Use This Data

- 📨 **Lead Generation:** Build prospecting lists for web design, web development, SEO, CRO, or digital marketing agencies.
- 🖥️ **Website Redesign Outreach:** Find businesses whose existing websites may benefit from a modern redesign.
- 📱 **Mobile & UX Services:** Identify prospects that may need responsive design, improved usability, or conversion optimization.
- ⚡ **Website Modernization:** Offer performance optimization, HTTPS migration, CMS upgrades, accessibility improvements, or modern frontend development.
- 📈 **SEO & Digital Marketing:** Target businesses with older websites that may also have outdated technical SEO or content structures.
- 🛒 **E-commerce & Booking Solutions:** Offer online stores, booking systems, CRM integrations, payment systems, or other modern web functionality.
- 📬 **Direct Outreach:** Use available business emails and phone numbers for prospecting campaigns.

👉 **Example use case:** Get all **Construction & Home Services** businesses in the **US**, updated after **2026-08-01**, with email addresses and an **Old Website Score of at least 15**.

***

### 🚀 Features

- Filter by **Business Type**.
- Filter by **Country Code** (`US` or `All`).
- Filter by **US State**.
- Filter by **Has Email**.
- Filter by **Published / Updated After** (`YYYY-MM-DD`).
- Set a **maximum number of results**.
- Use **Start at row** to continue downloading results from a previous position.
- Results are returned in stable chronological order by update date.

***

### 🔧 Input Schema

| Field | Type | Description |
|---|---|---|
| `business_type` | string | Business type category (`All` or a predefined option). |
| `country` | string | Country code (`All` or `US`). |
| `state` | string | US state code such as `TX`, `CA`, `FL`, etc. |
| `last_updated` | string | Return only businesses updated after this date (`YYYY-MM-DD`). |
| `has_email` | boolean | Return only businesses with at least one email address. |
| `max_results` | integer | Maximum number of results per run. Default `100`, maximum `10000`. |
| `offset` | integer | Start at this result row. Useful for continuing a previous export without downloading the same rows again. |

***

### 📝 Example Input

```json
{
    "business_type": "Construction & Home Services",
    "country": "US",
    "state": "TX",
    "last_updated": "2026-08-01",
    "has_email": true,
    "max_results": 1000,
    "offset": 1
}
```

***

### 📊 Output

Each result may contain:

- Business name
- Street
- City
- State / region
- Country
- Business website
- Domain
- Phone number
- Email address
- Google review score
- Number of Google reviews
- Google business categories
- Google Maps URL
- Facebook
- LinkedIn
- Instagram
- Twitter
- YouTube
- Old Website Score (Expermiental)
- Published / updated date
- Google Place ID

#### Example Output

```json
{
    "name": "Example Construction Company",
    "street": "123 Main St",
    "city": "Austin",
    "country": "Texas",
    "country_code": "US",
    "url": "http://www.example.com/",
    "domain": "example.com",
    "phone_number": "+1 555-123-4567",
    "emails": "info@example.com",
    "review_score": 4.5,
    "reviews_number": 87,
    "business_category": "general_contractor|construction_company",
    "old_website_score": 18,
    "google_maps_url": "https://www.google.com/maps?cid=...",
    "published": "2026-08-20T12:34:56",
    "google_place_id": "ChIJ..."
}
```

### 🔄 Downloading New Leads Later

Results are ordered chronologically using the business record's update date.

This makes it possible to periodically retrieve newer leads without downloading the entire dataset again.

For example, after downloading leads up to August 20, 2026, you can later run:

```json
{
    "last_updated": "2026-08-20",
    "max_results": 1000,
    "offset": 1
}
```

You can also use **Start at row** when splitting a larger result set across multiple runs.

#### First run

```json
{
    "max_results": 1000,
    "offset": 1
}
```

#### Second run

```json
{
    "max_results": 1000,
    "offset": 1001
}
```

***

### ⚠️ Data Accuracy

Business and website information is collected and processed automatically.

Data may occasionally contain:

- outdated contact information,
- websites that have recently been redesigned,
- businesses that changed domains,
- websites intentionally built using older technology,
- missing email addresses or social profiles.

The **Old Website Score** is designed to help prioritize prospects, but manual review is recommended before contacting high-value leads.

# Actor input Schema

## `business_type` (type: `string`):

Select the type of business

## `country` (type: `string`):

Select the country code

## `state` (type: `string`):

Filter results by US state

## `last_updated` (type: `string`):

Retrieve only results published or updated after this date (YYYY-MM-DD)

## `has_email` (type: `boolean`):

Return only leads with at least one email address

## `max_results` (type: `integer`):

Maximum number of leads to retrieve

## `offset` (type: `integer`):

Start retrieving results from this row. Useful if you already downloaded previous rows and want to continue without downloading them again.

## Actor input object example

```json
{
  "business_type": "All",
  "country": "All",
  "state": "All",
  "max_results": 100,
  "offset": 1
}
```

# Actor output Schema

## `results` (type: `string`):

List of businesses with old website signals, contact information, business details, and Old Website Score.

# 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 = {
    "business_type": "All",
    "country": "All",
    "state": "All",
    "max_results": 100,
    "offset": 1
};

// Run the Actor and wait for it to finish
const run = await client.actor("xmiso_scrapers/old-websites-businesses-leads").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 = {
    "business_type": "All",
    "country": "All",
    "state": "All",
    "max_results": 100,
    "offset": 1,
}

# Run the Actor and wait for it to finish
run = client.actor("xmiso_scrapers/old-websites-businesses-leads").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 '{
  "business_type": "All",
  "country": "All",
  "state": "All",
  "max_results": 100,
  "offset": 1
}' |
apify call xmiso_scrapers/old-websites-businesses-leads --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,xmiso_scrapers/old-websites-businesses-leads"
        }
    }
}

```

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/0tsFDjhX7p225Sle2/builds/9xf0Xc0ZSprSHj26d/openapi.json
