For future reference, here’s the Overpass QL I used to select those kerb=* nodes. First, it limits to nodes tagged only with kerb=* (so we don’t touch kerb tags used alongside bus stops or platforms) - this follows the advice in wiki (https://wiki.openstreetmap.org/wiki/Key:kerb#By_itself). Then, since tagging a node as barrier=kerb implies it’s an obstacle along a way, we explicitly exclude any kerb nodes that lie on motor-vehicle roads (i.e. all highway=* except footway, cycleway, path), because according to wiki standalone kerb=* may have denoted informal crossing.


[out:json][timeout:25];
{{geocodeArea:Helsinki}}->.searchArea;
// Step 1: Get all kerb nodes with only one tag
node[kerb](if:count_tags()==1)(area.searchArea)->.kerbs;
// Step 2: Get motorvehicle roads and their nodes
way[highway][highway!~"footway|cycleway|path"](area.searchArea);
node(w)->.road_nodes;
// Step 3: Remove kerbs that are part of those roads
(.kerbs; - .road_nodes;)->.nonroad_kerbs;
// Step 4: Get crossing ways
way[footway=crossing](area.searchArea)->.foot_crossings;
way[cycleway=crossing](area.searchArea)->.cycle_crossings;
(.foot_crossings; .cycle_crossings;)->.crossing_ways;
// Step 5: Get nodes used in crossing ways
node(w.crossing_ways)->.crossing_nodes;
// Step 6: Intersect with nonroad_kerbs
node.nonroad_kerbs.crossing_nodes->._;
out geom meta;
