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.
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.
How it works
- 1. Upload your .xlsx workbook (first sheet by default).
- 2. We search Zillow via RapidAPI and pick the best match per row.
- 3. Exact name+location matches are enriched; others are routed to a review queue.
- 4. Download your enriched workbook and review queue, and inspect logs any time.
Quick Start
- 1. Open Admin Settings and paste your RapidAPI key. Adjust RPS, retries, and concurrency if needed.
- 2. Go to Upload and select your Excel file. We read the first sheet by default.
- 3. Watch progress on the live job page. You’ll see Processed, Matched, Review, No Match, Skipped, and a live preview.
- 4. For borderline rows, use the Review list on the job page (or later in Results).
- 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
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.