# SpareFoot Listings Scraper (`piotrv1001/sparefoot-listings-scraper`) Actor

The SpareFoot Listings Scraper extracts self-storage facility listings from SpareFoot.com, capturing facility names, addresses, GPS coordinates, phone numbers, ratings, unit sizes and prices, promotions, amenities, hours, and reviews — ideal for storage market research and pricing analysis.

- **URL**: https://apify.com/piotrv1001/sparefoot-listings-scraper.md
- **Developed by:** [FalconScrape](https://apify.com/piotrv1001) (community)
- **Categories:** Developer tools, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 facility listings

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

## 🚀 SpareFoot Listings Scraper

Easily extract self-storage facility listings from [SpareFoot](https://www.sparefoot.com), the largest self-storage marketplace in the US. The **SpareFoot Listings Scraper** gathers structured data on storage facilities — prices, unit sizes, addresses, ratings, amenities, and promotions — perfect for market research, competitive pricing analysis, and lead generation in the self-storage industry.

### ✨ Features

- 🏢 **Comprehensive Facility Data**: Get facility names, full addresses with GPS coordinates, phone numbers, ratings, review counts, amenities, photos, and active promotions.
- 💰 **Unit-Level Pricing**: Extract storage unit prices, regular (pre-discount) prices, sizes (5'x5' to 10'x30'+), square footage, and unit-specific promotions.
- 🔍 **City-Based Extraction**: Provide SpareFoot city pages (e.g., `Austin-TX-self-storage.html`) and the scraper follows pagination automatically.
- 📋 **Optional Deep Details**: Turn on `scrapeFacilityDetails` to visit each facility page and collect the **complete unit inventory**, office & access hours, and recent customer reviews.
- ⚡ **Fast & Efficient**: Lightweight scraping with smart limits — set `maxItems` to control exactly how much you pay for.

### 🛠️ How It Works

1. **Enter City URLs** – Provide one or more SpareFoot city pages like `https://www.sparefoot.com/Austin-TX-self-storage.html` (individual facility URLs work too).
2. **Set Limits** – Choose how many facilities you want with `maxItems` (default: 50) and whether to scrape full facility details.
3. **Run the Scraper** – Start the process and receive structured facility and pricing data in minutes.

### 📊 Sample Output Data

The scraper provides structured JSON output with key facility details. Example:

```json
[
    {
        "id": 201698,
        "name": "Public Storage - Austin - 8101 N Lamar Blvd",
        "url": "https://www.sparefoot.com/Austin-TX-self-storage/Public-Storage-Austin-8101-N-Lamar-Blvd-201698.html",
        "phone": "(512) 555-0123",
        "address": "8101 N Lamar Blvd",
        "city": "Austin",
        "state": "TX",
        "zip": "78753",
        "latitude": 30.350421,
        "longitude": -97.711392,
        "rating": 4.7125,
        "reviewCount": 40,
        "cheapestPrice": 9,
        "cheapestPriceText": "$9",
        "unitCount": 29,
        "promotion": "1 Month 25% Off",
        "amenities": ["elevator", "24HourAccess", "surveillance", "truckRental"],
        "images": ["https://d2knwvu6cegzt1.cloudfront.net/large-compress/photo1.jpg"],
        "units": [
            {
                "id": 18393248,
                "sizeText": "5' x 5'",
                "width": 5,
                "length": 5,
                "squareFootage": 25,
                "sizeCategory": "small",
                "price": 9,
                "regularPrice": 12,
                "promotion": "1 Month 25% Off",
                "isAvailableToBook": true,
                "amenities": "2nd Floor, Interior"
            }
        ]
    }
]
````

With `scrapeFacilityDetails` enabled, each record additionally includes the **full unit list**, **office/access hours per weekday**, and **recent customer reviews** with ratings and text.

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.

### 💸 Pricing

This Actor uses the **Pay Per Event** model — you only pay for the results you get:

| Event | Price | What you get |
| --- | --- | --- |
| Actor start | $0.005 | Charged once per run |
| Facility listing | $0.002 | Facility from a search page incl. address, rating, prices for best-priced units |
| Facility detail | $0.008 | Full facility record incl. complete unit inventory, hours, and reviews |

**Example costs:**

- 50 facilities from city pages (default input): **~$0.11**
- 1,000 facilities across multiple cities: **~$2.01**
- 100 facilities with full details: **~$0.81**

### 💡 Use Cases

- **Competitive pricing analysis** – Track street rates and promotions of competing storage facilities in any US market.
- **Market research & site selection** – Map facility density, unit availability, and pricing across cities before investing.
- **Lead generation** – Build lists of storage facilities with contact details and locations.
- **Revenue management** – Monitor price changes of specific facilities over time by scheduling recurring runs.

### ⚙️ Tips

- Keep `scrapeFacilityDetails` **off** if search-page data (address, rating, cheapest prices) is enough — it's 4× cheaper and much faster.
- Use `maxItems` to cap costs precisely; the scraper stops enqueuing new pages as soon as the limit is reached.
- Want a specific facility? Paste its SpareFoot URL directly into Start URLs.
- Schedule the Actor to run weekly to build a price history dataset for your market.

### ❓ FAQ

**Is it legal to scrape SpareFoot?**
This scraper only extracts publicly available data. However, you should always ensure your use of scraped data complies with applicable laws and the target website's terms of service. This Actor is intended for legitimate research and business intelligence purposes.

**The run finished with fewer results than expected — why?**
Some markets simply have fewer facilities listed. Check the run log: the scraper reports how many facilities each city page contains.

**Need a custom feature?**
Open an issue on the Actor's Issues tab — feedback and feature requests are welcome!

Optimize your self-storage market strategy with **SpareFoot Listings Scraper** today! 🚀

# Actor input Schema

## `startUrls` (type: `array`):

SpareFoot pages to scrape. Use city pages like `https://www.sparefoot.com/Austin-TX-self-storage.html` (pagination is followed automatically) or individual facility pages.

## `maxItems` (type: `integer`):

Maximum number of storage facilities to scrape.

## `scrapeFacilityDetails` (type: `boolean`):

Visit each facility's detail page to get the complete unit list, office/access hours, and recent reviews. Slower and more expensive - keep off if the search-page data (address, rating, prices for best-priced units) is enough.

## `proxyConfiguration` (type: `object`):

Proxy settings. US residential proxies are required to access the site reliably - keep the default unless you know what you are doing.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.sparefoot.com/Austin-TX-self-storage.html"
    }
  ],
  "maxItems": 50,
  "scrapeFacilityDetails": false,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}
```

# Actor output Schema

## `results` (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 = {
    "startUrls": [
        {
            "url": "https://www.sparefoot.com/Austin-TX-self-storage.html"
        }
    ],
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "US"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("piotrv1001/sparefoot-listings-scraper").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 = {
    "startUrls": [{ "url": "https://www.sparefoot.com/Austin-TX-self-storage.html" }],
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "US",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("piotrv1001/sparefoot-listings-scraper").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "startUrls": [
    {
      "url": "https://www.sparefoot.com/Austin-TX-self-storage.html"
    }
  ],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}' |
apify call piotrv1001/sparefoot-listings-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=piotrv1001/sparefoot-listings-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "SpareFoot Listings Scraper",
        "description": "The SpareFoot Listings Scraper extracts self-storage facility listings from SpareFoot.com, capturing facility names, addresses, GPS coordinates, phone numbers, ratings, unit sizes and prices, promotions, amenities, hours, and reviews — ideal for storage market research and pricing analysis.",
        "version": "0.0",
        "x-build-id": "VEeFLH6xYASniVuxf"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/piotrv1001~sparefoot-listings-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-piotrv1001-sparefoot-listings-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/piotrv1001~sparefoot-listings-scraper/runs": {
            "post": {
                "operationId": "runs-sync-piotrv1001-sparefoot-listings-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/piotrv1001~sparefoot-listings-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-piotrv1001-sparefoot-listings-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "startUrls"
                ],
                "properties": {
                    "startUrls": {
                        "title": "Start URLs",
                        "type": "array",
                        "description": "SpareFoot pages to scrape. Use city pages like `https://www.sparefoot.com/Austin-TX-self-storage.html` (pagination is followed automatically) or individual facility pages.",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "maxItems": {
                        "title": "Max items",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Maximum number of storage facilities to scrape.",
                        "default": 50
                    },
                    "scrapeFacilityDetails": {
                        "title": "Scrape facility details",
                        "type": "boolean",
                        "description": "Visit each facility's detail page to get the complete unit list, office/access hours, and recent reviews. Slower and more expensive - keep off if the search-page data (address, rating, prices for best-priced units) is enough.",
                        "default": false
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Proxy settings. US residential proxies are required to access the site reliably - keep the default unless you know what you are doing.",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "RESIDENTIAL"
                            ],
                            "apifyProxyCountry": "US"
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
