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 | parent | name | category | dlc | spoilers | missable | importance | description
- 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.
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.
date | platform | preview_build | notes | region | edition
- 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.
date | platform | preview_build | notes | region | edition
1999-12-31 | snes | yes | Cool | japan | deluxe
2022-01-01 | ps1 | | | |
track_number | track_name | length | composer | listen_url | artist | notes
- 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.
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
person | position | company | uncredited | relation | notes
- 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.
person | position | company | uncredited | relation | notes
john-doe | Game Direction | nintendo | | 1 |
jane-doe | Concept Art | | yes | 2 | Freelancer
batman | Gameplay Programming | | | |
store | url | notes | drm | drm_notes | activates_on
- 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.
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 | status | date_bought | store | vendor | notes
- 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.
game | status | date_bought | store | vendor | notes
test-game | available | 1999-12-31 | gamersgate | steam | Hello
test-game | | | | |
gamelist | playthrough | start_time | end_time | comments
- 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.
gamelist | playthrough |start_time | end_time | comments
4 | 1 | 2021-11-30 09:00:00 | 2021-11-30 13:00:01 | Hello
4 | | | |
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
- 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.
game | platform | status
test-game | win | playing
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"}
game | platform | status | extra_data.notes | extra_data.location
test-game | win | playing | Just some notes | São Paulo
game | priority | list_name | date_added | edition | platform | store | url | notes
- 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.
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 | | | | | | | |