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.
16a

AI Document Verification — Sale Deed · EC · Agreement · OC · NOC

A buyer's safety net for spotting structural problems in legal documents before they hand over money. Read this whole section carefully — what the feature does and what it does NOT do are both important.

The flow, step by step

  1. From the property detail screen tap "Verify documents" → choose a document type (Sale Deed, EC, Agreement of Sale, Occupancy Certificate, RERA Form-A, Mutation, NOC, Other).
  2. Upload one file per check — camera photo of the physical doc (JPG), an image from your gallery, or a PDF you already have. You do not type the document number, year, or any field — just upload the file.
  3. The file lands on Cloudinary. The backend instantly sends the image + a document-type-specific checklist prompt to Groq Vision (LLaMA 3.2 90B Vision).
  4. Within ~30 seconds you get back: a 0-100 risk score, a 2-3 line summary, a list of issues found, a list of warnings, and 1-3 recommended next actions.
  5. Result is saved to the document_verifications table against your user ID + property — you can re-open it any time from your profile.

What the AI actually looks for

A per-document-type checklist that asks the vision model to confirm or flag the presence/absence of:

Document typeThe AI checks
Sale DeedRegistration number visible · Sub-registrar stamp · Both party names + signatures · Schedule of property · Stamp duty value · Witness signatures · Date
Encumbrance Certificate (EC)Issuing authority name · Period covered · Each registered transaction line · Any mortgage / lien entries · Officer signature + seal
Agreement of SaleToken / advance amount · Final consideration · Both party signatures · Witness signatures · Property schedule · Default clauses
Occupancy Certificate (OC)Issuing municipal body · Building permit reference · Structural-safety certification · Date issued · Authorized-signatory seal
RERA Form-ARERA registration number · Promoter declaration · Project details match the listing · Authorised-signatory sign-off
Mutation / KhataCurrent property-tax-payer name match · Mutation entry date · Survey number

What you actually get back

risk_score: 0-100 // 0 = clean, 100 = many red flags
summary: 2-3 lines // plain-English verdict
findings: string[] // every issue + warning detected
recommended_actions:[] // 1-3 next steps (e.g. "get lawyer review")
status: processing → completed

Risk score bands

ScoreBandSuggested action
0-25Looks cleanDoc shows all expected markers. Still get a lawyer to confirm with the registry office.
26-50Some concernsSpecific fields are missing or unclear — ask the seller for a clearer copy or the original.
51-100High riskMajor markers absent (no registration number / signatures / seal). Do not proceed without legal review.

⚠ Honest disclosure — what this feature does NOT do

We want every buyer to understand this clearly so you don't rely on AI for things AI cannot do:

  • We do not query any government portal. There is no integration with IGRS Telangana, MeeBhoomi, Bhulekh, Kaveri-Online, or any state land-records site. The AI reads only the image you upload.
  • We do not confirm registration status. If a sale deed has a registration number printed on it, the AI confirms the number is visible — but it does not verify whether that registration actually exists in the sub-registrar's records. A forged registration number would still pass.
  • We do not detect encumbrances filed AFTER your EC date. The AI reads the EC you uploaded. If a loan / mortgage was filed yesterday and your EC is two months old, the AI cannot know.
  • We do not extract structured fields (yet). The AI reads the document for red flags. It does not save the document number, year, or owner names into a structured record you can later compare against the property listing.
  • This is not a substitute for a lawyer. Every "completed" verification result ends with a recommendation to get a lawyer to confirm against the registry. We mean that.

Where this is going (planned, not live)

In a future release we plan to: (a) extract the document number + year as structured fields, (b) deep-link from the result screen to the IGRS / MeeBhoomi site with the number pre-filled so you can manually cross-check in one tap, (c) offer a paid Legal Validation pack where one of our partner lawyers does the registry check for you within 48 hours. Those flows do not exist yet — we'll announce them on this page when they ship.

Source: app/modules/doc_verification.py · app/integrations/ai_groq.py · DB/doc_verification_migration.sql

16b

Builder & Seller onboarding documents — GST · PAN · RERA cert · Aadhaar · Selfie

When a builder or seller signs up they upload identity + business documents to earn the green Verified badge. Same honest disclosure applies here as for buyer-side docs above: everything below is admin-reviewed manually. We do not query GST.gov.in, NSDL, the income-tax portal, or any state RERA portal automatically.

Who uploads what

RoleDocumentWhat admin checks for
Builder
(for Verified Builder ✓ badge)
RERA registration certificate Number readable · matches builder name · still in valid period
GST certificate GSTIN readable · legal name matches builder name · address consistent
PAN card (company / proprietor) PAN format valid · holder name matches builder name
Director Aadhaar (front page) Name + DOB readable · masked digits visible · matches director-on-record
Company website / LinkedIn (optional URL) Live site · matches name & address claimed in form
Individual seller
(for Owner Verified ✓ pill)
Aadhaar number + OTP (UIDAI) OTP delivered to Aadhaar-linked phone is the only auto-check we do; everything else is manual
15-second selfie video Live face match against PAN/Aadhaar photo · single attempt only
Property ownership proof (tax receipt OR sale deed OR EC) Owner name on doc matches the seller's KYC name; survey number matches the listing's locality
Kirana / Service partner
(for Verified Partner badge)
GST number (typed) + GST cert image Stored as text · cert image admin-reviewed manually for legibility
FSSAI / Shops & Establishment licence Visual check for licence number, address, validity

The actual flow

  1. Builder/seller fills the form + uploads images via the app (Cloudinary storage).
  2. Backend inserts a row into builder_verification_requests (or property.owner_verification_video_url for sellers).
  3. Request lands in admin's Pending Verifications queue (fast-track requests jump to the top).
  4. An admin opens the queue, eyeballs each image, and clicks Approve or Reject with notes.
  5. On approve → verified_builders / users.kyc_verified_at / properties.owner_verified gets set → green badge appears.

⚠ What this means in practice — what we do NOT do

  • GST certificate: we do not call gst.gov.in's public search API to confirm the GSTIN is active. A revoked or fake GSTIN with a plausible-looking certificate image could pass.
  • PAN card: we do not verify the PAN number with NSDL / Income Tax Department. Format-valid forgeries could pass.
  • RERA certificate: we do not cross-check the RERA number against the state RERA portal in real time. (We do have a stubbed Telangana scraper for cached records, but it does not verify uploaded certificates against the portal in real time.)
  • Aadhaar: only the OTP delivery is "live" (UIDAI sends the SMS). We do not use Aadhaar e-KYC / XML / DigiLocker to pull a clean record — we read the image you upload.
  • The Verified badge means an admin visually checked the documents. It does not mean the documents were cryptographically verified with the issuing authority.

Where this is going (planned, not live)

Live verification needs Aadhaar e-KYC (KUA licence + AUA), DigiLocker API integration, GST public-search endpoint, and the RERA scraper (currently CAPTCHA-blocked on Telangana). Those integrations are on our pre-production checklist and will roll out before we shift to LIVE payment mode. Until then the green Verified badge means human-eyeballed, not government-database-verified.

Source: app/modules/builder_verification.py · app/modules/verified_owner.py · app/modules/partners.py

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.