- 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.
Configuration
Edit configurationExtraction query
Edit queryReads 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 overridesterritory_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 rulesThis 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 rules1TVincome_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 rule1PERFORMANCEright_type_key ~ PR*
Catch-allUNCLASSIFIEDMatches every line not caught above.
Stage 2 — Standard enums to derived values
is_digital
2 rules1truenormalized_income_channel ~ STREAMING_*
2truenormalized_income_channel ~ DOWNLOAD
Catch-allfalseMatches every line not caught above.
is_performance
0 rulesNo rules yet — only the catch-all applies.
Catch-alltrueMatches every line not caught above.