This project is read-only.
You can use DiscogsNet to query the online API, parse the Discogs data dumps or import the XML dumps into MySQL.
Any support for the project will help it improve faster and become more feature-complete.

PayPal Donation

Importing data into MySQL

Read more about DatabaseManagerCli.

Querying the API

Querying the Discogs online API is as easy as creating a class instance and calling the appropriate method.
The new Discogs API needs the userAgent so to avoid the 403 error you need to set the useragent like this: "YourApp/1.0.3 +" do not copy this user agent create your own so Discogs won't block it...
Discogs3 discogs = new Discogs3("YourApp/1.0.3 +");
Release release = discogs.GetRelease(12345); // Pass the ID of the desired release
// You can get whatever data you need from release here
Available methods in the Discogs3 class (non-static) are
Discogs3.GetArtist(int artistId);
Discogs3.GetArtistReleases(int artistId);
Discogs3.GetRelease(int releaseId);
Discogs3.GetMaster(int masterId);
Discogs3.GetLabel(int labelId);
Discogs3.Search(SearchQuery query);

Authenticate via OAuth

OAuth documentation now on a new page

Reading data from the database dumps

Discogs offers it's data as XML data dumps, gunzipped. In order to use them, first extract the archives to get three .xml files - one for labels, one for artists and one for releases. The library also supports reading directly from the gunzipped file using for example GZipLabelReader2 instead of LabelReader2, but it is slower then extracting and reading from the XML directly.

Reading labels

LabelReader2 reader = new LabelReader2("discogs_20110107_labels.xml"); // Make sure to supply the correct filename here.
foreach (Label label in reader.Enumerate()) {
    // Process label

Reading artists

ArtistReader2 reader = new ArtistReader2("discogs_20110107_artists.xml"); // Make sure to supply the correct filename here.
foreach (Artist artist in reader.Enumerate()) {
    // Process artist

Reading releases

ReleaseReader2 reader = new ReleaseReader2("discogs_20110107_releases.xml"); // Make sure to supply the correct filename here.
foreach (Release release in reader.Enumerate()) {
    // Process release

Aggregate properties

Throughout the model, e.g. in the Release class, are properties called Aggregate. They expose instances to property aggregators, that is objects that work with the data model and expose frequently used and/or more convenient form of the data. For example, the aggregator of releases (ReleaseAggregate) contains properties to retrieve the release year as an int, directly get the primary image and many other. When processing data, you should probably use the properties in the model. When displaying, it's much easier and visually appealing to use the aggregate properties where applicable.

Having problems getting images?

Some users are getting the image with "I (heart) Discogs" well if changing your IP and your App id does nothing here is a fix
This fix has not been applied to the DiscogsNet because it violates the ToS of discogs and it can result in your ip getting banned!
  • When requesting an image use the replace function of or C# to replace with ""
For example:
Dim PicByte As Byte() = discogs.GetImage(artist.Images(0).Uri150.Replace("", ""))
Remember this fix violates the ToS of discogs! DiscogsNet developpers do not take any responsability if your IP gets banned from Discogs

Last edited Jun 17, 2014 at 7:28 PM by Hitmanpt, version 27


TLCK Sep 7, 2012 at 5:47 AM 
Hi, I'm a little new to this, so forgive me if I am wrong. I am very grateful for your work and have been waiting for a .NET client for a while, this has saved me a lot of time. However, I noticed a line of code that might be missing, that would map the "resource_url" to a property. Its located in the DataReader3.cs file in this function:
private Image ReadReleaseImage(JObject source)
Image image = new Image();
foreach (var item in source)
var v = item.Value;

switch (item.Key)
case "uri":
image.Uri = v.Value<string>();
case "uri150":
image.Uri150 = v.Value<string>();
case "width":
image.Width = v.Value<int>();
case "height":
image.Height = v.Value<int>();
* case "resource_url":
case "type":
image.Type = DataReader.ParseImageType(v.Value<string>());
this.ThrowIfStrict("Unknown key: " + item.Key);
return image;

Shouldn't there be a mapping to this valued? (I marked it with a *)