Enrich Realtor Workbooks with Zillow Data

Upload your Excel sheet, match agents to Zillow profiles, compute seller-side stats, and download a clean, enriched workbook.

No data leaves your session beyond API calls. View all logs under /logs.
Preview of enriched spreadsheet and charts

Everything you need to enrich at scale

Fast, auditable, and built for real-world lists of thousands.

XLSX Upload

Mobile‑friendly upload form with inline preview of processed rows.

🔎

Smart Matching

Fuzzy matching + exact checks on fullName, location, phoneNumber, and businessName.

📈

Seller Metrics

Pages agent sold listings to compute 12/36‑month seller counts.

🧾

Audit & Admin

Per‑request logs, JSONL previews, and runtime settings via Admin.

Illustration of processing pipeline

How it works

  1. 1. Upload your .xlsx workbook (first sheet by default).
  2. 2. We search Zillow via RapidAPI and pick the best match per row.
  3. 3. Exact name+location matches are enriched; others are routed to a review queue.
  4. 4. Download your enriched workbook and review queue, and inspect logs any time.

Quick Start

  1. 1. Open Admin Settings and paste your RapidAPI key. Adjust RPS, retries, and concurrency if needed.
  2. 2. Go to Upload and select your Excel file. We read the first sheet by default.
  3. 3. Watch progress on the live job page. You’ll see Processed, Matched, Review, No Match, Skipped, and a live preview.
  4. 4. For borderline rows, use the Review list on the job page (or later in Results).
  5. 5. Download Enriched, Review, or No Match as XLSX/CSV. API request logs are available at Logs.

What gets enriched

  • Zillow Link and encodedZuid (unique agent ID)
  • Total Sold Count, Total Seller Sales 12 Months, Total Seller Sales 36 Months
  • Active Seller Listing Count and Active Seller Average Price
  • Cell Phone from Zillow, Email from Zillow, Website(s) when available

How matching works

  • We call findAgentV2 to collect candidates (page 1, then 2–3 if needed).
  • We score name/location signals; clear winners are Matched, close calls go to Review, low scores to No Match.
  • Exact name signals automatically route to Matched.

Counts and pagination

  • Total Sold Count comes from sold listing_count; we page listings and tally seller-side sales in the last 12 and 36 months.
  • Active Seller Listing Count and Active Seller Average Price come from agentActiveListings; we page all items to compute an accurate average price.

Performance & limits

  • Global 5 RPS token bucket limiter across all jobs; brief bursts are allowed within budget.
  • HTTP keep‑alive with a small connection pool reduces overhead.
  • Response cache (24h TTL) avoids repeated calls for the same inputs.
  • Max Pages (default 20) caps how many pages we fetch for sold and active listing endpoints to keep runs predictable.

Admin Settings Explained

  • RapidAPI Key (RAPIDAPI_KEY): Used for all Zillow API calls. Required.
  • RapidAPI Host (RAPIDAPI_HOST): API host, default zillow-com1.p.rapidapi.com.
  • Global RPS (RAPIDAPI_RPS): Requests-per-second budget enforced by a global token bucket across all jobs.
  • Max Retries (MAX_RETRIES) & Backoff (RETRY_BACKOFF): Retries on 429/temporary errors; respects Retry‑After when provided.
  • Rate Limit Delay (RATE_LIMIT_DELAY): Legacy per-call delay used as a base backoff when Retry‑After is missing.
  • Max Workers (MAX_WORKERS): Background thread pool for jobs. Higher for I/O bound workloads.
  • Row Concurrency (ROW_CONCURRENCY): Parallel rows per job; the global limiter still keeps total RPS safe.
  • Row Process Limit (ROW_PROCESS_LIMIT): Caps how many rows from an upload are processed.
  • Confidence Threshold (CONFIDENCE_THRESHOLD) & Ambiguity Delta (AMBIGUITY_DELTA): Control routing to Matched vs Review vs No Match.
  • API Cache TTL (API_CACHE_TTL): Seconds to cache identical API responses in SQLite (saves calls across runs).
  • HTTP Pool (HTTP_POOL_CONNECTIONS / HTTP_POOL_MAXSIZE): Keep‑alive connection pool sizes.

Tip: Start with 5 RPS, retries=3, backoff=1.5. Increase MAX_WORKERS if CPU/network allows; keep ROW_CONCURRENCY modest (1–2) since the global limiter governs RPS.

Tips

  • Recommended columns: Full Name, Office City/State/County, Email or Phone (for better scoring).
  • Use Results to re-export any job later; Logs to audit requests/responses.
  • “Skipped” means no candidates were returned for that row.

Key Pages

  • Upload — start a new job
  • Jobs — live job status
  • Results — saved rows and exports
  • Admin — API key, limits, concurrency
  • Logs — API CSV/JSONL logs

Troubleshooting

  • No match found: try adding City/State or correcting name.
  • Review heavy: lower ambiguity delta or raise confidence in Admin.
  • Rate limit hits: reduce RPS in Admin or wait per Retry‑After.

Stay in the loop

Get updates on features like caching, batch webhooks, and expanded metrics.

Newsletter illustration