<?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: Govtpvt</title>
    <description>The latest articles on DEV Community by Govtpvt (@govtpvt).</description>
    <link>https://dev.to/govtpvt</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%2F4175134%2Fd845a737-23ee-4de1-8802-790f03628800.png</url>
      <title>DEV Community: Govtpvt</title>
      <link>https://dev.to/govtpvt</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/govtpvt"/>
    <language>en</language>
    <item>
      <title>Parsing a Result PDF to Find Your Roll Number in Seconds</title>
      <dc:creator>Govtpvt</dc:creator>
      <pubDate>Wed, 21 Oct 2026 08:23:45 +0000</pubDate>
      <link>https://dev.to/govtpvt/parsing-a-result-pdf-to-find-your-roll-number-in-seconds-p64</link>
      <guid>https://dev.to/govtpvt/parsing-a-result-pdf-to-find-your-roll-number-in-seconds-p64</guid>
      <description>&lt;p&gt;Government exam results in India are often published as long PDFs with thousands of roll numbers. Searching them in a browser works, but when you are checking for a whole group of friends or students, a script is faster.&lt;/p&gt;

&lt;h2&gt;
  
  
  Install
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;pdfplumber
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Script
&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;pdfplumber&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sys&lt;/span&gt;

&lt;span class="n"&gt;pdf_path&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;argv&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;targets&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;argv&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;span class="k"&gt;with&lt;/span&gt; &lt;span class="n"&gt;pdfplumber&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pdf_path&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;pdf&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;i&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;page&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;enumerate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pdf&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;pages&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;start&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="n"&gt;text&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;extract_text&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="sh"&gt;""&lt;/span&gt;
        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;t&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;targets&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;t&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;text&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;t&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; found on page &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;i&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Run it with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python find_roll.py result.pdf 2401001234 2401005678
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Caveats
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Some PDFs are scanned images. You will need OCR (for example &lt;code&gt;pytesseract&lt;/code&gt;) for those.&lt;/li&gt;
&lt;li&gt;Roll numbers can be split across lines in tables. Normalise whitespace if you get misses.&lt;/li&gt;
&lt;li&gt;Always confirm with the official PDF before celebrating.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Where do the PDFs come from? Official board sites, or a tracker that links to them. I use the &lt;a href="https://govtpvt.com/govt-job/latest-results" rel="noopener noreferrer"&gt;Sarkari results&lt;/a&gt; page on &lt;a href="https://govtpvt.com/" rel="noopener noreferrer"&gt;govtpvt.com&lt;/a&gt;, which links the official result notice for each exam.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Building a Deadline Reminder for Government Job Forms with Google Calendar and a CSV</title>
      <dc:creator>Govtpvt</dc:creator>
      <pubDate>Wed, 21 Oct 2026 08:23:44 +0000</pubDate>
      <link>https://dev.to/govtpvt/building-a-deadline-reminder-for-government-job-forms-with-google-calendar-and-a-csv-198l</link>
      <guid>https://dev.to/govtpvt/building-a-deadline-reminder-for-government-job-forms-with-google-calendar-and-a-csv-198l</guid>
      <description>&lt;p&gt;Applying to several government recruitments at once means juggling last dates, fee deadlines, admit card weeks and exam days. I built a tiny workflow that turns a CSV into calendar reminders. No server, no paid tools.&lt;/p&gt;

&lt;h2&gt;
  
  
  The CSV
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;exam,event,date
SSC CGL,Last date to apply,2026-11-14
SSC CGL,Fee payment closes,2026-11-15
RRB NTPC,Admit card expected,2026-12-02
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Fill it from the official notices. I copy new rows whenever a notice appears on a tracker like the &lt;a href="https://govtpvt.com/govt-job/latest-jobs" rel="noopener noreferrer"&gt;latest government jobs&lt;/a&gt; page on Govtpvt.&lt;/p&gt;

&lt;h2&gt;
  
  
  Convert to ICS with Python
&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;csv&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;datetime&lt;/span&gt;

&lt;span class="n"&gt;lines&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;BEGIN:VCALENDAR&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;VERSION:2.0&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&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;deadlines.csv&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="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;row&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;csv&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;DictReader&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="n"&gt;d&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;strptime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;row&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;date&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;%Y-%m-%d&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;strftime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;%Y%m%d&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;lines&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;BEGIN:VEVENT&lt;/span&gt;&lt;span class="sh"&gt;"&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;DTSTART;VALUE=DATE:&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;d&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="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;SUMMARY:&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;row&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;exam&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; - &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;row&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;event&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&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="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;BEGIN:VALARM&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;TRIGGER:-P2D&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;ACTION:DISPLAY&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;DESCRIPTION:Reminder&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;END:VALARM&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;END:VEVENT&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;lines&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;END:VCALENDAR&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&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;deadlines.ics&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;w&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&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;lines&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Import &lt;code&gt;deadlines.ics&lt;/code&gt; into Google Calendar. Each event gets an alert two days early.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why two days
&lt;/h2&gt;

&lt;p&gt;Payment gateways and portals slow down near deadlines. Two days of buffer has saved me more than once.&lt;/p&gt;

&lt;p&gt;If you are building something similar, &lt;a href="https://govtpvt.com/" rel="noopener noreferrer"&gt;Govtpvt&lt;/a&gt; is a handy source for dates, since it lists notices, admit cards and results in one place.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Scraping-Free Alerts: Tracking Government Job Notices with RSS and a Spreadsheet</title>
      <dc:creator>Govtpvt</dc:creator>
      <pubDate>Sat, 17 Oct 2026 08:50:43 +0000</pubDate>
      <link>https://dev.to/govtpvt/scraping-free-alerts-tracking-government-job-notices-with-rss-and-a-spreadsheet-379c</link>
      <guid>https://dev.to/govtpvt/scraping-free-alerts-tracking-government-job-notices-with-rss-and-a-spreadsheet-379c</guid>
      <description>&lt;p&gt;Most government recruitment sites in India don't offer an API, and scraping them is fragile and often against their terms. Here is a low-tech setup that works for a personal job-alert pipeline.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Pick sources that publish feeds
&lt;/h2&gt;

&lt;p&gt;Many aggregators and some official portals expose RSS or Atom. Collect the feed URLs in one list.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Pull feeds into a spreadsheet
&lt;/h2&gt;

&lt;p&gt;Google Sheets' &lt;code&gt;IMPORTFEED&lt;/code&gt; function pulls the latest items into rows:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;=IMPORTFEED("https://example.org/feed", "items title", FALSE, 20)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  3. Filter by keyword
&lt;/h2&gt;

&lt;p&gt;Use &lt;code&gt;FILTER&lt;/code&gt; with &lt;code&gt;REGEXMATCH&lt;/code&gt; to keep only rows matching terms like "engineer", "apprentice" or your state:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight datastudio"&gt;&lt;code&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="nf"&gt;FILTER&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;A2&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;B&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;REGEXMATCH&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;LOWER&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;A2&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;A&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="s2"&gt;"apprentice|junior engineer"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  4. Add a closing-date column by hand
&lt;/h2&gt;

&lt;p&gt;Feeds rarely include the last date. Add it when you open the official notice. Conditional formatting can turn rows red seven days before the deadline.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Notifications
&lt;/h2&gt;

&lt;p&gt;Sheets can email you on change via &lt;strong&gt;Tools &amp;gt; Notification settings&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;For a human-curated source to cross-check, &lt;a href="https://govtpvt.com/" rel="noopener noreferrer"&gt;Govtpvt&lt;/a&gt; keeps a running list of &lt;a href="https://govtpvt.com/govt-job/latest-jobs" rel="noopener noreferrer"&gt;Sarkari job notifications&lt;/a&gt;, each linked to the official PDF.&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>googlesheets</category>
      <category>rss</category>
    </item>
    <item>
      <title>Modelling India's PSU List as Structured Data: A Small Schema</title>
      <dc:creator>Govtpvt</dc:creator>
      <pubDate>Sat, 17 Oct 2026 08:19:11 +0000</pubDate>
      <link>https://dev.to/govtpvt/modelling-indias-psu-list-as-structured-data-a-small-schema-2e5p</link>
      <guid>https://dev.to/govtpvt/modelling-indias-psu-list-as-structured-data-a-small-schema-2e5p</guid>
      <description>&lt;p&gt;While building the PSU section on Govtpvt, we needed a clean way to store India's public sector companies so the same data could drive tables, filters and per-company pages. Here is the schema we settled on, in case it helps anyone working with Indian government data.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem
&lt;/h2&gt;

&lt;p&gt;A "PSU list" looks simple until you try to store it. Companies change status (Miniratna to Navratna to Maharatna), merge, get renamed or move ministries. Public sector banks and insurers are government companies but follow different rules from industrial CPSEs. And recruitment details (GATE or own exam) matter more to readers than the status itself.&lt;/p&gt;

&lt;h2&gt;
  
  
  The schema
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"NTPC Limited"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"short_name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"NTPC"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"status"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"maharatna"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"status_since"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2010"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"cpse"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"sector"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"power"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"ministry"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Ministry of Power"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"listed"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"hq"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"New Delhi"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"recruitment"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"gate"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"apprenticeship"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"careers_url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://careers.ntpc.co.in"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A few choices worth explaining:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;status&lt;/code&gt; is an enum (&lt;code&gt;maharatna&lt;/code&gt;, &lt;code&gt;navratna&lt;/code&gt;, &lt;code&gt;miniratna_1&lt;/code&gt;, &lt;code&gt;miniratna_2&lt;/code&gt;, &lt;code&gt;none&lt;/code&gt;) plus &lt;code&gt;status_since&lt;/code&gt;, so upgrades are easy to track.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;type&lt;/code&gt; separates &lt;code&gt;cpse&lt;/code&gt;, &lt;code&gt;state_psu&lt;/code&gt;, &lt;code&gt;psb&lt;/code&gt; (public sector bank) and &lt;code&gt;insurer&lt;/code&gt;. Mixing them in one flat list confuses readers.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;recruitment&lt;/code&gt; is an array because many companies use more than one route.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;careers_url&lt;/code&gt; always points at the official site. We never link to third-party mirrors for application forms.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Rendering
&lt;/h2&gt;

&lt;p&gt;Grouping by &lt;code&gt;status&lt;/code&gt; gives the Maharatna/Navratna/Miniratna tables, and grouping by &lt;code&gt;sector&lt;/code&gt; gives the sector-wise view. Filtering &lt;code&gt;recruitment&lt;/code&gt; on &lt;code&gt;gate&lt;/code&gt; produces the "PSUs that recruit through GATE" list automatically.&lt;/p&gt;

&lt;p&gt;You can see the result on the &lt;a href="https://govtpvt.com/articles/psu-list-in-india" rel="noopener noreferrer"&gt;PSU list in India&lt;/a&gt; page. The same approach powers our &lt;a href="https://govtpvt.com/govt-job/latest-jobs" rel="noopener noreferrer"&gt;latest government jobs&lt;/a&gt; listings, where every entry links back to the official notice.&lt;/p&gt;

&lt;p&gt;If you maintain similar datasets for Indian public data, I'd love to compare notes in the comments.&lt;/p&gt;

</description>
      <category>opendata</category>
      <category>india</category>
      <category>webdev</category>
      <category>json</category>
    </item>
    <item>
      <title>Dates are the hardest field: handling deadlines that change after you publish them</title>
      <dc:creator>Govtpvt</dc:creator>
      <pubDate>Sun, 11 Oct 2026 11:17:42 +0000</pubDate>
      <link>https://dev.to/govtpvt/dates-are-the-hardest-field-handling-deadlines-that-change-after-you-publish-them-3b45</link>
      <guid>https://dev.to/govtpvt/dates-are-the-hardest-field-handling-deadlines-that-change-after-you-publish-them-3b45</guid>
      <description>&lt;p&gt;If you publish anything with a deadline on it, such as event listings, tender notices, admissions or job openings, you already know the awkward truth: the source changes the date after you have published it, and it does not tell you.&lt;/p&gt;

&lt;p&gt;We run a jobs portal for India, and deadline extensions are the single largest source of corrections. A few patterns have made them manageable.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. A date is a claim with a source
&lt;/h2&gt;

&lt;p&gt;Store each date together with where it came from and when you saw it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"field"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"closing_date"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"value"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2026-03-24"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"source"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"corrigendum-1.pdf"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"seen_at"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2026-03-09"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"supersedes"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2026-03-14"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now a correction is an append, not an overwrite, and you can always answer the question of what the page said last Tuesday.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. "Unknown" must be a valid value
&lt;/h2&gt;

&lt;p&gt;When an exam is postponed with no new date, the honest state is &lt;em&gt;to be announced&lt;/em&gt;. If your schema or UI forces a date, someone will type a guess, and guesses get screenshotted.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Show the change, do not hide it
&lt;/h2&gt;

&lt;p&gt;Render the old value struck through next to the new one with a link to the notice. It costs a line of UI and removes most "is this right?" emails.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Derive, do not duplicate
&lt;/h2&gt;

&lt;p&gt;"Closing soon" badges, countdowns and reminder emails should be computed from the latest assertion at read time. Anything cached with the old date will be wrong the day after an extension.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Time zones and end-of-day
&lt;/h2&gt;

&lt;p&gt;"Last date: 24 March" almost always means 23:59 local time at the source, and occasionally means 17:00. Record the time when the notice gives one, and never convert a date-only value through UTC.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Re-check on a schedule that matches risk
&lt;/h2&gt;

&lt;p&gt;Listings within a week of closing are the ones most likely to be extended. Re-verify those daily; everything else can wait.&lt;/p&gt;

&lt;p&gt;None of this is clever. It is just treating published dates as versioned data. You can see the result on our &lt;a href="https://govtpvt.com/govt-job/latest-jobs" rel="noopener noreferrer"&gt;latest government jobs&lt;/a&gt; listings at &lt;a href="https://govtpvt.com/" rel="noopener noreferrer"&gt;Govtpvt&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>database</category>
      <category>architecture</category>
      <category>learning</category>
    </item>
    <item>
      <title>GATE CS is not only for M.Tech: how PSU recruitment through GATE works</title>
      <dc:creator>Govtpvt</dc:creator>
      <pubDate>Sat, 10 Oct 2026 11:21:06 +0000</pubDate>
      <link>https://dev.to/govtpvt/gate-cs-is-not-only-for-mtech-how-psu-recruitment-through-gate-works-1b9g</link>
      <guid>https://dev.to/govtpvt/gate-cs-is-not-only-for-mtech-how-psu-recruitment-through-gate-works-1b9g</guid>
      <description>&lt;p&gt;If you are a CS or IT graduate sitting GATE, the M.Tech route is only one of the things the score is good for. Several public sector employers shortlist engineers directly from GATE, and the process is very different from campus placement. Here is how it works, step by step.&lt;/p&gt;

&lt;h2&gt;
  
  
  The score is necessary, the form is mandatory
&lt;/h2&gt;

&lt;p&gt;PSUs do not pull your score from GATE automatically. Each one publishes its own recruitment notification and its own application form, where you enter your GATE registration number. Many of these forms open &lt;strong&gt;before&lt;/strong&gt; the GATE result is declared and close soon after. Every year, people with good scores miss out because they never applied.&lt;/p&gt;

&lt;p&gt;A simple habit fixes this: from January onwards, check a &lt;a href="https://govtpvt.com/govt-job/latest-jobs" rel="noopener noreferrer"&gt;list of current government job notifications&lt;/a&gt; once a week and apply to every PSU whose eligibility you meet.&lt;/p&gt;

&lt;h2&gt;
  
  
  Check the paper code and branch mapping
&lt;/h2&gt;

&lt;p&gt;Each notification lists which GATE paper it accepts for which discipline. For software roles that is usually CS, sometimes also DA or EC. If the notification says CS only and you wrote DA, you are not eligible for that post, whatever your rank.&lt;/p&gt;

&lt;h2&gt;
  
  
  What happens after shortlisting
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Shortlist by GATE score&lt;/strong&gt;, category-wise, usually at a fixed ratio to vacancies&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Group discussion or group task&lt;/strong&gt; at some PSUs&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Personal interview&lt;/strong&gt;, technical plus HR&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Final merit list&lt;/strong&gt;, typically weighted around 75 to 85 percent GATE and the rest interview&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Medical examination and document verification&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Because GATE carries most of the weight, the interview rarely rescues a low score, but it can reorder candidates who are close together.&lt;/p&gt;

&lt;h2&gt;
  
  
  Things the notification will tell you (read them)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Service bond&lt;/strong&gt;: many PSUs ask for a bond of a few years&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pay scale&lt;/strong&gt;: quoted as a range such as 50,000 to 1,60,000; your starting basic is the lower figure, with allowances on top. This &lt;a href="https://govtpvt.github.io/government-salary-basics.html" rel="noopener noreferrer"&gt;guide to government salary basics&lt;/a&gt; explains how to read it&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Minimum percentage&lt;/strong&gt; in your degree, which is separate from your GATE score&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Final-year eligibility&lt;/strong&gt; and the date by which you must produce the degree&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  A realistic timeline
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Month&lt;/th&gt;
&lt;th&gt;What to do&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Aug to Oct&lt;/td&gt;
&lt;td&gt;GATE registration&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Jan to Mar&lt;/td&gt;
&lt;td&gt;PSU forms open; apply with registration number&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Feb&lt;/td&gt;
&lt;td&gt;GATE exam&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mar&lt;/td&gt;
&lt;td&gt;GATE result; PSUs fetch scores&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Apr to Jul&lt;/td&gt;
&lt;td&gt;Shortlists, interviews, final results&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Keep one folder ready
&lt;/h2&gt;

&lt;p&gt;GATE scorecard, degree and mark sheets, category certificate in the central format, photo ID and recent photographs. Document verification is where avoidable rejections happen.&lt;/p&gt;

&lt;p&gt;A longer version of this, including research bodies that take GATE scores, is in this &lt;a href="https://govtpvt.github.io/gate-to-psu-guide.html" rel="noopener noreferrer"&gt;GATE to PSU guide&lt;/a&gt;. Results and shortlists are tracked on the &lt;a href="https://govtpvt.com/govt-job/latest-results" rel="noopener noreferrer"&gt;Govtpvt results page&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>career</category>
      <category>computerscience</category>
      <category>india</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Lessons from running a government jobs portal: treat every update as data, not content</title>
      <dc:creator>Govtpvt</dc:creator>
      <pubDate>Sat, 10 Oct 2026 11:13:50 +0000</pubDate>
      <link>https://dev.to/govtpvt/lessons-from-running-a-government-jobs-portal-treat-every-update-as-data-not-content-35il</link>
      <guid>https://dev.to/govtpvt/lessons-from-running-a-government-jobs-portal-treat-every-update-as-data-not-content-35il</guid>
      <description>&lt;p&gt;Running a jobs portal sounds like a content problem. In practice it is a data quality problem. A wrong last date or a wrong fee on a government job listing costs a real person an application, so the whole workflow at &lt;a href="https://govtpvt.com/" rel="noopener noreferrer"&gt;Govtpvt&lt;/a&gt; is built around one rule: &lt;strong&gt;nothing gets published unless it points to the official source document.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;These are the practices that have held up for us. They apply to any site that republishes time-sensitive public information.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Store the source, not just the summary
&lt;/h2&gt;

&lt;p&gt;Every listing carries the URL of the official notification PDF and the official apply page. Reviewers check the listing against the PDF, and readers can check it too. If we cannot find an official document, the update does not go out, however widely it is being shared elsewhere.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Model the lifecycle, not the announcement
&lt;/h2&gt;

&lt;p&gt;A recruitment is not one event. It is a sequence:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;notification -&amp;gt; application window -&amp;gt; correction window
  -&amp;gt; admit card -&amp;gt; exam -&amp;gt; answer key -&amp;gt; result -&amp;gt; document verification
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each stage has its own date and its own official link. Treating them as states of one record, instead of separate articles, is what lets a reader land on a page and see where things stand today. That is why the site is organised by stage: &lt;a href="https://govtpvt.com/govt-job/latest-jobs" rel="noopener noreferrer"&gt;latest jobs&lt;/a&gt;, &lt;a href="https://govtpvt.com/govt-job/admit-cards" rel="noopener noreferrer"&gt;admit cards&lt;/a&gt;, &lt;a href="https://govtpvt.com/govt-job/answer-keys" rel="noopener noreferrer"&gt;answer keys&lt;/a&gt; and &lt;a href="https://govtpvt.com/govt-job/latest-results" rel="noopener noreferrer"&gt;results&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Dates are the highest-risk field
&lt;/h2&gt;

&lt;p&gt;Most corrections we make are date corrections, because recruiting bodies extend deadlines through short corrigendum notices. Three habits help:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Keep the original date and the revised date, and show both&lt;/li&gt;
&lt;li&gt;Record which notice changed it&lt;/li&gt;
&lt;li&gt;Never infer a date. "Exam likely in December" is not a date&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  4. Write eligibility as a table
&lt;/h2&gt;

&lt;p&gt;Age limits, relaxations, qualification and fee vary by category. Prose hides the differences; a table exposes them. It also makes review faster, because a reviewer can compare row by row with the notification.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Keep explainers separate from updates
&lt;/h2&gt;

&lt;p&gt;Updates expire. Explanations do not. Things like how normalisation works or what a pay level means live as standalone guides, for example this &lt;a href="https://govtpvt.github.io/government-job-glossary.html" rel="noopener noreferrer"&gt;glossary of government job terms&lt;/a&gt;, and listings link to them instead of repeating the explanation each time.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Make corrections visible
&lt;/h2&gt;

&lt;p&gt;When we get something wrong, the fix is made on the same page with the corrected value. Quietly replacing a number teaches readers not to trust the page.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I would tell anyone building something similar
&lt;/h2&gt;

&lt;p&gt;Speed matters less than you think. Being ten minutes behind and right beats being first and wrong, because the reader's next step is to pay a fee and submit a form.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>learning</category>
      <category>india</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Government tech jobs in India: a developer's guide to how hiring actually works</title>
      <dc:creator>Govtpvt</dc:creator>
      <pubDate>Sat, 10 Oct 2026 11:12:56 +0000</pubDate>
      <link>https://dev.to/govtpvt/government-tech-jobs-in-india-a-developers-guide-to-how-hiring-actually-works-7i8</link>
      <guid>https://dev.to/govtpvt/government-tech-jobs-in-india-a-developers-guide-to-how-hiring-actually-works-7i8</guid>
      <description>&lt;p&gt;Most developers in India hear about government tech jobs second-hand: a friend got into ISRO, a senior joined NIC, somebody's cousin cleared a bank IT officer exam. The process itself is rarely explained. Here is the short version, written for people who already know how to code and want to know what the hiring pipeline looks like.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. The notification is the spec
&lt;/h2&gt;

&lt;p&gt;Every recruitment starts with an official PDF notification. Treat it like a spec document, because the recruiting body will. It fixes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Eligibility&lt;/strong&gt;: degree, branch, minimum percentage, and the cut-off date for age&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Selection stages&lt;/strong&gt;: written test, skill test, interview, document verification&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Syllabus and exam pattern&lt;/strong&gt;: sections, marks, negative marking&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dates&lt;/strong&gt;: application window, correction window, exam date&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If your branch is not listed, no amount of skill fixes that. Read the eligibility table before anything else.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Who actually hires engineers
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Body&lt;/th&gt;
&lt;th&gt;Typical roles&lt;/th&gt;
&lt;th&gt;Entry route&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;NIC&lt;/td&gt;
&lt;td&gt;Scientist-B, Scientific/Technical Assistant&lt;/td&gt;
&lt;td&gt;NIELIT-conducted exam&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ISRO&lt;/td&gt;
&lt;td&gt;Scientist/Engineer SC (CS, EC, ME)&lt;/td&gt;
&lt;td&gt;ISRO centralised recruitment exam&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DRDO&lt;/td&gt;
&lt;td&gt;Scientist B&lt;/td&gt;
&lt;td&gt;GATE score + interview&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;C-DAC&lt;/td&gt;
&lt;td&gt;Project Engineer, Project Associate&lt;/td&gt;
&lt;td&gt;Direct recruitment, often contract&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PSUs (IOCL, NTPC, PowerGrid...)&lt;/td&gt;
&lt;td&gt;Engineer / Executive Trainee&lt;/td&gt;
&lt;td&gt;GATE score&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Banks (IBPS SO, SBI SO)&lt;/td&gt;
&lt;td&gt;IT Officer&lt;/td&gt;
&lt;td&gt;Prelims + mains + interview&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  3. GATE is the closest thing to a common API
&lt;/h2&gt;

&lt;p&gt;A valid GATE score opens DRDO, most PSUs and several research bodies with one exam. The catch: each organisation publishes its own application form and its own cut-off, and the form usually opens &lt;em&gt;before&lt;/em&gt; the GATE result. Miss the form and the score is useless for that employer.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. The exam is computer based, and normalised
&lt;/h2&gt;

&lt;p&gt;Large exams run in multiple shifts with different question papers. Scores are normalised so a harder shift does not cost you. Cut-offs apply to the normalised score, not your raw marks. If that sounds odd, this explainer walks through an example: &lt;a href="https://govtpvt.github.io/normalisation-explained.html" rel="noopener noreferrer"&gt;how normalisation works&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Common ways developers lose a seat
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Applying with a degree certificate dated after the cut-off date&lt;/li&gt;
&lt;li&gt;Uploading a photo or signature outside the size limits and skipping the correction window&lt;/li&gt;
&lt;li&gt;Ignoring the reporting time on the admit card (gates close early)&lt;/li&gt;
&lt;li&gt;Not downloading the response sheet when the answer key is released&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  6. Where to track it
&lt;/h2&gt;

&lt;p&gt;There is no single government feed for all of this, which is why we built &lt;a href="https://govtpvt.com/" rel="noopener noreferrer"&gt;Govtpvt&lt;/a&gt;. It lists &lt;a href="https://govtpvt.com/govt-job/latest-jobs" rel="noopener noreferrer"&gt;latest government job notifications&lt;/a&gt;, &lt;a href="https://govtpvt.com/govt-job/admit-cards" rel="noopener noreferrer"&gt;admit cards&lt;/a&gt; and &lt;a href="https://govtpvt.com/govt-job/latest-results" rel="noopener noreferrer"&gt;results&lt;/a&gt;, and each entry links to the official source PDF so you can verify it yourself.&lt;/p&gt;

&lt;p&gt;If you have been through one of these pipelines, I would like to hear what surprised you most.&lt;/p&gt;

</description>
      <category>career</category>
      <category>india</category>
      <category>beginners</category>
      <category>jobs</category>
    </item>
  </channel>
</rss>
