user4418: Chess.com reports that 17-year-old Frederik Svane has scored 2 GM Norms In 24 Hours and asks if this is a record:

17-year-old Svane, the youngest of the two brothers (Rasmus recently turned 25), scored his first GM norm in October 2021 at a round-robin in Kiel, Germany, where he finished in second place and reached the necessary 6.5 points by winning the last two rounds on demand.
The second GM norm came last Friday, when Svane finished another closed GM tournament, this time at the local Hamburg Chess Club. The scenario was almost the same: he again came second with the necessary 6.5 points, this time winning the last three rounds on demand.
Meanwhile, Frederik had played a pretty good Bundesliga season for his Hamburg club, where he had collected six points in the first eight rounds. You may guess it: also here, against pretty strong opposition, he needed 6.5 points for a GM norm. His opponent on Saturday, GM Eduardas Rozentalis, who had celebrated his 59th birthday the day before, didn't mind a quick draw, and so Svane had achieved something unique: two norms in a day! [Ed: Friday and Saturday are not the same day. Stick to 24 hours]


user17823: Well, this was painful. The data inserted by FIDE was inconsistent, there were duplicate entries and some records didn't even exist. Anyways:
No, this does not seem to be a new record!
Peng, Li Min (title application) won two GM norms in the same day (Elitzur GM Winter 2020 A Stage 1 and Elitzur GM Winter 2020 C Stage 1 both ended on 2021-03-11)

I needed to check 2 large categories of players:

Those who had earnt at least two GM norms (Norms tab).
Those who already had the GM title (Applications tab).



The JSON data is available in this URL. We're only interested in the player's name and their id. Now, for each of the players, make a request to https://ratings.fide.com/a_titles.php?record2=<playerId> to get information about the norms they've earnt.

For those who already are GMs this is slightly harder. For each FIDE Council/PB, fetch all application by making a GET request to https://ratings.fide.com/a_titles.php?pb=<id> (1 < id < 70 at the time of writing), get only the Grandmaster applications, for each applicant make a request to https://ratings.fide.com/a_titles.php?record=<playerId>. Parse the HTML and sort as above.


Combine both steps, sort and output.
This is the JavaScript code I ran to get the above results. You can copy-paste it in the console on a https://ratings.fide.com page to test for yourself.

4418: <p>Chess.com reports that 17-year-old <a href="https://www.chess.com/news/view/frederik-svane-2-gm-norms-in-24-hours" rel="nofollow noreferrer">Frederik Svane has scored 2 GM Norms In 24 Hours</a> and asks if this is a record:</p>
<blockquote>
<p>17-year-old Svane, the youngest of the two brothers (Rasmus recently turned 25), scored his first GM norm in October 2021 at a round-robin in Kiel, Germany, where he finished in second place and reached the necessary 6.5 points by winning the last two rounds on demand.</p>
<p>The second GM norm came last Friday, when Svane finished another closed GM tournament, this time at the local Hamburg Chess Club. The scenario was almost the same: he again came second with the necessary 6.5 points, this time winning the last three rounds on demand.</p>
<p>Meanwhile, Frederik had played a pretty good Bundesliga season for his Hamburg club, where he had collected six points in the first eight rounds. You may guess it: also here, against pretty strong opposition, he needed 6.5 points for a GM norm. His opponent on Saturday, GM Eduardas Rozentalis, who had celebrated his 59th birthday the day before, didn't mind a quick draw, and so Svane had achieved something unique: two norms in a day! [Ed: Friday and Saturday are not the same day. Stick to 24 hours]</p>
</blockquote>
 17823: <p>Well, this was painful. The data inserted by FIDE was inconsistent, there were duplicate entries and some records didn't even exist. Anyways:</p>
<h3>No, this does not seem to be a new record!</h3>
<p><strong><a href="https://ratings.fide.com/profile/14112620" rel="noreferrer">Peng, Li Min</a></strong> (<a href="https://ratings.fide.com/crt/main227056.pdf" rel="noreferrer">title application</a>) won two GM norms <strong>in the same day</strong> (<em>Elitzur GM Winter 2020 A Stage 1</em> and <em>Elitzur GM Winter 2020 C Stage 1</em> both ended on 2021-03-11)</p>
<hr />
<p>I needed to check 2 large <a href="https://ratings.fide.com/titles_page.phtml" rel="noreferrer">categories of players</a>:</p>
<ol>
<li>Those who had earnt at least two GM norms (Norms tab).</li>
<li>Those who already had the GM title (Applications tab).</li>
</ol>
<hr />
<ol>
<li><p>The JSON data is available in <a href="https://ratings.fide.com/a_titles.php?country=latest&amp;title=%22GM%22" rel="noreferrer">this URL</a>. We're only interested in the player's name and their id. Now, for each of the players, make a request to <code>https://ratings.fide.com/a_titles.php?record2=&lt;playerId&gt;</code> to get information about the norms they've earnt.</p>
</li>
<li><p>For those who already are GMs this is slightly harder. For each FIDE Council/PB, fetch all application by making a GET request to <code>https://ratings.fide.com/a_titles.php?pb=&lt;id&gt;</code> (<code>1 &lt; id &lt; 70</code> at the time of writing), get <em>only</em> the Grandmaster applications, for each applicant make a request to <code>https://ratings.fide.com/a_titles.php?record=&lt;playerId&gt;</code>. Parse the HTML and sort as above.</p>
</li>
</ol>
<p>Combine both steps, sort and output.</p>
<p><a href="https://gist.github.com/double-beep/848bdcc15ad1d1d348c0231422d1c2ff" rel="noreferrer">This is the JavaScript code I ran</a> to get the above results. You can copy-paste it in the console on a <a href="https://ratings.fide.com" rel="noreferrer">https://ratings.fide.com</a> page to test for yourself.</p>
