Facility: 109027

Prime Storage

Stale Data Warning: This facility has not been successfully scraped in 26 days (threshold: 3 days). Data may be outdated.
Facility Information active
Facility ID
109027
Name
Prime Storage
URL
https://primestorage.com/
Address
2200 Forsyth Rd M-01, Orlando, FL 32807, USA, Orlando, Florida 32807
Platform
custom_facility_109027
Parser File
src/parsers/custom/facility_109027_parser.py
Last Scraped
2026-03-27 13:43:21.020275
Created
2026-03-20 23:32:48.933261
Updated
2026-03-27 13:43:21.047332
Parser & Healing Diagnosis working
Parser Status
✓ Working
Status Reason
N/A
Last Healing Attempt
Not attempted
Parser Source (src/parsers/custom/facility_109027_parser.py)
"""Parser for Prime Storage."""

from __future__ import annotations

import re

from bs4 import BeautifulSoup

from src.parsers.base import BaseParser, ParseResult, UnitResult


class Facility109027Parser(BaseParser):
    """Extract storage locations from Prime Storage (multi-location directory).

    The homepage lists all Prime Storage locations with starting prices.
    Individual unit data requires visiting each location page.
    """

    platform = "custom_facility_109027"

    def parse(self, html: str, url: str = "") -> ParseResult:
        soup = BeautifulSoup(html, "lxml")
        result = ParseResult(platform=self.platform, parser_name=self.__class__.__name__)

        # Location cards have starting prices
        cards = soup.select("div.psc\\:card, div[class*='psc:card']")

        for card in cards:
            text = card.get_text(separator=" | ", strip=True)

            # Look for "Starting At $XX/MO" pattern
            price_match = re.search(r"Starting At \$(\d+)/MO", text, re.I)
            if not price_match:
                continue

            unit = UnitResult()
            unit.price = self.normalize_price(price_match.group(1))

            # Extract location name
            # Cards have format "Starting At $XX/MO | Location Name | Address"
            parts = text.split("|")
            if len(parts) >= 2:
                unit.description = parts[1].strip()

            if unit.price is not None:
                result.units.append(unit)

        if not result.units:
            result.warnings.append(
                "No unit data found - this is a multi-location directory page."
            )

        return result

Scrape Runs (4)

Run #1068 Details

Status
exported
Parser Used
Facility109027Parser
Platform Detected
ccstorage
Units Found
10
Stage Reached
exported
Timestamp
2026-03-23 02:43:27.902622
Timing
Stage Duration
Fetch5504ms
Detect54ms
Parse169ms
Export5ms

Snapshot: 109027_20260323T024333Z.html · Show Snapshot · Open in New Tab

Parsed Units (10)

Unknown Size

$55.00/mo

Unknown Size

$50.00/mo

Unknown Size

$57.00/mo

Unknown Size

$56.00/mo

Unknown Size

$64.00/mo

Unknown Size

$61.00/mo

Unknown Size

$21.00/mo

Unknown Size

$70.00/mo

Unknown Size

$64.00/mo

Unknown Size

$11.00/mo

← Back to dashboard