Common Works Registration (CWR) Format

In this article, one of several articles about CWR, the Common Works Registration format will be covered. If you are looking for CWR-capable software, instead of explanations, you may want to have a look at DMP Guru, a complete online solution for original publishers, or some of the Free CWR Tools. Some more advanced options will be covered throughout this article. Let’s get technical!

Underlying Format

CWR is based on EDI, a long obsolete standard for data exchange over 300bps modems from the seventies. I will not go into reasons why CISAC still insists on it, even plans to release at least two more versions. It is a fixed width text format, and here is an example created form made-up data in DMP Guru.

HDRPB000000199DMP DEMO PUBLISHING                          01.102019021516052620190215
GRHREV0000102.100000000000
REV0000000000000000THE ONE                                                       DMP000001                00000000            UNC000000Y      ORI                                                   N00000000000                                                   N
SPU000000000000000101DMP      DMP DEMO PUBLISHING                           E 00000000000000000199              052050000441000004410000 N
SPT0000000000000002DMP            050001000010000I2136N001
SWR0000000000000003W000001  SMITH                                        JOHN JAMES                     CA0000000000000000039521 05000   00000   00000 N
SWT0000000000000004W000001  050000000000000I2136N001
PWR0000000000000005DMP      DMP DEMO PUBLISHING                                        SAAN12345     W000001
ALT0000000000000006THE ONE BED                                                 AT
ALT0000000000000007THE ONE DRUMS ONLY                                          AT
ALT0000000000000008THE ONE NO DRUMS                                            AT
ALT0000000000000009THE ONE STING                                               AT
PER0000000000000010THE BAND
REC000000000000001100000000                                                            000000                                                                 DML
ORN0000000000000012LIB                                                            INTERNET       0000DMP DEMO LIBRARY                                                                                                                                                                  0000
REV0000000100000000SECOND BEST                                                   DMP000002                00000000            UNC000000U      ORI                                                   N00000000000                                                   N
SPU000000010000000101DMP      DMP DEMO PUBLISHING                           E 00000000000000000199              052025000440500004405000 N
SPT0000000100000002DMP            025000500005000I2136N001
SWR0000000100000003W000001  SMITH                                        JOHN JAMES                     CA0000000000000000039521 02500   00000   00000 N
SWT0000000100000004W000001  025000000000000I2136N001
PWR0000000100000005DMP      DMP DEMO PUBLISHING                                        SAAN12345     W000001
OWR0000000100000006W000003  ADAMS                                        AARON                          CA00000000000000000000   05000   05000   05000
ALT0000000100000007SECOND PLACE                                                AT
GRT000010000000200000023   0000000000
TRL000010000000200000025

Here is an example of the same data in normalized JSON, something that is quite familiar to contemporary software developers:

{
  "writers": {
      "W000001": {
          "last_name": "Smith",
          "first_name": "John James",
          "ipi_name": "00000000395",
          "pr_society": "21"
      },
      "W000003": {
          "last_name": "Adams",
          "first_name": "Aaron"
      }
  },
  "publishers": {
      "DMP": {
          "name": "DMP Demo Publishing",
          "ipi_name": "00000000199",
          "pr_society": "052",
          "mr_society": "044"
      }
  },
  "albums": {},
  "artists": {
      "A000001": {
          "last_name": "The Band"
      }
  },
  "libraries": {
      "L001": {
          "name": "DMP Demo Library"
      }
  },
  "works": {
      "DMP000002": {
          "work_title": "Second Best",
          "version_type": "original",
          "alternate_titles": [
              {
                  "alternate_title": "Second Place"
              }
          ],
          "writers_for_work": [
              {
                  "controlled": true,
                  "relative_share": "0.50",
                  "writer_id": "W000001",
                  "capacity": "CA",
                  "publishers_for_writer": [
                      {
                          "publisher_id": "DMP",
                          "agreement": {
                              "saan": "SAAN12345",
                              "type": "OG"
                          }
                      }
                  ]
              },
              {
                  "controlled": false,
                  "relative_share": "0.50",
                  "writer_id": "W000003",
                  "capacity": "CA"
              }
          ],
          "live_artists": [],
          "society_work_codes": []
      },
      "DMP000001": {
          "work_title": "The One",
          "version_type": "original",
          "alternate_titles": [
              {
                  "alternate_title": "The One Bed"
              },
              {
                  "alternate_title": "The One No Drums"
              },
              {
                  "alternate_title": "The One Drums Only"
              },
              {
                  "alternate_title": "The One Sting"
              }
          ],
          "writers_for_work": [
              {
                  "controlled": true,
                  "relative_share": "1.00",
                  "writer_id": "W000001",
                  "capacity": "CA",
                  "publishers_for_writer": [
                      {
                          "publisher_id": "DMP",
                          "agreement": {
                              "saan": "SAAN12345",
                              "type": "OG"
                          }
                      }
                  ]
              }
          ],
          "recordings": {
              "R000001": {
                  "isrc": "",
                  "record_label": "DML",
                  "artist_id": "A000001"
              }
          },
          "source": {
              "type": "library",
              "library_id": "L001",
              "cd_identifier": "INTERNET"
          },
          "live_artists": [],
          "society_work_codes": []
      }
  }
}

Please bear in mind that the two works represented here contain only very basic data, most notably only the data on a single original publisher for a controlled writer. In reality, contemporary CWR files often also contain data on several original publishers for each work, administrators, and many sub-publishers with different society affiliations for their respective territories, data on agreements and different share splits for different territories. CWR files with over 100 lines per work are quite common these days.

But it is not the size that makes CWR complicated, nor this obsolete format, it is the complexity of validation rules, which differ from one society to the next and not all are documented. Basically, CISAC chose to integrate just about any request from just about any society around the world into CWR. While a single CWR file should work everywhere, there are edge cases when the rules by different societies are conflicting. But in general, all a developer needs to figure it out is enough time and examples. A couple of years most likely, though the tools on this site can help in the process, both the free and commercial ones.

If you are building your own software and would like to add CWR capabilities, you may choose to use this development tools for data validation, CWR generation and parsing of acknowledgement files, either as a temporary or as a permanent solution, optionally together with our consulting services.

If you choose to do it the hard way, you should go to https://www.cisac.org and search the documents for CWR. The proper overview is in the next article.