Skip to content

feat(data): integrate MLS data feed via RESO Web API #360

Description

@paruff

Problem

The #1 deal source for buy-and-hold investors is MLS listings. Currently prei only has foreclosure data (VRM, HUD, USDA, county). A top investor would say: "You've built a Ferrari engine and put it in a car with no gas."

Solution

Integrate with a RESO Web API compliant MLS data provider (Bridge Interactive, Trestle, or Paragon). Start with one MLS market (DFW/North Texas) as proof of concept. Import active listings matching investor criteria.

Acceptance Criteria

  • Add MLS_API_KEY, MLS_API_URL, MLS_CLIENT_ID to environment config
  • Create core/integrations/sources/mls_adapter.py with RESO Web API client
  • Add MlsListing model: address, city, state, zip, price, beds, baths, sqft, lot_size, year_built, list_date, mls_id, photo_urls, status
  • Create management command python manage.py import_mls_listings --market=dallas
  • Add MLS as a discovery source in the existing discovery pipeline
  • Add MLS source to the screener with same filtering as other sources
  • E2E test: discover MLS listings → screen → advance to underwriting
  • Unit tests for MLS adapter (mock RESO API responses)

Technical Notes

  • RESO Web API standard: https://reso.org/standards/data-dictionary/
  • Bridge Interactive offers free developer access for testing
  • Start with DFW market (high investor activity, landlord-friendly)
  • Map RESO fields to prei's property schema
  • MLS data updates every 15 minutes — schedule periodic imports
  • Use Django's select_for_update() for dedup on mls_id

Implementation Guide (for opencode/mimo v2.5)

  1. Create the adapter following the pattern in core/integrations/sources/ (see registry.py)
  2. Add MlsListing model to core/models/sources.py following the HudProperty pattern
  3. Register MLS in core/services/sources/registry.py
  4. Create core/management/commands/import_mls_listings.py
  5. Add MLS checkbox to discovery template (templates/property_discovery.html)
  6. Migration for new model

Dependencies

  • Requires: MLS API credentials (user must obtain from their MLS)
  • Blocks: Phase 4 automation (saved searches need MLS data to be useful)

Metadata

Metadata

Assignees

No one assigned

    Labels

    P1:dataPhase 1: Fix the Data ProblemenhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions