Mercado
What competing builders advertise, and how their inventory moves, across OR, WA, ID, and MT. Built from public builder listings, fused with Hayden's own data. One input among many.
Why we have it
Hayden already buys MLS and Construction Monitor data, so competitor list prices are not the gap. Mercado fills what those miss. Builder-advertised incentives and rate buydowns, which often are not in MLS. The timing of price changes and how fast inventory sells, which a one-time data pull cannot show. Both are derived by comparing the same listings week over week. It is a supplement, not a replacement for paid data.
How it works
flowchart TB
classDef src fill:#e7eef2,stroke:#2e5a6e,color:#1a2530;
classDef proc fill:#f6ecd9,stroke:#b5731f,color:#1a2530;
classDef store fill:#efe7f2,stroke:#7a5a8e,color:#1a2530;
classDef int fill:#eaf2ec,stroke:#1f7a4d,color:#1a2530;
classDef app fill:#e7f0ea,stroke:#1f7a4d,color:#1a2530;
classDef val fill:#eef5f0,stroke:#1f7a4d,color:#11402a,font-weight:600;
subgraph SCRAPE["1 . Weekly scrape (19 enabled: Hayden + 18 competitors)"]
direction LR
t1["Tier 1: JSON or hidden API (9)"]:::src
t2["Tier 2: server HTML + selectors (9)"]:::src
t3["Tier 3: stealth fetch (1)"]:::src
end
norm["2 . Normalize to one Home record
(price, $/sqft, status, incentives, provenance)"]:::proc
snap[("3 . Dated append-only snapshots (JSONL, weekly)")]:::store
diff["4 . Diff consecutive snapshots
price cuts + absorption compounding weekly"]:::proc
int["Internal data (Snowflake)
KOVA closed pricing . COMBINED_PERMITS supply"]:::int
fuse["5 . Fuse: competitor listings + KOVA baseline + permit supply"]:::proc
dash["6 . Dashboard (HTML + ECharts + Leaflet)
Board . Brief . Deep Dive, by band and submarket"]:::app
val["Incentive depth, who is discounting,
gap vs Hayden by band and submarket,
and a pressure score to rank where to look."]:::val
t1 --> norm
t2 --> norm
t3 --> norm
norm --> snap --> diff --> fuse
int --> fuse
fuse --> dash --> val
Scope today: 19 of 21 registered sources enabled (2 held back: out of footprint, and one with no clean access). Weekly snapshots accumulating since Jun 7 — price cuts, absorption, and week-over-week market movement are all live. The pipeline runs automatically via Windows Task Scheduler every Tuesday.
Business value
Compounding time series. A single snapshot shows where prices are today. Weekly snapshots show where they're going — absorption accelerating or stalling, price cuts spreading or stopping, inventory building or clearing. Each Tuesday run is one more data point in that trend, added automatically with no manual work.
Zero ongoing maintenance. The pipeline runs on Windows Task Scheduler every Tuesday: scrape → normalize → diff → dashboard update. If something breaks, a health check flags it and the dashboard shows a banner. Otherwise, you open it and the data is fresh.
Head-to-head, not generic market data. Competitor prices are joined directly to Hayden's KOVA closed-home pricing by submarket and band. No paid feed does this — it requires internal cost data that only Hayden has.
What it does today
Collection
- Scrapes 18 competitors plus Hayden's public listings weekly, on a tiered ladder (API, HTML, stealth).
- Normalizes every listing to one record with full provenance (source, URL, fetch time).
- Self-healing field resolver absorbs routine site changes. A weekly health check flags breaks.
Signals it adds
- Advertised incentives and rate buydowns parsed from listing text.
- Price cuts week over week, and absorption (sold proxy) as snapshots accrue.
- Gap vs Hayden's own KOVA pricing, by price band and submarket.
- A pressure score (price gap, incentives, supply trend, months of supply) to rank where to look.
Why it helps, and why it beats a one-time pull
- Incentives are the high-value signal in the attainable band, and they are usually not in the MLS or a standard data feed. Mercado reads them off the builder sites.
- Change over time. Saving a dated snapshot every week reveals price-cut timing and absorption, which a single pull cannot.
- Each week compounds the prior week. Absorption pace, price-cut velocity, and incentive escalation are visible only in the trend. By summer's end, 10+ snapshots will show which builders react first when markets soften — and whether Hayden's pricing gaps are drifting or stable.
- Head to head against Hayden's margins. It joins competitor pricing to Hayden's own KOVA costs by band and submarket, a comparison the paid feeds cannot do because it needs internal data.
- Thin-market coverage. It reaches secondary and tertiary markets where national services are sparse.
- Grounded, not a black box: every figure carries its source and fetch time.
How it connects to the rest of the stack
Feeds the executive Market Report. Mercado is the competitor-pricing and incentive layer behind the Market Report, which otherwise has no per-competitor price gaps or incentives.
Uses the same internal data as the analytics stack (KOVA closed pricing, permits), which is also why it runs locally: it joins internal margins that do not leave the machine.
How it can expand
- Accumulate snapshots — 8–12 weekly snapshots gives robust absorption and price-pace signal.
- Incentive dollar values — parse "up to $15,000 toward closing" → a dollar figure, not just a flag.
- Rate buydown depth — extract the specific rate (e.g. "4.99% first year") for direct comparison across builders.
- Spec / move-in-ready count — many builder sites flag "available now" homes; count per community is a velocity signal.
- Remaining lot count — some builder sites show lots left in a community, a direct supply floor signal.
- MLS cross-check — validate absorption (sold proxy) against actual MLS status changes for a stronger signal.
- Add builders and metros — 2 sources held back; expand as Hayden opens new markets.