diff --git a/backend/services/scraper_backends/playwright_hotel_page.py b/backend/services/scraper_backends/playwright_hotel_page.py
index 64276a4..0814299 100644
--- a/backend/services/scraper_backends/playwright_hotel_page.py
+++ b/backend/services/scraper_backends/playwright_hotel_page.py
@@ -73,10 +73,10 @@ _EXTRACT_RATES_JS = """
const cancelMatch = condCell.match(/free cancellation before ([\\w\\s]+)/i);
const freeCancelText = cancelMatch ? cancelMatch[1].trim() : null;
- // Persons: first
("Max persons: 2" or "Only for 1 guest")
- const personsCell = cells.length >= 1 ? cells[0].innerText || '' : '';
- const personsMatch = personsCell.match(/\\d+/);
- const maxPersons = personsMatch ? parseInt(personsMatch[0]) : null;
+ // Persons: extract from block_id format {room_id}_{rate_plan_id}_{persons}_{meal}_0
+ // More reliable than cell text parsing which can pick up the price instead.
+ const blockParts = blockId.split('_');
+ const maxPersons = blockParts.length >= 3 ? parseInt(blockParts[2]) : null;
// Quantity dropdown: last | has a |