Created a Free Game List Page
We have created and published a list page where you can check information on currently distributed free games all in one place. You can instantly view the actual page from the link below.
Limited-time free game distribution campaigns are held irregularly on platforms like Steam and Epic Games Store, but I always felt that logging into each platform and searching or hunting for information every time was quite a hassle. With some distribution periods being as short as a few days or limited to 24 hours, I thought having a convenient place to check everything in one spot would ensure I never miss out. The desire to eliminate the hassle of searching across individual platforms and to have a system where everything can be easily checked in a single location sparked the creation of this page.
Specialized Exclusively in Discount Information
While there are many game price comparison sites out there, they contain too much information, making them unsuitable for checking solely with the objective of “what can I get for free right now?" Therefore, I decided to build a noise-free, proprietary free game archive that pinpoints and collects only 0-yen free game distribution data from publicly available information on the net, automatically storing and updating it on a static page of my blog. This makes it possible to construct a unique database stripped of unnecessary information.
Below is an example of the free game display as of May 26, 2026.
Scheduled Automatic Crawling
When building the system, the goal was to reduce manual operational costs to absolute zero. As the development foundation, we adopted “n8n," a workflow tool that allows various web services and data processing tasks to be connected and automated programmatically.
To accumulate past distribution history and archive it, a database to store data is essential. However, building a dedicated external database server from scratch felt extremely tedious. That’s when I turned my attention to “Data Tables," a built-in database-like feature in n8n, and decided to try designing a system to store data using this feature for the very first time.
Regarding the frequency of information gathering, from the perspective of suppressing unnecessary server load on the data provider, we initially set it to crawl four times a day.
[Challenge] Three Traps Faced During Development
Due to the combination of Data Tables and n8n specifications encountered for the first time, development faced unexpected multi-layered technical challenges:
- (Stoppage due to empty data): When there is no new data (0 items) and an attempt is made to insert data directly into Data Tables as-is, an error occurs and processing halts.
- (Duplication due to incorrect node connections): By making a mistake in how nodes were connected (using parallel connections where they should have been in series), past data stored in Data Tables could not be correctly compared with the latest information, resulting in all games being processed as “new arrivals."
- (Inconsistencies due to unnecessary keys): As a result of sending the number of new arrivals (count) and detailed game information together to subsequent nodes, an extra “json" key hierarchy crept into the data, preventing normal insertion (Insert) into Data Tables.
[Solution] Serialization of Nodes and Data Control
To fundamentally solve these issues, data shaping using JavaScript and proper node arrangement in n8n were implemented to bring the behavior of Data Tables completely under control.
- A mechanism to count the number of new arrivals before sending data was incorporated into a Code node, and an If node was placed downstream to create a conditional branch: “proceed with processing only if there is 1 or more new items," thereby avoiding errors caused by empty data.
- This was the part that caused the most head-scratching and consumed a significant amount of time during this build. Once the cause was understood, it was a simple mistake of “how the nodes were connected." However, because of the preconception that “data is being compared," it was extremely difficult to notice that the processes were running separately. After realizing this structural error, by reconnecting the nodes from parallel to “series (a single path)," we successfully corrected the setup to reliably compare and match Data Tables data with the latest public information on the same program (JavaScript).
- By using the “Item Lists (Split Out)" node to neatly split nested data into individual items before adding them to Data Tables, and then re-aggregating them using the “Aggregate" node afterward, we achieved the same smooth behavior as before adding the new arrival counts.
Looking ahead to future expansions (such as distinguishing between games and DLCs, or displaying original list prices), attributes such as type and regularPrice are also being extracted from the public information.
Release of the Automated Archive Page
As a result of these efforts, we successfully launched the free game archive page to the public. Through scheduled automatic crawling, the latest update timestamp is always stamped at the top of the page, and the latest free games—sorted in order of approaching expiration—continue to be accurately rendered without duplication as an auto-generated HTML table.
Dynamic design controls also function perfectly: calculating the difference between the current time and the registration timestamp, automatically assigning a red “NEW!" badge to data detected within 24 hours, rendering a “red cell graph" for items within the remaining 24 hours, and using “gray cells" for expired items. This eliminates any risk of missing out.
Conclusion
We have released a “Free Game List Page" that eliminates the hassle of visiting individual platforms and allows users to easily check everything in one place. To save the trouble of building an external DB, we adopted n8n’s “Data Tables" feature as a database for the first time. During development, we faced errors when there were no new arrivals, data duplication due to incorrect node connections, and data hierarchy mismatches. In particular, due to the preconception of data matching, nodes were arranged in parallel, making it extremely puzzling to identify why processes were running separately. However, we overcame these issues by rewiring to series, utilizing If statements, and leveraging Item Lists nodes. We have realized an unmanned archive featuring a 24-hour “NEW!" flag and credit masking, and we aim to integrate automatic SNS posting in the future.



