Redfin - search results

v1.0.0

by extracthub Updated 11/12/2026 redfin.com

Redfin home search page (redfin.com/city/<id>/<ST>/<City>, also zipcode / neighborhood pages, with filters and /page-N): about 40 homes for sale with address, link, property id, price, beds, baths, square feet, key facts, badges, street / city / state / ZIP, coordinates, photo and listing source, plus the total homes count, current page and total pages.

Extractor ID

@1 follows fixes and added fields. to freeze the output.

Try in playground
Price
$0.0025 / request premium Also charged when the request fails after the page was fetched. Pricing
Health
healthy v1.0.0
Request settings
  • GET
  • Proxy
  • No JS rendering
HTML
https://www.redfin.com/city/30749/NY/New-York
Loading source preview…

What it returns

result.extracted is a JSON object with these top-level fields (from the current configuration; every released version keeps the schema it was released with, see the changes under Versions and health). A sample is in the extracted data panel above.

Field Type
searchTitle string
totalResults number
homes object{address,badges,baths,beds,bedsText,city,homeType,image,keyFacts,latitude,listingSource,longitude,position,postalCode,price,propertyId,sqft,state,streetAddress,url}[]
currentPage number
totalPages number

How to call Redfin - search results extractor

Pass the URL of a redfin.com page and this extractor's pinned id. Authenticate every request with your API key in the X-API-Key header (a test key, exth_test_..., returns simulated results at no cost). Every parameter and error code is described in the API reference.

Realtime: one URL, result in the response

GET https://api.extracthub.io/api/extractor/extract

Authentication required via X-API-Key header

Parameter Type Required Description
target_url string Yes The URL to scrape and extract data from
extractor_id string Yes This extractor's ID with a version pin: @extracthub1/redfin-search@1. Use @1 for the latest 1.x or @1.2.3 for an exact version.
return_raw_html boolean No Include raw HTML in response (default: false)
async_fallback boolean No Default true: a request still queued after the wait limit becomes an async job (202 with job_id). false: 503 queue_timeout instead
webhook_url string No HTTPS URL notified if the request becomes a job (job.completed / job.failed)

Code examples

curl -X GET "https://api.extracthub.io/api/extractor/extract?target_url=https://example.com&extractor_id=%40extracthub1%2Fredfin-search%401" \
  -H "X-API-Key: YOUR_API_KEY"

Example response

Shape of a 200 answer (placeholder values). metadata also carries costUsd, and the X-Extractor-Version header names the exact version that ran. With a live API key, X-Credit-Balance gives your credit balance in USD after the request (4 decimals); a 402 body has top_up_url. A busy queue answers 202 with job_id, status_url and result_url; poll GET /api/extractor/jobs/{id} (or cancel it with POST /api/extractor/jobs/{id}/cancel).

{
  "success": true,
  "result": {
    "extracted": {
      "searchTitle": "…",
      "totalResults": 0,
      "homes": [
        {
          "position": 0,
          "address": "…",
          "url": "…",
          "propertyId": "…",
          "price": 0,
          "beds": 0,
          "bedsText": "…",
          "baths": 0,
          "sqft": 0,
          "keyFacts": [
            "…"
          ],
          "badges": [
            "…"
          ],
          "streetAddress": "…",
          "city": "…",
          "state": "…",
          "postalCode": "…",
          "latitude": 0,
          "longitude": 0,
          "homeType": "…",
          "image": "…",
          "listingSource": "…"
        }
      ],
      "currentPage": 0,
      "totalPages": 0
    },
    "metadata": {
      "url": "https://example.com",
      "useProxy": true,
      "renderJs": false,
      "scrapedAt": "2026-01-01T12:00:00.000Z"
    }
  }
}

Batch: many URLs in one request

The batch runs in the background with the version resolved once at submission. Read the results as NDJSON pages with a stable cursor; succeeded URLs are charged, and failed URLs only when their scrape reached the provider. If your credit runs out the batch pauses and resumes when credit is available, and POST /api/extractor/batch/{id}/cancel stops it. Signed webhooks report batch.completed, batch.failed and batch.paused.

curl -X POST "https://api.extracthub.io/api/extractor/batch" \
  -H "X-API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "extractor_id": "@extracthub1/redfin-search@1",
    "targets": [
      { "url": "https://redfin.com/..." },
      { "url": "https://redfin.com/..." }
    ],
    "webhook_url": "https://your-app.example/webhooks/extracthub"
  }'

# Progress, then results as NDJSON pages (cursor = last index)
curl "https://api.extracthub.io/api/extractor/batch/BATCH_ID" -H "X-API-Key: YOUR_API_KEY"
curl "https://api.extracthub.io/api/extractor/batch/BATCH_ID/results" -H "X-API-Key: YOUR_API_KEY"

In a pipeline

In the dashboard's pipeline builder, add Redfin - search results as an extractor node and set its version pin to 1 (or exactly 1.0.0). A previous node can feed it the URLs it extracts; pipelines run manually or on a cron schedule, report progress live and export JSON, CSV or NDJSON.

With an AI agent (MCP)

Connect Claude Code, Claude Desktop or Cursor to the ExtractHub MCP server (https://api.extracthub.io/mcp, your API key as a Bearer token) and ask in plain language. The agent calls extract with this extractor's pinned id, or create_batch for many URLs, at the same price and limits as the API. Use a test key to try it without credit. Set up the MCP server.

Ask your agent
Use ExtractHub to extract https://redfin.com/... with @extracthub1/redfin-search@1
Tool call it makes
{
  "tool": "extract",
  "arguments": {
    "extractor_id": "@extracthub1/redfin-search@1",
    "url": "https://redfin.com/..."
  }
}

Versions and health

Each version is immutable. @N resolves to the newest non-yanked version of major N; a deprecated major keeps working until its sunset date and its responses carry Deprecation and Sunset headers. Health comes from scheduled checks of the released versions.

@1
latest 1.0.0
active healthy
  1. v1.0.0 active healthy Released 11/12/2026

Redfin - search results extractor: frequently asked questions

Is Redfin - search results extractor a redfin.com scraper?

Yes. Redfin - search results is an ExtractHub extractor: a saved, versioned web scraper for redfin.com pages that returns the page as structured JSON. Call it as a redfin.com scraper API with extractor_id=@extracthub1/redfin-search@1; it never changes under you, because every released version is immutable.

What data does Redfin - search results extractor return?

It returns a JSON object with 5 top-level fields: searchTitle (string), totalResults (number), homes (object{address,badges,baths,beds,bedsText,city,homeType,image,keyFacts,latitude,listingSource,longitude,position,postalCode,price,propertyId,sqft,state,streetAddress,url}[]), currentPage (number) and totalPages (number). The extracted data panel on this page shows a sample.

How do I call Redfin - search results extractor?

Send GET or POST https://api.extracthub.io/api/extractor/extract with your API key in the X-API-Key header, extractor_id=@extracthub1/redfin-search@1 and the URL of a redfin.com page as the target. For many URLs use POST https://api.extracthub.io/api/extractor/batch, and in a pipeline add it as an extractor node pinned to 1.

Can an AI agent use Redfin - search results extractor?

Yes. Connect Claude Code, Claude Desktop, Cursor or another MCP client to the ExtractHub MCP server at https://api.extracthub.io/mcp with your API key, then ask it to extract a redfin.com page: the agent calls the extract tool with extractor_id=@extracthub1/redfin-search@1 (or create_batch for many URLs), at the same price as the API.

Which version should I pin?

Pin the major (@extracthub1/redfin-search@1) to receive fixes and added fields automatically, or the exact version (@extracthub1/redfin-search@1.0.0) to freeze the output. A breaking schema change is always released as a new major, so a major pin never loses or retypes a field.

Does it render JavaScript or use a proxy?

No, it fetches the HTML without JavaScript rendering and it goes through a proxy. Calls are charged at the premium tier (through the scraping proxy, no JavaScript). These settings are part of each released version; JavaScript rendering, XHR capture and browser actions always use the proxy.

More web scrapers in the scraper catalog and in Real Estate.