| Country | Contributions | Between | Climbers | Crags | Summits | Climbs | Ascents | |
|---|---|---|---|---|---|---|---|---|
| 1 | USA | 1507 | 20th November 2025 – 30th June 2026 | 47 | 20 | 0 | 87 | 97 |
| 2 | Australia | 767 | 27th September 2025 – 29th June 2026 | 6 | 38 | 0 | 61 | 33 |
| 3 | United Kingdom | 576 | 19th November 2025 – 8th July 2026 | 33 | 14 | 0 | 22 | 43 |
| 4 | France | 264 | 6th January 2026 – 28th June 2026 | 14 | 3 | 0 | 12 | 31 |
| 5 | Switzerland | 257 | 24th January 2026 – 10th July 2026 | 6 | 3 | 0 | 12 | 33 |
| 6 | Austria | 210 | 12th November 2025 – 22nd June 2026 | 5 | 2 | 0 | 8 | 22 |
| 7 | Italy | 129 | 18th November 2025 – 29th May 2026 | 9 | 3 | 0 | 11 | 10 |
| 8 | Pakistan | 118 | 11th April 2026 – 26th April 2026 | 0 | 0 | 0 | 1 | 7 |
| 9 | Spain | 105 | 20th February 2026 – 16th May 2026 | 5 | 0 | 0 | 10 | 11 |
| 10 | Germany | 103 | 3rd February 2026 – 26th June 2026 | 7 | 0 | 0 | 7 | 10 |
| Date | Time | User | Type | Name | Attribute | ||
|---|---|---|---|---|---|---|---|
| 2701 | 1st May 2026 | 21:17:02 UTC | baz9 | climb | Captain Hook | crag_location_breadcrumb_pretty | |
|
Before
None
After
<a href="/crags/location/United States" class="text-muted">United States</a> / <a href="/crags/location/United States/Arizona" class="text-muted">Arizona</a> / <a href="/crags/location/United States/Arizona/Pinal County" class="text-muted">Pinal County</a>
|
|||||||
| 2702 | 1st May 2026 | 21:16:39 UTC | baz9 | crag | Oak Flat | Other Name | |
|
Before
None
After
Oak Flats
|
|||||||
| 2703 | 1st May 2026 | 18:05:25 UTC | baz9 | list | Crags to Create | list_definition | |
|
Before
select
'<a href="' ||
substring(c.eight_a_nu_url from '^(.+)/sectors/') ||
'">' ||
initcap(replace(split_part(c.eight_a_nu_url, '/', 7), '-', ' ')) ||
'</a>' as "8a.nu Crag"
,count(*) as "Climbs Missing"
,string_agg(
'<a href="' || c.url || '">' || c.climb_name || '</a>',
', ' order by c.climb_name
) as "Climbs"
from
climbs c
where
c.deleted_on is null
and c.crag_id is null
and c.eight_a_nu_url is not null
and split_part(c.eight_a_nu_url, '/', 7) not like 'unknown-crag%'
group by
substring(c.eight_a_nu_url from '^(.+)/sectors/')
,split_part(c.eight_a_nu_url, '/', 7)
order by
count(*) desc
,"8a.nu Crag"
After
with missing_crags as (
select
substring(c.eight_a_nu_url from '^(.+)/sectors/') as eight_a_nu_crag_url
,split_part(c.eight_a_nu_url, '/', 7) as eight_a_nu_crag_slug
,initcap(replace(split_part(c.eight_a_nu_url, '/', 7), '-', ' ')) as eight_a_nu_crag_name
,count(*) as climbs_missing
,string_agg(
'<a href="' || c.url || '">' || c.climb_name || '</a>',
', ' order by c.climb_name
) as climbs
from
climbs c
where
c.deleted_on is null
and c.crag_id is null
and c.eight_a_nu_url is not null
and split_part(c.eight_a_nu_url, '/', 7) not like 'unknown-crag%'
group by
substring(c.eight_a_nu_url from '^(.+)/sectors/')
,split_part(c.eight_a_nu_url, '/', 7)
)
select
'<a href="' || m.eight_a_nu_crag_url || '">' || m.eight_a_nu_crag_name || '</a>' as "8a.nu Crag"
,m.climbs_missing as "Climbs Missing"
,m.climbs as "Climbs"
,coalesce(site_crags.crag_exists, '') as "Crag Exists?"
from
missing_crags m
left join lateral (
select
string_agg(
'<a href="' || c2.url || '">' || c2.crag_name || '</a>',
', ' order by c2.crag_name
) as crag_exists
from
crags c2
where
c2.deleted_on is null
and (
(
length(m.eight_a_nu_crag_name) <= 4
and lower(regexp_replace(c2.crag_name, '[^a-z0-9]+', '', 'g')) =
lower(regexp_replace(m.eight_a_nu_crag_name, '[^a-z0-9]+', '', 'g'))
)
or
(
length(m.eight_a_nu_crag_name) between 5 and 8
and (
lower(c2.crag_name) ~ ('(^|[^a-z0-9])' || lower(regexp_replace(m.eight_a_nu_crag_name, '[^a-z0-9]+', ' ', 'g')) || '([^a-z0-9]|$)')
or lower(m.eight_a_nu_crag_name) ~ ('(^|[^a-z0-9])' || lower(regexp_replace(c2.crag_name, '[^a-z0-9]+', ' ', 'g')) || '([^a-z0-9]|$)')
)
)
or
(
length(m.eight_a_nu_crag_name) >= 9
and (
c2.crag_name ilike '%' || m.eight_a_nu_crag_name || '%'
or m.eight_a_nu_crag_name ilike '%' || c2.crag_name || '%'
)
)
)
) site_crags on true
order by
m.climbs_missing desc
,"8a.nu Crag"
Diff
--- before
|
|||||||
| 2704 | 1st May 2026 | 18:02:28 UTC | baz9 | list | Temporary Listt | list_definition | |
|
Before
with missing_crags as (
select
substring(c.eight_a_nu_url from '^(.+)/sectors/') as eight_a_nu_crag_url
,split_part(c.eight_a_nu_url, '/', 7) as eight_a_nu_crag_slug
,initcap(replace(split_part(c.eight_a_nu_url, '/', 7), '-', ' ')) as eight_a_nu_crag_name
,count(*) as climbs_missing
,string_agg(
'<a href="' || c.url || '">' || c.climb_name || '</a>',
', ' order by c.climb_name
) as climbs
from
climbs c
where
c.deleted_on is null
and c.crag_id is null
and c.eight_a_nu_url is not null
and split_part(c.eight_a_nu_url, '/', 7) not like 'unknown-crag%'
group by
substring(c.eight_a_nu_url from '^(.+)/sectors/')
,split_part(c.eight_a_nu_url, '/', 7)
)
select
'<a href="' || m.eight_a_nu_crag_url || '">' || m.eight_a_nu_crag_name || '</a>' as "8a.nu Crag"
,m.climbs_missing as "Climbs Missing"
,m.climbs as "Climbs"
,coalesce(site_crags.crag_exists, '') as "Crag Exists?"
from
missing_crags m
left join lateral (
select
string_agg(
'<a href="' || c2.url || '">' || c2.crag_name || '</a>',
', ' order by c2.crag_name
) as crag_exists
from
crags c2
where
c2.deleted_on is null
and (
c2.crag_name ilike '%' || m.eight_a_nu_crag_name || '%'
or m.eight_a_nu_crag_name ilike '%' || c2.crag_name || '%'
)
) site_crags on true
order by
m.climbs_missing desc
,"8a.nu Crag"
After
with missing_crags as (
select
substring(c.eight_a_nu_url from '^(.+)/sectors/') as eight_a_nu_crag_url
,split_part(c.eight_a_nu_url, '/', 7) as eight_a_nu_crag_slug
,initcap(replace(split_part(c.eight_a_nu_url, '/', 7), '-', ' ')) as eight_a_nu_crag_name
,count(*) as climbs_missing
,string_agg(
'<a href="' || c.url || '">' || c.climb_name || '</a>',
', ' order by c.climb_name
) as climbs
from
climbs c
where
c.deleted_on is null
and c.crag_id is null
and c.eight_a_nu_url is not null
and split_part(c.eight_a_nu_url, '/', 7) not like 'unknown-crag%'
group by
substring(c.eight_a_nu_url from '^(.+)/sectors/')
,split_part(c.eight_a_nu_url, '/', 7)
)
select
'<a href="' || m.eight_a_nu_crag_url || '">' || m.eight_a_nu_crag_name || '</a>' as "8a.nu Crag"
,m.climbs_missing as "Climbs Missing"
,m.climbs as "Climbs"
,coalesce(site_crags.crag_exists, '') as "Crag Exists?"
from
missing_crags m
left join lateral (
select
string_agg(
'<a href="' || c2.url || '">' || c2.crag_name || '</a>',
', ' order by c2.crag_name
) as crag_exists
from
crags c2
where
c2.deleted_on is null
and (
(
length(m.eight_a_nu_crag_name) <= 4
and lower(regexp_replace(c2.crag_name, '[^a-z0-9]+', '', 'g')) =
lower(regexp_replace(m.eight_a_nu_crag_name, '[^a-z0-9]+', '', 'g'))
)
or
(
length(m.eight_a_nu_crag_name) between 5 and 8
and (
lower(c2.crag_name) ~ ('(^|[^a-z0-9])' || lower(regexp_replace(m.eight_a_nu_crag_name, '[^a-z0-9]+', ' ', 'g')) || '([^a-z0-9]|$)')
or lower(m.eight_a_nu_crag_name) ~ ('(^|[^a-z0-9])' || lower(regexp_replace(c2.crag_name, '[^a-z0-9]+', ' ', 'g')) || '([^a-z0-9]|$)')
)
)
or
(
length(m.eight_a_nu_crag_name) >= 9
and (
c2.crag_name ilike '%' || m.eight_a_nu_crag_name || '%'
or m.eight_a_nu_crag_name ilike '%' || c2.crag_name || '%'
)
)
)
) site_crags on true
order by
m.climbs_missing desc
,"8a.nu Crag"
Diff
--- before
|
|||||||
| 2705 | 1st May 2026 | 17:51:43 UTC | baz9 | list | Temporary Listt | list_type_name | |
|
Before
None
After
Admin
|
|||||||
| 2706 | 1st May 2026 | 17:51:43 UTC | baz9 | list | Temporary Listt | list_type_id | |
|
Before
None
After
6
|
|||||||
| 2707 | 1st May 2026 | 17:51:43 UTC | baz9 | list | Temporary Listt | list_description | |
|
Before
None
After
temp
Diff
--- before
|
|||||||
| 2708 | 1st May 2026 | 17:51:43 UTC | baz9 | list | Temporary Listt | list_definition | |
|
Before
None
After
with missing_crags as (
select
substring(c.eight_a_nu_url from '^(.+)/sectors/') as eight_a_nu_crag_url
,split_part(c.eight_a_nu_url, '/', 7) as eight_a_nu_crag_slug
,initcap(replace(split_part(c.eight_a_nu_url, '/', 7), '-', ' ')) as eight_a_nu_crag_name
,count(*) as climbs_missing
,string_agg(
'<a href="' || c.url || '">' || c.climb_name || '</a>',
', ' order by c.climb_name
) as climbs
from
climbs c
where
c.deleted_on is null
and c.crag_id is null
and c.eight_a_nu_url is not null
and split_part(c.eight_a_nu_url, '/', 7) not like 'unknown-crag%'
group by
substring(c.eight_a_nu_url from '^(.+)/sectors/')
,split_part(c.eight_a_nu_url, '/', 7)
)
select
'<a href="' || m.eight_a_nu_crag_url || '">' || m.eight_a_nu_crag_name || '</a>' as "8a.nu Crag"
,m.climbs_missing as "Climbs Missing"
,m.climbs as "Climbs"
,coalesce(site_crags.crag_exists, '') as "Crag Exists?"
from
missing_crags m
left join lateral (
select
string_agg(
'<a href="' || c2.url || '">' || c2.crag_name || '</a>',
', ' order by c2.crag_name
) as crag_exists
from
crags c2
where
c2.deleted_on is null
and (
c2.crag_name ilike '%' || m.eight_a_nu_crag_name || '%'
or m.eight_a_nu_crag_name ilike '%' || c2.crag_name || '%'
)
) site_crags on true
order by
m.climbs_missing desc
,"8a.nu Crag"
Diff
--- before
|
|||||||
| 2709 | 1st May 2026 | 17:51:43 UTC | baz9 | list | Temporary Listt | list_description_pretty | |
|
Before
None
After
<p>temp</p>
|
|||||||
| 2710 | 1st May 2026 | 17:51:43 UTC | baz9 | list | Temporary Listt | list_name | |
|
Before
None
After
Temporary Listt
|
|||||||
| 2711 | 1st May 2026 | 17:37:14 UTC | baz9 | climb | Titan | crag_name | |
|
Before
None
After
La Balme de Yenne
|
|||||||
| 2712 | 1st May 2026 | 17:37:14 UTC | baz9 | climb | Titan | crag_location_breadcrumb | |
|
Before
None
After
France / Auvergne-Rhône-Alpes / Savoie
|
|||||||
| 2713 | 1st May 2026 | 17:37:14 UTC | baz9 | climb | Titan | crag_id | |
|
Before
None
After
10618
|
|||||||
| 2714 | 1st May 2026 | 17:37:14 UTC | baz9 | climb | Titan | crag_location_breadcrumb_pretty | |
|
Before
None
After
<a href="/crags/location/France" class="text-muted">France</a> / <a href="/crags/location/France/Auvergne-Rhône-Alpes" class="text-muted">Auvergne-Rhône-Alpes</a> / <a href="/crags/location/France/Auvergne-Rhône-Alpes/Savoie" class="text-muted">Savoie</a>
|
|||||||
| 2715 | 1st May 2026 | 17:36:37 UTC | baz9 | climb | Street Fighter Sit | crag_location_breadcrumb | |
|
Before
None
After
Spain / Castile-La Mancha / Guadalajara
|
|||||||
| 2716 | 1st May 2026 | 17:36:37 UTC | baz9 | climb | Street Fighter Sit | crag_location_breadcrumb_pretty | |
|
Before
None
After
<a href="/crags/location/Spain" class="text-muted">Spain</a> / <a href="/crags/location/Spain/Castile-La Mancha" class="text-muted">Castile-La Mancha</a> / <a href="/crags/location/Spain/Castile-La Mancha/Guadalajara" class="text-muted">Guadalajara</a>
|
|||||||
| 2717 | 1st May 2026 | 17:36:37 UTC | baz9 | climb | Street Fighter Sit | crag_name | |
|
Before
None
After
Alcolea del Pinar
|
|||||||
| 2718 | 1st May 2026 | 17:36:37 UTC | baz9 | climb | Street Fighter Sit | crag_id | |
|
Before
None
After
34133
|
|||||||
| 2719 | 1st May 2026 | 17:35:56 UTC | baz9 | climb | Sosa Stand | crag_name | |
|
Before
None
After
Little Cottonwood Canyon
|
|||||||
| 2720 | 1st May 2026 | 17:35:56 UTC | baz9 | climb | Sosa Stand | crag_location_breadcrumb | |
|
Before
None
After
United States / Utah / Salt Lake County
|
|||||||