Context URL: https://obsazovacky.info/schema/v1
Embed one or more <script type="application/ld+json"> blocks in your HTML pages using this schema.
The Obsazovačky crawler will discover and import your tournament data automatically.
@type: "TournamentList".rounds are present → use directly.rounds are absent but url is present → fetch that URL and look for a @type: "Tournament" block.nextPage links until all pages are processed (max 100 pages).TournamentList – embed on list pages| Field | Type | Required | Description |
|---|---|---|---|
@context | string | ✓ | Must be https://obsazovacky.info/schema/v1 |
@type | string | ✓ | Must be TournamentList |
tournaments | Tournament[] | ✓ | Array of tournaments (may be empty) |
nextPage | string (URL) | — | URL of the next list page (omit if none) |
Tournament – inline or on detail page| Field | Type | Required | Description |
|---|---|---|---|
@context | string | ✓* | Required only when used standalone on a detail page |
@type | string | ✓ | Must be Tournament |
name | string | ✓ | Tournament name |
startDate | string | ✓ | ISO 8601 date or datetime (2026-04-15 or 2026-04-15T00:00:00) |
endDate | string | — | ISO 8601; defaults to startDate |
alley | string | — | Name of the bowling alley |
city | string | — | City |
state | string | — | Country code or name (e.g. cz, Slovakia, Netherlands) |
url | string (URL) | — | Link to the detail page. If rounds is absent, the crawler fetches this URL. |
rounds | TournamentRound[] | — | Rounds. If omitted and url is set, fetched from detail page. |
Tournament inside a TournamentList has neither rounds nor url, it is skipped.
TournamentRound| Field | Type | Required | Description |
|---|---|---|---|
@type | string | ✓ | Must be TournamentRound |
name | string | ✓ | Round name (e.g. 1. Runda, Morning Flight) |
startDate | string | ✓ | ISO 8601 datetime with time (2026-04-15T10:00:00) |
alley | string | — | Alley name for this round (can differ from tournament alley) |
capacity | integer | — | Maximum number of players |
registered | integer | — | Number of currently registered players |
players | RegisteredPlayer[] | — | List of registered players |
RegisteredPlayer| Field | Type | Required | Description |
|---|---|---|---|
@type | string | ✓ | Must be RegisteredPlayer |
firstName | string | ✓ | First name |
lastName | string | ✓ | Last name |
teamName | string | — | Team name |
ready | boolean | — | Player confirmed (default: false) |
substitute | boolean | — | Substitute player (default: false) |
state | string | — | Country code or name (e.g. cz, Slovakia, Netherlands) |
<script type="application/ld+json">
{
"@context": "https://obsazovacky.info/schema/v1",
"@type": "TournamentList",
"nextPage": "https://example.com/tournaments?page=2",
"tournaments": [
{
"@type": "Tournament",
"name": "Spring Open 2026",
"alley": "Bowling Center Praha",
"city": "Praha",
"state": "cz",
"startDate": "2026-04-15",
"endDate": "2026-04-15",
"rounds": [
{
"@type": "TournamentRound",
"name": "1. Runda",
"startDate": "2026-04-15T10:00:00",
"alley": "Bowling Center Praha",
"capacity": 24,
"registered": 18,
"players": [
{ "@type": "RegisteredPlayer", "firstName": "Jan", "lastName": "Novák", "ready": true },
{ "@type": "RegisteredPlayer", "firstName": "Eva", "lastName": "Procházková" }
]
},
{
"@type": "TournamentRound",
"name": "2. Runda",
"startDate": "2026-04-15T14:00:00",
"capacity": 24,
"registered": 6,
"players": []
}
]
}
]
}
</script>
List page – tournaments reference a detail URL, no rounds:
<script type="application/ld+json">
{
"@context": "https://obsazovacky.info/schema/v1",
"@type": "TournamentList",
"tournaments": [
{ "@type": "Tournament", "name": "Spring Open 2026", "startDate": "2026-04-15", "city": "Praha", "state": "cz",
"url": "https://example.com/tournaments/spring-open-2026" },
{ "@type": "Tournament", "name": "Summer Cup 2026", "startDate": "2026-06-01",
"url": "https://example.com/tournaments/summer-cup-2026" }
]
}
</script>
Detail page (https://example.com/tournaments/spring-open-2026) – standalone Tournament:
<script type="application/ld+json">
{
"@context": "https://obsazovacky.info/schema/v1",
"@type": "Tournament",
"name": "Spring Open 2026",
"alley": "Bowling Center Praha",
"city": "Praha",
"state": "cz",
"startDate": "2026-04-15",
"rounds": [
{
"@type": "TournamentRound",
"name": "1. Runda",
"startDate": "2026-04-15T10:00:00",
"capacity": 24,
"registered": 18,
"players": [ { "@type": "RegisteredPlayer", "firstName": "Jan", "lastName": "Novák", "ready": true } ]
}
]
}
</script>
nextPage)The crawler follows nextPage until it is absent or null. Maximum 100 pages per crawl run.
<!-- Page 1 -->
{ "@context": "https://obsazovacky.info/schema/v1", "@type": "TournamentList",
"nextPage": "https://example.com/tournaments?page=2", "tournaments": [ ... ] }
<!-- Page 2 -->
{ "@context": "https://obsazovacky.info/schema/v1", "@type": "TournamentList",
"nextPage": null, "tournaments": [ ... ] }
2026-04-15) are parsed as midnight UTC.@context field inside TournamentList.tournaments[] items is optional and ignored.TournamentList blocks on one page are all processed.Tournament block on a detail page is matched to the tournament that linked to that URL.