Adding Content In Bulk
Last Updated

Update 1.18 introduced the ability to add objects in bulk, both to the database as well to your user profile.

This is currently an experimental feature, so issues might arise.

Table of Contents

Restrictions

Given its experimental nature, multiple restrictions are in place:

  • Only a select few types of objects can be added in bulk.
  • It's currently not possible to edit existing objects in bulk.
  • Each bulk operation can add a maximum of 30 objects.
  • Only one type of object can be added per bulk operation (i.e., you can't add soundtrack tracks and releases in the same operation).

Compatible Objects

Currently, only the following types of objects can be added to the database in bulk:

  • Mode Contents
  • Releases of a game
  • Staff/Credits of a game
  • Stores selling a game
  • Tracks of a game's soundtrack

For user data, you can bulk-add the following:

  • Gamelist entries
  • Wishlist entries
  • Game Keys
  • Game Sessions

Using the Bulk Editor

To use the bulk editor, go to the corresponding section of the editing page of a Game. If it is available, a purple button will be displayed at the top right corner of the page. Click it to go to the bulk editor page.

The bulk editor uses a format called CSV (Comma-Separated Values) to process its data. It's a text format in which each line (row) in the text represent one object, and each column, separated by a comma or other delimiter, is the value of a field of the object.

You can read more about it on Wikipedia.

Since there is some degree of variation on how CSV data can be written, here are the rules we adopt:

  • The first line must be the header specific to the type of object being added (see the Headers and Fields section for more information). The header must be an exact match.
  • Each column must be separated by a single vertical bar | character.
  • The vertical bar | character cannot be used in any field. Any other non-whitespace character will be used as-is.
  • Tab and space characters around the delimiter are ignored.
  • Blank lines are ignored.
  • Columns containing only space characters are considered empty/null.

If any error is detected, all operations are aborted and no changes are made.

Data Visualizer

To help check for problems in the text input, we built a Data Visualizer for the Bulk Editor.

It will automatically split the data into columns and color-code them. This should make it easier to find if there are extra or missing columns or if data was inserted in the wrong column.

However, be aware that the visualizer does not check for any errors, such as wrong data types or invalid headers.

We recommend you write the CSV data in an external editor that supports CSV data ( such as Microsoft's Excel or Visual Studio Code, Libre Office Calc or this software called Modern CSV I found just searching around), then export or copy and paste the contents into the Bulk Editor, and use the visualizer for a final check before submitting the data.

A Basic Example

track_number | track_name | length | composer | listen_url | artist | notes

1 | Hello, World!   | 03:05 |              |  |            |
2 | Goodbye, Planet |    55 | person-cname |  | Artist-san | Really cool song

Notice that:

  • The header (first line) must be written exactly as specified.
  • All columns must exist in every row, even if their value is empty.
  • Spaces after and before the column delimiters are ignored.
  • The vertical bars don't have to align, that's just for making the text prettier/easier to read.

Data Types

Some columns expect specific types of data. We'll describe here the expected types of data and their syntax/formatting.

Boolean
Represents a value that only has two possible states (like on/off or true/false).
Accepts only Yes or No as value (can be empty if the field is Optional).
Case-insensitive.
Choice
The value must match one (and only one) of the provided values (or be empty if the field is Optional).
Date
Represents a date in the gregorian calendar.
Must be in the format YYYY-MM-DD (e.g.: 1999-12-31).
Always use hyphens as separators (1999.12.31 or 1999/12/31 are not valid dates).
Always pad years with 4 zeros and months and days with 2 (1-1-1 is invalid, 0001-01-01 is ok).
Date And Time
Represents a date with time in the gregorian calendar.
Must be in the format YYYY-MM-DD HH:MM or YYYY-MM-DD HH:MM:SS.
Always use a 24-hour clock for the time part.
Always pad values with zeros.
A single space between the date and time is required.
Example: 01-01-01 13:01:01 is a valid date and time, 1-1-1 13:1:1 is not.
Duration
Represents a length of time. Must be in the format HH:MM:SS or HHhMMmSSs.
If the leftmost unit is equal to zero, it can be omitted.
For example, 12:34:56 and 12h34m56s equals to 12 hours, 34 minutes and 56 seconds.
00:04:56, 4:56, 4m56s and 00h04m56s all equals 4 minutes and 56 seconds.
JSON
A valid JSON document.
Number
A number. Should not contain any character other than digits and optionally a decimal separator
Always use a dot, not a comma, as the decimal separator (e.g.: 3.14 instead of 3,14).
Subtypes: Positive, Negative, Non-Zero, Decimal.
Subtypes can be combined (e.g: Non-Zero Positive Decimal).
Numbers are always integers by default, unless specified as a Decimal.
Object Reference {Object.field}
A field that references another Object that exists in the database.
The value in curly braces denotes the Object being referenced, and which field the value must match.
This field mostly uses the CNAME of an object, or its Numerical ID if it lacks a CNAME.
Text
Simple text. Has no special formatting.
URL
A link to a page on the Internet.
URLs must always begin with http:// or https://

Object's Headers and Fields

This section will give the header (which must always be the first line in the data, and be exactly as shown) for each Object, as well as a detailed description of their fields.

All fields are formatted as following:

Field Name
The first line tells if the field can be empty (Optional) or not (Required).
The second line contains its data type.
The third line and further give a description, observations or helpful notes about it.

For Database Objects

Mode Contents

Header

mode | parent | name | category | dlc | spoilers | missable | importance | description

Fields

mode
Required
Object Reference {Mode.numerical_id}
The game mode the content belongs to.
You can find the mode's Numerical ID by going to its details page - it's the number at the end of the URL.
name
Required
Text
The name of the content
parent
Optional
Object Reference {ModeContent.numerical_id}
The mode content that the row should be nested under.
You can find a content's Numerical ID by going to its edit page - it's the number at the end of the URL.
The parent ModeContent Object must already exist.
category
Optional
Text
A category for the content, to help organize them.
This field can have any value, but you can find a list of suggested categories in the content's edit page.
dlc
Optional
Boolean
Yes if this content is part of a DLC, No if it's included in the base game, empty if unknown.
spoilers
Optional
Boolean
Yes if the name or description of this content may be a spoiler, No if it's not, empty if unknown.
missable
Optional
Boolean
Yes if this content can be permanently missed during gameplay, No if it's always available, empty if unknown.
importance
Optional
Choice: main, optional, extra
main means this content is part of the game's main quest/story
optional means this content can be skipped, but is still significant (e.g.: side-story quests, quests that reward you with unique items, optional bosses, etc).
extra means this content exists but doesn't add anything very relevant to the game (e.g.: fetch quests, procedurally-generated quests).
description
Optional
Text
A description of the content or any other relevant information about it.

Example

mode | name       | parent | category | dlc | spoilers | missable | importance | description
7    | Example    |        |          |     |          |          |            |
7    | Excalibur  | 69     | Weapons  | Yes | Yes      | Yes      | optional   | The best weapon in the game. Acquire it by defeating 999 demons.

Releases

Header

date | platform | preview_build | notes | region | edition

Fields

date
Required
Text
The date of the release.
platform
Required
Object Reference {Platform.code}
The code of the platform in which the game was released.
The platform must be in the game's platforms list.
You can check the supported platforms and their codes in the List of Supported Platforms
preview_build
Optional
Boolean
If the release was some kind of preview version, such as early access, an open beta, a demo, etc
If empty, will default to No/False.
notes
Optional
Text
Any notes about the release.
region
Optional
Object Reference {Region.cname}
The CNAME of the release's Region.
You can check the supported regions and their CNAMEs in the List of Supported Regions
edition
Optional
Object Reference {Edition.cname}
The Edition the release date refers to. The Edition must exist in the database.
You can find out an Edition's cname on the game's Editions page, right besides the Edition's name.

Example

date       | platform | preview_build | notes | region | edition
1999-12-31 | snes     | yes           | Cool  | japan  | deluxe
2022-01-01 | ps1      |               |       |        |  

Soundtracks

Header

track_number | track_name | length | composer | listen_url | artist | notes

Fields

track_name
Required
Text
The name of the track.
track_number
Optional
Positive Number
The number of the track in the soundtrack, if any.
length
Optional
Duration
The duration of the track.
composer
Optional
Object Reference {Person.cname}
The CNAME of the person who composed the track. The Person Object must already exist in the database.
listen_url
Optional
URL
A link to a website where you can hear the song.
artist
Optional
Text
The name of the artist of band who interpreted the song.
notes
Optional
Text
Any notes about the track.

Example

track_number | track_name | length | composer | listen_url | artist | notes

1 | Hello, World!   | 3m05s |              |  |            |
2 | Goodbye, Planet |    55 | person-cname |  | Artist-san | Really cool song

Staff

Header

person | position | company | uncredited | relation | notes

Fields

person
Required
Object Reference {Person.cname}
The CNAME of the person who worked on the game. The Person Object must already exist in the database.
position
Required
Text
The name of the position the person worked at, such as Gameplay Programming, Artist, Director, etc.
The position can be anything, but you can see a list of common/suggested positions in the Staff edit page of any game.
company
Optional
Object Reference {Company.cname}
The CNAME of the company involved in the game's development. The Company Object must already exist in the database.
uncredited
Optional
Boolean
Set to Yes if the person is known to have worked in the game, but is not acknowledge in the in-game credits.
If empty, will default to No.
relation
Optional
Choice: 1 for Primary, 2 for Secondary, 3 for Tertiary
The relation of the person with the development of the game.
notes
Optional
Text
Any notes about the staff of their work in the game.

Example

person   | position             | company  | uncredited | relation | notes
john-doe | Game Direction       | nintendo |            | 1        |
jane-doe | Concept Art          |          | yes        | 2        | Freelancer
batman   | Gameplay Programming |          |            |          | 

Stores

Header

store | url | notes | drm | drm_notes | activates_on

Fields

store
Required
Object Reference {Store.cname}
The CNAME of the store selling the game. The Store Object must already exist in the database.
url
Required
URL
Link to the game's page on the store's website.
notes
Optional
Text
Any notes about the way the store is selling that game.
drm
Optional
Choice
The DRM used by the game in that store.
Empty means "unknown DRM", not DRM-free (there is a specific value for "DRM-Free").
DRM choices can be found in the "Code" column of the List of DRMs.
drm_notes
Optional
Text
Any notes about the DRM contained in the game being sold by the store.
If using the drm field with the other choice, it's a good idea to write its name in this field.
activates_on
Optional
Object Reference {Vendor.code}
If the store is selling a game key, write here in which vendor the key activates on.
You can find vendor information in the List of Vendors.

Example

store | url | notes | drm | drm_notes | activates_on
gog   | https://www.gog.com/en/game/deus_ex | Cool game | drmfree | DRM sucks |
gmg   | https://www.greenmangaming.com/games/deus-ex-game-of-the-year-edition/ | | steam | | steam
steam | https://store.steampowered.com/app/6910/ | | | |

Game Keys

Header

game | status | date_bought | store | vendor | notes

Fields

game
Required
Object Reference {Game.cname}
The CNAME of the game the key is for.
You can find a game's CNAME at the bottom of its page.
status
Optional
Choice: available, redeemed
The current state of the key.
date_bought
Optional
Date
The date when the key was bought.
store
Optional
Object Reference {Store.cname}
The CNAME of the store where the key was bought.
You can find a store's CNAME at the bottom of its page.
vendor
Optional
Object Reference {Vendor.code}
The code of the vendor in which the key is activated.
You can find vendor information in the List of Vendors.
notes
Optional
Text
Any notes or observations about the key.

Example

game      | status    | date_bought | store      | vendor | notes
test-game | available | 1999-12-31  | gamersgate | steam  | Hello
test-game |           |             |            |        |

Game Sessions

Header

gamelist | playthrough | start_time | end_time | comments

Fields

gamelist
Required
Object Reference {Gamelist.numerical_id}
The ID of the gamelist object that sessions belongs to.
You can find the gamelist ID by going to its edit page - it's the number at the end of the URL.
playthrough
Optional
Object Reference {Playthrough.numerical_id}
The ID of the playthrough object the session is associated with, if any.
You can find out the playthrough's ID by going to its edit page - it's the number at the end of the URL.
start_time
Optional
Date And Time
The start date and time of the session.
Timezone information is automatically handled using your account's timezone.
end_time
Optional
Date And Time
The date and time of the end of session.
Timezone information is automatically handled using your account's timezone.
comments
Optional
Text
Any comments or notes about the session.

Example

gamelist | playthrough |start_time           | end_time            | comments
4        | 1           | 2021-11-30 09:00:00 | 2021-11-30 13:00:01 | Hello
4        |             |                     |                     | 

Gamelist

Header

Due to the massive number of fields available in Gamelist objects, optional fields can be entirely omitted.

game | platform | status | backup | backup_notes | bundle | category | collector_notes | comments| completion | condition | edition | favorite | finish_date | has_box | has_manual | hidden | manager_notes | order_id | other_notes |  ownership | play_notes | playtime | priority | purchase_date | purchase_notes | region | score | start_date | store | times_completed | vendor

Fields

game
Required
Object Reference {Game.cname}
The CNAME of the game being added to the gamelist.
You can find a game's CNAME at the bottom of its page.
platform
Required
Object Reference {Platform.code}
The code of the platform in which you own or played the game.
The platform must be in the game's platforms list.
You can check the supported platforms and their codes in the List of Supported Platforms
status
Required
Choice: backlog, completed, dropped, finished, on_hold, playing_occasionally, playing, unknown
The state of play of the game.
backup
Optional
Boolean
Whether you have a backup of the game.
If empty, defaults to No.
backup_notes
Optional
Text
Notes about the backup, such as its location, size or whatever.
box_type
Optional
Text
The box the game came in, such as a DVD box or a Blu-ray case.
bundle
Optional
Text
The name the bundle/collection/compilation the game came in, if any.
category
Optional
Text
A custom/personal category for the game, if any.
collector_notes
Optional
Text
Notes with extra collector's information about the game and its packaging.
comments
Optional
Text
Any comments or notes about the game you might have.
completion
Optional
Positive Decimal
Your completion of the game
Must be a number between 0 and 100, with at most 1 decimal place.
Example: 12.3 or 100 are valid completion rates; 12.34 or 101 aren't.
condition
Optional
Choice: new, mint, excellent, good, acceptable, poor, terrible
The condition of the game box and other goodies, if you own a physical copy.
currency
Optional
Object Reference {Currency.iso_code}
The ISO Code of the currency in which the game was purchased, if any.
You can find the ISO Codes of supported currencies in the List of Currencies.
edition
Optional
Object Reference {Edition.cname}
The edition you own or played. The edition must exist in the database.
You can find out an Edition's CName on the game's Editions page, right besides the Edition's name.
favorite
Optional
Boolean
Whether the game is one of your favorites.
If empty, defaults to No.
finish_date
Optional
Date
The date when you finished the game.
has_box
Optional
Boolean
Whether you own the game's box, if you have a physical copy.
has_manual
Optional
Boolean
Whether you own the game's manual, if you have a physical copy and its manual exists.
hidden
Optional
Boolean
Yes to hide the game from others viewing your gamelist.
If empty, defaults to No.
manager_notes
Optional
Text
Notes with extra information about how you manage or organize the game.
media_type
Optional
Choice: physical, digital, both
If the gamelist entry represents a physical game, a digital one or both.
order_id
Optional
Text
The ID of the order/invoice from the store where you bought the game from.
other_notes
Optional
Text
Arbitrary notes.
ownership
Optional
Choice: owner, borrow, rental, subscription
If you own the game or played it in some other way.
play_notes
Optional
Text
Notes related to playing the game.
playtime
Optional
Duration
How you long you've played the game, in total.
price
Optional
Positive Decimal Number
The price paid for the game, if any.
priority
Optional
Number
A number indicating the game's priority for you.
purchase_date
Optional
Date
The date when your purchased the game.
purchase_notes
Optional
Text
Notes related to purchasing the game.
region
Optional
Object Reference {Region.cname}
The CNAME of the release's Region.
You can check the supported regions and their CNAMEs in the List of Supported Regions
score
Optional
Positive Number
The score of the game as an integer number from 1 to 10 (inclusive).
start_date
Optional
Date
When you first played the game.
store
Optional
Object Reference {Store.cname}
The CNAME of the store where bought the game.
You can find a store's CNAME at the bottom of its page.
times_completed
Optional
Positive Number
How many times you've finished the game.
vendor
Optional
Object Reference {Vendor.code}
The game's vendor.
You can find vendor information in the List of Vendors.
extra_data
Optional
JSON
This field allows adding arbitrary data to your gamelist entry as long as it's a valid JSON document.
This field also supports a special format for ease of use: declare multiple 'extra_data' columns using the name extra_data.key, replacing key for the name of the field you want to create. You can see this special format in action in Example 3.

Example

game      | platform | status
test-game | win      | playing

Example 2

game      | platform | status   | backup | backup_notes | box_type | bundle   | category    | collector_notes | completion | condition | currency | edition | favorite | finish_date | has_box | has_manual | hidden | manager_notes | media_type | order_id | other_notes | ownership | playtime  | play_notes | price | priority | purchase_date | purchase_notes | region     | score | start_date | store | times_completed | vendor | comments             | extra_data
test-game | win      | finished | yes    | Mom's HD     | DVD Case | Bundlest | Crazy Stuff | Some notes      | 99.9       | Used      | BRL      | goty    | yes      | 2022-12-31  | yes     | no         | yes    | More notes    | digital    | ABCZ1234 | Extra notes | owner     | 08h52m33s | Yep, notes | 37.99 | 999      | 1999-12-31    | Notes, Notes   | Antarctica | 10    | 2000-01-01 | gog   | 3               | steam  | I love refrigerators | {"notes": "Just some notes", "location": "São Paulo"}

Example 3

game      | platform | status  | extra_data.notes | extra_data.location
test-game | win      | playing | Just some notes  | São Paulo

Wishlist

Header

game | priority | list_name | date_added | edition | platform | store | url | notes

Fields

Game
Required
Object Reference {Game.cname}
The CNAME of the game being wishlisted.
You can find a game's CNAME at the bottom of its page.
priority
Optional
Number
The priority of the wishlist entry being added.
If empty, defaults to 0.
list_name
Optional
Text
The list to which the entry is being added to.
New lists are automatically created, so feel free to name it whatever you want.
If empty, defaults to wishlist.
date_added
Optional
Date
When the game was added to the wishlist.
If empty, defaults to today's date.
edition
Optional
Object Reference {Edition.cname}
The Edition of the game you want. The Edition must exist in the database.
You can find out an Edition's CName on the game's Editions page, right besides the Edition's name.
platform
Optional
Object Reference {Platform.code}
The code of the platform in which you desire to get the game.
The platform must be in the game's platforms list.
You can check the supported platforms and their codes in the List of Supported Platforms
store
Optional
Object Reference {Store.cname}
The CNAME of the store where you're looking to buy the game.
You can find a store's CNAME at the bottom of its page.
url
Optional
URL
An URL you find relevant, if any.
notes
Optional
Text
Any notes about the wishlist entry.

Example

game      | priority | list_name | date_added | edition | platform | store | url                                   | notes
test-game | 99       | Bulklist  | 1999-12-31 | goty    | win      | steam | https://vgjournal.net/games/test-game | Notes
test-game |          |           |            |         |          |       |                                       |
Previous
About CNames

Related articles

Settings
Developers
Other