Income sources

ASCAP International

ASCAP_INTLComposition

PRO · CSV · USD

Configuration

Edit configuration
Display name
ASCAP International
Key
ASCAP_INTL
Rights layer
Composition
File format
CSV
Default currency
USD
Source kind
PRO
Notes
Foreign performance royalties remitted via ASCAP. Licensor identifies the collecting society; amounts are already converted to USD.

Extraction query

Edit query
Reads CSVUpdated 07/12/2026
-- ASCAP International distribution export -> normalized schema
SELECT
  row_number() OVER ()                                          AS line_number,
  trim("Work Title")                                            AS song_title,
  upper(trim("Work Title"))                                     AS song_title_key,
  upper(trim("Licensor"))                                       AS source_name_key,
  trim(COALESCE(upper(trim("Revenue Class Code")), '') || ' ' ||
       COALESCE(upper(trim("Revenue Class Description")), '')) AS income_class_key,
  upper(trim("Type Of Right"))                                  AS right_type_key,
  upper(trim("Role Type"))                                      AS role_type_key,
  COALESCE(NULLIF(upper(trim("Territory")), ''),
           upper(trim("Country Name")))                         AS territory_raw,
  COALESCE(NULLIF(trim("Legal Earner Party Name"), ''),
           trim("Party Name"))                                  AS writer_name,
  TRY_CAST("Member Share" AS DECIMAL(9,6))                      AS share_percentage,
  TRY_CAST("$ Amount" AS DECIMAL(18,4))                         AS amount_raw,
  COALESCE(upper(trim("Adjustment Indicator")), '')
    IN ('Y', 'YES', 'T', 'TRUE')                                AS adjustment,
  COALESCE(TRY_CAST(trim("Performance Start Date") AS DATE),
           CAST(try_strptime(trim("Performance Start Date"), '%m-%d-%Y') AS DATE)) AS earning_date,
  'USD'                                                         AS currency,
  to_json(row)                                                  AS source_row
FROM read_csv('{{file}}', header = true, sample_size = -1, all_varchar = true) AS row;

Territory resolution

Edit overrides

territory_raw is resolved to an ISO 3166-1 alpha-2 code in code via a country lookup — not with rules. Values the lookup can't resolve (historical territories, regional groupings) fall back to this override table.

UK→GB
YU→RS

Normalization rules

Edit rules

This source's own rules, grouped by the attribute each writes. First match wins, top to bottom; conditions within a rule are ANDed. Each group ends in a pinned catch-all.

Stage 1 — Raw match keys to standard enums

income_channel_std

10 rules
1TVincome_class_key ~ 8 *
2DOWNLOADincome_class_key ~ 40 *
3OTHERincome_class_key ~ 90 *
4STREAMING_VIDEOincome_class_key ~ *AUDIOVISUAL*
5STREAMING_VIDEOincome_class_key ~ *VIDEO*
6STREAMING_AUDIOincome_class_key ~ *STREAM*
7TVincome_class_key ~ *TELEVISION*
8RADIOincome_class_key ~ *RADIO*
9LIVEincome_class_key ~ *LIVE*
10CINEMAincome_class_key ~ *CINEMA*
Catch-allUNCLASSIFIEDMatches every line not caught above.

right_type_std

1 rule
1PERFORMANCEright_type_key ~ PR*
Catch-allUNCLASSIFIEDMatches every line not caught above.

Stage 2 — Standard enums to derived values

is_digital

2 rules
1truenormalized_income_channel ~ STREAMING_*
2truenormalized_income_channel ~ DOWNLOAD
Catch-allfalseMatches every line not caught above.

is_performance

0 rules

No rules yet — only the catch-all applies.

Catch-alltrueMatches every line not caught above.