<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Olive Same</title>
    <description>The latest articles on DEV Community by Olive Same (@realestate26).</description>
    <link>https://dev.to/realestate26</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4181368%2Fa4089952-fcc7-4ac1-9511-a1a4178dccb6.jpg</url>
      <title>DEV Community: Olive Same</title>
      <link>https://dev.to/realestate26</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/realestate26"/>
    <language>en</language>
    <item>
      <title>Luxury Apartments in Gurgaon: Price It Like Data</title>
      <dc:creator>Olive Same</dc:creator>
      <pubDate>Tue, 13 Oct 2026 07:25:53 +0000</pubDate>
      <link>https://dev.to/realestate26/luxury-apartments-in-gurgaon-price-it-like-data-2069</link>
      <guid>https://dev.to/realestate26/luxury-apartments-in-gurgaon-price-it-like-data-2069</guid>
      <description>&lt;p&gt;Comparing luxury apartments in Gurgaon by the headline price is like comparing laptops by box size. Two homes at the same price can give you very different usable space.&lt;/p&gt;

&lt;p&gt;The fix is simple: convert everything to price per sq ft of carpet area, add the fixed charges, and then look at what the numbers cannot show. A dozen lines of pandas does the first part.&lt;/p&gt;

&lt;p&gt;This works well if you live abroad and are comparing projects from listings and PDFs. You need clean numbers, not a site visit, for the first pass.&lt;/p&gt;

&lt;h2&gt;
  
  
  Three areas, one apartment
&lt;/h2&gt;

&lt;p&gt;Indian listings use three area terms:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Carpet area: the usable floor inside your walls&lt;/li&gt;
&lt;li&gt;Built-up area: carpet plus wall thickness and balconies (definitions vary)&lt;/li&gt;
&lt;li&gt;Super built-up area: built-up plus a share of lobbies, lifts, stairs and clubhouse&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The Real Estate (Regulation and Development) Act, 2016 defines carpet area in Section 2(k), and project filings must state carpet area per unit. You can read the Act on &lt;a href="https://www.indiacode.nic.in/" rel="noopener noreferrer"&gt;India Code&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The gap between super area and carpet area is called "loading." Loading varies widely between projects, which is exactly why you should measure it instead of assuming it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The sample data
&lt;/h2&gt;

&lt;p&gt;The numbers below are made up to show the method. Do not read them as real prices.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;pandas&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;

&lt;span class="n"&gt;df&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;DataFrame&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;listing&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;     &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;A&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;B&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;C&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;price_cr&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;    &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mf"&gt;6.8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;6.5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;7.2&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;      &lt;span class="c1"&gt;# all-in quoted price, crore
&lt;/span&gt;    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;carpet_sqft&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2900&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2500&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3300&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;super_sqft&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;  &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;4100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3900&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4400&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;extras_lakh&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;35&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;60&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;         &lt;span class="c1"&gt;# parking, club, PLC, etc.
&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  The script
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;total_inr&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;price_cr&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mf"&gt;1e7&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;extras_lakh&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mf"&gt;1e5&lt;/span&gt;
&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;per_carpet_sqft&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;total_inr&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;carpet_sqft&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]).&lt;/span&gt;&lt;span class="nf"&gt;round&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;per_super_sqft&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;total_inr&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;super_sqft&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]).&lt;/span&gt;&lt;span class="nf"&gt;round&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;loading_pct&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;super_sqft&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;carpet_sqft&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;round&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;listing&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;per_super_sqft&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;per_carpet_sqft&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;loading_pct&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]]&lt;/span&gt;
      &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sort_values&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;per_carpet_sqft&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Run it and the ranking often flips. A listing that looks cheap per super sq ft can turn out to be the most expensive per carpet sq ft, because a big slice of what you pay for is lobby.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;extras_lakh&lt;/code&gt; column matters too. Parking, club membership and preferred location charges are sometimes quoted apart from the base price. Put them in, or the comparison is not fair.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the numbers miss
&lt;/h2&gt;

&lt;p&gt;Price per carpet sq ft is a good first filter. It is a poor final answer. Add these columns before you shortlist:&lt;/p&gt;

&lt;h3&gt;
  
  
  Density
&lt;/h3&gt;

&lt;p&gt;Units per acre tells you how crowded the site will feel. If the RERA filing gives total units and land area, compute it. Lower density usually means more open space per home.&lt;/p&gt;

&lt;h3&gt;
  
  
  Delivery date
&lt;/h3&gt;

&lt;p&gt;Use the completion date in the RERA filing, not the brochure. If they differ, trust the filing and ask why.&lt;/p&gt;

&lt;h3&gt;
  
  
  Fit and finish
&lt;/h3&gt;

&lt;p&gt;Specs like flooring, windows and kitchen fittings change the real value. They resist a number, so keep a notes column and score them after a visit or video walkthrough.&lt;/p&gt;

&lt;h2&gt;
  
  
  A worked reference
&lt;/h2&gt;

&lt;p&gt;Estate 361 in Sector 36A, Gurugram, is a useful test case for this model. The site covers 18.23 acres, homes start at ₹6.65 Cr, and the HARERA registration is RC/REP/HARERA/GGM/1012/744/2025/115.&lt;/p&gt;

&lt;p&gt;To compare it fairly, take the carpet area from the agreement or the RERA filing, add any charges quoted separately, and run it through the same script as every other option. The &lt;a href="https://maxestates.in/residential-projects/gurgaon/estate-361" rel="noopener noreferrer"&gt;Estate 361 project page&lt;/a&gt; is the place to start for unit details.&lt;/p&gt;

&lt;h2&gt;
  
  
  A note for NRI buyers
&lt;/h2&gt;

&lt;p&gt;If you earn in dollars or dirhams, add one more column: the price in your home currency at a few exchange rates.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;rate&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;83&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;86&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;89&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;   &lt;span class="c1"&gt;# INR per USD, your own scenarios
&lt;/span&gt;    &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;usd_at_&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;rate&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;total_inr&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="n"&gt;rate&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mf"&gt;1e6&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;round&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Payments on under-construction homes are spread over months or years, so the rate you pay at will move. A simple range is more honest than a single number.&lt;/p&gt;

&lt;p&gt;For more on how Gurugram's premium micro-markets compare, the &lt;a href="https://maxestates.in/blogs" rel="noopener noreferrer"&gt;Max Estates blog&lt;/a&gt; and the &lt;a href="https://delhincrproperties.co.in/" rel="noopener noreferrer"&gt;Delhi NCR Properties guide&lt;/a&gt; both have region-level reading.&lt;/p&gt;

</description>
      <category>python</category>
      <category>pandas</category>
      <category>datascience</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Grade A Office Space in Noida: A Tech Lead’s Checklist</title>
      <dc:creator>Olive Same</dc:creator>
      <pubDate>Tue, 13 Oct 2026 07:25:10 +0000</pubDate>
      <link>https://dev.to/realestate26/grade-a-office-space-in-noida-a-tech-leads-checklist-9bc</link>
      <guid>https://dev.to/realestate26/grade-a-office-space-in-noida-a-tech-leads-checklist-9bc</guid>
      <description>&lt;p&gt;At some point a tech lead gets pulled into an office search. Usually with a week's notice. Usually after the shortlist is already made.&lt;/p&gt;

&lt;p&gt;If that shortlist is Grade A office space in Noida, here is what to check. Power and network first, because outages cost money. Then floor plate, air, commute, and the lease clauses that hurt in year three.&lt;/p&gt;

&lt;p&gt;None of this needs a broker's vocabulary. It needs the same habits you use in a design review: ask for evidence, test the failure modes, and write down the answers.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Grade A means in practice
&lt;/h2&gt;

&lt;p&gt;There is no legal definition of "Grade A" in India. It is a market label. Property consultants use it, and each one draws the line a little differently.&lt;/p&gt;

&lt;p&gt;In practice it usually means large, regular floor plates, central air handling, full power backup, professional facility management, and often a green certification. Treat the label as a claim, then check each part.&lt;/p&gt;

&lt;h2&gt;
  
  
  Power and uptime
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Backup at the building level
&lt;/h3&gt;

&lt;p&gt;Ask what share of your load the building's generators cover, and how long switchover takes. Then ask who owns the UPS. In most leases the tenant buys and maintains UPS for its own racks and desks.&lt;/p&gt;

&lt;p&gt;Ask for the last outage log if they have one. A team that keeps one is usually a team that runs a tight building.&lt;/p&gt;

&lt;h3&gt;
  
  
  Two separate fiber paths
&lt;/h3&gt;

&lt;p&gt;"Multiple ISPs available" is not the same as two physical paths. Ask where fiber enters the building and whether two providers use different entry points and risers.&lt;/p&gt;

&lt;p&gt;If both lines share one trench, one backhoe takes them both out. Ask for the riser plan and look at it yourself.&lt;/p&gt;

&lt;h2&gt;
  
  
  Floor plate and efficiency
&lt;/h2&gt;

&lt;p&gt;You pay rent on chargeable area. Your people sit in carpet area. The ratio between them is the efficiency.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;efficiency = carpet_area / chargeable_area
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Two buildings at the same rent per sq ft can differ by a lot in real cost per desk because of this ratio. Ask for both numbers in writing.&lt;/p&gt;

&lt;p&gt;Also look at the column grid. Odd column spacing breaks desk layouts and wastes space that you still pay for.&lt;/p&gt;

&lt;h2&gt;
  
  
  Air, light and noise
&lt;/h2&gt;

&lt;p&gt;Ask whether the building tracks CO2 and PM2.5 per floor, and whether you can see that data. Delhi NCR winters make outdoor air a real issue, so filtration matters here more than in many cities.&lt;/p&gt;

&lt;p&gt;Check daylight depth. Floors that are very deep leave the middle dark. Then sit in the space at 4 pm and listen. Road noise and HVAC hum show up on a site visit, not in a PDF.&lt;/p&gt;

&lt;h2&gt;
  
  
  Commute math
&lt;/h2&gt;

&lt;p&gt;This is where a dev can add real value. Most teams guess the commute. You can measure it.&lt;/p&gt;

&lt;p&gt;Collect home pin codes from your team (anonymized, with consent), then compute travel times to each shortlisted site with an open routing engine such as &lt;a href="https://project-osrm.org/" rel="noopener noreferrer"&gt;OSRM&lt;/a&gt; or &lt;a href="https://openrouteservice.org/" rel="noopener noreferrer"&gt;OpenRouteService&lt;/a&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# sketch: median drive time from team pin codes to each site
&lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;statistics&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;median_minutes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;times_by_person&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;list&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;float&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;float&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;round&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;statistics&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;median&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;times_by_person&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;sites&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;site_a&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;42&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;35&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;58&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;61&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;29&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;   &lt;span class="c1"&gt;# minutes, from your routing calls
&lt;/span&gt;    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;site_b&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;38&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;47&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;33&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;52&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;40&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;times&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;sites&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;items&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;median:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;median_minutes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;times&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;min&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Use the median, not the mean. One person living in Faridabad should not swing the result.&lt;/p&gt;

&lt;p&gt;Add metro access as a second column. Noida is served by the Delhi Metro Blue Line and the NMRC Aqua Line, so walking distance to a station changes the picture for many staff.&lt;/p&gt;

&lt;h2&gt;
  
  
  Lease terms that bite later
&lt;/h2&gt;

&lt;p&gt;These clauses look small in year one:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Lock-in period and what exit costs after it&lt;/li&gt;
&lt;li&gt;Rent escalation rate and how often it applies&lt;/li&gt;
&lt;li&gt;Rent-free fit-out period, and whether it covers your real build time&lt;/li&gt;
&lt;li&gt;Reinstatement: do you have to restore the floor to bare shell on exit?&lt;/li&gt;
&lt;li&gt;Right of first refusal on adjacent space if the team grows&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Get your finance and legal teams on these early. A tech lead's job is to make sure the expansion clause matches the hiring plan.&lt;/p&gt;

&lt;h2&gt;
  
  
  One reference point
&lt;/h2&gt;

&lt;p&gt;Max Square in Noida is an example of the profile above. It carries IGBC Platinum pre-certification, and Adobe leased about 1.58 lakh sq ft there. A large tenant of that kind has usually done its own technical checks.&lt;/p&gt;

&lt;p&gt;Still, run your checklist anyway. Another company's needs are not yours. The &lt;a href="https://maxestates.in/commercial-projects/noida/max-square" rel="noopener noreferrer"&gt;Max Square project page&lt;/a&gt; has the basics to start from.&lt;/p&gt;

&lt;p&gt;For more on the region's office market, the &lt;a href="https://maxestates.in/blogs" rel="noopener noreferrer"&gt;Max Estates blog&lt;/a&gt; and the &lt;a href="https://delhincrproperties.co.in/" rel="noopener noreferrer"&gt;Delhi NCR Properties guide&lt;/a&gt; cover Noida and Gurugram options side by side.&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>management</category>
      <category>devops</category>
      <category>career</category>
    </item>
    <item>
      <title>Commercial Property in Delhi NCR: Green Ratings Decoded published: false</title>
      <dc:creator>Olive Same</dc:creator>
      <pubDate>Tue, 13 Oct 2026 07:20:37 +0000</pubDate>
      <link>https://dev.to/realestate26/commercial-property-in-delhi-ncr-green-ratings-decodedpublished-false-4404</link>
      <guid>https://dev.to/realestate26/commercial-property-in-delhi-ncr-green-ratings-decodedpublished-false-4404</guid>
      <description>&lt;p&gt;If your company is shortlisting commercial property in Delhi NCR, the brochures will show green badges. LEED Platinum. IGBC Platinum. GRESB 5-Star. They look alike. They answer three different questions.&lt;/p&gt;

&lt;p&gt;LEED rates a single building's design and, in some versions, its operations. IGBC is India's own system and often appears as a "pre-certification" at the design stage. GRESB rates the company and its portfolio, not your floor.&lt;/p&gt;

&lt;p&gt;If you are the engineer or facilities person asked to "check the sustainability stuff," this is the short version, plus a small script to test whether a building's air data backs up its badge.&lt;/p&gt;

&lt;h2&gt;
  
  
  LEED: a points table for one building
&lt;/h2&gt;

&lt;p&gt;LEED comes from the &lt;a href="https://www.usgbc.org/leed" rel="noopener noreferrer"&gt;U.S. Green Building Council&lt;/a&gt;. A project earns points across energy, water, materials, indoor air and site. Under LEED v4, the tiers are Certified (40-49 points), Silver (50-59), Gold (60-79) and Platinum (80+).&lt;/p&gt;

&lt;p&gt;Think of it as a scorecard at a point in time. A building certified under a design and construction track tells you how it was built. It does not, by itself, tell you how it runs today.&lt;/p&gt;

&lt;p&gt;Max Towers in Sector 16B, Noida, holds LEED Platinum. That is a strong design signal. The follow-up question for any LEED building, this one included, is simple: which rating system, which year, and is there recent operational data?&lt;/p&gt;

&lt;h2&gt;
  
  
  IGBC: pre-certified is a promise
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://igbc.in/" rel="noopener noreferrer"&gt;Indian Green Building Council&lt;/a&gt;, part of CII, runs India's main rating system. Its tiers mirror LEED's: Certified, Silver, Gold, Platinum.&lt;/p&gt;

&lt;p&gt;The word to watch is "pre-certified." Pre-certification is granted on design documents before or during construction. Full certification comes after the building is complete and verified.&lt;/p&gt;

&lt;p&gt;Max Square in Noida carries IGBC Platinum pre-certification. That tells you the design targets are high. It is fair, and normal, to ask the landlord when final certification is expected.&lt;/p&gt;

&lt;h2&gt;
  
  
  GRESB: the company, not the floor
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.gresb.com/" rel="noopener noreferrer"&gt;GRESB&lt;/a&gt; assesses real estate companies and funds every year on ESG management and performance. Star ratings (1 to 5) compare a participant against its peers in that cycle.&lt;/p&gt;

&lt;p&gt;Max Estates holds a dual GRESB 5-Star rating. What that means for a tenant: the landlord reports ESG data in a structured, audited way. If your own company files Scope 3 emissions, a GRESB-reporting landlord is usually easier to get numbers from.&lt;/p&gt;

&lt;p&gt;What it does not mean: that your specific floor has better air than the next building. That needs its own check.&lt;/p&gt;

&lt;h2&gt;
  
  
  Questions a tech team should ask
&lt;/h2&gt;

&lt;p&gt;Badges are inputs. Data is the answer. Ask for these before you sign.&lt;/p&gt;

&lt;h3&gt;
  
  
  Indoor air data
&lt;/h3&gt;

&lt;p&gt;Ask whether the building measures PM2.5 and CO2 at the floor level, and whether tenants can see the feed. A dashboard screenshot is a start. An export or an API is better.&lt;/p&gt;

&lt;p&gt;Ask what CO2 level triggers more fresh air, and who sets that threshold.&lt;/p&gt;

&lt;h3&gt;
  
  
  Energy and meters
&lt;/h3&gt;

&lt;p&gt;Ask for sub-metering per tenant area. Without it, your energy share is an estimate. Your sustainability team will need real numbers for annual reports.&lt;/p&gt;

&lt;h3&gt;
  
  
  Certificate dates
&lt;/h3&gt;

&lt;p&gt;Ratings carry dates and versions. Ask for the certificate, the rating system version, and any recertification plans. An old certificate on a busy building is worth a follow-up question.&lt;/p&gt;

&lt;h2&gt;
  
  
  A small script for an air feed
&lt;/h2&gt;

&lt;p&gt;Say the landlord shares an hourly CO2 export as JSON. You can test it in ten lines.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;

&lt;span class="n"&gt;THRESHOLD_PPM&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1000&lt;/span&gt;   &lt;span class="c1"&gt;# set this to your own policy
&lt;/span&gt;
&lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;co2_hourly.json&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;rows&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;load&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;   &lt;span class="c1"&gt;# [{"ts": "...", "floor": "7", "co2": 640}, ...]
&lt;/span&gt;
&lt;span class="n"&gt;office_hours&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;rows&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="mi"&gt;9&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="nf"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ts&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;11&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;13&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;19&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;over&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;office_hours&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;co2&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;THRESHOLD_PPM&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="n"&gt;share&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;over&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="nf"&gt;max&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;office_hours&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;office_hours&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; office-hour readings&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;share&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;% above &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;THRESHOLD_PPM&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; ppm&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The threshold here is a policy choice, not a rule. Pick one with your facilities team and keep it fixed across every building you compare. A number that changes between buildings makes the test useless.&lt;/p&gt;

&lt;p&gt;Also check for gaps. A feed missing three days a week is telling you something too.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where the badges stop
&lt;/h2&gt;

&lt;p&gt;Green ratings say nothing about rent, lift wait times, fit-out timelines, or your team's commute. A Platinum building two hours from your hiring pool is still two hours away.&lt;/p&gt;

&lt;p&gt;Use the badges to narrow the list. Use data and site visits to decide.&lt;/p&gt;

&lt;h2&gt;
  
  
  Further reading
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://maxestates.in/commercial-projects/noida/max-towers" rel="noopener noreferrer"&gt;Max Towers project page&lt;/a&gt; lists its certification, and the &lt;a href="https://maxestates.in/sustainability" rel="noopener noreferrer"&gt;Max Estates sustainability page&lt;/a&gt; covers the portfolio-level ESG reporting. For a wider view of office options across the region, the &lt;a href="https://delhincrproperties.co.in/" rel="noopener noreferrer"&gt;Delhi NCR Properties guide&lt;/a&gt; is a decent starting map.&lt;/p&gt;

</description>
      <category>sustainability</category>
      <category>python</category>
      <category>iot</category>
      <category>maxestate</category>
    </item>
    <item>
      <title>RERA Registered Projects in Noida: Validate in Python</title>
      <dc:creator>Olive Same</dc:creator>
      <pubDate>Tue, 13 Oct 2026 07:17:26 +0000</pubDate>
      <link>https://dev.to/realestate26/rera-registered-projects-in-noida-validate-in-python-2ica</link>
      <guid>https://dev.to/realestate26/rera-registered-projects-in-noida-validate-in-python-2ica</guid>
      <description>&lt;p&gt;If you build a listings app, a lead form, or even a spreadsheet for RERA registered projects in Noida, you will get bad RERA numbers. Some are typos. Some say "applied." A few are made up.&lt;/p&gt;

&lt;p&gt;A regex can catch the first two in milliseconds. It cannot catch the third. That second step needs the state portal, and no code shortcut replaces it.&lt;/p&gt;

&lt;p&gt;This post covers both parts: a short Python validator for Uttar Pradesh and Haryana formats, and a data model that records whether a human actually checked the number.&lt;/p&gt;

&lt;h2&gt;
  
  
  What a RERA number tells you
&lt;/h2&gt;

&lt;p&gt;Under the Real Estate (Regulation and Development) Act, 2016, most residential projects must register with the state authority before they are marketed. The registration number is the key to the public filing.&lt;/p&gt;

&lt;p&gt;That filing holds the useful stuff: approved plans, carpet areas, the promised completion date, and quarterly progress updates. The number itself is just a pointer. If the pointer is wrong, everything you show next to it is unverified.&lt;/p&gt;

&lt;h2&gt;
  
  
  Two states, two formats
&lt;/h2&gt;

&lt;p&gt;Delhi NCR buyers usually deal with two authorities. Noida and Greater Noida fall under UP RERA. Gurugram falls under Haryana RERA (HARERA). Their formats look nothing alike.&lt;/p&gt;

&lt;h3&gt;
  
  
  UP RERA (Noida)
&lt;/h3&gt;

&lt;p&gt;UP project numbers start with &lt;code&gt;UPRERAPRJ&lt;/code&gt; and six digits. Newer ones add a month and year suffix.&lt;/p&gt;

&lt;p&gt;Two real examples from the &lt;a href="https://www.up-rera.in/" rel="noopener noreferrer"&gt;UP RERA portal&lt;/a&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Estate 128, Sector 128, Phase I: &lt;code&gt;UPRERAPRJ446459&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Estate 105, Sector 105: &lt;code&gt;UPRERAPRJ529777/03/2026&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Note that Estate 128 has a second number for Phase II (&lt;code&gt;UPRERAPRJ294911&lt;/code&gt;). One project can have several registrations. Keep that in mind for the data model below.&lt;/p&gt;

&lt;h3&gt;
  
  
  HARERA (Gurugram)
&lt;/h3&gt;

&lt;p&gt;Haryana is messier. Older registrations read like "87 of 2024." Newer ones use a long slash path.&lt;/p&gt;

&lt;p&gt;Real examples from the &lt;a href="https://haryanarera.gov.in/" rel="noopener noreferrer"&gt;HARERA site&lt;/a&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Estate 360, Sector 36A: &lt;code&gt;HRERA No. 87 OF 2024&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Estate 361, Sector 36A: &lt;code&gt;RC/REP/HARERA/GGM/1012/744/2025/115&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The &lt;code&gt;GGM&lt;/code&gt; part refers to the Gurugram bench. If you cover other Haryana districts, loosen that part of the pattern.&lt;/p&gt;

&lt;h2&gt;
  
  
  The validator
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;re&lt;/span&gt;

&lt;span class="n"&gt;PATTERNS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;UP&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;re&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;compile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;r&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;^UPRERAPRJ\d{6}(/\d{2}/\d{4})?$&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;HR_NEW&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;re&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;compile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;r&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;^RC/REP/HARERA/GGM/\d+/\d+/\d{4}/\d+$&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;HR_OLD&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;re&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;compile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;r&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;^(HRERA\s+NO\.?\s*)?\d{1,4}\s+OF\s+\d{4}$&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;check_rera&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;raw&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="c1"&gt;# collapse spaces and uppercase before matching
&lt;/span&gt;    &lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt; &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;raw&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;strip&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;upper&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;split&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;pat&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;PATTERNS&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;items&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;pat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;match&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;normalized&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;format&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;shape_ok&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;normalized&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;format&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;shape_ok&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;samples&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;UPRERAPRJ446459&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;UPRERAPRJ529777/03/2026&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;RC/REP/HARERA/GGM/1012/744/2025/115&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;HRERA No. 87 of 2024&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;RERA applied&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;samples&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;check_rera&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The first four pass. The last one fails, which is the point. "RERA applied" or "RERA pending" in a listing should never pass as registered.&lt;/p&gt;

&lt;p&gt;Keep the patterns strict on structure and loose on whitespace. Users paste numbers with odd spaces and lowercase letters, and that is not fraud.&lt;/p&gt;

&lt;h2&gt;
  
  
  Shape vs existence
&lt;/h2&gt;

&lt;p&gt;Here is the trap. &lt;code&gt;UPRERAPRJ123456&lt;/code&gt; passes the regex. It may not exist. Or it may exist and belong to a different project in a different city.&lt;/p&gt;

&lt;p&gt;So the regex is a filter, not a verdict. After it passes, someone has to open the portal, search the number, and compare three fields:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Project name on the filing&lt;/li&gt;
&lt;li&gt;Promoter (developer) name&lt;/li&gt;
&lt;li&gt;Phase or tower list&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If any of the three differ from the listing, flag it.&lt;/p&gt;

&lt;p&gt;A word on automation: both portals use captchas and session checks. Scraping them is fragile and may break their terms of use. For a small app, a manual lookup with a stored timestamp is the honest option.&lt;/p&gt;

&lt;h2&gt;
  
  
  A data model for a listings app
&lt;/h2&gt;

&lt;p&gt;Store the check, not just the number. A minimal table:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;dataclasses&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;dataclass&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;date&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;typing&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Optional&lt;/span&gt;

&lt;span class="nd"&gt;@dataclass&lt;/span&gt;
&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ReraRecord&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;project_slug&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;
    &lt;span class="n"&gt;rera_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;
    &lt;span class="n"&gt;state&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;              &lt;span class="c1"&gt;# "UP" or "HR"
&lt;/span&gt;    &lt;span class="n"&gt;phase&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Optional&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;    &lt;span class="c1"&gt;# "Phase I", "Tower 4", etc.
&lt;/span&gt;    &lt;span class="n"&gt;shape_ok&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;bool&lt;/span&gt;
    &lt;span class="n"&gt;verified_on&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Optional&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;date&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;   &lt;span class="c1"&gt;# None until a human checks
&lt;/span&gt;    &lt;span class="n"&gt;source_url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Optional&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;     &lt;span class="c1"&gt;# portal page used for the check
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Two design choices matter here.&lt;/p&gt;

&lt;p&gt;First, &lt;code&gt;phase&lt;/code&gt; is its own field. Since one project can hold several registrations, a single &lt;code&gt;rera_id&lt;/code&gt; column on the project table will be wrong sooner or later.&lt;/p&gt;

&lt;p&gt;Second, &lt;code&gt;verified_on&lt;/code&gt; stays empty until a person checks it. Your UI can then show "format valid" and "verified on 12 Oct 2026" as two different badges. Users understand the gap better than you might expect.&lt;/p&gt;

&lt;h2&gt;
  
  
  Red flags worth a code path
&lt;/h2&gt;

&lt;p&gt;These show up often enough to deserve explicit handling:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The number appears only inside an image, never as text&lt;/li&gt;
&lt;li&gt;The listing says "RERA approved" with no number at all&lt;/li&gt;
&lt;li&gt;The number matches the format but the portal shows a different promoter&lt;/li&gt;
&lt;li&gt;The number covers Phase I while the listing sells a Phase II tower&lt;/li&gt;
&lt;li&gt;The completion date in the ad is earlier than the date in the filing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of these prove bad intent. They do mean the listing needs a second look before you show it as clean.&lt;/p&gt;

&lt;h2&gt;
  
  
  Next steps
&lt;/h2&gt;

&lt;p&gt;If you want to test the validator against live data, the Estate 105 project page lists its UP RERA number in the footer. Compare it with the portal entry: &lt;a href="https://maxestates.in/residential-projects/noida-residential-projects/estate-105" rel="noopener noreferrer"&gt;Estate 105 in Sector 105, Noida&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;For broader context on how listed developers in the region publish project data, the &lt;a href="https://maxestates.in/blogs" rel="noopener noreferrer"&gt;Max Estates blog archive&lt;/a&gt; and the &lt;a href="https://delhincrproperties.co.in/" rel="noopener noreferrer"&gt;Delhi NCR Properties guide&lt;/a&gt; are both useful starting points.&lt;/p&gt;

&lt;p&gt;A regex will never replace the portal. It just stops the obvious junk before a human wastes time on it.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Disclosure: this post was written by a digital marketing consultant who works with Max Estates. All RERA numbers above are public and can be checked on the state portals.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>python</category>
      <category>regex</category>
      <category>beginners</category>
      <category>proptech</category>
    </item>
  </channel>
</rss>
