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.

UKGB
YURS

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.