I need photos from a specific real estate listing. Please browse to this Compass listing page and extract all the listing photo URLs:

https://www.compass.com/homedetails/3213-Herradura-Dr-Leander-TX-78641/1364037881138127177_lid/

Open the page fully, click to view all photos if needed, and collect all the image URLs shown in the gallery. I need at least 6 high-resolution photo URLs.

If Compass doesn't work well, also try searching for "3213 Herradura Dr Leander TX 78641 listing photos" to find the photos on Zillow, Redfin, or any other real estate site.

The property is a 4 bed/3 bath, 3504 sqft home sold in December 2023 for $895,000 in Leander TX (Caballo Ranch subdivision).

Return all the photo URLs you find, as many as possible (ideally 8+).


ToolSearch

Question: select:WebFetch,WebSearch


I'll use the agent-browser skill to browse the Compass listing and extract photo URLs.


Skill

Browse to https://www.compass.com/homedetails/3213-Herradura-Dr-Leander-TX-78641/1364037881138127177_lid/ and extract all listing photo URLs from the gallery. Click through to view all photos if there's a "view all photos" button. Also try to find high-resolution image URLs. Return as many photo URLs as possible, ideally 8 or more. If Compass blocks or doesn't load well, also search for "3213 Herradura Dr Leander TX 78641" on Zillow and Redfin to find listing photos there. The property is a 4 bed/3 bath, 3504 sqft home sold in December 2023 for $895,000 in Leander TX (Caballo Ranch subdivision). I need actual direct image URLs (ending in .jpg, .png, .webp, or similar), not page URLs.


Launching skill: agent-browser


Base directory for this skill: /home/node/.claude/skills/agent-browser

# Browser Automation with agent-browser

## Quick start

```bash
agent-browser open <url>        # Navigate to page
agent-browser snapshot -i       # Get interactive elements with refs
agent-browser click @e1         # Click element by ref
agent-browser fill @e2 "text"   # Fill input by ref
agent-browser close             # Close browser
```

## Core workflow

1. Navigate: `agent-browser open <url>`
2. Snapshot: `agent-browser snapshot -i` (returns elements with refs like `@e1`, `@e2`)
3. Interact using refs from the snapshot
4. Re-snapshot after navigation or significant DOM changes

## Commands

### Navigation

```bash
agent-browser open <url>      # Navigate to URL
agent-browser back            # Go back
agent-browser forward         # Go forward
agent-browser reload          # Reload page
agent-browser close           # Close browser
```

### Snapshot (page analysis)

```bash
agent-browser snapshot            # Full accessibility tree
agent-browser snapshot -i         # Interactive elements only (recommended)
agent-browser snapshot -c         # Compact output
agent-browser snapshot -d 3       # Limit depth to 3
agent-browser snapshot -s "#main" # Scope to CSS selector
```

### Interactions (use @refs from snapshot)

```bash
agent-browser click @e1           # Click
agent-browser dblclick @e1        # Double-click
agent-browser fill @e2 "text"     # Clear and type
agent-browser type @e2 "text"     # Type without clearing
agent-browser press Enter         # Press key
agent-browser hover @e1           # Hover
agent-browser check @e1           # Check checkbox
agent-browser uncheck @e1         # Uncheck checkbox
agent-browser select @e1 "value"  # Select dropdown option
agent-browser scroll down 500     # Scroll page
agent-browser upload @e1 file.pdf # Upload files
```

### Get information

```bash
agent-browser get text @e1        # Get element text
agent-browser get html @e1        # Get innerHTML
agent-browser get value @e1       # Get input value
agent-browser get attr @e1 href   # Get attribute
agent-browser get title           # Get page title
agent-browser get url             # Get current URL
agent-browser get count ".item"   # Count matching elements
```

### Screenshots & PDF

```bash
agent-browser screenshot          # Save to temp directory
agent-browser screenshot path.png # Save to specific path
agent-browser screenshot --full   # Full page
agent-browser pdf output.pdf      # Save as PDF
```

### Wait

```bash
agent-browser wait @e1                     # Wait for element
agent-browser wait 2000                    # Wait milliseconds
agent-browser wait --text "Success"        # Wait for text
agent-browser wait --url "**/dashboard"    # Wait for URL pattern
agent-browser wait --load networkidle      # Wait for network idle
```

### Semantic locators (alternative to refs)

```bash
agent-browser find role button click --name "Submit"
agent-browser find text "Sign In" click
agent-browser find label "Email" fill "user@test.com"
agent-browser find placeholder "Search" type "query"
```

### Authentication with saved state

```bash
# Login once
agent-browser open https://app.example.com/login
agent-browser snapshot -i
agent-browser fill @e1 "username"
agent-browser fill @e2 "password"
agent-browser click @e3
agent-browser wait --url "**/dashboard"
agent-browser state save auth.json

# Later: load saved state
agent-browser state load auth.json
agent-browser open https://app.example.com/dashboard
```

### Cookies & Storage

```bash
agent-browser cookies                     # Get all cookies
agent-browser cookies set name value      # Set cookie
agent-browser cookies clear               # Clear cookies
agent-browser storage local               # Get localStorage
agent-browser storage local set k v       # Set value
```

### JavaScript

```bash
agent-browser eval "document.title"   # Run JavaScript
```

## Example: Form submission

```bash
agent-browser open https://example.com/form
agent-browser snapshot -i
# Output shows: textbox "Email" [ref=e1], textbox "Password" [ref=e2], button "Submit" [ref=e3]

agent-browser fill @e1 "user@example.com"
agent-browser fill @e2 "password123"
agent-browser click @e3
agent-browser wait --load networkidle
agent-browser snapshot -i  # Check result
```

## Example: Data extraction

```bash
agent-browser open https://example.com/products
agent-browser snapshot -i
agent-browser get text @e1  # Get product title
agent-browser get attr @e2 href  # Get link URL
agent-browser screenshot products.png
```

ARGUMENTS: Browse to https://www.compass.com/homedetails/3213-Herradura-Dr-Leander-TX-78641/1364037881138127177_lid/ and extract all listing photo URLs from the gallery. Click through to view all photos if there's a "view all photos" button. Also try to find high-resolution image URLs. Return as many photo URLs as possible, ideally 8 or more. If Compass blocks or doesn't load well, also search for "3213 Herradura Dr Leander TX 78641" on Zillow and Redfin to find listing photos there. The property is a 4 bed/3 bath, 3504 sqft home sold in December 2023 for $895,000 in Leander TX (Caballo Ranch subdivision). I need actual direct image URLs (ending in .jpg, .png, .webp, or similar), not page URLs.


I'll browse the Compass listing and extract all photo URLs.


Error: Exit code 1
(node:1871) [UNDICI-EHPA] Warning: EnvHttpProxyAgent is experimental, expect them to change at any time.
(Use `node --trace-warnings ...` to show where the warning was created)
✗ Chrome exited early (exit code: unknown) without writing DevToolsActivePort
(also tried parsing stderr) Chrome exited before providing DevTools URL
Chrome stderr:
  [2065:2092:0708/104502.543093:ERROR:dbus/bus.cc:405] Failed to connect to the bus: Failed to connect to socket /run/dbus/system_bus_socket: No such file or directory
  [2065:2092:0708/104502.545100:ERROR:dbus/bus.cc:405] Failed to connect to the bus: Could not parse server address: Unknown address type (examples of valid types are "tcp" and on UNIX "unix")
  [2065:2092:0708/104502.545192:ERROR:dbus/bus.cc:405] Failed to connect to the bus: Failed to connect to socket /run/dbus/system_bus_socket: No such file or directory
  [2065:2092:0708/104502.545211:ERROR:dbus/bus.cc:405] Failed to connect to the bus: Failed to connect to socket /run/dbus/system_bus_socket: No such file or directory
  [2065:2092:0708/104502.545217:ERROR:dbus/bus.cc:405] Failed to connect to the bus: Could not parse server address: Unknown address type (examples of valid types are "tcp" and on UNIX "unix")
  [2065:2092:0708/104502.559764:ERROR:dbus/bus.cc:405] Failed to connect to the bus: Could not parse server address: Unknown address type (examples of valid types are "tcp" and on UNIX "unix")
  [0708/104502.578862:ERROR:third_party/crashpad/crashpad/util/file/file_io_posix.cc:145] open /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq: No such file or directory (2)
  [0708/104502.578887:ERROR:third_party/crashpad/crashpad/util/file/file_io_posix.cc:145] open /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq: No such file or directory (2)


Chrome needs different flags to run in this container. Let me try with the right options.


Bash

which agent-browser && agent-browser --help 2>&1 | head -30


/pnpm/agent-browser
(node:2157) [UNDICI-EHPA] Warning: EnvHttpProxyAgent is experimental, expect them to change at any time.
(Use `node --trace-warnings ...` to show where the warning was created)

agent-browser - fast browser automation CLI for AI agents

Usage: agent-browser <command> [args] [options]

Start here (for AI agents):
  agent-browser skills get core --full

  Skills ship with the CLI (always version-matched) and include workflow
  patterns, ref/selector usage, and copy-paste examples. Prefer this over
  guessing commands from flag docs alone. Specialized skills cover Electron
  apps, Slack, exploratory testing, and cloud browser providers.

  skills [list]                List available skills
  skills get core              Core usage guide (overview + common patterns)
  skills get core --full       Include full command reference and templates
  skills get <name>            Load a specialized skill (electron, slack, ...)
  skills path [name]           Print skill directory path

Core Commands:
  open <url>                 Navigate to URL
  read [url]                 Fetch agent-readable text
  click <sel>                Click element (or @ref)
  dblclick <sel>             Double-click element
  type <sel> <text>          Type into element
  fill <sel> <text>          Clear and fill
  press <key>                Press key (Enter, Tab, Control+a)
  keyboard type <text>       Type text with real keystrokes (no selector)


agent-browser skills get core 2>&1 | head -50


(node:2176) [UNDICI-EHPA] Warning: EnvHttpProxyAgent is experimental, expect them to change at any time.
(Use `node --trace-warnings ...` to show where the warning was created)
---
name: core
description: Core agent-browser usage guide. Read this before running any agent-browser commands. Covers the snapshot-and-ref workflow, navigating pages, interacting with elements (click, fill, type, select), extracting text and data, taking screenshots, managing tabs, handling forms and auth, waiting for content, running multiple browser sessions in parallel, and troubleshooting common failures. Use when the user asks to interact with a website, fill a form, click something, extract data, take a screenshot, log into a site, test a web app, or automate any browser task.
allowed-tools: Bash(agent-browser:*), Bash(npx agent-browser:*)
---

# agent-browser core

Fast browser automation CLI for AI agents. Chrome/Chromium via CDP, no Playwright or Puppeteer dependency. Accessibility-tree snapshots with compact `@eN` refs let agents interact with pages in ~200-400 tokens instead of parsing raw HTML.

Most normal web tasks (navigate, read, click, fill, extract, screenshot) are covered here. Load a specialized skill when the task falls outside browser web pages — see [When to load another skill](#when-to-load-another-skill).

## The core loop

```bash
agent-browser open <url>        # 1. Open a page
agent-browser snapshot -i       # 2. See what's on it (interactive elements only)
agent-browser click @e3         # 3. Act on refs from the snapshot
agent-browser snapshot -i       # 4. Re-snapshot after any page change
```

Refs (`@e1`, `@e2`, ...) are assigned fresh on every snapshot. They become **stale the moment the page changes** — after clicks that navigate, form submits, dynamic re-renders, dialog opens. Always re-snapshot before your next ref interaction.

## Quickstart

```bash
# Install once
npm i -g agent-browser && agent-browser install

# Linux hosts can install required browser libraries too
agent-browser install --with-deps

# Take a screenshot of a page
agent-browser open https://example.com
agent-browser screenshot home.png
agent-browser close

# Search, click a result, and capture it
agent-browser open https://duckduckgo.com
agent-browser snapshot -i                      # find the search box ref
agent-browser fill @e1 "agent-browser cli"
agent-browser press Enter
agent-browser wait --load networkidle
agent-browser snapshot -i                      # refs now reflect results
agent-browser click @e5                        # click a result
agent-browser screenshot result.png
```


agent-browser install --with-deps 2>&1 | tail -20


(node:2203) [UNDICI-EHPA] Warning: EnvHttpProxyAgent is experimental, expect them to change at any time.
(Use `node --trace-warnings ...` to show where the warning was created)
✗ Chrome for Testing does not provide Linux ARM64 builds.
  Install Chromium from your system package manager instead:
    sudo apt install chromium-browser   # Debian/Ubuntu
    sudo dnf install chromium            # Fedora
  Then use: agent-browser --executable-path /usr/bin/chromium


sudo apt-get install -y chromium-browser 2>&1 | tail -10


/bin/bash: line 1: sudo: command not found


apt-get install -y chromium 2>&1 | tail -10


E: Could not open lock file /var/lib/dpkg/lock-frontend - open (13: Permission denied)
E: Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), are you root?


which chromium chromium-browser google-chrome 2>/dev/null || ls /usr/bin/chrom* 2>/dev/null || echo "No chromium found"


/usr/bin/chromium
/usr/bin/chromium


agent-browser --executable-path /usr/bin/chromium open https://www.compass.com/homedetails/3213-Herradura-Dr-Leander-TX-78641/1364037881138127177_lid/ 2>&1 | head -30


(node:2235) [UNDICI-EHPA] Warning: EnvHttpProxyAgent is experimental, expect them to change at any time.
(Use `node --trace-warnings ...` to show where the warning was created)
✗ Chrome exited early (exit code: unknown) without writing DevToolsActivePort
(also tried parsing stderr) Chrome exited before providing DevTools URL
Chrome stderr:
  [2431:2458:0708/104532.568305:ERROR:dbus/bus.cc:405] Failed to connect to the bus: Failed to connect to socket /run/dbus/system_bus_socket: No such file or directory
  [2431:2458:0708/104532.570423:ERROR:dbus/bus.cc:405] Failed to connect to the bus: Could not parse server address: Unknown address type (examples of valid types are "tcp" and on UNIX "unix")
  [2431:2458:0708/104532.570460:ERROR:dbus/bus.cc:405] Failed to connect to the bus: Failed to connect to socket /run/dbus/system_bus_socket: No such file or directory
  [2431:2458:0708/104532.570470:ERROR:dbus/bus.cc:405] Failed to connect to the bus: Failed to connect to socket /run/dbus/system_bus_socket: No such file or directory
  [2431:2458:0708/104532.570474:ERROR:dbus/bus.cc:405] Failed to connect to the bus: Could not parse server address: Unknown address type (examples of valid types are "tcp" and on UNIX "unix")
  [2431:2458:0708/104532.584375:ERROR:dbus/bus.cc:405] Failed to connect to the bus: Could not parse server address: Unknown address type (examples of valid types are "tcp" and on UNIX "unix")
  [0708/104532.608287:ERROR:third_party/crashpad/crashpad/util/file/file_io_posix.cc:145] open /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq: No such file or directory (2)
  [0708/104532.608310:ERROR:third_party/crashpad/crashpad/util/file/file_io_posix.cc:145] open /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq: No such file or directory (2)


CHROMIUM_FLAGS="--no-sandbox --disable-gpu --disable-dev-shm-usage --headless=new --disable-setuid-sandbox" agent-browser --executable-path /usr/bin/chromium --browser-arg="--no-sandbox" --browser-arg="--disable-gpu" --browser-arg="--disable-dev-shm-usage" open https://www.compass.com/homedetails/3213-Herradura-Dr-Leander-TX-78641/1364037881138127177_lid/ 2>&1 | head -20


(node:2522) [UNDICI-EHPA] Warning: EnvHttpProxyAgent is experimental, expect them to change at any time.
(Use `node --trace-warnings ...` to show where the warning was created)
Unknown command: --browser-arg=--no-sandbox


agent-browser --help 2>&1 | grep -i "sandbox\|chrome\|browser\|exec\|arg\|flag" | head -20


agent-browser - fast browser automation CLI for AI agents
Usage: agent-browser <command> [args] [options]
  agent-browser skills get core --full
  guessing commands from flag docs alone. Specialized skills cover Electron
  apps, Slack, exploratory testing, and cloud browser providers.
  connect <port|url>         Connect to browser via CDP
  close [--all]              Close browser (--all closes every session)
Get Info:  agent-browser get <what> [selector]
Check State:  agent-browser is <what> <selector>
Find Elements:  agent-browser find <locator> <value> <action> [text]
Mouse:  agent-browser mouse <action> [args]
Browser Settings:  agent-browser set <setting> [value]
Network:  agent-browser network <action>
  trace start                Start Chrome DevTools trace
  trace stop [path]          Stop and save Chrome DevTools trace
  profiler start|stop [path] Record Chrome DevTools profile
  inspect                    Open Chrome DevTools for the active page
  batch [--bail] ["cmd" ...]  Execute multiple commands sequentially (args or stdin)
  mcp                        Start an MCP stdio server exposing agent-browser tools
  install                    Install browser binaries


agent-browser skills get core --full 2>&1 | grep -A 20 "sandbox\|Linux\|container\|no-sandbox" | head -40


# Linux hosts can install required browser libraries too
agent-browser install --with-deps

# Take a screenshot of a page
agent-browser open https://example.com
agent-browser screenshot home.png
agent-browser close

# Search, click a result, and capture it
agent-browser open https://duckduckgo.com
agent-browser snapshot -i                      # find the search box ref
agent-browser fill @e1 "agent-browser cli"
agent-browser press Enter
agent-browser wait --load networkidle
agent-browser snapshot -i                      # refs now reflect results
agent-browser click @e5                        # click a result
agent-browser screenshot result.png
```

The browser stays running across commands so these feel like a single session. Use `agent-browser close` (or `close --all`) when you're done.

--
- **Vercel Sandbox microVMs**: `agent-browser skills get vercel-sandbox`
- **AWS Bedrock AgentCore cloud browser**: `agent-browser skills get agentcore`

## React / Web Vitals (built-in, any React app)

agent-browser ships with first-class React introspection. Works on any React app — Next.js, Remix, Vite+React, CRA, TanStack Start, React Native Web, etc. The `react …` commands require the React DevTools hook to be installed at launch via `--enable react-devtools`:

```bash
agent-browser open --enable react-devtools http://localhost:3000
agent-browser react tree                         # component tree
agent-browser react inspect <fiberId>            # props, hooks, state, source
agent-browser react renders start                # begin re-render recording
agent-browser react renders stop                 # print render profile
agent-browser react suspense [--only-dynamic]    # Suspense boundaries + classifier
agent-browser vitals [url]                       # LCP/CLS/TTFB/FCP/INP + hydration
agent-browser pushstate <url>                    # SPA navigation (auto-detects Next router)
```


agent-browser skills get core --full 2>&1 | grep -A 20 "AGENT_BROWSER_LAUNCH\|launch\|environ\|ENV\|chromium" | head -40


Configure the MCP client to launch `agent-browser` with `["mcp"]`. The server defaults to MCP protocol 2025-11-25 and accepts older supported client protocol versions during initialization. The default tools profile is `core`, which keeps MCP context small for everyday browser automation. Use `--tools all` for the full typed CLI parity surface, or combine profiles with commas, such as `--tools core,network,react`. Profiles are `core`, `network`, `state`, `debug`, `tabs`, `react`, `mobile`, and `all`; the `debug` profile includes plugin registry and command.run tools. Each tool accepts typed arguments plus `extraArgs` for advanced CLI flags and exact CLI parity. Tool discovery is paginated and includes read-only/open-world annotations so modern MCP clients can load the large typed surface incrementally. Use the tool `session` argument or `AGENT_BROWSER_SESSION` to isolate browser sessions.

## Reading a page

```bash
agent-browser snapshot                    # full tree (verbose)
agent-browser snapshot -i                 # interactive elements only (preferred)
agent-browser snapshot -i -u              # include href urls on links
agent-browser snapshot -i -c              # compact (no empty structural nodes)
agent-browser snapshot -i -d 3            # cap depth at 3 levels
agent-browser snapshot -s "#main"         # scope to a CSS selector
agent-browser snapshot -i --json          # machine-readable output
```

Snapshot output looks like:

```
Page: Example - Log in
URL: https://example.com/login

@e1 [heading] "Log in"
--
Use `read [url]` when you need to consume documentation or other text pages rather than interact with a rendered UI. Omit the URL to read the rendered DOM of the active tab in the current browser session, including browser auth state and client-side updates. Explicit URL reads send `Accept: text/markdown`, try the same URL with `.md` appended when the first response is not markdown, walk ancestor paths toward `/` to find the nearest `llms.txt` for a matching docs link, print markdown/plain text when available, and fall back to readable text extracted from HTML without launching Chrome. Add `--filter <text>` to narrow a page to matching heading sections, `--outline` for compact headings on one page, `--llms index` for a compact nearest-ancestor `llms.txt` link list, and `--llms full` only when you explicitly need `llms-full.txt`. With `--llms` or `--require-md`, omitting the URL uses the active tab URL because those modes depend on HTTP resources. With `--llms` or `--outline`, `--filter <text>` narrows links, sections, or headings. Add `--require-md` when you specifically want to verify markdown negotiation, `--raw` when you need the response body unchanged, and `--json` when you need metadata such as `source` and `contentType`. Global safeguards such as `--allowed-domains`, `--content-boundaries`, and `--max-output` also apply to read fetches and output.

## Interacting

```bash
agent-browser click @e1                   # click
agent-browser click @e1 --new-tab         # open link in new tab instead of navigating
agent-browser dblclick @e1                # double-click
agent-browser hover @e1                   # hover
agent-browser focus @e1                   # focus (useful before keyboard input)
agent-browser fill @e2 "hello"            # clear then type
agent-browser type @e2 " world"           # type without clearing
agent-browser press Enter                 # press a key at current focus
agent-browser press Control+a             # key combination
agent-browser check @e3                   # check checkbox
agent-browser uncheck @e3                 # uncheck
agent-browser select @e4 "option-value"   # select dropdown option
agent-browser select @e4 "a" "b"          # select multiple


cat /home/node/.agent-browser.json 2>/dev/null || cat ~/.agent-browser.json 2>/dev/null || echo "No config found"


No config found


ls /home/node/.config/agent-browser/ 2>/dev/null || echo "no config dir"


no config dir


agent-browser skills get core --full 2>&1 | grep -A 10 "config\|\.env\|CHROME\|AGENT_BROWSER" | head -40


Configure the MCP client to launch `agent-browser` with `["mcp"]`. The server defaults to MCP protocol 2025-11-25 and accepts older supported client protocol versions during initialization. The default tools profile is `core`, which keeps MCP context small for everyday browser automation. Use `--tools all` for the full typed CLI parity surface, or combine profiles with commas, such as `--tools core,network,react`. Profiles are `core`, `network`, `state`, `debug`, `tabs`, `react`, `mobile`, and `all`; the `debug` profile includes plugin registry and command.run tools. Each tool accepts typed arguments plus `extraArgs` for advanced CLI flags and exact CLI parity. Tool discovery is paginated and includes read-only/open-world annotations so modern MCP clients can load the large typed surface incrementally. Use the tool `session` argument or `AGENT_BROWSER_SESSION` to isolate browser sessions.

## Reading a page

```bash
agent-browser snapshot                    # full tree (verbose)
agent-browser snapshot -i                 # interactive elements only (preferred)
agent-browser snapshot -i -u              # include href urls on links
agent-browser snapshot -i -c              # compact (no empty structural nodes)
agent-browser snapshot -i -d 3            # cap depth at 3 levels
agent-browser snapshot -s "#main"         # scope to a CSS selector
--
If credentials live in an external vault, use a configured credential provider plugin instead of putting secrets in the command line:

```bash
agent-browser plugin add agent-browser-plugin-vault --name vault
agent-browser plugin list
agent-browser auth login my-app --credential-provider vault --item "My App"
agent-browser auth login my-app --credential-provider vault --item "My App" --url https://app.example.com/login --username-selector "#email" --password-selector "#password"
```

Plugins can also provide browser providers, launch mutators such as stealth setup, and arbitrary namespaced commands:

--
`AGENT_BROWSER_SESSION=myapp` sets the default session for the current shell.

### Mock network requests

```bash
agent-browser network route "**/api/users" --body '{"users":[]}'   # stub a response
agent-browser network route "**/analytics" --abort                 # block entirely
agent-browser network requests                                     # inspect what fired
agent-browser network har start                                    # record all traffic
# ... perform actions ...
agent-browser network har stop /tmp/trace.har
--
agent-browser doctor                     # full diagnosis (env, Chrome, daemons, config, providers, network, launch test)
agent-browser doctor --offline --quick   # fast, local-only
agent-browser doctor --fix               # also run destructive repairs (reinstall Chrome, purge old state, ...)
agent-browser doctor --json              # structured output for programmatic consumption


Providers
  info  Browserless: BROWSERLESS_API_KEY not set
  info  Browserbase: BROWSERBASE_API_KEY not set
  info  Browser Use: BROWSER_USE_API_KEY not set
  info  Kernel: KERNEL_API_KEY not set
  info  AgentCore: no AWS credentials in env (AWS_ACCESS_KEY_ID / AWS_PROFILE)
  info  AI_GATEWAY_API_KEY not set (chat command disabled)
        fix: export AI_GATEWAY_API_KEY=gw_...

Network
  fail  Chrome for Testing CDN unreachable after 6ms: error sending request for url (https://googlechromelabs.github.io/chrome-for-testing/last-known-good-versions-with-downloads.json)
        fix: check network connectivity / firewall / proxy settings

Launch test
  fail  Browser launch failed: Chrome exited early (exit code: unknown) without writing DevToolsActivePort
(also tried parsing stderr) Chrome exited before providing DevTools URL
Chrome stderr:
  [2867:2894:0708/104555.850501:ERROR:dbus/bus.cc:405] Failed to connect to the bus: Failed to connect to socket /run/dbus/system_bus_socket: No such file or directory
  [2867:2894:0708/104555.852464:ERROR:dbus/bus.cc:405] Failed to connect to the bus: Could not parse server address: Unknown address type (examples of valid types are "tcp" and on UNIX "unix")
  [2867:2894:0708/104555.852624:ERROR:dbus/bus.cc:405] Failed to connect to the bus: Failed to connect to socket /run/dbus/system_bus_socket: No such file or directory
  [2867:2894:0708/104555.852639:ERROR:dbus/bus.cc:405] Failed to connect to the bus: Failed to connect to socket /run/dbus/system_bus_socket: No such file or directory
  [2867:2894:0708/104555.852644:ERROR:dbus/bus.cc:405] Failed to connect to the bus: Could not parse server address: Unknown address type (examples of valid types are "tcp" and on UNIX "unix")
  [2867:2894:0708/104555.867272:ERROR:dbus/bus.cc:405] Failed to connect to the bus: Could not parse server address: Unknown address type (examples of valid types are "tcp" and on UNIX "unix")
  [0708/104555.892925:ERROR:third_party/crashpad/crashpad/util/file/file_io_posix.cc:145] open /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq: No such file or directory (2)
  [0708/104555.892948:ERROR:third_party/crashpad/crashpad/util/file/file_io_posix.cc:145] open /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq: No such file or directory (2)
        fix: agent-browser install   # or check --debug output

Summary: 6 pass, 0 warn, 2 fail

tip: Run with --fix to attempt repairs.


The browser isn't launching because it needs `--no-sandbox` flags in this container. Let me try launching Chromium directly with those flags and connecting via CDP, then use the `read` command as a fallback.


/usr/bin/chromium --no-sandbox --disable-gpu --disable-dev-shm-usage --headless=new --remote-debugging-port=9222 --remote-debugging-address=0.0.0.0 2>/tmp/chromium.log &
sleep 3
curl -s http://localhost:9222/json/version | head -5


/bin/bash: line 4:  2956 Trace/breakpoint trap   /usr/bin/chromium --no-sandbox --disable-gpu --disable-dev-shm-usage --headless=new --remote-debugging-port=9222 --remote-debugging-address=0.0.0.0 2> /tmp/chromium.log


[2956:2984:0708/104601.663211:ERROR:dbus/bus.cc:405] Failed to connect to the bus: Failed to connect to socket /run/dbus/system_bus_socket: No such file or directory
[2956:2984:0708/104601.665533:ERROR:dbus/bus.cc:405] Failed to connect to the bus: Could not parse server address: Unknown address type (examples of valid types are "tcp" and on UNIX "unix")
[2956:2984:0708/104601.665660:ERROR:dbus/bus.cc:405] Failed to connect to the bus: Failed to connect to socket /run/dbus/system_bus_socket: No such file or directory
[2956:2984:0708/104601.665709:ERROR:dbus/bus.cc:405] Failed to connect to the bus: Failed to connect to socket /run/dbus/system_bus_socket: No such file or directory
[2956:2984:0708/104601.665715:ERROR:dbus/bus.cc:405] Failed to connect to the bus: Could not parse server address: Unknown address type (examples of valid types are "tcp" and on UNIX "unix")
[2956:2984:0708/104601.668494:ERROR:dbus/bus.cc:405] Failed to connect to the bus: Could not parse server address: Unknown address type (examples of valid types are "tcp" and on UNIX "unix")
[2956:2984:0708/104601.679328:ERROR:dbus/bus.cc:405] Failed to connect to the bus: Could not parse server address: Unknown address type (examples of valid types are "tcp" and on UNIX "unix")
[0708/104601.688107:ERROR:third_party/crashpad/crashpad/util/file/file_io_posix.cc:145] open /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq: No such file or directory (2)
[0708/104601.688130:ERROR:third_party/crashpad/crashpad/util/file/file_io_posix.cc:145] open /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq: No such file or directory (2)


Chromium crashes immediately (SIGTRAP/trace trap) — likely a kernel capability issue in this container. Let me use the `read` command and web fetch approaches instead, which don't require a running browser.


agent-browser read https://www.compass.com/homedetails/3213-Herradura-Dr-Leander-TX-78641/1364037881138127177_lid/ 2>&1 | head -100


(node:3059) [UNDICI-EHPA] Warning: EnvHttpProxyAgent is experimental, expect them to change at any time.
(Use `node --trace-warnings ...` to show where the warning was created)
✗ Chrome exited early (exit code: unknown) without writing DevToolsActivePort
(also tried parsing stderr) Chrome exited before providing DevTools URL
Chrome stderr:
  [3253:3280:0708/104617.739843:ERROR:dbus/bus.cc:405] Failed to connect to the bus: Failed to connect to socket /run/dbus/system_bus_socket: No such file or directory
  [3253:3280:0708/104617.741654:ERROR:dbus/bus.cc:405] Failed to connect to the bus: Could not parse server address: Unknown address type (examples of valid types are "tcp" and on UNIX "unix")
  [3253:3280:0708/104617.741735:ERROR:dbus/bus.cc:405] Failed to connect to the bus: Failed to connect to socket /run/dbus/system_bus_socket: No such file or directory
  [3253:3280:0708/104617.741756:ERROR:dbus/bus.cc:405] Failed to connect to the bus: Failed to connect to socket /run/dbus/system_bus_socket: No such file or directory
  [3253:3280:0708/104617.741805:ERROR:dbus/bus.cc:405] Failed to connect to the bus: Could not parse server address: Unknown address type (examples of valid types are "tcp" and on UNIX "unix")
  [3253:3280:0708/104617.755427:ERROR:dbus/bus.cc:405] Failed to connect to the bus: Could not parse server address: Unknown address type (examples of valid types are "tcp" and on UNIX "unix")
  [0708/104617.785397:ERROR:third_party/crashpad/crashpad/util/file/file_io_posix.cc:145] open /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq: No such file or directory (2)
  [0708/104617.785418:ERROR:third_party/crashpad/crashpad/util/file/file_io_posix.cc:145] open /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq: No such file or directory (2)


The browser can't launch in this container at all. Let me use curl and WebFetch to pull the page HTML and search for image URLs directly.


curl -s -L --max-time 20 -A "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36" "https://www.compass.com/homedetails/3213-Herradura-Dr-Leander-TX-78641/1364037881138127177_lid/" 2>&1 | grep -o '"url":"[^"]*\.\(jpg\|jpeg\|png\|webp\)[^"]*"' | head -30


"url":"https:\u002F\u002Fwww.compass.com\u002Fm\u002F5ce703f71f9f24742c747724c4234a7bc0d2853ef625cdddbf44c0022b206cfa\u002Forigin.jpg"


curl -s -L --max-time 20 -A "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36" "https://www.compass.com/homedetails/3213-Herradura-Dr-Leander-TX-78641/1364037881138127177_lid/" 2>&1 | python3 -c "
import sys, re, json

content = sys.stdin.read()

# Find all image URLs in the page
patterns = [
    r'\"url\":\"(https://www\.compass\.com/m/[^\"]+)\"',
    r'\"photo_url\":\"([^\"]+\.(?:jpg|jpeg|png|webp))\"',
    r'\"src\":\"(https://[^\"]+\.(?:jpg|jpeg|png|webp)[^\"]*?)\"',
    r'https://[^\"\\s<>]+/origin\.jpg',
    r'https://[^\"\\s<>]+\.(?:jpg|jpeg|png|webp)[^\"\s<>]*',
]

found = set()
for pat in patterns:
    matches = re.findall(pat, content)
    for m in matches:
        if isinstance(m, str):
            found.add(m)

# Decode unicode escapes
decoded = set()
for url in found:
    try:
        decoded.add(url.encode().decode('unicode_escape'))
    except:
        decoded.add(url)

for u in sorted(decoded):
    print(u)
"


Only one image is being returned in the initial HTML — Compass loads the gallery via JavaScript. Let me try to find the API endpoint or JSON data that contains all photos.


curl -s -L --max-time 20 -A "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36" "https://www.compass.com/homedetails/3213-Herradura-Dr-Leander-TX-78641/1364037881138127177_lid/" 2>&1 | python3 -c "
import sys, re, json

content = sys.stdin.read()

# Look for JSON blob in the page with 'photos' or 'images'
# Look for __NEXT_DATA__ or __INITIAL_STATE__
matches = re.findall(r'<script[^>]*id=[\"\'']__NEXT_DATA__[\"\''][^>]*>(.*?)</script>', content, re.DOTALL)
if matches:
    print('Found __NEXT_DATA__, length:', len(matches[0]))
    # Try to parse JSON
    try:
        data = json.loads(matches[0])
        print(json.dumps(data, indent=2)[:5000])
    except Exception as e:
        print('Parse error:', e)
        print(matches[0][:2000])
else:
    print('No __NEXT_DATA__ found')
    # Print all script tags
    scripts = re.findall(r'<script[^>]*>(.*?)</script>', content, re.DOTALL)
    for i, s in enumerate(scripts[:5]):
        print(f'Script {i}: {s[:200]}')
        print('---')
" 2>&1 | head -100


  File "<string>", line 8
    matches = re.findall(r'<script[^>]*id=["\'']__NEXT_DATA__["\''][^>]*>(.*?)</script>', content, re.DOTALL)
                                               ^
SyntaxError: closing parenthesis ']' does not match opening parenthesis '('


curl -s -L --max-time 20 -A "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36" "https://www.compass.com/homedetails/3213-Herradura-Dr-Leander-TX-78641/1364037881138127177_lid/" > /tmp/compass.html 2>&1
wc -c /tmp/compass.html
python3 -c "
import re

with open('/tmp/compass.html') as f:
    content = f.read()

# Check for __NEXT_DATA__
if '__NEXT_DATA__' in content:
    print('Found __NEXT_DATA__')
else:
    print('No __NEXT_DATA__')

# Check for listing data
if 'listingId' in content or 'listing_id' in content:
    print('Found listing ID references')

# Count compass.com/m/ URLs
matches = re.findall(r'compass\.com/m/[a-f0-9]+/[^\"\\s]+', content)
print('Compass image refs:', len(matches))
for m in set(matches):
    print(' ', m)

# Look for JSON-LD
jsonld = re.findall(r'<script type=\"application/ld\+json\">(.*?)</script>', content, re.DOTALL)
if jsonld:
    print('Found JSON-LD schemas:', len(jsonld))
    for j in jsonld:
        print(j[:500])
"


668568 /tmp/compass.html
No __NEXT_DATA__
Found listing ID references
Compass image refs: 11
  compass.com/m/5ce703f71f9f24742c747724c4234a7bc0d2853ef625cdddbf44c0022b206cfa/1500x1000.jpg
  compass.com/m/5ce703f71f9f24742c747724c4234a7bc0d2853ef625cdddbf44c0022b206cfa/165x165.webp
  compass.com/m/5ce703f71f9f24742c747724c4234a7bc0d2853ef625cdddbf44c0022b206cfa/origin.webp
  compass.com/m/5ce703f71f9f24742c747724c4234a7bc0d2853ef625cdddbf44c0022b206cfa/origin.jpg
  compass.com/m/5ce703f71f9f24742c747724c4234a7bc0d2853ef625cdddbf44c0022b206cfa/640x480.jpg
  compass.com/m/5ce703f71f9f24742c747724c4234a7bc0d2853ef625cdddbf44c0022b206cfa/1500x1000.webp
  compass.com/m/5ce703f71f9f24742c747724c4234a7bc0d2853ef625cdddbf44c0022b206cfa/165x165.jpg
  compass.com/m/5ce703f71f9f24742c747724c4234a7bc0d2853ef625cdddbf44c0022b206cfa/640x480.webp
Found JSON-LD schemas: 1

          {"@context":"https:\u002F\u002Fschema.org","@graph":[{"@type":["SingleFamilyResidence","RealEstateListing","Product"],"@id":"https:\u002F\u002Fwww.compass.com\u002Fhomedetails\u002F3213-Herradura-Dr-Leander-TX-78641\u002F1364037881138127177_lid\u002F","mpn":"1364037881138127177","brand":{"@context":"https:\u002F\u002Fschema.org","@type":"Brand","name":"Compass Real Estate","logo":"https:\u002F\u002Fwww.compass.com\u002Fucfe-assets\u002Fpublic-media\u002Fcompass_logo.svg","url":"https:


python3 -c "
import re, json

with open('/tmp/compass.html') as f:
    content = f.read()

# Extract the full JSON-LD
jsonld = re.findall(r'<script type=\"application/ld\+json\">(.*?)</script>', content, re.DOTALL)
for j in jsonld:
    # Decode unicode escapes
    try:
        data = json.loads(j)
        print(json.dumps(data, indent=2))
    except Exception as e:
        print('Error:', e)
        print(j[:1000])
" 2>&1 | head -200


{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": [
        "SingleFamilyResidence",
        "RealEstateListing",
        "Product"
      ],
      "@id": "https://www.compass.com/homedetails/3213-Herradura-Dr-Leander-TX-78641/1364037881138127177_lid/",
      "mpn": "1364037881138127177",
      "brand": {
        "@context": "https://schema.org",
        "@type": "Brand",
        "name": "Compass Real Estate",
        "logo": "https://www.compass.com/ucfe-assets/public-media/compass_logo.svg",
        "url": "https://www.compass.com"
      },
      "url": "https://www.compass.com/homedetails/3213-Herradura-Dr-Leander-TX-78641/1364037881138127177_lid/",
      "amenityFeature": [
        {
          "@id": "https://www.compass.com/homedetails/3213-Herradura-Dr-Leander-TX-78641/1364037881138127177_lid/#LocationFeatureSpecification",
          "@type": "LocationFeatureSpecification",
          "name": "Air Conditioning"
        },
        {
          "@id": "https://www.compass.com/homedetails/3213-Herradura-Dr-Leander-TX-78641/1364037881138127177_lid/#LocationFeatureSpecification",
          "@type": "LocationFeatureSpecification",
          "name": "Attached Garage"
        },
        {
          "@id": "https://www.compass.com/homedetails/3213-Herradura-Dr-Leander-TX-78641/1364037881138127177_lid/#LocationFeatureSpecification",
          "@type": "LocationFeatureSpecification",
          "name": "Barbecue Area"
        },
        {
          "@id": "https://www.compass.com/homedetails/3213-Herradura-Dr-Leander-TX-78641/1364037881138127177_lid/#LocationFeatureSpecification",
          "@type": "LocationFeatureSpecification",
          "name": "Breakfast Bar"
        },
        {
          "@id": "https://www.compass.com/homedetails/3213-Herradura-Dr-Leander-TX-78641/1364037881138127177_lid/#LocationFeatureSpecification",
          "@type": "LocationFeatureSpecification",
          "name": "Carpet Floors"
        },
        {
          "@id": "https://www.compass.com/homedetails/3213-Herradura-Dr-Leander-TX-78641/1364037881138127177_lid/#LocationFeatureSpecification",
          "@type": "LocationFeatureSpecification",
          "name": "Ceiling Fan"
        },
        {
          "@id": "https://www.compass.com/homedetails/3213-Herradura-Dr-Leander-TX-78641/1364037881138127177_lid/#LocationFeatureSpecification",
          "@type": "LocationFeatureSpecification",
          "name": "Central AC"
        },
        {
          "@id": "https://www.compass.com/homedetails/3213-Herradura-Dr-Leander-TX-78641/1364037881138127177_lid/#LocationFeatureSpecification",
          "@type": "LocationFeatureSpecification",
          "name": "Central Heating"
        },
        {
          "@id": "https://www.compass.com/homedetails/3213-Herradura-Dr-Leander-TX-78641/1364037881138127177_lid/#LocationFeatureSpecification",
          "@type": "LocationFeatureSpecification",
          "name": "Common Outdoor Space"
        },
        {
          "@id": "https://www.compass.com/homedetails/3213-Herradura-Dr-Leander-TX-78641/1364037881138127177_lid/#LocationFeatureSpecification",
          "@type": "LocationFeatureSpecification",
          "name": "Communal Pool"
        },
        {
          "@id": "https://www.compass.com/homedetails/3213-Herradura-Dr-Leander-TX-78641/1364037881138127177_lid/#LocationFeatureSpecification",
          "@type": "LocationFeatureSpecification",
          "name": "Cooktop"
        },
        {
          "@id": "https://www.compass.com/homedetails/3213-Herradura-Dr-Leander-TX-78641/1364037881138127177_lid/#LocationFeatureSpecification",
          "@type": "LocationFeatureSpecification",
          "name": "Creek Views"
        },
        {
          "@id": "https://www.compass.com/homedetails/3213-Herradura-Dr-Leander-TX-78641/1364037881138127177_lid/#LocationFeatureSpecification",
          "@type": "LocationFeatureSpecification",
          "name": "Dishwasher"
        },
        {
          "@id": "https://www.compass.com/homedetails/3213-Herradura-Dr-Leander-TX-78641/1364037881138127177_lid/#LocationFeatureSpecification",
          "@type": "LocationFeatureSpecification",
          "name": "Disposal"
        },
        {
          "@id": "https://www.compass.com/homedetails/3213-Herradura-Dr-Leander-TX-78641/1364037881138127177_lid/#LocationFeatureSpecification",
          "@type": "LocationFeatureSpecification",
          "name": "Double Oven"
        },
        {
          "@id": "https://www.compass.com/homedetails/3213-Herradura-Dr-Leander-TX-78641/1364037881138127177_lid/#LocationFeatureSpecification",
          "@type": "LocationFeatureSpecification",
          "name": "Electric Oven"
        },
        {
          "@id": "https://www.compass.com/homedetails/3213-Herradura-Dr-Leander-TX-78641/1364037881138127177_lid/#LocationFeatureSpecification",
          "@type": "LocationFeatureSpecification",
          "name": "Fireplace"
        },
        {
          "@id": "https://www.compass.com/homedetails/3213-Herradura-Dr-Leander-TX-78641/1364037881138127177_lid/#LocationFeatureSpecification",
          "@type": "LocationFeatureSpecification",
          "name": "Game Room"
        },
        {
          "@id": "https://www.compass.com/homedetails/3213-Herradura-Dr-Leander-TX-78641/1364037881138127177_lid/#LocationFeatureSpecification",
          "@type": "LocationFeatureSpecification",
          "name": "Garage"
        },
        {
          "@id": "https://www.compass.com/homedetails/3213-Herradura-Dr-Leander-TX-78641/1364037881138127177_lid/#LocationFeatureSpecification",
          "@type": "LocationFeatureSpecification",
          "name": "Gas Heat"
        },
        {
          "@id": "https://www.compass.com/homedetails/3213-Herradura-Dr-Leander-TX-78641/1364037881138127177_lid/#LocationFeatureSpecification",
          "@type": "LocationFeatureSpecification",
          "name": "Gym"
        },
        {
          "@id": "https://www.compass.com/homedetails/3213-Herradura-Dr-Leander-TX-78641/1364037881138127177_lid/#LocationFeatureSpecification",
          "@type": "LocationFeatureSpecification",
          "name": "High Ceilings"
        },
        {
          "@id": "https://www.compass.com/homedetails/3213-Herradura-Dr-Leander-TX-78641/1364037881138127177_lid/#LocationFeatureSpecification",
          "@type": "LocationFeatureSpecification",
          "name": "Hot Water Heating"
        },
        {
          "@id": "https://www.compass.com/homedetails/3213-Herradura-Dr-Leander-TX-78641/1364037881138127177_lid/#LocationFeatureSpecification",
          "@type": "LocationFeatureSpecification",
          "name": "Laundry in Building"
        },
        {
          "@id": "https://www.compass.com/homedetails/3213-Herradura-Dr-Leander-TX-78641/1364037881138127177_lid/#LocationFeatureSpecification",
          "@type": "LocationFeatureSpecification",
          "name": "Microwave"
        },
        {
          "@id": "https://www.compass.com/homedetails/3213-Herradura-Dr-Leander-TX-78641/1364037881138127177_lid/#LocationFeatureSpecification",
          "@type": "LocationFeatureSpecification",
          "name": "Pantry"
        },
        {
          "@id": "https://www.compass.com/homedetails/3213-Herradura-Dr-Leander-TX-78641/1364037881138127177_lid/#LocationFeatureSpecification",
          "@type": "LocationFeatureSpecification",
          "name": "Park Views"
        },
        {
          "@id": "https://www.compass.com/homedetails/3213-Herradura-Dr-Leander-TX-78641/1364037881138127177_lid/#LocationFeatureSpecification",
          "@type": "LocationFeatureSpecification",
          "name": "Patio"
        },
        {
          "@id": "https://www.compass.com/homedetails/3213-Herradura-Dr-Leander-TX-78641/1364037881138127177_lid/#LocationFeatureSpecification",
          "@type": "LocationFeatureSpecification",
          "name": "Playground"
        },
        {
          "@id": "https://www.compass.com/homedetails/3213-Herradura-Dr-Leander-TX-78641/1364037881138127177_lid/#LocationFeatureSpecification",
          "@type": "LocationFeatureSpecification",
          "name": "Playroom"
        },
        {
          "@id": "https://www.compass.com/homedetails/3213-Herradura-Dr-Leander-TX-78641/1364037881138127177_lid/#LocationFeatureSpecification",
          "@type": "LocationFeatureSpecification",
          "name": "Pool"
        },
        {
          "@id": "https://www.compass.com/homedetails/3213-Herradura-Dr-Leander-TX-78641/1364037881138127177_lid/#LocationFeatureSpecification",
          "@type": "LocationFeatureSpecification",
          "name": "Porch"
        },
        {
          "@id": "https://www.compass.com/homedetails/3213-Herradura-Dr-Leander-TX-78641/1364037881138127177_lid/#LocationFeatureSpecification",
          "@type": "LocationFeatureSpecification",
          "name": "Private Outdoor Space"
        },
        {
          "@id": "https://www.compass.com/homedetails/3213-Herradura-Dr-Leander-TX-78641/1364037881138127177_lid/#LocationFeatureSpecification",
          "@type": "LocationFeatureSpecification",
          "name": "Private Yard"
        },
        {
          "@id": "https://www.compass.com/homedetails/3213-Herradura-Dr-Leander-TX-78641/1364037881138127177_lid/#LocationFeatureSpecification",
          "@type": "LocationFeatureSpecification",
          "name": "Recessed Lighting"
        },
        {
          "@id": "https://www.compass.com/homedetails/3213-Herradura-Dr-Leander-TX-78641/1364037881138127177_lid/#LocationFeatureSpecification",
          "@type": "LocationFeatureSpecification",
          "name": "Tile Floors"
        },


python3 -c "
import re, json

with open('/tmp/compass.html') as f:
    content = f.read()

# Extract the full JSON-LD
jsonld = re.findall(r'<script type=\"application/ld\+json\">(.*?)</script>', content, re.DOTALL)
for j in jsonld:
    try:
        data = json.loads(j)
        text = json.dumps(data)
        # Look for image fields
        if 'image' in text.lower():
            print('Images found in JSON-LD:')
            # Extract image fields
            def find_images(obj, path=''):
                if isinstance(obj, dict):
                    for k, v in obj.items():
                        if 'image' in k.lower() or 'photo' in k.lower() or 'media' in k.lower():
                            print(f'  {path}.{k}: {v}')
                        else:
                            find_images(v, path+'.'+k)
                elif isinstance(obj, list):
                    for i, item in enumerate(obj):
                        find_images(item, path+f'[{i}]')
            find_images(data)
    except Exception as e:
        print('Error:', e)
"


Images found in JSON-LD:
  .@graph[0].image: [{'@id': 'https://www.compass.com/homedetails/3213-Herradura-Dr-Leander-TX-78641/1364037881138127177_lid/#image-0', '@type': 'ImageObject', 'url': 'https://www.compass.com/m/5ce703f71f9f24742c747724c4234a7bc0d2853ef625cdddbf44c0022b206cfa/origin.jpg'}]


The JSON-LD only has one image. Compass loads the full gallery via JS/API. Let me look for the listing's MLS ID in the page source and try Compass's internal API, then also check Zillow/Redfin.


python3 -c "
import re

with open('/tmp/compass.html') as f:
    content = f.read()

# Look for any API endpoints or listing IDs that could give us photo data
# MLS ID, listing ID, property ID
patterns = {
    'MLS': r'[\"#]mls[\"_\-]?(?:id|num|number)?[\":]\\s*[\"](\\w+)[\"']',
    'Listing hash': r'[a-f0-9]{64}',
    'photo count': r'[Pp]hoto[s]?.*?(\d+)',
    'API paths': r'(?:api|graphql)[^\"\\s]{5,100}',
    'Apollo state': r'__APOLLO_STATE__',
    'Redux state': r'__REDUX_STATE__',
}

for name, pat in patterns.items():
    matches = re.findall(pat, content)
    if matches:
        print(f'{name}: {list(set(matches))[:5]}')

# Look for the listing details JSON
idx = content.find('photos')
if idx > 0:
    print('Context around photos:', content[max(0,idx-100):idx+300])
"


Error: Exit code 1
  File "<string>", line 10
    'MLS': r'["#]mls["_\-]?(?:id|num|number)?[":]\s*["](\w+)["']',
                                                               ^
SyntaxError: closing parenthesis ']' does not match opening parenthesis '{' on line 9


python3 << 'PYEOF'
import re

with open('/tmp/compass.html') as f:
    content = f.read()

# Look for listing hash/hash-based image IDs
hashes = re.findall(r'[a-f0-9]{64}', content)
print("Listing hashes found:", list(set(hashes))[:10])

# Look for Apollo or Redux state
if '__APOLLO_STATE__' in content:
    print("Found __APOLLO_STATE__")
if '__REDUX_STATE__' in content:
    print("Found __REDUX_STATE__")
if 'INITIAL_STATE' in content:
    print("Found INITIAL_STATE")

# Look for 'photos' keyword
for m in re.finditer(r'photos', content):
    idx = m.start()
    snippet = content[max(0,idx-50):idx+200]
    print("photos context:", repr(snippet[:300]))
    print("---")

# Look for any URLs with 'api'
api_urls = re.findall(r'https?://[^\s"<>]+/api/[^\s"<>]+', content)
print("API URLs:", api_urls[:10])

# Look for graphql
gql_urls = re.findall(r'https?://[^\s"<>]+graphql[^\s"<>]*', content)
print("GraphQL URLs:", gql_urls[:5])
PYEOF


Listing hashes found: ['5ce703f71f9f24742c747724c4234a7bc0d2853ef625cdddbf44c0022b206cfa']
API URLs: []
GraphQL URLs: []


python3 << 'PYEOF'
import re

with open('/tmp/compass.html') as f:
    content = f.read()

# The hash we found - maybe Compass uses a pattern where they number photos
# Let's see what the hash root gives us
hash_id = '5ce703f71f9f24742c747724c4234a7bc0d2853ef625cdddbf44c0022b206cfa'

# Check if there are any script src references to bundles that might have API info
js_srcs = re.findall(r'<script[^>]+src="([^"]+)"', content)
print("Script sources:")
for s in js_srcs[:20]:
    print(" ", s)

# Check what the inline scripts contain
inline_scripts = re.findall(r'<script(?![^>]*src)[^>]*>(.*?)</script>', content, re.DOTALL)
print(f"\nInline scripts: {len(inline_scripts)}")
for i, s in enumerate(inline_scripts[:5]):
    print(f"Script {i} (len={len(s)}): {s[:200]}")
    print("---")
PYEOF


Script sources:
  /ucfe-assets/vendor/react/16.14.0/umd/react.production.min.js
  /ucfe-assets/vendor/react-dom/16.14.0/umd/react-dom.production.min.js

Inline scripts: 11
Script 0 (len=81): window._AutofillCallbackHandler = window._AutofillCallbackHandler || function(){}
---
Script 1 (len=12706):
  (function (global) {
    global.uc = {"geoId":"austin","location":{"latitude":30.424,"longitude":-97.7932},"opty":{"features":{"listing_page_agent_display_compliance":true,"listing_page_legacy_agen
---
Script 2 (len=34971): var __UC_ANALYTICS=(w=>{let a=["compass.com"];function f(e){a=e}function P(){return a}function j({payload:e,next:n}){function t(n){var e;return null==(e=window.document.cookie.split("; ").find(e=>e.st
---
Script 3 (len=251491): !function(e,n){"object"==typeof exports&&"undefined"!=typeof module?module.exports=n():"function"==typeof define&&define.amd?define(n):(e="undefined"!=typeof globalThis?globalThis:e||self).renderNav=n
---
Script 4 (len=1747): !function(){"use strict";function e(e){window.analytics&&window.analytics.track("Consumer Footer Clicked",e)}function t(e){return e.dataset.label||e.textContent?e.dataset.label?e.dataset.label.trim():
---


python3 << 'PYEOF'
import re, json

with open('/tmp/compass.html') as f:
    content = f.read()

# Script 1 has UC data - let's parse it
inline_scripts = re.findall(r'<script(?![^>]*src)[^>]*>(.*?)</script>', content, re.DOTALL)

# Get the uc global data
uc_script = inline_scripts[1]
# Extract the UC object
m = re.search(r'global\.uc\s*=\s*(\{.*?\})\s*;', uc_script, re.DOTALL)
if m:
    try:
        uc_data = json.loads(m.group(1))
        print("UC data:", json.dumps(uc_data, indent=2)[:3000])
    except:
        print("Raw:", m.group(1)[:2000])
else:
    print("No uc= match, script start:", uc_script[:500])

# Let's also look at the full script 1 for listing/photo data
print("\n---FULL SCRIPT 1 SNIPPET---")
# Look for photo-related keys
for m in re.finditer(r'(photo|image|media|gallery)', uc_script, re.IGNORECASE):
    idx = m.start()
    print(f"  [{idx}]", repr(uc_script[max(0,idx-30):idx+100]))
PYEOF


UC data: {
  "geoId": "austin",
  "location": {
    "latitude": 30.424,
    "longitude": -97.7932
  },
  "opty": {
    "features": {
      "listing_page_agent_display_compliance": true,
      "listing_page_legacy_agent_display_compliance": true,
      "listing_page_contact_agent_form_display_compliance": true,
      "listing_page_listing_agent_contact_idx_display": true,
      "listing_page_compass_agent_contact_idx_display": true,
      "listing_payment_calculator_default_mortgage_rate": true,
      "listing_app_prominent_courtesy_of": true,
      "listing_app_both_team_and_courtesy_of": true,
      "listing_page_selling_agent_compliance": true,
      "listing_page_meta_title_abbreviations": true,
      "private_exclusives_lead_form": false,
      "enable__listing_branding": true,
      "listing_page_remove_commute_time_calculation_cache": false,
      "rls_compliance_new_rental_listing_fees_fields": true,
      "moon_listing_page": true,
      "release_client_theme": true,
      "listing_enable_recaptcha_for_email_agent_button": true,
      "listing_page_hide_cih_agent_email": true,
      "listing_page_hide_non_cih_agent_panel": true,
      "listing_remove_similar_sold_homes": true,
      "listing_similar_homes_ssr": false,
      "listing_remove_sms_for_cih": false,
      "listing_page_revamp": false,
      "black_box_and_listing_counts_updates": false,
      "enable__web_branding_sdk": true
    },
    "variables": {
      "listing_page_agent_display_compliance": {
        "vowSourceFeed": "",
        "vowDataset": "",
        "optOutSourceFeed": "national_fizber,nyc_rls_reso,olr,nyc_sibor,national_newhome, uc_property_manual_edits,listing_editor_manual,arcgate",
        "optOutDataset": "national_fizber,nyc_rls_reso,olr,nyc_sibor,national_newhome, uc_property_manual_edits,listing_editor_manual,arcgate",
        "brandedIdxSourceFeed": "",
        "brandedIdxDataset": "",
        "hideListingAgentIDX": "pittsburgh_wpmls,charlotte_canopy",
        "hideListingAgentVOW": ""
      },
      "listing_page_legacy_agent_display_compliance": {
        "sourceFeedName": "toledo_oh_noris,westchester_onekey,westchester_ny_onekey,minneapolis_ranw,peoria_il_rmls,kansas_city_sckmls,kansas_city_saor,salt_lake_city_wfrmls,spokane_spokanemls,madison_scwmls,portland_or_rmls_reso,detroit_realcomp,northern_new_england_nerenmls,oklahoma_city_mlsok,lake_tahoe_mlbor,chicago_gniar,phoenix_armls,minneapolis_northstar,lake_tahoe_remetrolist,hawaii_mauimls,san_antonio_sabor,lake_tahoe_tsmls,charlotte_canopy,denver_ires_bridge,northern_nj_hudson_county,orlando_mfrmls,nashville_grid_realtracs,seattle_nwmls_grid,sf_ebrd,chicago_mred_grid,sf_mlslistings,la_crmls_rets,bright",
        "listingMajorContributingDataset": "toledo_oh_noris,westchester_onekey,westchester_ny_onekey,minneapolis_ranw,peoria_il_rmls,kansas_city_sckmls,kansas_city_saor,salt_lake_city_wfrmls,spokane_spokanemls,madison_scwmls,portland_or_rmls_reso,detroit_realcomp,northern_new_england_nerenmls,oklahoma_city_mlsok

---FULL SCRIPT 1 SNIPPET---


python3 << 'PYEOF'
import re, json

with open('/tmp/compass.html') as f:
    content = f.read()

# Look for the listing data in the inline scripts - it must be there somewhere
# Let's look at what 'listing' related data exists
inline_scripts = re.findall(r'<script(?![^>]*src)[^>]*>(.*?)</script>', content, re.DOTALL)

for i, script in enumerate(inline_scripts):
    if 'listingId' in script or 'listing_id' in script or '1364037881138127177' in script:
        print(f"Found listing ref in script {i}")
        # Find the surrounding context
        for term in ['listingId', 'listing_id', '1364037881138127177']:
            for m in re.finditer(re.escape(term), script):
                idx = m.start()
                print(f"  Term '{term}' at {idx}:", repr(script[max(0,idx-100):idx+200]))
                print()
PYEOF


Found listing ref in script 7
  Term '1364037881138127177' at 232: 'd":"https:\\u002F\\u002Fwww.compass.com\\u002Fhomedetails\\u002F3213-Herradura-Dr-Leander-TX-78641\\u002F1364037881138127177_lid\\u002F","mpn":"1364037881138127177","brand":{"@context":"https:\\u002F\\u002Fschema.org","@type":"Brand","name":"Compass Real Estate","logo":"https:\\u002F\\u002Fwww.compass.com\\u00'

  Term '1364037881138127177' at 270: 'u002Fhomedetails\\u002F3213-Herradura-Dr-Leander-TX-78641\\u002F1364037881138127177_lid\\u002F","mpn":"1364037881138127177","brand":{"@context":"https:\\u002F\\u002Fschema.org","@type":"Brand","name":"Compass Real Estate","logo":"https:\\u002F\\u002Fwww.compass.com\\u002Fucfe-assets\\u002Fpublic-media\\u002Fc'

  Term '1364037881138127177' at 633: 'l":"https:\\u002F\\u002Fwww.compass.com\\u002Fhomedetails\\u002F3213-Herradura-Dr-Leander-TX-78641\\u002F1364037881138127177_lid\\u002F","amenityFeature":[{"@id":"https:\\u002F\\u002Fwww.compass.com\\u002Fhomedetails\\u002F3213-Herradura-Dr-Leander-TX-78641\\u002F1364037881138127177_lid\\u002F#LocationFeatureSp'

  Term '1364037881138127177' at 786: 'd":"https:\\u002F\\u002Fwww.compass.com\\u002Fhomedetails\\u002F3213-Herradura-Dr-Leander-TX-78641\\u002F1364037881138127177_lid\\u002F#LocationFeatureSpecification","@type":"LocationFeatureSpecification","name":"Air Conditioning"},{"@id":"https:\\u002F\\u002Fwww.compass.com\\u002Fhomedetails\\u002F3213-Herra'

  Term '1364037881138127177' at 1016: 'd":"https:\\u002F\\u002Fwww.compass.com\\u002Fhomedetails\\u002F3213-Herradura-Dr-Leander-TX-78641\\u002F1364037881138127177_lid\\u002F#LocationFeatureSpecification","@type":"LocationFeatureSpecification","name":"Attached Garage"},{"@id":"https:\\u002F\\u002Fwww.compass.com\\u002Fhomedetails\\u002F3213-Herrad'

  Term '1364037881138127177' at 1245: 'd":"https:\\u002F\\u002Fwww.compass.com\\u002Fhomedetails\\u002F3213-Herradura-Dr-Leander-TX-78641\\u002F1364037881138127177_lid\\u002F#LocationFeatureSpecification","@type":"LocationFeatureSpecification","name":"Barbecue Area"},{"@id":"https:\\u002F\\u002Fwww.compass.com\\u002Fhomedetails\\u002F3213-Herradur'

  Term '1364037881138127177' at 1472: 'd":"https:\\u002F\\u002Fwww.compass.com\\u002Fhomedetails\\u002F3213-Herradura-Dr-Leander-TX-78641\\u002F1364037881138127177_lid\\u002F#LocationFeatureSpecification","@type":"LocationFeatureSpecification","name":"Breakfast Bar"},{"@id":"https:\\u002F\\u002Fwww.compass.com\\u002Fhomedetails\\u002F3213-Herradur'

  Term '1364037881138127177' at 1699: 'd":"https:\\u002F\\u002Fwww.compass.com\\u002Fhomedetails\\u002F3213-Herradura-Dr-Leander-TX-78641\\u002F1364037881138127177_lid\\u002F#LocationFeatureSpecification","@type":"LocationFeatureSpecification","name":"Carpet Floors"},{"@id":"https:\\u002F\\u002Fwww.compass.com\\u002Fhomedetails\\u002F3213-Herradur'

  Term '1364037881138127177' at 1926: 'd":"https:\\u002F\\u002Fwww.compass.com\\u002Fhomedetails\\u002F3213-Herradura-Dr-Leander-TX-78641\\u002F1364037881138127177_lid\\u002F#LocationFeatureSpecification","@type":"LocationFeatureSpecification","name":"Ceiling Fan"},{"@id":"https:\\u002F\\u002Fwww.compass.com\\u002Fhomedetails\\u002F3213-Herradura-'

  Term '1364037881138127177' at 2151: 'd":"https:\\u002F\\u002Fwww.compass.com\\u002Fhomedetails\\u002F3213-Herradura-Dr-Leander-TX-78641\\u002F1364037881138127177_lid\\u002F#LocationFeatureSpecification","@type":"LocationFeatureSpecification","name":"Central AC"},{"@id":"https:\\u002F\\u002Fwww.compass.com\\u002Fhomedetails\\u002F3213-Herradura-D'

  Term '1364037881138127177' at 2375: 'd":"https:\\u002F\\u002Fwww.compass.com\\u002Fhomedetails\\u002F3213-Herradura-Dr-Leander-TX-78641\\u002F1364037881138127177_lid\\u002F#LocationFeatureSpecification","@type":"LocationFeatureSpecification","name":"Central Heating"},{"@id":"https:\\u002F\\u002Fwww.compass.com\\u002Fhomedetails\\u002F3213-Herrad'

  Term '1364037881138127177' at 2604: 'd":"https:\\u002F\\u002Fwww.compass.com\\u002Fhomedetails\\u002F3213-Herradura-Dr-Leander-TX-78641\\u002F1364037881138127177_lid\\u002F#LocationFeatureSpecification","@type":"LocationFeatureSpecification","name":"Common Outdoor Space"},{"@id":"https:\\u002F\\u002Fwww.compass.com\\u002Fhomedetails\\u002F3213-H'

  Term '1364037881138127177' at 2838: 'd":"https:\\u002F\\u002Fwww.compass.com\\u002Fhomedetails\\u002F3213-Herradura-Dr-Leander-TX-78641\\u002F1364037881138127177_lid\\u002F#LocationFeatureSpecification","@type":"LocationFeatureSpecification","name":"Communal Pool"},{"@id":"https:\\u002F\\u002Fwww.compass.com\\u002Fhomedetails\\u002F3213-Herradur'

  Term '1364037881138127177' at 3065: 'd":"https:\\u002F\\u002Fwww.compass.com\\u002Fhomedetails\\u002F3213-Herradura-Dr-Leander-TX-78641\\u002F1364037881138127177_lid\\u002F#LocationFeatureSpecification","@type":"LocationFeatureSpecification","name":"Cooktop"},{"@id":"https:\\u002F\\u002Fwww.compass.com\\u002Fhomedetails\\u002F3213-Herradura-Dr-L'

  Term '1364037881138127177' at 3286: 'd":"https:\\u002F\\u002Fwww.compass.com\\u002Fhomedetails\\u002F3213-Herradura-Dr-Leander-TX-78641\\u002F1364037881138127177_lid\\u002F#LocationFeatureSpecification","@type":"LocationFeatureSpecification","name":"Creek Views"},{"@id":"https:\\u002F\\u002Fwww.compass.com\\u002Fhomedetails\\u002F3213-Herradura-'

  Term '1364037881138127177' at 3511: 'd":"https:\\u002F\\u002Fwww.compass.com\\u002Fhomedetails\\u002F3213-Herradura-Dr-Leander-TX-78641\\u002F1364037881138127177_lid\\u002F#LocationFeatureSpecification","@type":"LocationFeatureSpecification","name":"Dishwasher"},{"@id":"https:\\u002F\\u002Fwww.compass.com\\u002Fhomedetails\\u002F3213-Herradura-D'

  Term '1364037881138127177' at 3735: 'd":"https:\\u002F\\u002Fwww.compass.com\\u002Fhomedetails\\u002F3213-Herradura-Dr-Leander-TX-78641\\u002F1364037881138127177_lid\\u002F#LocationFeatureSpecification","@type":"LocationFeatureSpecification","name":"Disposal"},{"@id":"https:\\u002F\\u002Fwww.compass.com\\u002Fhomedetails\\u002F3213-Herradura-Dr-'

  Term '1364037881138127177' at 3957: 'd":"https:\\u002F\\u002Fwww.compass.com\\u002Fhomedetails\\u002F3213-Herradura-Dr-Leander-TX-78641\\u002F1364037881138127177_lid\\u002F#LocationFeatureSpecification","@type":"LocationFeatureSpecification","name":"Double Oven"},{"@id":"https:\\u002F\\u002Fwww.compass.com\\u002Fhomedetails\\u002F3213-Herradura-'

  Term '1364037881138127177' at 4182: 'd":"https:\\u002F\\u002Fwww.compass.com\\u002Fhomedetails\\u002F3213-Herradura-Dr-Leander-TX-78641\\u002F1364037881138127177_lid\\u002F#LocationFeatureSpecification","@type":"LocationFeatureSpecification","name":"Electric Oven"},{"@id":"https:\\u002F\\u002Fwww.compass.com\\u002Fhomedetails\\u002F3213-Herradur'

  Term '1364037881138127177' at 4409: 'd":"https:\\u002F\\u002Fwww.compass.com\\u002Fhomedetails\\u002F3213-Herradura-Dr-Leander-TX-78641\\u002F1364037881138127177_lid\\u002F#LocationFeatureSpecification","@type":"LocationFeatureSpecification","name":"Fireplace"},{"@id":"https:\\u002F\\u002Fwww.compass.com\\u002Fhomedetails\\u002F3213-Herradura-Dr'

  Term '1364037881138127177' at 4632: 'd":"https:\\u002F\\u002Fwww.compass.com\\u002Fhomedetails\\u002F3213-Herradura-Dr-Leander-TX-78641\\u002F1364037881138127177_lid\\u002F#LocationFeatureSpecification","@type":"LocationFeatureSpecification","name":"Game Room"},{"@id":"https:\\u002F\\u002Fwww.compass.com\\u002Fhomedetails\\u002F3213-Herradura-Dr'

  Term '1364037881138127177' at 4855: 'd":"https:\\u002F\\u002Fwww.compass.com\\u002Fhomedetails\\u002F3213-Herradura-Dr-Leander-TX-78641\\u002F1364037881138127177_lid\\u002F#LocationFeatureSpecification","@type":"LocationFeatureSpecification","name":"Garage"},{"@id":"https:\\u002F\\u002Fwww.compass.com\\u002Fhomedetails\\u002F3213-Herradura-Dr-Le'

  Term '1364037881138127177' at 5075: 'd":"https:\\u002F\\u002Fwww.compass.com\\u002Fhomedetails\\u002F3213-Herradura-Dr-Leander-TX-78641\\u002F1364037881138127177_lid\\u002F#LocationFeatureSpecification","@type":"LocationFeatureSpecification","name":"Gas Heat"},{"@id":"https:\\u002F\\u002Fwww.compass.com\\u002Fhomedetails\\u002F3213-Herradura-Dr-'

  Term '1364037881138127177' at 5297: 'd":"https:\\u002F\\u002Fwww.compass.com\\u002Fhomedetails\\u002F3213-Herradura-Dr-Leander-TX-78641\\u002F1364037881138127177_lid\\u002F#LocationFeatureSpecification","@type":"LocationFeatureSpecification","name":"Gym"},{"@id":"https:\\u002F\\u002Fwww.compass.com\\u002Fhomedetails\\u002F3213-Herradura-Dr-Leand'

  Term '1364037881138127177' at 5514: 'd":"https:\\u002F\\u002Fwww.compass.com\\u002Fhomedetails\\u002F3213-Herradura-Dr-Leander-TX-78641\\u002F1364037881138127177_lid\\u002F#LocationFeatureSpecification","@type":"LocationFeatureSpecification","name":"High Ceilings"},{"@id":"https:\\u002F\\u002Fwww.compass.com\\u002Fhomedetails\\u002F3213-Herradur'

  Term '1364037881138127177' at 5741: 'd":"https:\\u002F\\u002Fwww.compass.com\\u002Fhomedetails\\u002F3213-Herradura-Dr-Leander-TX-78641\\u002F1364037881138127177_lid\\u002F#LocationFeatureSpecification","@type":"LocationFeatureSpecification","name":"Hot Water Heating"},{"@id":"https:\\u002F\\u002Fwww.compass.com\\u002Fhomedetails\\u002F3213-Herr'

  Term '1364037881138127177' at 5972: 'd":"https:\\u002F\\u002Fwww.compass.com\\u002Fhomedetails\\u002F3213-Herradura-Dr-Leander-TX-78641\\u002F1364037881138127177_lid\\u002F#LocationFeatureSpecification","@type":"LocationFeatureSpecification","name":"Laundry in Building"},{"@id":"https:\\u002F\\u002Fwww.compass.com\\u002Fhomedetails\\u002F3213-He'

  Term '1364037881138127177' at 6205: 'd":"https:\\u002F\\u002Fwww.compass.com\\u002Fhomedetails\\u002F3213-Herradura-Dr-Leander-TX-78641\\u002F1364037881138127177_lid\\u002F#LocationFeatureSpecification","@type":"LocationFeatureSpecification","name":"Microwave"},{"@id":"https:\\u002F\\u002Fwww.compass.com\\u002Fhomedetails\\u002F3213-Herradura-Dr'

  Term '1364037881138127177' at 6428: 'd":"https:\\u002F\\u002Fwww.compass.com\\u002Fhomedetails\\u002F3213-Herradura-Dr-Leander-TX-78641\\u002F1364037881138127177_lid\\u002F#LocationFeatureSpecification","@type":"LocationFeatureSpecification","name":"Pantry"},{"@id":"https:\\u002F\\u002Fwww.compass.com\\u002Fhomedetails\\u002F3213-Herradura-Dr-Le'

  Term '1364037881138127177' at 6648: 'd":"https:\\u002F\\u002Fwww.compass.com\\u002Fhomedetails\\u002F3213-Herradura-Dr-Leander-TX-78641\\u002F1364037881138127177_lid\\u002F#LocationFeatureSpecification","@type":"LocationFeatureSpecification","name":"Park Views"},{"@id":"https:\\u002F\\u002Fwww.compass.com\\u002Fhomedetails\\u002F3213-Herradura-D'

  Term '1364037881138127177' at 6872: 'd":"https:\\u002F\\u002Fwww.compass.com\\u002Fhomedetails\\u002F3213-Herradura-Dr-Leander-TX-78641\\u002F1364037881138127177_lid\\u002F#LocationFeatureSpecification","@type":"LocationFeatureSpecification","name":"Patio"},{"@id":"https:\\u002F\\u002Fwww.compass.com\\u002Fhomedetails\\u002F3213-Herradura-Dr-Lea'

  Term '1364037881138127177' at 7091: 'd":"https:\\u002F\\u002Fwww.compass.com\\u002Fhomedetails\\u002F3213-Herradura-Dr-Leander-TX-78641\\u002F1364037881138127177_lid\\u002F#LocationFeatureSpecification","@type":"LocationFeatureSpecification","name":"Playground"},{"@id":"https:\\u002F\\u002Fwww.compass.com\\u002Fhomedetails\\u002F3213-Herradura-D'

  Term '1364037881138127177' at 7315: 'd":"https:\\u002F\\u002Fwww.compass.com\\u002Fhomedetails\\u002F3213-Herradura-Dr-Leander-TX-78641\\u002F1364037881138127177_lid\\u002F#LocationFeatureSpecification","@type":"LocationFeatureSpecification","name":"Playroom"},{"@id":"https:\\u002F\\u002Fwww.compass.com\\u002Fhomedetails\\u002F3213-Herradura-Dr-'

  Term '1364037881138127177' at 7537: 'd":"https:\\u002F\\u002Fwww.compass.com\\u002Fhomedetails\\u002F3213-Herradura-Dr-Leander-TX-78641\\u002F1364037881138127177_lid\\u002F#LocationFeatureSpecification","@type":"LocationFeatureSpecification","name":"Pool"},{"@id":"https:\\u002F\\u002Fwww.compass.com\\u002Fhomedetails\\u002F3213-Herradura-Dr-Lean'

  Term '1364037881138127177' at 7755: 'd":"https:\\u002F\\u002Fwww.compass.com\\u002Fhomedetails\\u002F3213-Herradura-Dr-Leander-TX-78641\\u002F1364037881138127177_lid\\u002F#LocationFeatureSpecification","@type":"LocationFeatureSpecification","name":"Porch"},{"@id":"https:\\u002F\\u002Fwww.compass.com\\u002Fhomedetails\\u002F3213-Herradura-Dr-Lea'

  Term '1364037881138127177' at 7974: 'd":"https:\\u002F\\u002Fwww.compass.com\\u002Fhomedetails\\u002F3213-Herradura-Dr-Leander-TX-78641\\u002F1364037881138127177_lid\\u002F#LocationFeatureSpecification","@type":"LocationFeatureSpecification","name":"Private Outdoor Space"},{"@id":"https:\\u002F\\u002Fwww.compass.com\\u002Fhomedetails\\u002F3213-'

  Term '1364037881138127177' at 8209: 'd":"https:\\u002F\\u002Fwww.compass.com\\u002Fhomedetails\\u002F3213-Herradura-Dr-Leander-TX-78641\\u002F1364037881138127177_lid\\u002F#LocationFeatureSpecification","@type":"LocationFeatureSpecification","name":"Private Yard"},{"@id":"https:\\u002F\\u002Fwww.compass.com\\u002Fhomedetails\\u002F3213-Herradura'

  Term '1364037881138127177' at 8435: 'd":"https:\\u002F\\u002Fwww.compass.com\\u002Fhomedetails\\u002F3213-Herradura-Dr-Leander-TX-78641\\u002F1364037881138127177_lid\\u002F#LocationFeatureSpecification","@type":"LocationFeatureSpecification","name":"Recessed Lighting"},{"@id":"https:\\u002F\\u002Fwww.compass.com\\u002Fhomedetails\\u002F3213-Herr'

  Term '1364037881138127177' at 8666: 'd":"https:\\u002F\\u002Fwww.compass.com\\u002Fhomedetails\\u002F3213-Herradura-Dr-Leander-TX-78641\\u002F1364037881138127177_lid\\u002F#LocationFeatureSpecification","@type":"LocationFeatureSpecification","name":"Tile Floors"},{"@id":"https:\\u002F\\u002Fwww.compass.com\\u002Fhomedetails\\u002F3213-Herradura-'

  Term '1364037881138127177' at 8891: 'd":"https:\\u002F\\u002Fwww.compass.com\\u002Fhomedetails\\u002F3213-Herradura-Dr-Leander-TX-78641\\u002F1364037881138127177_lid\\u002F#LocationFeatureSpecification","@type":"LocationFeatureSpecification","name":"Vinyl Floors"},{"@id":"https:\\u002F\\u002Fwww.compass.com\\u002Fhomedetails\\u002F3213-Herradura'

  Term '1364037881138127177' at 9117: 'd":"https:\\u002F\\u002Fwww.compass.com\\u002Fhomedetails\\u002F3213-Herradura-Dr-Leander-TX-78641\\u002F1364037881138127177_lid\\u002F#LocationFeatureSpecification","@type":"LocationFeatureSpecification","name":"Walk-in Closet"},{"@id":"https:\\u002F\\u002Fwww.compass.com\\u002Fhomedetails\\u002F3213-Herradu'

  Term '1364037881138127177' at 9345: 'd":"https:\\u002F\\u002Fwww.compass.com\\u002Fhomedetails\\u002F3213-Herradura-Dr-Leander-TX-78641\\u002F1364037881138127177_lid\\u002F#LocationFeatureSpecification","@type":"LocationFeatureSpecification","name":"Washer Hookup"}],"containedInPlace":{"@type":"Place","@id":"https:\\u002F\\u002Fwww.compass.com'

  Term '1364037881138127177' at 9608: 'd":"https:\\u002F\\u002Fwww.compass.com\\u002Fhomedetails\\u002F3213-Herradura-Dr-Leander-TX-78641\\u002F1364037881138127177_lid\\u002F#place","url":"https:\\u002F\\u002Fwww.compass.com\\u002Fhomedetails\\u002F3213-Herradura-Dr-Leander-TX-78641\\u002F1364037881138127177_lid\\u002F#place","name":"3213 Herradura '

  Term '1364037881138127177' at 9748: 'l":"https:\\u002F\\u002Fwww.compass.com\\u002Fhomedetails\\u002F3213-Herradura-Dr-Leander-TX-78641\\u002F1364037881138127177_lid\\u002F#place","name":"3213 Herradura Dr, Leander, TX 78641","address":{"@type":"PostalAddress","@id":"https:\\u002F\\u002Fwww.compass.com\\u002Fhomedetails\\u002F3213-Herradura-Dr-L'

  Term '1364037881138127177' at 9969: 'd":"https:\\u002F\\u002Fwww.compass.com\\u002Fhomedetails\\u002F3213-Herradura-Dr-Leander-TX-78641\\u002F1364037881138127177_lid\\u002F#postalAddress","streetAddress":"3213 Herradura Dr","addressLocality":"Caballo Ranch","addressRegion":"TX","postalCode":"78641","addressCountry":"US"}},"description":"Welc'

  Term '1364037881138127177' at 11875: 'd":"https:\\u002F\\u002Fwww.compass.com\\u002Fhomedetails\\u002F3213-Herradura-Dr-Leander-TX-78641\\u002F1364037881138127177_lid\\u002F#QuantitativeValue"}],"image":[{"@id":"https:\\u002F\\u002Fwww.compass.com\\u002Fhomedetails\\u002F3213-Herradura-Dr-Leander-TX-78641\\u002F1364037881138127177_lid\\u002F#image-'

  Term '1364037881138127177' at 12039: 'd":"https:\\u002F\\u002Fwww.compass.com\\u002Fhomedetails\\u002F3213-Herradura-Dr-Leander-TX-78641\\u002F1364037881138127177_lid\\u002F#image-0","@type":"ImageObject","url":"https:\\u002F\\u002Fwww.compass.com\\u002Fm\\u002F5ce703f71f9f24742c747724c4234a7bc0d2853ef625cdddbf44c0022b206cfa\\u002Forigin.jpg"}],"n'

  Term '1364037881138127177' at 12432: 'd":"https:\\u002F\\u002Fwww.compass.com\\u002Fhomedetails\\u002F3213-Herradura-Dr-Leander-TX-78641\\u002F1364037881138127177_lid\\u002F#offer","name":"3213 Herradura Dr, Leander, TX 78641","url":"https:\\u002F\\u002Fwww.compass.com\\u002Fhomedetails\\u002F3213-Herradura-Dr-Leander-TX-78641\\u002F13640378811381'

  Term '1364037881138127177' at 12618: 'l":"https:\\u002F\\u002Fwww.compass.com\\u002Fhomedetails\\u002F3213-Herradura-Dr-Leander-TX-78641\\u002F1364037881138127177_lid\\u002F","price":895000,"priceCurrency":"USD","itemOffered":"https:\\u002F\\u002Fwww.compass.com\\u002Fhomedetails\\u002F3213-Herradura-Dr-Leander-TX-78641\\u002F1364037881138127177_l'

  Term '1364037881138127177' at 12797: 'd":"https:\\u002F\\u002Fwww.compass.com\\u002Fhomedetails\\u002F3213-Herradura-Dr-Leander-TX-78641\\u002F1364037881138127177_lid\\u002F","offeredBy":{"url":"https:\\u002F\\u002Fwww.compass.com","telephone":"5129255650","@type":"Person","name":"Richard Fowler","email":"richard.fowler@compass.com","@id":"http'

  Term '1364037881138127177' at 13089: 'd":"https:\\u002F\\u002Fwww.compass.com\\u002Fhomedetails\\u002F3213-Herradura-Dr-Leander-TX-78641\\u002F1364037881138127177_lid\\u002F#PersonOrOrganization","address":{"@type":"PostalAddress","@id":"https:\\u002F\\u002Fwww.compass.com\\u002Fhomedetails\\u002F3213-Herradura-Dr-Leander-TX-78641\\u002F1364037881'

  Term '1364037881138127177' at 13279: 'd":"https:\\u002F\\u002Fwww.compass.com\\u002Fhomedetails\\u002F3213-Herradura-Dr-Leander-TX-78641\\u002F1364037881138127177_lid\\u002F#postalAddress","streetAddress":"3213 Herradura Dr","addressLocality":"Caballo Ranch","addressRegion":"TX","postalCode":"78641","addressCountry":"US"}},"seller":{"@context'

  Term '1364037881138127177' at 14108: 'd":"https:\\u002F\\u002Fwww.compass.com\\u002Fhomedetails\\u002F3213-Herradura-Dr-Leander-TX-78641\\u002F1364037881138127177_lid\\u002F#postalAddress","streetAddress":"3213 Herradura Dr","addressLocality":"Caballo Ranch","addressRegion":"TX","postalCode":"78641","addressCountry":"US"},"accommodationFloorP'

  Term '1364037881138127177' at 14559: 'd":"https:\\u002F\\u002Fwww.compass.com\\u002Fhomedetails\\u002F3213-Herradura-Dr-Leander-TX-78641\\u002F1364037881138127177_lid\\u002F#QuantitativeValue"}],"description":"Welcome to this captivating, PRIVATE-LOT home in highly-sought Caballo Ranch! This meticulously maintained 4 bedroom, 2.5 bath home fe'

  Term '1364037881138127177' at 16382: 'l":"https:\\u002F\\u002Fwww.compass.com\\u002Fhomedetails\\u002F3213-Herradura-Dr-Leander-TX-78641\\u002F1364037881138127177_lid\\u002F"},"speakable":"Welcome to this captivating, PRIVATE-LOT home in highly-sought Caballo Ranch! This meticulously maintained 4 bedroom, 2.5 bath home features a modern floor'

Found listing ref in script 8
  Term 'listingId' at 694: '"isInIFrame":false,"isOriginPointCtaDev":false,"isPropertyURL":false,"listingRelation":{"listing":{"listingIdSHA":"1364037881138127177","compassPropertyId":56922150180682510,"requestedListingIdSHA":"1364037881138127177","feedListingId":"1364037881138127177","listingType":2,"sourceFilters":[3],"locat'

  Term '1364037881138127177' at 709: 'lse,"isOriginPointCtaDev":false,"isPropertyURL":false,"listingRelation":{"listing":{"listingIdSHA":"1364037881138127177","compassPropertyId":56922150180682510,"requestedListingIdSHA":"1364037881138127177","feedListingId":"1364037881138127177","listingType":2,"sourceFilters":[3],"location":{"prettyAd'

  Term '1364037881138127177' at 793: '"listingIdSHA":"1364037881138127177","compassPropertyId":56922150180682510,"requestedListingIdSHA":"1364037881138127177","feedListingId":"1364037881138127177","listingType":2,"sourceFilters":[3],"location":{"prettyAddress":"3213 Herradura Drive","streetNumber":"3213","street":"Herradura","streetType'

  Term '1364037881138127177' at 831: 'compassPropertyId":56922150180682510,"requestedListingIdSHA":"1364037881138127177","feedListingId":"1364037881138127177","listingType":2,"sourceFilters":[3],"location":{"prettyAddress":"3213 Herradura Drive","streetNumber":"3213","street":"Herradura","streetType":"Dr","neighborhood":"Caballo Ranch",'

  Term '1364037881138127177' at 4594: 'ceUrl":"https://www.3213herradura.com/mls/108802456","sourceDisplayName":"ACTRIS"},"feedListingId":"1364037881138127177"},{"timestamp":1701129600000,"status":8,"price":749900,"source":{"externalSourceName":"austin_actris_trestle_reso","externalSourceId":"2966211","sourceDisplayName":"ACTRIS"},"feedL'

  Term '1364037881138127177' at 4805: 'in_actris_trestle_reso","externalSourceId":"2966211","sourceDisplayName":"ACTRIS"},"feedListingId":"1364037881138127177"},{"timestamp":1701151200000,"status":8,"source":{"externalSourceName":"austin_actris_trestle_reso","externalSourceId":"2966211","externalSourceUrl":"https://www.3213herradura.com/'

  Term '1364037881138127177' at 5067: 'ceUrl":"https://www.3213herradura.com/mls/108802456","sourceDisplayName":"ACTRIS"},"feedListingId":"1364037881138127177"},{"timestamp":1703743200000,"status":10,"source":{"externalSourceName":"austin_actris_trestle_reso","externalSourceId":"2966211","externalSourceUrl":"https://www.3213herradura.com'

  Term '1364037881138127177' at 5330: 'ceUrl":"https://www.3213herradura.com/mls/108802456","sourceDisplayName":"ACTRIS"},"feedListingId":"1364037881138127177"}],"history":[{"timestamp":1703743200000,"status":10,"localizedStatus":"Sold","source":{"externalSourceName":"austin_actris_trestle_reso","externalSourceId":"2966211","externalSour'

  Term '1364037881138127177' at 5630: 'ceUrl":"https://www.3213herradura.com/mls/108802456","sourceDisplayName":"ACTRIS"},"feedListingId":"1364037881138127177","pageLink":"/homedetails/3213-Herradura-Dr-Leander-TX-78641/1364037881138127177_lid/"},{"timestamp":1701151200000,"status":8,"localizedStatus":"Pending","source":{"externalSourceN'

  Term '1364037881138127177' at 5711: '},"feedListingId":"1364037881138127177","pageLink":"/homedetails/3213-Herradura-Dr-Leander-TX-78641/1364037881138127177_lid/"},{"timestamp":1701151200000,"status":8,"localizedStatus":"Pending","source":{"externalSourceName":"austin_actris_trestle_reso","externalSourceId":"2966211","externalSourceUrl'

  Term '1364037881138127177' at 6006: 'ceUrl":"https://www.3213herradura.com/mls/108802456","sourceDisplayName":"ACTRIS"},"feedListingId":"1364037881138127177","pageLink":"/homedetails/3213-Herradura-Dr-Leander-TX-78641/1364037881138127177_lid/"},{"timestamp":1701129600000,"status":8,"localizedStatus":"Pending","price":749900,"source":{"'

  Term '1364037881138127177' at 6087: '},"feedListingId":"1364037881138127177","pageLink":"/homedetails/3213-Herradura-Dr-Leander-TX-78641/1364037881138127177_lid/"},{"timestamp":1701129600000,"status":8,"localizedStatus":"Pending","price":749900,"source":{"externalSourceName":"austin_actris_trestle_reso","externalSourceId":"2966211","so'

  Term '1364037881138127177' at 6331: 'in_actris_trestle_reso","externalSourceId":"2966211","sourceDisplayName":"ACTRIS"},"feedListingId":"1364037881138127177","pageLink":"/homedetails/3213-Herradura-Dr-Leander-TX-78641/1364037881138127177_lid/"},{"timestamp":1690347600000,"status":0,"localizedStatus":"Listed (Active)","price":895000,"so'

  Term '1364037881138127177' at 6412: '},"feedListingId":"1364037881138127177","pageLink":"/homedetails/3213-Herradura-Dr-Leander-TX-78641/1364037881138127177_lid/"},{"timestamp":1690347600000,"status":0,"localizedStatus":"Listed (Active)","price":895000,"source":{"externalSourceName":"austin_actris_trestle_reso","externalSourceId":"2966'

  Term '1364037881138127177' at 6730: 'ceUrl":"https://www.3213herradura.com/mls/108802456","sourceDisplayName":"ACTRIS"},"feedListingId":"1364037881138127177","pageLink":"/homedetails/3213-Herradura-Dr-Leander-TX-78641/1364037881138127177_lid/"},{"timestamp":1508821200000,"status":10,"localizedStatus":"Sold","source":{"externalSourceNam'

  Term '1364037881138127177' at 6811: '},"feedListingId":"1364037881138127177","pageLink":"/homedetails/3213-Herradura-Dr-Leander-TX-78641/1364037881138127177_lid/"},{"timestamp":1508821200000,"status":10,"localizedStatus":"Sold","source":{"externalSourceName":"austin_actris_trestle_reso","externalSourceId":"3681770","externalSourceUrl":'

  Term '1364037881138127177' at 7172: 'S"},"feedListingId":"25522367136630753","pageLink":"/homedetails/3213-Herradura-Dr-Leander-TX-78641/1364037881138127177_lid/"},{"timestamp":1506038400000,"status":8,"localizedStatus":"Pending","price":469900,"source":{"externalSourceName":"austin_actris_trestle_reso","externalSourceId":"3681770","ex'

  Term '1364037881138127177' at 7550: 'S"},"feedListingId":"25522367136630753","pageLink":"/homedetails/3213-Herradura-Dr-Leander-TX-78641/1364037881138127177_lid/"},{"timestamp":1497157200000,"status":0,"localizedStatus":"Listed (Active)","price":474500,"source":{"externalSourceName":"austin_actris_trestle_reso","externalSourceId":"3681'

  Term '1364037881138127177' at 7936: 'S"},"feedListingId":"25522367136630753","pageLink":"/homedetails/3213-Herradura-Dr-Leander-TX-78641/1364037881138127177_lid/"},{"timestamp":1477026000000,"status":12,"localizedStatus":"Withdrawn","price":469900,"source":{"externalSourceName":"austin_actris_trestle_reso","externalSourceId":"9624432",'

  Term '1364037881138127177' at 8324: 'S"},"feedListingId":"25522367136630737","pageLink":"/homedetails/3213-Herradura-Dr-Leander-TX-78641/1364037881138127177_lid/"},{"timestamp":1468299600000,"status":0,"localizedStatus":"Listed (Active)","price":469900,"source":{"externalSourceName":"austin_actris_trestle_reso","externalSourceId":"9624'

  Term '1364037881138127177' at 8717: 'S"},"feedListingId":"25522367136630737","pageLink":"/homedetails/3213-Herradura-Dr-Leander-TX-78641/1364037881138127177_lid/"}],"latestTransaction":true,"buildingInfo":{"buildingIdSHA":"38f851677648b042b4282ddc56d7b4b51a5f60a5","buildingAddress":"3213 Herradura Dr","buildingFloors":1,"buildingYearOp'

  Term '1364037881138127177' at 28099: 'etList":["austin_actris_trestle_reso"]},"pageLink":"/homedetails/3213-Herradura-Dr-Leander-TX-78641/1364037881138127177_lid/","pageLinkSlug":"3213-Herradura-Dr-Leander-TX-78641","propertyLinkSlug":"3213-Herradura-Dr-Leander-TX-78641","propertyPageLink":"/homedetails/3213-Herradura-Dr-Leander-TX-7864'


I found useful data. There's a property listing website `https://www.3213herradura.com/mls/108802456`. Let me check that and also look at the Compass data more carefully.


python3 << 'PYEOF'
import re, json

with open('/tmp/compass.html') as f:
    content = f.read()

inline_scripts = re.findall(r'<script(?![^>]*src)[^>]*>(.*?)</script>', content, re.DOTALL)
script8 = inline_scripts[8]

# Look for media/photos/images in script 8
for term in ['photo', 'media', 'image', '/m/', 'origin.jpg', 'cdn']:
    for m in re.finditer(term, script8, re.IGNORECASE):
        idx = m.start()
        print(f"[{term}] at {idx}:", repr(script8[max(0,idx-50):idx+200]))
        print()
PYEOF


[photo] at 23808: "y disclaim any liability in connection therewith. Photos may be virtually staged or digitally enhanced and may not reflect actual property conditions. Offers of compensation are subject to change at the seller's discretion. No financial or legal advi"

[media] at 81: '  const lookupDeferredImage = doc.getElementById(\'media-gallery-hero-image\');\n    if(lookupDeferredImage){lookupDeferredImage.style.display = \'block\';}})(document);\n          window.__INITIAL_DATA__ = {"props":{"anonymousId":"ee8ccfac-7aa1-4b2c-aad2-'

[media] at 22739: ' Opener","Garage Faces Front"],"garageSpaces":2},"media":[{"category":0,"thumbnailUrl":"https://www.compass.com/m/5ce703f71f9f24742c747724c4234a7bc0d2853ef625cdddbf44c0022b206cfa/165x165.jpg","originalUrl":"https://www.compass.com/m/5ce703f71f9f24742'

[image] at 53: '        (function (doc) {\n    const lookupDeferredImage = doc.getElementById(\'media-gallery-hero-image\');\n    if(lookupDeferredImage){lookupDeferredImage.style.display = \'block\';}})(document);\n          window.__INITIAL_DATA__ = {"props":{"anonymousI'

[image] at 100: 'redImage = doc.getElementById(\'media-gallery-hero-image\');\n    if(lookupDeferredImage){lookupDeferredImage.style.display = \'block\';}})(document);\n          window.__INITIAL_DATA__ = {"props":{"anonymousId":"ee8ccfac-7aa1-4b2c-aad2-f58c513acab7","corp'

[image] at 130: '\'media-gallery-hero-image\');\n    if(lookupDeferredImage){lookupDeferredImage.style.display = \'block\';}})(document);\n          window.__INITIAL_DATA__ = {"props":{"anonymousId":"ee8ccfac-7aa1-4b2c-aad2-f58c513acab7","corpAdsMetadata":{"ajs_anonymous_i'

[image] at 151: 'mage\');\n    if(lookupDeferredImage){lookupDeferredImage.style.display = \'block\';}})(document);\n          window.__INITIAL_DATA__ = {"props":{"anonymousId":"ee8ccfac-7aa1-4b2c-aad2-f58c513acab7","corpAdsMetadata":{"ajs_anonymous_id":"ee8ccfac-7aa1-4b2'

[/m/] at 22800: 'ategory":0,"thumbnailUrl":"https://www.compass.com/m/5ce703f71f9f24742c747724c4234a7bc0d2853ef625cdddbf44c0022b206cfa/165x165.jpg","originalUrl":"https://www.compass.com/m/5ce703f71f9f24742c747724c4234a7bc0d2853ef625cdddbf44c0022b206cfa/origin.jpg","'

[/m/] at 22919: '65x165.jpg","originalUrl":"https://www.compass.com/m/5ce703f71f9f24742c747724c4234a7bc0d2853ef625cdddbf44c0022b206cfa/origin.jpg","width":2172,"height":1448,"description":"Sprawling, single-story home on private, shaded lot"}],"dealInfo":{"transactio'

[origin.jpg] at 22987: '42c747724c4234a7bc0d2853ef625cdddbf44c0022b206cfa/origin.jpg","width":2172,"height":1448,"description":"Sprawling, single-story home on private, shaded lot"}],"dealInfo":{"transactionType":1,"courtesyOf":"Listing Courtesy of eXp Realty, LLC, Kathryn '


Found it. The `__INITIAL_DATA__` has a `media` array but it only has one photo currently in the initial page load. The full gallery is loaded via API. Let me extract the full `__INITIAL_DATA__` and also check the property website.


python3 << 'PYEOF'
import re, json

with open('/tmp/compass.html') as f:
    content = f.read()

inline_scripts = re.findall(r'<script(?![^>]*src)[^>]*>(.*?)</script>', content, re.DOTALL)
script8 = inline_scripts[8]

# Find __INITIAL_DATA__
idx = script8.find('window.__INITIAL_DATA__')
if idx >= 0:
    # Get everything after the assignment
    data_start = script8.find('=', idx) + 1
    # Find the end - it's terminated by a semicolon after a closing brace
    # Let's grab a large chunk
    chunk = script8[data_start:data_start+200000]
    print(f"Data chunk length: {len(chunk)}")

    # Try to parse it (it may be very long)
    # Find the media array specifically
    media_idx = chunk.find('"media":[')
    if media_idx >= 0:
        print("Media section:")
        print(chunk[media_idx:media_idx+2000])
PYEOF


Data chunk length: 45984
Media section:
"media":[{"category":0,"thumbnailUrl":"https://www.compass.com/m/5ce703f71f9f24742c747724c4234a7bc0d2853ef625cdddbf44c0022b206cfa/165x165.jpg","originalUrl":"https://www.compass.com/m/5ce703f71f9f24742c747724c4234a7bc0d2853ef625cdddbf44c0022b206cfa/origin.jpg","width":2172,"height":1448,"description":"Sprawling, single-story home on private, shaded lot"}],"dealInfo":{"transactionType":1,"courtesyOf":"Listing Courtesy of eXp Realty, LLC, Kathryn McClintock, TREC #0788300","disclaimer":"No guarantee, warranty or representation of any kind is made regarding the completeness or accuracy of any information, descriptions or measurements (including square footage measurements and property condition), such should be independently verified through appropriate means, including, but not limited to, in person inspection and public records, and Compass International Holdings, its subsidiaries, affiliates and independently owned and operated franchisees, and their affiliated agents and associated third parties expressly disclaim any liability in connection therewith. Photos may be virtually staged or digitally enhanced and may not reflect actual property conditions. Offers of compensation are subject to change at the seller's discretion. No financial or legal advice provided. Equal Housing Opportunity.\nSubject to change at any time. Compass, Inc., its subsidiaries, affiliates and their agents and associated third parties make no guarantee, warranty or representation regarding the accuracy of any waterfront feature, water view or waterfront view.","regionalDisclaimer":"Based on information from the Austin Board of REALTORS® (alternatively, from ACTRIS), Central Hill Country Board of Realtors, Central Texas MLS, Highland Lakes Association of Realtors, Bryan-College Station Association of REALTORS, and Waco Association of REALTORS. All information provided is deemed reliable but is not guaranteed and should be independently verified. The Austin Board of REALTORS®, ACTRIS, Central H


The initial page load only exposes one photo — the full gallery is fetched client-side. Let me check the property's own website and try Zillow/Redfin in parallel.


curl -s -L --max-time 20 -A "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36" "https://www.3213herradura.com/mls/108802456" > /tmp/mls.html 2>&1
wc -c /tmp/mls.html
python3 << 'PYEOF'
import re

with open('/tmp/mls.html') as f:
    content = f.read()

# Look for image URLs
imgs = re.findall(r'https?://[^\s"\'<>]+\.(?:jpg|jpeg|png|webp)(?:\?[^\s"\'<>]*)?', content)
print(f"Found {len(imgs)} image URLs")
for img in imgs[:30]:
    print(img)
PYEOF


0 /tmp/mls.html
Found 0 image URLs


# Try Zillow and Redfin searches in parallel
curl -s -L --max-time 20 -A "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" "https://www.zillow.com/homes/3213-Herradura-Dr-Leander-TX_rb/" > /tmp/zillow.html 2>&1 &
curl -s -L --max-time 20 -A "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" "https://www.redfin.com/TX/Leander/3213-Herradura-Dr-78641/home/38226773" > /tmp/redfin.html 2>&1 &
wait
wc -c /tmp/zillow.html /tmp/redfin.html


[1]-  Done                    curl -s -L --max-time 20 -A "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" "https://www.zillow.com/homes/3213-Herradura-Dr-Leander-TX_rb/" > /tmp/zillow.html 2>&1
[2]+  Done                    curl -s -L --max-time 20 -A "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" "https://www.redfin.com/TX/Leander/3213-Herradura-Dr-78641/home/38226773" > /tmp/redfin.html 2>&1
1532 /tmp/zillow.html
1562 /tmp/redfin.html
3094 total


cat /tmp/zillow.html
echo "---"
cat /tmp/redfin.html


{"error":"credential_not_found","hostname":"www.zillow.com","message":"No credentials configured for www.zillow.com in OneCLI.\n\nA pre-built link is provided in the `secret_url` field, pre-filled with:\n- host: www.zillow.com\n- path: /homes/3213-Herradura-Dr-Leander-TX_rb/\n\nBefore sending this link to the user, consider whether to adjust it. You can build a custom URL with any of these query parameters:\nhttp://127.0.0.1:10254/connections/custom?create=generic&host=<host>&path=<path>&name=<name>&header=<header>&format=<format>\n\nAvailable parameters:\n- `host` (required): hostname to match (e.g., api.example.com or *.example.com)\n- `path`: path pattern (e.g., /v1/* or /*). Defaults to the exact request path.\n- `name`: display name for the secret (e.g., 'Example API Key')\n- `header`: HTTP header name to inject (default: Authorization)\n- `format`: value format with {value} placeholder (default: Bearer {value})\n\nExamples of when to customize:\n- Change path to `/*` if the credential covers all endpoints on the host\n- Change header to `X-API-Key` if the API uses a custom header\n- Change format to `{value}` (raw) if the API expects the token without a prefix\n\nOnce you've decided on the right link, ask the user to open it. They will see a pre-filled form where they paste their API key or token.","path":"/homes/3213-Herradura-Dr-Leander-TX_rb/","secret_url":"http://127.0.0.1:10254/connections/custom?create=generic&host=www%2Ezillow%2Ecom&path=%2Fhomes%2F3213%2DHerradura%2DDr%2DLeander%2DTX%5Frb%2F"}---
{"error":"credential_not_found","hostname":"www.redfin.com","message":"No credentials configured for www.redfin.com in OneCLI.\n\nA pre-built link is provided in the `secret_url` field, pre-filled with:\n- host: www.redfin.com\n- path: /TX/Leander/3213-Herradura-Dr-78641/home/38226773\n\nBefore sending this link to the user, consider whether to adjust it. You can build a custom URL with any of these query parameters:\nhttp://127.0.0.1:10254/connections/custom?create=generic&host=<host>&path=<path>&name=<name>&header=<header>&format=<format>\n\nAvailable parameters:\n- `host` (required): hostname to match (e.g., api.example.com or *.example.com)\n- `path`: path pattern (e.g., /v1/* or /*). Defaults to the exact request path.\n- `name`: display name for the secret (e.g., 'Example API Key')\n- `header`: HTTP header name to inject (default: Authorization)\n- `format`: value format with {value} placeholder (default: Bearer {value})\n\nExamples of when to customize:\n- Change path to `/*` if the credential covers all endpoints on the host\n- Change header to `X-API-Key` if the API uses a custom header\n- Change format to `{value}` (raw) if the API expects the token without a prefix\n\nOnce you've decided on the right link, ask the user to open it. They will see a pre-filled form where they paste their API key or token.","path":"/TX/Leander/3213-Herradura-Dr-78641/home/38226773","secret_url":"http://127.0.0.1:10254/connections/custom?create=generic&host=www%2Eredfin%2Ecom&path=%2FTX%2FLeander%2F3213%2DHerradura%2DDr%2D78641%2Fhome%2F38226773"}


Zillow and Redfin are blocked through OneCLI. Let me try the WebFetch tool for them, and also try Compass's undocumented API for fetching all listing photos.


WebFetch

Prompt: Extract all listing photo URLs from this Redfin property page. I need direct image URLs ending in .jpg, .jpeg, .png, or .webp. Return the full list of all photo URLs found.


Request failed with status code 403

Error: Request failed with status code 403


Prompt: Extract all listing photo URLs from this Zillow property page for 3213 Herradura Dr Leander TX 78641. I need direct image URLs ending in .jpg, .jpeg, .png, or .webp. Return the full list of all photo URLs found.


Request failed with status code 403


WebSearch

Question: 3213 Herradura Dr Leander TX 78641 listing photos site:zillow.com OR site:redfin.com OR site:realtor.com


Bash

# Try Compass's internal API - they have an API for listing details with media
# The listing ID SHA is 1364037881138127177
curl -s -L --max-time 20 \
  -H "Accept: application/json" \
  -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36" \
  "https://www.compass.com/api/listing/1364037881138127177/media" 2>&1 | head -50