# Self Storage Rates & Availability Scraper (`theleadforge/self-storage-rate-monitor`) Actor

Extract public self-storage unit sizes, availability, rates, limited counts, and promotions from supported StoragePug facility pages. Export structured data.

- **URL**: https://apify.com/theleadforge/self-storage-rate-monitor.md
- **Developed by:** [Mason](https://apify.com/theleadforge) (community)
- **Categories:** Real estate
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $80.00 / 1,000 successful facility snapshots

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 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

### What does Self Storage Rates & Availability Scraper do?

Self Storage Rates & Availability Scraper turns public self-storage rental pages into structured rate and availability data. Add one or more supported facility URLs and get **one record per visitor-visible offering card**, ready for competitive research, pricing analysis, spreadsheets, scheduled snapshots, APIs, and data pipelines.

The current release supports **US StoragePug legacy facility pages** using the `/locations/{slug}` format. It collects public data without logging in and deliberately excludes hidden unit numbers, occupancy metrics, customer data, and administrative fields.

> **Unofficial Actor:** This Actor is not affiliated with, endorsed by, or sponsored by StoragePug or any storage facility whose public pages it processes.

#### What data can you extract?

- Facility name and public address
- Unit size and dimensions
- Climate-control, drive-up, and floor details when stated publicly
- Available, limited, waitlist, or unavailable status
- Exact count when the page says `Last Unit` or `2 Units Left`
- Current public rate in integer cents
- Struck comparison rate when displayed
- Public promotion text
- Stable source identifier, source URL, and scrape timestamp

### Supported self-storage websites

This release supports US/USD facility pages using the verified **StoragePug legacy** website variant:

```text
https://example-storage-site.com/locations/facility-slug
```

The Actor detects the platform automatically. Unknown websites, newer StoragePug Insights pages, and other booking platforms return an explicit error record instead of unreliable or partial data.

StoragePug is a trademark of its respective owner. This independent Actor is not affiliated with, endorsed by, or sponsored by StoragePug or the facilities whose public pages it processes.

### How to scrape self-storage rates

No JSON is required when running the Actor from Apify Console. Use the **Form** view to add facility URLs and adjust the optional output settings. The JSON example below is provided for API and automation users.

1. Open the Actor's **Input** tab.
2. Add one or more supported public facility URLs.
3. Choose whether to include public offerings that currently require contacting the facility.
4. Set a safety limit for results per facility.
5. Click **Start**.
6. Open the default dataset to view or export the results as JSON, CSV, Excel, or another Apify-supported format.

You can also run the Actor through the Apify API, schedule recurring snapshots, or connect its dataset to other Apify integrations.

### Input example

```json
{
  "startUrls": [
    {
      "url": "https://www.americanselfstoragecommunities.com/locations/greenwood-in-46143"
    }
  ],
  "includeUnavailable": true,
  "maxUnitsPerFacility": 100
}
```

#### Input options

| Field | Description |
| --- | --- |
| `startUrls` | One to 100 supported public facility URLs. |
| `includeUnavailable` | Include public `Contact Us` offering cards as well as currently rentable offerings. |
| `maxUnitsPerFacility` | Maximum number of offering records returned for one facility. |

### Output example

Each public offering card becomes one dataset record:

```json
{
  "schemaVersion": "1.0",
  "recordType": "unit",
  "source": "storagepug-legacy",
  "sourceId": "storagepug:account-id:location-id:unit-id",
  "sourceUrl": "https://www.americanselfstoragecommunities.com/locations/greenwood-in-46143",
  "facilityName": "Greenwood Self Storage",
  "facilityAddress": "197 North Emerson Avenue, Greenwood, IN 46143",
  "unitSize": "5x10",
  "widthFeet": 5,
  "lengthFeet": 10,
  "climateControlled": null,
  "driveUpAccess": true,
  "floorLevel": null,
  "availabilityStatus": "limited",
  "availableCount": 2,
  "currency": "USD",
  "webRateCents": 6700,
  "streetRateCents": null,
  "promotionText": null,
  "changeType": "snapshot",
  "contentHash": null,
  "scrapedAt": "2026-08-12T07:07:20.538Z",
  "errorCode": null,
  "errorMessage": null
}
```

Rates use integer cents so downstream calculations stay exact. For example, `6700` means `$67.00 USD`. When a promotion visibly discounts the current price, `webRateCents` contains the promotional amount and `streetRateCents` contains the struck regular amount.

### Use cases

- Compare nearby self-storage rates and promotions
- Build current market snapshots for operators or investors
- Feed public availability into dashboards or spreadsheets
- Schedule recurring data collection with Apify
- Connect structured unit offerings to an internal API or database

This Actor returns the current state on each run. It does **not** yet compare runs or emit a built-in change history.

### Pricing

The Actor uses pay-per-event pricing:

- **$0.10 per successful facility snapshot.** One charge covers all public offering records returned for one facility URL.
- **$0.00005 Actor start event** at up to 1 GB of memory, using Apify's recommended synthetic start price.
- Unsupported URLs, failed facilities, and successful empty listings do not trigger the $0.10 facility event. They can still produce a clear error record when applicable.

Approximate event cost is $0.10 for one successful facility, $1 for 10, or $10 for 100. Apify displays the applicable event prices and maximum run cost before a run starts. Store discounts, if offered by Apify, can reduce the buyer's final charge.

### Limitations

- US/USD StoragePug legacy `/locations/{slug}` pages only
- Current snapshots only; built-in change detection is not included yet
- No arbitrary-site or browser fallback
- No proxy bypass or login support
- Exact availability counts are returned only when displayed publicly
- Public pages and undocumented source endpoints can change
- A successful empty listing can produce zero unit records

### Responsible use and support

Use this Actor only for lawful purposes and in accordance with applicable websites' terms, privacy rules, and regulations. You are responsible for how you use and retain the resulting public data.

If a supported URL returns an error record, check that it is a public US StoragePug legacy `/locations/{slug}` page. A detected source change returns a diagnostic error instead of fabricated data. When reporting a problem, include the public source URL, run ID, and error code—never credentials or private customer information.

# Actor input Schema

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

Public US StoragePug legacy facility pages using the /locations/{slug} format.

## `includeUnavailable` (type: `boolean`):

When enabled, also return public offering cards that currently require the visitor to contact the facility instead of renting online.

## `maxUnitsPerFacility` (type: `integer`):

Safety cap for the number of unit records produced from one facility URL.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.americanselfstoragecommunities.com/locations/greenwood-in-46143"
    }
  ],
  "includeUnavailable": true,
  "maxUnitsPerFacility": 100
}
```

# Actor output Schema

## `storageUnits` (type: `string`):

Structured rates and availability records from the default dataset.

## `runSummary` (type: `string`):

Processing totals and completion status for the run.

# 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.americanselfstoragecommunities.com/locations/greenwood-in-46143"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("theleadforge/self-storage-rate-monitor").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.americanselfstoragecommunities.com/locations/greenwood-in-46143" }] }

# Run the Actor and wait for it to finish
run = client.actor("theleadforge/self-storage-rate-monitor").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 '{
  "startUrls": [
    {
      "url": "https://www.americanselfstoragecommunities.com/locations/greenwood-in-46143"
    }
  ]
}' |
apify call theleadforge/self-storage-rate-monitor --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,theleadforge/self-storage-rate-monitor"
        }
    }
}

```

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/6diIV9dJZxzTxX6CG/builds/s0iiO87phNIOQ6VBk/openapi.json
