Proposal:Golf course extended
| Extended Golf Course Schema | |
|---|---|
| Proposal status: | Draft (under way) |
| Proposed by: | Opengolfapi |
| Tagging: | golf:*=*
|
| Draft started: | 2026-04-07 |
Proposal
Extend the existing leisure=golf_course tagging with structured golf-specific attributes that enable richer mapping and querying of golf courses worldwide.
Rationale
Currently, OSM's golf course tagging is limited to:
leisure=golf_courseon the area/relationgolf=*for sub-features (hole, tee, green, bunker, fairway, water_hazard)par=*andref=*on individual holes (rarely used)
There is no standard way to tag:
- Course-level par total
- Course access type (public vs private)
- Number of holes
- Per-hole par values on the course feature itself
This proposal adds a small set of golf:* tags to address these gaps.
Proposed Tags
On leisure=golf_course features
| Tag | Value | Description |
|---|---|---|
golf:holes |
integer | Number of holes (9, 18, 27, 36) |
golf:par |
integer | Total course par |
golf:type |
enum (see below) | Access/ownership type |
golf:hole:N:par |
integer | Par for hole N (1-18) |
golf:type values
| Value | Description |
|---|---|
public |
Open to the public |
private |
Members only |
municipal |
Government owned, open to public |
resort |
Resort-attached, open to guests and public |
military |
Military installation, restricted |
par3 |
Par-3 or executive course |
Existing tags used (no changes)
| Tag | Notes |
|---|---|
name=* |
Course name |
phone=* |
Phone number |
website=* |
Website URL |
start_date=* |
Year course opened |
operator=* |
Management company |
addr:* |
Address tags |
Examples
Minimal tagging (what most courses have today)
leisure=golf_course name=Pebble Beach Golf Links
With proposed tags
leisure=golf_course name=Pebble Beach Golf Links golf:holes=18 golf:par=72 golf:type=resort phone=+1 831 622 8723 website=https://pebblebeach.com start_date=1919 source=OpenGolf
With per-hole par (optional)
golf:hole:1:par=4 golf:hole:2:par=5 golf:hole:3:par=4 ... golf:hole:18:par=5
Justification
Why golf:type instead of access=*?
The access tag in OSM describes legal access rights. Golf course access is more nuanced — a "private" course may allow public play on certain days, a "resort" course requires being a hotel guest but not a member. golf:type captures the golf-specific access model without conflicting with the general access tag.
Why golf:hole:N:par on the course feature?
Many OSM golf courses are mapped as a single way or node, not as detailed relations with individual hole features. Putting per-hole par on the course feature ensures the data is available even without detailed sub-feature mapping. This is analogous to how building:levels exists on building outlines even when individual floors aren't mapped.
Why not just use par=* on hole sub-features?
That approach works when courses are fully mapped with individual hole relations, but fewer than 1% of OSM golf courses have this level of detail. Adding course-level hole pars makes the data immediately useful for the other 99%.
Data Source
OpenGolfAPI has prepared a dataset of 15,667 US golf courses with these tags, available for import under ODbL. See the companion import proposal for details.
Backwards Compatibility
All proposed tags are new golf:* namespace tags. No existing tags are modified or deprecated. Existing leisure=golf_course features continue to work unchanged.
Features/Pages affected
External discussions
- Community forum: (see Proposal_process#Mandatory announcements)
Comments
Please comment on the discussion page.
Voting
This proposal will be submitted for community vote after the RFC period.