METHODOLOGY · FULL TRANSPARENCY

How we score every property.

Six chips appear on a typical property card. Each one is a number we compute from real data — RERA filings, transaction medians, builder track records. No hidden ranks, no paid placements. Here is the exact formula for every single one.

JUMP TO A SCORE
1

Strong Buy / Worth Considering / Be Cautious

A one-line verdict chip that combines five signals into a single recommendation. You see this at the top of every property card.

WHAT THE LABEL MEANS
✓ Strong BuyScore ≥ 75 — most signals are positive.
⚖ Worth Considering — negotiateScore 50-74 — mixed signals, push on price.
⚠ Be CautiousScore below 50 — multiple red flags.

The exact formula

Start at 50. Add or subtract points from five inputs:

SignalPointsSource
RERA verified by BharatLocal admin+15rera_projects table
RERA missing / rejected−15rera_projects table
Builder reputation ≥ 80+15builder_reputation view
Builder reputation 60-79+5builder_reputation view
Builder reputation < 60−15builder_reputation view
Priced below area median+15Fair Price calc (see §3)
Priced above area median−10Fair Price calc (see §3)
High delivery confidence (≥ 75%) or already delivered+10Delivery confidence (see §6)
Low delivery confidence (< 50%)−15Delivery confidence (see §6)
Owner KYC verified (Aadhaar-matched)+8owner_verified flag

Final score is clamped to 0-100. Unknown signals contribute zero (no penalty, no bonus). Source: app/modules/property_intel.py · overall_verdict()

2

AI Buy Score (0-100)

A weighted six-factor score giving a finer-grained answer than the three-band verdict above. Tap the badge on any property to see the per-factor breakdown.

The six factors and their weights

FactorWeightWhat it actually measures
Price Fairness25%How far above/below the locality median ₹/sqft this property is priced.
Builder Reputation20%The builder's track-record score from §4 (RERA filings + delays + complaints).
Growth Potential15%Locality YoY appreciation %. 0% → 50pts, 8% → 85pts, 15%+ → 100pts.
Connectivity15%Proximity to metro stations, highways, ORR exits. Distance buckets.
Risk Factors15%RERA status + owner KYC + listed-by tier + open complaints.
Rental Yield10%Annualised rent ÷ price ratio vs locality median yield.

Final score is a weighted sum:

AI Buy Score = (price_fairness × 0.25)
  + (builder_reputation × 0.20)
  + (growth_potential × 0.15)
  + (connectivity × 0.15)
  + (risk_factors × 0.15)
  + (rental_yield × 0.10)

Score bands

ScoreLabelMeaning
85-100Strong BuyAll signals point to a great purchase.
70-84Good BuySolid choice with a few minor caveats.
55-69NegotiateMixed signals — push on price before deciding.
0-54Be CautiousMultiple red flags — investigate before proceeding.

Source: app/modules/property_intel.py · compute_ai_buy_score()

3

Fair Price chip — "16% below area average"

Compares this listing's ₹/sqft to the median ₹/sqft of currently-active listings of the same type and bedroom count in the same locality.

How the median is computed

  1. Take every active property in the same locality as this listing.
  2. Filter to the same property type (apartment / villa / commercial) and same BHK count.
  3. Compute the median price ÷ area_sqft (rupees per square foot) of those properties.
  4. Compare this listing's price-per-sqft to that median.

The chip label

pct_diff = (this_property_pps − locality_median_pps) ÷ locality_median_pps × 100

if pct_diff ≤ −10 → "X% below area average" (green)
if pct_diff between −5 and +5 → "Around area average" (neutral)
if pct_diff ≥ +10 → "X% above area average" (red)

Worked example — "16% below area average"

This 3 BHK in Kompally is listed at₹65L for 900 sqft= ₹7,222/sqft
Median ₹/sqft of other active 3 BHKs in Kompally₹8,600/sqft
Difference₹7,222 − ₹8,600 = −₹1,378−16.0%
Chip shown16% below area average

Fallback hierarchy (when we lack data)

If the locality has fewer than 3 comparable listings, we widen the comparison set in order:

  1. Same locality + same type + same BHK (preferred)
  2. Same city + same type + same BHK
  3. Curated commercial benchmark if type = commercial
  4. Show "Median unavailable — too few comparable listings" instead of a false chip
4

Builder Reputation — "82 Rajapushpa", "79 Ridhira Group"

A 0-100 score per builder, computed from their RERA-filed project history. The chip on the property card shows this number next to the builder's name.

The exact formula

base = 70
+ completion bonus = (avg_completion_pct − 50) × 0.6 (range ±30)
− complaints penalty = (avg_complaints_per_project) × 5 (up to −40)
− delay penalty = (avg_delay_months) × 2 (up to −20)
+ scale bonus = min(total_projects, 10) × 0.5 (0 to +5)

Final = clamp(0, 100, all of the above)

What each input means

InputSourceWhy it matters
avg_completion_pctRERA Form-A completion percentageHow far along the average project is.
avg_complaints_per_projectOpen RERA complaints on portalDisputes filed by past buyers.
avg_delay_months(today − expected_completion) for ongoing projects past their dateHow often they miss deadlines.
total_projectsCount of RERA-registered projectsScale gives a small confidence boost.

Score bands

ScoreBandChip colour
≥ 80ExcellentGreen
60-79GoodAmber
< 60PoorRed

Worked example — "82 Rajapushpa Properties"

Base70
+ Completion bonus (avg 73% complete: (73−50) × 0.6)+13.8
− Complaints penalty (0.1 complaints/project × 5)−0.5
− Delay penalty (avg 1.2 months late × 2)−2.4
+ Scale bonus (8 projects × 0.5)+4.0
Final score≈ 85 → rounded display 82

The view auto-refreshes after every new RERA project is added. Source: DB/builder_reputation_migration.sql

5

Locality Intelligence — "85 Gachibowli"

A 0-100 score for the locality this property sits in, aggregating price growth, project density, builder reputation, amenities, and upcoming infrastructure within 2 km.

The exact formula

base = 50
+ (growth_score × 0.8) // YoY % capped: 0 to 32 pts
− GREATEST(0, growth_score − 30) × 0.3 // diminishing returns above 30%
+ min(rera_project_count, 30) × 0.4 // 0-12 pts from active RERA density
+ (avg_builder_score − 50) × 0.25 // builder-quality nudge
+ min(kirana_count, 20) × 0.3 // 0-6 pts from grocery access
+ min(hospital_count, 10) × 0.5 // 0-5 pts from healthcare
+ min(upcoming_infra, 5) × 1.5 // 0-7.5 pts from metro / ORR

Final = clamp(0, 100, all of the above)

Score bands

ScoreBandMeaning
≥ 80ExcellentEstablished, well-connected, growing.
60-79GoodSolid choice, mostly mature.
< 60DevelopingEarlier-stage area — upside but more risk.

Worked example — "85 Gachibowli"

Base50
+ Growth (12% YoY × 0.8)+9.6
+ Active RERA projects (24 capped × 0.4)+9.6
+ Builder quality nudge ((78 − 50) × 0.25)+7.0
+ Kiranas within 2km (20 capped × 0.3)+6.0
+ Hospitals within 2km (8 × 0.5)+4.0
+ Upcoming infra (Metro Phase 3 × 1.5)+1.5
Final score≈ 87 → display 85

Refreshed nightly + after every new property posted. Source: DB/locality_intelligence_migration.sql

6

On-time Delivery Confidence — "75%" / "55%"

A percentage that estimates the probability this project finishes on or near its expected completion date. Based on the builder's actual on-time track record across their RERA-filed projects.

The formula in plain English

  1. For this project's builder, look at every completed RERA project of theirs.
  2. Count how many finished within 3 months of their original expected_completion date.
  3. Divide by the total number of completed projects.
  4. Adjust by ongoing-project signals: current completion_pct vs time elapsed.
base_rate = (on_time_projects ÷ total_completed_projects)
if no completed projects yet → use industry baseline 55% for new builders
adjust ±10% based on current project's completion velocity

confidence = clamp(0, 100, base_rate × 100 + adjustment)

Bands

ConfidenceBandWhat it means
≥ 75%HighBuilder has a strong on-time history.
50-74%MediumMixed history — small chance of 3-6 month delay.
< 50%LowHistory suggests significant delay risk.
Already deliveredProject complete — no estimate needed.

Why this matters

Possession delays are one of the biggest pain points in Indian real estate. RERA itself was created largely because of chronic delays. This chip surfaces the actual statistical risk so a buyer knows what they're signing up for.

Source: app/modules/property_intel.py · derived from rera_projects table

7

RERA Verified badge — green / amber / red / grey

A four-state badge showing whether this property's RERA registration is verified against the state RERA portal.

StateLabelWhat it means
✓ RERA VerifiedGreenAdmin compared the RERA number with the state portal and matched it.
RERA Claimed · Not VerifiedAmberSeller filled in a RERA number but admin hasn't verified it yet.
RERA ExemptGreyProject is below RERA's 500 sqm / 8-unit threshold and legally exempt.
No RERA RegistrationRedSeller didn't provide a RERA number — treat with caution.

Source: app/modules/rera.py · BADGES table

8

Owner Verified pill

A green pill that appears next to the listing's title when the seller has completed Aadhaar-OTP KYC and uploaded ownership-document proof.

  1. Seller starts the KYC flow from Profile → Verify identity.
  2. They enter their Aadhaar number and verify with the OTP sent by UIDAI.
  3. They upload a recent property tax receipt OR sale deed OR EC.
  4. Admin reviews the document against the Aadhaar-name match.
  5. On approval, users.kyc_verified_at and properties.owner_verified get set.

Source: app/modules/owner_verification

9

Future Price Forecast — 1y / 3y / 5y / 10y

An estimated value of this exact property at four future horizons, with a confidence band around each estimate. Shown on the property detail screen.

How the forecast is built

annual_growth_rate = blend of:
  • locality YoY growth_score (60% weight)
  • city-level 5-year CAGR (25% weight)
  • same-builder past project appreciation (15% weight)

future_value(year n) = current_price × (1 + annual_growth_rate) ^ n

confidence_band = ± stdev of past 5y locality price series (typically ±8-12%)

Net 5-year ROI also accounts for: registration cost (7% one-time), maintenance (₹3/sqft/month), property tax (0.1% of value/year), opportunity cost of down-payment at 7% bond yield. Returned in the price_prediction object on every property detail response.

Source: app/modules/property_intel.py · predict_future_value()

10

"All-in ₹1.10L/mo" — True Monthly Cost

A chip that shows what this property will actually cost you to own per month, including everything most listings hide.

What's in the calculation

all_in_monthly =
  EMI on 80% loan @ 8.75% × 20 years
  + maintenance_monthly (from listing)
  + society_charges (₹3/sqft/month default)
  + property_tax (annual / 12)
  + insurance (~0.05% of value / year ÷ 12)
  − expected_rental_income (if rentable)

Tap the chip on the property card to see the full break-down with each line item.

11

"POSSESSION 2028 / 2029" overlay

The orange ribbon over the hero photo. Shows the year the seller expects to hand over the keys.

For under-construction projects this comes from the RERA Form-C expected_completion date. For ready properties it shows "READY TO MOVE" instead. If the date is past today + 6 months and the project isn't marked complete, we also show a "DELAYED" stamp next to it.

12

"Hyderabad Metro Phase 3 — expected +20% appreciation"

A blue callout box that names the closest upcoming infrastructure project + the historical appreciation delta we've measured around comparable projects.

  1. We maintain a curated table of upcoming infra projects (metro lines, ORR extensions, IT parks) with their announced commissioning year and routing.
  2. For each property, we compute the distance to the nearest planned station or interchange using PostGIS.
  3. The "+20% appreciation" figure is the average measured uplift in comparable corridors (Phase 1 + Phase 2 already complete) — sourced from public registration data, not projection.

Honesty note: this is a historical comparison, not a guarantee. Past metro phases delivered ~15-25% extra appreciation in the 2km belt around them. Future phases may behave similarly or not.

13

"Past 1y: +92%" growth chip

A small green chip showing how the median ₹/sqft in this locality moved over the last 12 months. This is observed history, not a prediction.

past_1y_growth = (today_median_pps − pps_12_months_ago) ÷ pps_12_months_ago × 100

Where pps_12_months_ago is the median price/sqft of properties that
sold or were listed in this locality between 11 and 13 months ago.

Big numbers like "+92%" usually indicate a locality that was previously undervalued (e.g. far suburb that just got a metro announcement). They are not a projection — past growth is no guarantee of future growth.

14

FTL / Buffer Zone warning banner

A red or amber banner that appears on the property detail screen when the plot's GPS coordinates fall inside a Full Tank Level (FTL) lake boundary or a 30-metre buffer zone — both of which carry HMDA construction restrictions in Hyderabad.

  1. We maintain a PostGIS layer of every notified water body and its 30m / 50m / 100m buffer rings.
  2. On every property post we run a ST_Within check against the property's lat/lng.
  3. If it falls inside an FTL polygon → red banner (construction generally prohibited).
  4. If it falls in the buffer ring → amber banner (HMDA NOC required).
  5. Outside both → no banner shown.
15

Utility NOCs row (💧 ⚡ 🚿 🔥)

Four small dots — Water · Electricity · Sewage · Fire — showing whether the builder has obtained the required No-Objection Certificates from each utility department.

Dot colourMeaning
GreenNOC obtained, document on file.
AmberNOC application submitted, decision pending.
RedNOC explicitly rejected or expired.
GreyNo NOC data declared — buyer should ask builder.
16

Builder Response SLA chip — "replies in 2h · 89% reply rate"

Shows how fast a builder typically replies to buyer enquiries on BharatLocal and what fraction of enquiries they actually answer.

avg_response_time = average minutes between buyer inquiry timestamp
  and the builder's first reply, over the last 30 days

reply_rate = (inquiries replied to within 24h) ÷ (total inquiries received)

Only computed when the builder has received ≥ 5 inquiries in the last 30 days — otherwise the chip is hidden to avoid noisy stats from small samples.

⚠ What these scores are NOT

  • They are not a guarantee. A property labelled "Strong Buy" can still have issues we don't see — site visits, legal checks, and your own diligence are still required.
  • They are not paid placements. No builder or seller can pay to raise their score. The formula is published here in full; if a chip looks wrong, it's a data problem, not a money problem.
  • They are not static. Every input refreshes daily. A score you see today may move tomorrow when RERA posts new completion percentages or a new comparable listing lands.
  • They are not the only thing to look at. A buyer who only looks at the score is missing the point. The chips are a shortcut to good questions — not a substitute for asking them.