Truy cập theo
vault/10-rules/ota-readonly-rule.md. Chỉ đọc. ⚠️ Đây là chỗ đổi giá thật trên mọi kênh cùng lúc. Nút "Update My Prices Now" và "Sync Price" thuộc diện cấm tuyệt đối nếu chưa có lệnh.📘 Tài liệu chính thức đã đọc trọn (27/09/2026): báo cáo gọn
Sổ tay PriceLabs(vault/19-Harthliving-OTA/guide/pages/pricelabs-guide.html) · dump 225 bài + mục lục:audits/2026-09-27-pricelabs-helpcenter/index.md. Mục 5 bên dưới: câu "PriceLabs có phải channel manager đẩy XML xuống Booking" đã rõ — PriceLabs là Connectivity provider của Booking (tài liệu tích hợp Booking.com, bước 1a).
1. Vai trò trong hệ thống
PriceLabs là dynamic pricing đẩy giá xuống các kênh. Đây nhiều khả năng chính là channel manager gây ra nhãn XML (edits overwritten) trên lịch Booking — nghĩa là sửa giá phải sửa ở đây, không sửa trong extranet. (suy luận, chưa xác minh — xem mục 5)
2. Quy mô — 36 listing = 25 Airbnb + 8 Booking + 3 VRBO + 0 Agoda
Đọc từ response GET /api/pd_dropdown_options?page_size=25000 (03/09/2026). Giải xong nút thắt "36 là gì".
| Kênh trong PriceLabs | Số listing | Ghi chú |
|---|---|---|
airbnb |
25 | nhiều hơn 15 listing thấy trên trang Hosting — gồm cả các studio lẻ của 86 Phạm Cự Lượng và Ba Na Hills |
bcom |
8 | ở cấp room, khoá dạng hotelid___roomid, không phải cấp property |
vrbo |
3 | ⚠️ kênh thứ tư chưa từng biết — cả 3 đều ở San Jose, CA |
agoda |
0 | ⚠️ Agoda KHÔNG nối vào PriceLabs |
2.1 ⚠️ Agoda nằm hoàn toàn ngoài dynamic pricing
Không có một listing Agoda nào trong PriceLabs. Nghĩa là 6 listing Agoda đang định giá tay / giá tĩnh, không theo thị trường, không đồng bộ với hai kênh kia. → issues.md L-14.
2.2 Bảy căn trong phạm vi — căn nào được PriceLabs quản
| Slug | Airbnb | Booking | Agoda |
|---|---|---|---|
25anthuong11 |
✅ 1729647978348243002 |
✅ 16927056___1692705601 (đọc 18/09/2026: Min 3.450.000 · Base 4.600.000 · Max 11.500.000 · Sync ON) |
❌ |
181tohienthanh |
✅ 1392557018193095807 |
✅ 14740288___1474028801 |
❌ |
15nuocman5 |
✅ 1598529903924488190 |
✅ 15668679___1566867901 |
❌ |
41lehycat |
✅ 1530969549011048259 |
✅ 15668481___1566848101 |
❌ |
alacarte305 |
✅ 1299210095000132691 |
✅ 1331150301 + 1331150302 (2 hạng phòng) |
❌ |
alacarte404 |
✅ 1299215688434855781 |
✅ 15702704___1570270401 |
❌ |
alacarte502 |
✅ 1432771761830735457 |
✅ 14756473___1475647301 |
❌ |
⚠️ 25anthuong11 trên Booking không có trong PriceLabs ⇒ giá Booking của căn này là giá tĩnh. → L-15. Kiểm lại 11/09/2026: vẫn y nguyên — 36 listing = 25 airbnb + 8 bcom + 3 vrbo, cùng 8 dòng bcom như 03/09.
2.3 Lệch danh sách khác
- Booking
15995581"NEW Pool Villa - 6BR,6BA" (36 Dương Tử Giang) có trong PriceLabs nhưng không có trong Group homepage. Chưa rõ vì sao. - Booking
15702691(305 cũ, Closed) và15702720(86 PCL, Closed) không có trong PriceLabs — hợp lý vì đang đóng.
2b. Bảng giá — ĐỦ 36/36 dòng
Lấy bằng cuộn container ảo (css-xidosa), không bấm phân trang: bảng chỉ giữ ~10 hàng trong DOM cùng lúc, cuộn thì render tiếp. Nút next-page thực ra đang disabled vì page size đã là 100.
Airbnb — 7 căn trong phạm vi
| Căn | Min | Base | Max | BR | Occ 30P | Doanh thu 30P | ADR 30P | ADR/Base |
|---|---|---|---|---|---|---|---|---|
| 404 | 1.350.000 | 2.179.440 | Chưa đặt | 2 BR | 100 % | 49.505.042 | 1.650.168 | 76 % |
| 15 MN | 3.450.000 | 4.500.000 | Chưa đặt | 4 BR | 63 % | 68.044.495 | 3.581.289 | 80 % |
| 502 | Chưa đặt | 1.688.560 | Chưa đặt | 1 BR | 60 % | 20.539.809 | 1.141.101 | 68 % |
| 181 THT | 2.500.000 | 3.862.830 | Chưa đặt | 3 BR | 50 % | 54.025.843 | 3.601.723 | 93 % |
| 305 | 1.350.000 | 2.182.970 | Chưa đặt | 2 BR | 20 % | 9.396.844 | 1.566.141 | 72 % |
| 41 LHC | 3.450.000 | 4.622.500 | Chưa đặt | 4 BR | 20 % | 26.100.496 | 4.350.083 | 94 % |
| 25 AT 11 | 3.000.000 | 4.000.000 | Chưa đặt | 4 BR | 13 % | 8.000.000 | 2.000.000 | 50 % |
Booking — 6 dòng trong phạm vi
| Căn | Min | Base | Max | BR ghi trong PL | Occ 30P | Doanh thu 30P | ADR 30P |
|---|---|---|---|---|---|---|---|
| 305 hạng 1 | 1.500.000 | 2.400.000 | Chưa đặt | 2 BR | 83 % | 77.273.906 | 2.146.497 |
| 502 | Chưa đặt | 1.700.000 | Chưa đặt | 1 BR | 30 % | 14.138.322 | 1.285.302 |
| 41 LHC | 4.000.000 (gợi ý 3.800.000) | 5.500.000 | Chưa đặt | 1 BR ⚠️ | 20 % | 22.478.442 | 3.746.407 |
| 181 THT | 3.000.000 (gợi ý 2.850.000) | 4.200.000 | Chưa đặt | 1 BR ⚠️ | 0 % | 0 | 0 |
| 15 MN | 3.900.000 (gợi ý 3.705.000) | 6.000.000 | Chưa đặt | 1 BR ⚠️ | 0 % | 0 | 0 |
| 404 | Chưa đặt | CHƯA ĐẶT ⚠️ | Chưa đặt | 1 BR ⚠️ | 0 % | 0 | 0 |
| 305 hạng 2 | Chưa đặt | CHƯA ĐẶT ⚠️ | Chưa đặt | 2 BR | — | — | — |
25anthuong11 không có dòng Booking trong PriceLabs — xem L-15.
Năm điều đọc ra
Max Pricechưa đặt ở TOÀN BỘ 36 listing. Không có trần giá ở bất kỳ đâu.- Hai dòng Booking không có cả
Base:404và305 hạng 2. PriceLabs không tính được giá cho chúng — nghĩa là giá đang đẩy xuống Booking cho hai dòng này là giá cũ nằm im, không phải giá động. → L-21 - BA dòng Booking khai sai số phòng ngủ, không phải hai:
181THT(thật 3BR),15MN(thật 4BR),41LHC(thật 4BR) — tất cả đều ghi 1 BR. → L-18 25 AT 11là listing yếu nhất danh mục: lấp đầy 13 % và giá thực chỉ bằng 50 % giá gốc — kém nhất trên cả hai trục. Cộng thêm nó không có trên Agoda và không có dòng Booking trong PriceLabs. → L-22- Rất nhiều listing ngoài phạm vi chưa đặt Min/Base gì cả: toàn bộ Ba Na Hills, 86 Phạm Cự Lượng, sáu studio
1681…, và một listing1482…4672không có tên.
2c. Lấp đầy hợp nhất — cách đọc đúng con số 0 %
Airbnb và Booking dùng chung một lịch, nên lấp đầy hai kênh cộng lại mới ra mức bán thật của căn. Đây là chỗ dễ kết luận sai nhất.
| Căn | Airbnb | Booking | Hợp nhất | Đọc ra sao |
|---|---|---|---|---|
alacarte305 |
20 % | 83 % | ≈103 % | Kín. Booking gánh gần hết, ở giá cao hơn |
alacarte404 |
100 % | 0 % | 100 % | Kín. 0 % của Booking là HỆ QUẢ, không phải lỗi |
alacarte502 |
60 % | 30 % | 90 % | Tốt |
15nuocman5 |
63 % | 0 % | 63 % | ⚠️ Còn 37 % trống mà Booking không bán được đêm nào |
181tohienthanh |
50 % | 0 % | 50 % | ⚠️ Còn 50 % trống mà Booking không bán được đêm nào |
41lehycat |
20 % | 20 % | 40 % | Yếu, nhưng cả hai kênh đều đang chạy |
25anthuong11 |
13 % | không có trong PL | ≥13 % | Yếu nhất |
Sửa lại nhận định trước đó: 404 từng bị xếp chung nhóm "Booking chết". Sai — căn đó đã kín 100 % qua Airbnb, nên Booking không còn gì để bán. Chỉ 15nuocman5 và 181tohienthanh mới là ca thật.
2d. Base Price được tính thế nào — và vì sao hai kênh lệch nhau
Base là gì — đã kiểm TRỰC TIẾP trên trang listing (03/09/2026)
Mở app.pricelabs.co/pricing?listings=<id>&pms_name=airbnb&open_calendar=true, khối Configure Prices:
- Ba ô nhập thật,
type=text, không readonly, không disabled: Minimum =1350000· Base =2182970· Maximum = rỗng. - Nút
Save & Refreshngay dưới → giá trị được lưu chứ không phải hiển thị tính toán. - Nút
Help Me Choose a Base Price→ PriceLabs có công cụ đề xuất Base. - Khối
Base Price History→ mọi lần đổi Base đều được ghi lại. - Chỉ số
Recommended Base Price to Base Price Ratio= 1,01 → PriceLabs tự tính một Base khuyến nghị riêng và so với Base đang đặt.
Kết luận đúng: Base là giá trị lưu trên từng listing, người quản lý sở hữu và bấm lưu — nhưng con số thường do PriceLabs sinh ra qua Help Me Choose a Base Price / Recommended Base Price, rồi được chấp nhận.
Base KHÔNG tự nhảy — đã xác minh bằng tài liệu
Help doc PriceLabs: Base "is not automatically updated by PriceLabs"; đặt xong thì lưu, và "should revisit it seasonally". Khi thuật toán thấy nên đổi, nó gửi nudge — và "Nudges never auto-apply — you always choose to accept or reject."
Ngược lại, giá theo ngày thì hoàn toàn tự động: cập nhật "up to 24 times per day" theo dữ liệu nhu cầu.
Base Price → người đặt, đứng yên tới khi có người sửa
Giá từng ngày → PriceLabs tự tính lại tới 24 lần/ngày quanh Base đó
Quan sát khớp: Base của 305 giữ nguyên 2.182.970 suốt các lần đọc cách nhau nhiều giờ trong ngày 03/09, trong khi giá theo ngày và Last synced đều đổi. Mọi lần đổi Base được ghi ở Base Price History (mở không được — nút cạnh nhãn đó mang aria-label sai là Add Notes, không bấm vì nhãn mơ hồ).
⚠️ Sửa nhận định cũ. Bản trước ghi "Base do người dùng tự nhập" và lý giải số lẻ bằng "máy suy ra rồi được chấp nhận" — đúng phần sau, sai phần đầu. Số lẻ như 2.182.970 · 2.179.440 (hai căn 2BR A La Carte, lệch nhau đúng 3.530đ) là dấu vết của Recommended Base Price, không phải người gõ.
Rec/Base Price Ratio khác nhau giữa hai dòng của CÙNG một căn — vì sao (đọc 15/09/2026 22:30)
Đọc 14 dòng lúc 21:40: Airbnb 0,83–0,93 · Booking 0,91–1,25 (404 và 25 AT 11 Booking = Unavailable). Ba lý do, đã kiểm:
- Chỉ số tính riêng cho từng dòng. PriceLabs coi dòng Airbnb và dòng Booking của một căn là hai listing độc lập; Base khuyến nghị của mỗi dòng đi từ lịch sử bán của chính kênh đó trong 60 ngày (ADR · lấp đầy · pickup 30 ngày) so với thị trường — Help: "After 7 days (or 14–21 days for new listings) of consistent price syncing with the same base price, PriceLabs generates a personalized recommendation… Recommendations update weekly and apply for 7 days." 305: Booking lấp 53 % ở ADR cao hơn → 1,03; Airbnb lấp 23 % → 0,93.
- Tử số cũ, mẫu số mới. Rec chỉ tính lại hàng tuần (
next_update_date: 305 Airbnb 20/09 · 305 Booking 23/09 · 41 Airbnb 24/09), còn Base thì mình vừa đổi: Airbnb ×1,15 ngày 14/09 (ratio tụt ~13 % chỉ vì mẫu số), Booking đổi sang Base của cha ngày 15/09 (15 MN 6,0 tr → 5,175 tr ⇒ rec cũ ≈ 6,47 tr ÷ Base mới = 1,25; 502 1,7 tr → 1,94 tr ⇒ 0,91). Ba dòng Booking 181/41/15 MN còn được tính với comp set 1 BR tới tận hôm nay (L-18). - Mô hình thị trường chỉ có cho dòng Airbnb. Endpoint
api/bph/fetch_base_price_estimator_data(nút Help Me Choose a Base Price, chỉ mở để đọc): dòng Airbnb 305 cómarket.value = 2.631.611(bách phân vị 68 trong 145 căn 2 BR Sơn Trà) kèm bảng đóng góp từng yếu tố — Service Fee +343.254 ("Hidden Service Fee", host-only) · Guest Favorite +66.252 · Superhost +44.168 · Review count +72.648 · Amenities −110.420 · Cleaning fee −57.143 · ADR −33.429 · Occupancy +18.782 · Pickup +79.097; dòng Booking 305 cùng căn trảmarket.value = null, không có bảng yếu tố (Guest Favorite/Superhost/review là thuộc tính Airbnb). ⇒ dòng Booking chỉ có nửa mô hình (hiệu suất riêng kênh), không có nửa thị trường. Dump:audits/2026-09-15-post-mapping-verify/base-price-estimator-*.json.
Cách dùng từ nay: Base đã chép từ cha sang con nên chỉ đọc ratio ở dòng Airbnb (cha); chờ lượt tính lại tuần sau (20–24/09, với Base mới + BR đúng) rồi mới xét nudge. Ratio dòng Booking hiện tại là số cũ trên mẫu số mới — không hành động theo nó. Lưu ý riêng 41 LHC: estimator đặt Base 5.315.880 ở bách phân vị 41/157 căn 4 BR và mô hình yếu tố ra 8.875.292 (percentile 83) — ngược chiều với ratio tuần 0,87; hai công cụ đo hai thứ khác nhau (thị trường theo thuộc tính vs hiệu suất 60 ngày), chưa kết luận.
Base KHÔNG phải giá trung bình
Base = giá của một đêm bình thường (mùa thường, ngày thường, nhu cầu thường). Là đầu vào. Giá trung bình đã bán là cột ADR — kết quả.
⚠️ Rec/Base Price Ratio KHÔNG phải tỷ lệ giá theo ngày
Nhãn đầy đủ trên trang listing là Recommended Base Price to Base Price Ratio:
Rec/Base = Base mà PriceLabs KHUYẾN NGHỊ ÷ Base bạn ĐANG ĐẶT
1,01(305) → PriceLabs nghĩ Base nên cao hơn 1 %.0,97(404) → nghĩ Base nên thấp hơn 3 %.1,07(502) → nghĩ Base nên cao hơn 7 %. Đúng bằng số thứ hai trong ô Base của dòng đó:1.688.560 × 1,07 = 1.807.055⇒ số thứ hai là Recommended Base Price, không phải giá hôm nay.
(Bản trước diễn giải nhầm đây là "giá khuyến nghị theo ngày". Sai.)
⚠️ ADR thấp hơn Base phần lớn là do MÙA, không phải bán rẻ
Đọc lịch giá tháng 9/2026 của 305 · Airbnb (Base 2.182.970):
| Giá | % của Base | |
|---|---|---|
| Chạm sàn Min | 1.350.000 | 61,8 % |
| Trung bình tháng 9 | 1.660.000 | 76,0 % |
| Cao nhất tháng 9 | 2.070.000 | 94,8 % |
| ADR 30 ngày qua | 1.566.141 | 71,7 % |
Cả tháng 9 đều dưới Base, và có ngày chạm đúng sàn Min. Đây là hành vi đúng của thuật toán trong mùa thấp — Base là giá đêm bình thường, tháng 9 Đà Nẵng không bình thường.
⇒ Tỷ lệ ADR/Base thấp KHÔNG tự nó chứng minh bán rẻ. Chỉ dùng nó để so các căn với nhau trong cùng kỳ, đừng đọc như một mức tuyệt đối. Ca đáng ngờ thật là 25 AT 11 ở 50 % — thấp hơn hẳn phần còn lại.
PriceLabs tính cái gì
Min · Base · Max là ba ô người dùng tự nhập, lưu riêng cho từng listing. PriceLabs chỉ gợi ý một con số lúc onboard rồi thôi; từ đó về sau nó không tự đổi Base.
Thứ PriceLabs tính là giá khuyến nghị theo từng ngày:
giá ngày X = Base × (mùa · thứ trong tuần · lấp đầy của chính mình
· nhu cầu thị trường từ comp set · khoảng cách tới ngày ở)
rồi kẹp vào [Min, Max]
Cột Rec/Base Price Ratio chính là hệ số tổng hợp đó. Base là cái neo, không phải kết quả.
Vì sao Airbnb và Booking lệch nhau dù cùng PriceLabs
Mỗi kết nối kênh là một listing RIÊNG trong PriceLabs, có bộ Min/Base/Max riêng. Airbnb 305 và Booking 13311503___1331150301 là hai hàng khác nhau. Không ai đồng bộ Base giữa chúng, nên hai con số là tàn dư của hai lần nhập tay khác nhau, ở hai thời điểm khác nhau — không phải kết quả của thuật toán nào.
Bằng chứng 1 — dấu vết làm tròn. Base của Booking tròn 100.000 ở cả 5/5 dòng; Base của Airbnb lẻ ở 5/7 dòng (2.182.970 · 2.179.440 · 3.862.830 · 1.688.560 · 4.622.500). Số lẻ là dấu vết máy suy ra rồi được chấp nhận; số tròn là người gõ tay.
Bằng chứng 2 — cặp PARENT/CHILD chứng minh cách sửa. Villa 36 Dương Tử Giang đã được nối cha–con trong PriceLabs:
| Vai | Kênh | Min | Base |
|---|---|---|---|
| PARENT | Airbnb 1614…6321 |
4.500.000 | 7.290.170 |
| CHILD | Booking 15995581___1599558101 |
4.500.000 | 7.290.170 |
Giống hệt nhau. Nối cha–con là Base tự đồng bộ. Bảy căn trong phạm vi chưa nối, nên trôi mỗi nơi một kiểu. → L-23
(Lưu ý: nối cha–con đồng bộ Base nhưng KHÔNG sửa số phòng ngủ — dòng CHILD của 36 Dương Tử Giang vẫn ghi 3 BR trong khi PARENT ghi 6 BR.)
Bẫy lớn hơn: hai cột Base không so sánh được với nhau
Base Booking là giá khách trả. Base Airbnb hiện tại là giá TRƯỚC phụ thu khách ~14,2% (mô hình split fee). So thẳng hai cột là so hai thứ khác nhau.
| Căn | Khách trả trên Airbnb | Khách trả trên Booking | Thực tế |
|---|---|---|---|
alacarte305 |
2.492.952 | 2.400.000 | Booking rẻ hơn 3,7 % |
alacarte502 |
1.928.336 | 1.700.000 | Booking rẻ hơn 11,8 % |
181tohienthanh |
4.411.352 | 4.200.000 | Booking rẻ hơn 4,8 % |
41lehycat |
5.278.895 | 5.500.000 | Booking đắt hơn 4,2 % |
15nuocman5 |
5.139.000 | 6.000.000 | Booking đắt hơn 16,8 % |
Đảo ngược ba trên năm dòng. Cột "Booking đắt hơn" tính trên Base là góc nhìn của host, không phải cái khách thấy. Khách thấy Booking rẻ hơn ở 305, 502 và 181 THT.
Từ 15/09 hai cột mới so được với nhau, vì Airbnb chuyển sang host-only thì Base Airbnb cũng thành giá khách trả.
Phụ thu khách Airbnb lấy ~14,2%, là mức phổ biến — chưa đọc từ tài khoản. Hoa hồng Booking của tài khoản này cũng chưa xác minh nên chưa tính được tiền thực nhận hai kênh.
2e. ADR và Revenue nghĩa là gì — ĐÃ CHỨNG MINH 03/09/2026
Nguồn: tab Booking Insights của listing, bảng Recent Bookings — cột Booked Date · Check In · Check Out · Length of Stay · Rental Revenue · Total Revenue · ADR · Guest Count.
Ba định nghĩa, kiểm trên 4 booking thật của căn 305
ADR = Rental Revenue ÷ số đêm
Rental Revenue = tiền phòng thuần — KHÔNG gồm phí dọn
Total Revenue = (Rental Revenue + phí dọn) × (1 − 3%) = tiền host THỰC NHẬN
| Booking | Đêm | Rental | (Rental + 350.000) × 0,97 | Total ghi trên PriceLabs |
|---|---|---|---|---|
| 01–03/09 | 2 | 2.850.596 | 3.104.578 | 3.104.578 ✓ |
| 06–13/10 | 7 | 9.185.532 | 9.249.466 | 9.249.466 ✓ |
| 27–29/08 | 2 | 2.775.155 | 3.031.400 | 3.031.400 ✓ |
| 12–15/09 | 3 | 4.429.030 | 4.635.659 | 4.635.659 ✓ |
4/4 khớp đến từng đồng. Suy ngược ra phí host = 3,000 % ở cả bốn.
Trả lời ba câu còn treo
- ADR KHÔNG gồm phí dọn. Nó là tiền phòng thuần chia số đêm. ⇒ Tỷ lệ
ADR/Baseso đúng chuẩn: cả tử lẫn mẫu đều là giá phòng một đêm. Lo ngại trước đó không thành vấn đề. - ADR là số GỘP, chưa trừ hoa hồng kênh. Số đã trừ nằm ở cột khác —
Total Revenue. - Đối chiếu với Airbnb: khớp. Hai giá trị
Total Revenuecủa PriceLabs xuất hiện nguyên vẹn trong danh sách chi trả của chính Airbnb (/earnings/paid): 3.104.578 ở đợt Sep 2 và 3.031.400 ở đợt Aug 28. PriceLabs nhập dữ liệu Airbnb trung thực, không lệch.
Hệ quả: phí host Airbnb hiện tại = ĐÚNG 3 %
Trước đây đây là giả định khi tính lại giá cho mốc 15/09. Nay đã chứng minh trên 4 booking thật ⇒ phép tính giá mới = giá cũ × 0,97 ÷ 0,845 = ×1,1479 là đúng, không phải ước lượng.
⚠️ Chưa kiểm: Rental Revenue và ADR của các dòng Booking.com có cùng quy ước không. Nếu Booking gộp phí khác đi thì việc so Thực/Gốc giữa hai kênh vẫn lệch chuẩn.
2f. Chiết khấu dài ngày — PriceLabs CÓ tính năng, nhưng KHÔNG đẩy được xuống Airbnb/Booking
Xác minh 03/09/2026 bằng help doc + kiểm trong app.
Hai tính năng PriceLabs có
| Tính năng | Làm gì | Kênh hỗ trợ |
|---|---|---|
| Weekly and Monthly discount | Giảm giá cho lưu trú theo tuần/tháng. "Discounts apply on top of daily rates" — cảnh báo "Average daily rates can be lower than your set minimum price" | VRBO · Bookerville · BookingSync · Guesty · Hostify · MyVR · Tokeet… — KHÔNG có Airbnb, KHÔNG có Booking.com |
| Length of Stay (LOS) Pricing | "adjusts the nightly rate based on how long a guest is planning to stay", áp sau mọi customization khác | 20+ PMS (Avantio · Lodgify · Rentals United · Ownerrez…) — KHÔNG có Airbnb, KHÔNG có Booking.com |
⇒ Với danh mục này (Airbnb direct + Booking direct), cả hai tính năng đều vô hiệu.
Vậy chiết khấu dài ngày đang nằm ở đâu
| Kênh | Cơ chế thật | Ai sở hữu |
|---|---|---|
| Airbnb | weeklyPriceFactor 0,95 · monthlyPriceFactor 0,9 trong listing editor |
Airbnb — PriceLabs không chạm tới |
| Booking.com | Rate plan riêng: Standard Rate · Weekly Rate · Monthly rate — không phải phần trăm |
Booking. Riêng Monthly rate của 502 gắn nhãn Not XML ⇒ PriceLabs không đẩy vào đó, giá tĩnh |
| VRBO | PriceLabs đẩy được | PriceLabs — nhưng 3 listing VRBO đều ở San Jose, ngoài phạm vi |
Sửa lại lo ngại nêu trước đó: không có nguy cơ PriceLabs và Airbnb cùng ghi weekly/monthly discount — PriceLabs không thể ghi. Airbnb sở hữu hoàn toàn hai giá trị đó.
Customization của tài khoản này: RỖNG (hết đúng từ 20/09/2026 — xem mục 2i)
Mục Applied Customizations của listing 305 không có mục nào. Thuật toán đang chạy hoàn toàn theo mặc định — không seasonal profile, không orphan-gap, không last-minute, không LOS. (Mới kiểm 305; 6 căn còn lại chưa kiểm.) → L-34
2g. Total Revenue của Booking KHÁC hẳn của Airbnb — đo 03/09/2026
Cùng tên cột, hai nghĩa ngược chiều. Kiểm bằng Booking Insights của dòng 13311503___1331150301:
Airbnb Total Revenue = (Rental + cleaning) × 0,97 ← TRỪ phí host 3% = tiền host NHẬN
Booking Total Revenue = (Rental + cleaning) × 1,08 ← CỘNG 8% = tiền khách TRẢ
| Booking 305 | Đêm | Rental | (Rental + 300.000) × 1,08 | Total ghi |
|---|---|---|---|---|
| 14–24/10 | 10 | 14.568.344 | 16.057.812 | 16.057.812 ✓ |
| 19–22/09 | 3 | 4.144.444 | 4.800.000 | 4.800.000 ✓ |
| 23/11–03/12 | 10 | 17.055.843 | 18.744.310 | 18.744.310 ✓ |
Hệ số suy ngược = 1,08000 ở cả ba. ADR = Rental ÷ số đêm vẫn đúng như Airbnb.
⚠️ Chưa xác minh 8% đó là gì. Giả thuyết mạnh nhất là VAT 8% (mức áp cho dịch vụ lưu trú tại Việt Nam theo chính sách giảm thuế). Không tìm thấy khai báo thuế trên trang property_policies — cần mở đúng trang thuế của extranet để chốt. → L-36
⛔ Bản 03/09 của mục này SAI — sửa 15/09/2026
Bản cũ suy ra "khách Booking bị cộng thêm 8 %" và dựng bảng "khách thực trả = Base Booking × 1,08". Sai. Đối chiếu trang công khai 15/09 (4/4 căn): khách Booking trả đúng Σ giá đêm PriceLabs đẩy + phí dọn, không cộng gì. 8 % là VAT khai included trên vat_tax_charges.html — nằm bên trong giá; Booking báo về PriceLabs giá phòng đã bóc VAT, nên Total = (Rental + dọn) × 1,08 chỉ là cộng ngược lại. Hệ quả thật duy nhất:
ADR dòng Booking trong PriceLabs = giá khách trả ÷ 1,08 (đã bóc VAT) ← thấp hơn giá thật ~7–8 %
ADR dòng Airbnb trong PriceLabs = giá khách trả ← số gộp
⇒ So ADR/Rental hai kênh trong PriceLabs phải nhân dòng Booking với 1,08 trước. Hoa hồng Booking đã đọc: 15,00 % trên tổng khách trả gồm VAT + dọn (L-37). Bảng "khách thực trả" đúng, đo trên trang khách 90 đêm × 6 căn, nằm ở audits/2026-09-15-price-parity-airbnb-vs-booking.md — kết quả: khách Booking đang trả ÍT hơn Airbnb trung vị +2,6 % (25 AT 11) tới +17,1 % (41 LHC), ngược với bảng cũ ở 4/5 dòng.
2g-bis. Đọc giá khách thấy từ PriceLabs — dùng endpoint nào (15/09/2026)
| Endpoint | Dùng để | Không dùng để |
|---|---|---|
api/process → graph_data.pricing_array[].price |
Giá khách thấy từng ngày — đã đối chiếu 9/9 trang công khai Airbnb + Booking khớp đến từng đồng | mở/đóng: num_bookings chỉ đếm đơn, không phản ánh ngày khoá tay |
api/fetch_last_request_text → Availability[] |
Mở/đóng thật từng ngày (0 = đóng) | giá: mảng Rates là gói đẩy cũ — sau khi nâng Base 15 % ngày 14/09, gói Airbnb vẫn ghi giá cũ (25 AT 11: 3.000.000 trong khi Airbnb đang bán 3.450.000); user_price trong graph_data cũng là số cũ này |
2g-bis. Minimum stay — đọc toàn bộ 25/09/2026
🔄 Cập nhật 27/09/2026:
25anthuong11Booking không còn chạy PriceLabs Recommended — nay gắn profileHuy SJ(cố định 2 đêm, đẩy đủ 541 đêm) và có override min stay 2 đêm 26/09–01/10. 13/14 dòng sync còn lại vẫn tắt min stay.36 Dương Tử Giangđã tắt sync cả hai dòng. Nguồn: mục 2j.
Lệnh đọc lại (CHỈ ĐỌC): node scripts/ota-pricelabs-minstay.mjs [--nights] [--json <file>].
Snapshot: audits/2026-09-25-pricelabs-minstay.json.
Đọc ở đâu cho đúng — ba bẫy
- Đọc
response.structured_json.min_stay.data, KHÔNG đọcresponse.json.update_minstay. Listing chưa từng lưu customization nào (15nuocman5,alacarte502,25anthuong11Airbnb…) trảresponse.jsonrút gọn, không có một trường min stay nào ⇒update_minstayraundefined, đọc ẩu thành "tắt" thì đúng kết quả nhưng sai lý do, và sẽ sai khi có căn bật. html_hierarchies_applied.min_stay === "None"= không có min stay ở bất kỳ tầng nào (listing · sub-group · group · account). Dùng làm cổng kiểm chéo.usage_instance_countcủa profile KHÔNG đáng tin — cả 3 profile đều trả0trong khi36 Dương Tử Giangđang chạy profileHuy SJ. Muốn biết ai dùng profile nào thì đọcstructured_json.min_stay.data.profile_idcủa từng listing.
⚠️ Modal trong giao diện hiển thị lệch bản lưu. Bấm Set Your Minimum Stay trên alacarte305 Airbnb thì modal mở ra với công tắc Apply Minimum Stay Restrictions BẬT và nhãn xanh "Custom minimum stay settings applied", trong khi bản đã lưu là update_minstay: 0, minstay_customizations: null. Modal đang mồi sẵn trạng thái setup, chưa phải trạng thái thật. Đọc API, đừng đọc modal.
Bảng trạng thái — 7 căn trong phạm vi
| Căn | Airbnb | Booking |
|---|---|---|
alacarte305 |
tắt | tắt (cả 2 hạng phòng) |
alacarte404 |
tắt | tắt |
alacarte502 |
tắt | tắt |
181tohienthanh |
tắt — còn giá trị đã lưu 2 đêm (default_minstay_type: dfd) |
tắt — còn giá trị đã lưu 2 đêm |
41lehycat |
tắt | tắt |
15nuocman5 |
tắt | tắt |
25anthuong11 |
tắt | ✅ BẬT — PriceLabs Recommended (Short-Term Rental), sàn min_weekday 1 / min_weekend 1, không gắn profile |
⇒ 14/15 dòng tắt. Duy nhất 25anthuong11 Booking bật → L-122, L-123.
Ngoài phạm vi: 36 Dương Tử Giang (Airbnb + Booking) chạy profile Huy SJ = cố định 2 đêm. 34/37 listing toàn tài khoản đang tắt.
Ba profile có sẵn ở cấp tài khoản — không căn nào trong 7 căn dùng
| id | Tên | Nội dung | Ai đang dùng |
|---|---|---|---|
| 121894 | 3 nights minimum |
Mặc định 3 đêm (weekday + weekend) · Last-minute 2 đêm trong 7 ngày | 0 listing |
| 18287 | Huy SJ |
Mặc định cố định 2 đêm | 2 listing đang chạy — 36 Dương Tử Giang Airbnb 1614694700651096321 + Booking 15995581___1599558101. Gắn thêm ở 931494923533247426 (guesthouse San Jose) nhưng công tắc TẮT nên PriceLabs không tính |
| 121795 | May 2026 |
Mặc định 3 đêm · Last-minute 2 đêm trong 14 ngày | 0 listing |
25anthuong11 Booking KHÔNG dùng profile nào — profile_id: null, nó chạy preset PriceLabs Recommended (Short-Term Rental) đặt thẳng trên listing. Preset không xuất hiện trong danh sách Min Stay Profiles.
Trang Dynamic Pricing → Customizations → Min Stay Profiles hiện nhãn "Used across N instances" — N chỉ đếm listing có công tắc BẬT, nên khớp với structured_json.min_stay.data.enabled === true, không khớp với has_profile.
25anthuong11 Booking đang đẩy min stay bao nhiêu — đọc từng đêm
pricing_array[].min_stay của 16927056___1692705601, 541 đêm 25/09/2026 → 18/03/2028:
| Min stay | Khoảng | Số đêm |
|---|---|---|
| 1 đêm | 25/09 → 31/10/2026 | 37 |
| 2 đêm | 01/11 → 22/12/2026 | 52 |
| 3 đêm | 23/12 → 26/12/2026 | 4 |
| 2 đêm | 27/12 → 31/12/2026 | 5 |
| 3 đêm | 01/01 → 04/02/2027 | 35 |
| 5 đêm | 05/02 → 11/02/2027 (Tết) | 7 |
| 3 đêm | 12/02 → 30/04/2027 | 78 |
Tổng: 37 đêm ở mức 1 · 226 đêm ở mức 2 · 266 đêm ở mức 3 · 5 đêm mức 4 · 7 đêm mức 5.
Sàn min_weekday 1 / min_weekend 1 là lý do 37 đêm gần nhất tụt về 1 đêm — thuật toán được phép hạ tới sàn để lấp chỗ trống.
max_stay chưa đặt ở đâu cả
pricing_array[].max_stay = -1 trên mọi đêm, mọi listing. Trần lưu trú hiện do chính kênh giữ (Airbnb 365 đêm cho villa, 180 đêm cho A La Carte).
Cả hai kênh đều hỗ trợ — không phải giới hạn kỹ thuật
graph_data.feature_access.show_min_stay = true cho cả airbnb lẫn bcom. Khác hẳn weekly/monthly discount và LOS pricing (mục 2f) — hai cái đó PriceLabs không đẩy được xuống hai kênh này. Min stay thì đẩy được, chỉ là chưa bật.
2h. Tool "Airbnb Fee Change: Update Prices" (banner Update My Prices Now) — đọc 14/09/2026
Drawer phân trang, ghi chỉ ở nút Save Prices (POST /api/airbnb_fee_migration/apply). Preview đọc được không cần mở: GET /api/airbnb_fee_migration?page_number=1 → 7 listing, chỉ Base + Min, hai hệ số without_vat 15 / with_vat 16.6. Trang Before you begin của chính PriceLabs dặn chạy tool Airbnb trước (nâng cleaning fee + chuyển fee), rồi mới Save + Sync ở đây. Cơ chế đầy đủ, bảng số từng căn và checklist bấm: airbnb-hof-migration-2026-09.md. ⛔ Lựa chọn "I'm Already on Host-Only Fee and Adjusted My Prices" xoá tool vĩnh viễn.
2i. Pricing Offset — lớp cuối cùng, KHÔNG đụng Base Price (đo 20/09/2026)
🔄 Cập nhật 27/09/2026 — ba ý "đã đo" bên dưới đã cũ: offset +4 % đã vào gói đẩy 26/09 (tỉ lệ
Ratesbcom/airbnb trung vị 1,0400 ở cả 7 cặp) và lịch PriceLabs giờ hiện offset: giá từng đêm của dòng Booking = dòng Airbnb × 1,04,fetch_reasons_jsonghi "Pricing Offset 4%" ở mục final_adjustments mọi đêm. Cột Base vẫn không đổi theo offset (ý 1 còn đúng). Nguồn: mục 2j.
Nơi đặt: Dynamic Pricing → Customizations (app.pricelabs.co/customization) → tab Customization → Accounts (hoặc Groups / Listings) → nút Edit của kênh → mục Price Offset.
Trạng thái tài khoản này (đọc 20/09/2026 18:40):
| Tài khoản | Số listing | Customization |
|---|---|---|
| Airbnb | 25 | No customizations set up |
| Booking.com | 9 | Price Offset · Percent · 4 · công tắc Apply Price Offset BẬT |
| Vrbo | 3 | No customizations set up |
Trường nội bộ (tên cũ từ thời tích hợp Beds24, đọc trong bundle + fetch_customizations):
pricing_offset = { beds24_increment_on : công tắc (0/1)
beds24_increment_type : "percent" | "fixed"
beds24_increment : giá trị }
Cơ chế — theo tài liệu chính thức
help.pricelabs.co/…/pricing-offsets-for-mapped-listings:
- Offset áp lên Recommended Price — giá đề xuất từng đêm, "after all other customizations have been applied", kể cả Fixed Price Overrides và Orphan Discounts.
- Áp SAU cả Min lẫn Max: "if your offset is a premium, it may make your price go higher your maximum price" ⇒ offset xuyên thủng trần Max.
- "The final adjusted price will be pushed to the PMS" — tức offset nằm ở bước đẩy, không nằm ở dữ liệu gốc.
- Listing đã map cha–con: phải đặt ở cấp account hoặc group. "If set at the listing level, it gets removed whenever a change is made to the parent listing."
- Trần: giảm tối đa 40, tăng tối đa 500 (cả fixed lẫn percent).
Base ──(mùa · DOW · lấp đầy · comp set · DFD)──▶ giá ngày ──kẹp [Min,Max]──▶ Recommended Price
│
×(1+offset) ▼
giá ĐẨY xuống kênh
⚠️ Ba điều dễ hiểu sai — đã đo, không phải suy luận
- Cột
Base Pricetrên Pricing Dashboard KHÔNG BAO GIỜ đổi theo offset. Base là đầu vào người dùng lưu; offset tác động ở đầu ra. Đã map cha–con nên 7/7 cặp có Min/Base/Max giống hệt nhau giữa dòng Airbnb và dòng Booking — và sẽ mãi như vậy dù offset bao nhiêu. Đây là biểu hiện ĐÚNG, không phải lỗi. - Lịch giá trong PriceLabs cũng không hiện offset.
graph_data.pricing_array[].pricecủa 7 dòngbcomtrùng khít dòngairbnbcha suốt 60 ngày (tỉ lệ 1,0000 ở 7/7 căn). - Offset chỉ thành hiện thực khi có lần đẩy mới. Đo 20/09/2026: gói đẩy cuối của
bcom 305(CurrentListingTime 2026-09-20 16:00:19) so từng phần tử với góiairbnb 305(16:21:46) — 198 đêm giá dương, trung vị tỉ lệ 1,00000, biên 0,99997–1,00004, 0 đêm vượt +3 %. Offset đã lưu và đã bật, nhưng chưa vào gói đẩy nào.
Cách kiểm sau khi Sync (chỉ đọc)
Đọc api/fetch_last_request_text?listingId=<id>&pmsName=<bcom|airbnb> (bắt qua CDP khi mở trang listing — gọi thẳng bằng listing_id/pms trả ERR-FLRT-INVALID-PARAMS), lấy data.listing.Rates của cả hai dòng cùng một căn rồi chia từng phần tử. Số âm = ngày đóng (giá trị là −Min). Offset ăn khi trung vị ≈ 1,04. Đối chứng cuối cùng vẫn là giá trên trang khách Booking.
Hệ quả cho chiến lược gộp phí dọn
Offset cấp account = MỘT mức cho cả 9 listing bcom (gồm cả căn ngoài phạm vi: 36 Dương Tử Giang, 305 hạng 2). Muốn mỗi căn một số tiền khác nhau — như bản chốt 20/09 (phí dọn ÷ 4) — phải dựng Group riêng cho từng căn rồi đặt offset ở cấp group; đặt ở cấp listing sẽ bị xoá mỗi lần dòng cha đổi. Xem vault/08-agents/DECISIONS.md mục 20/09.
2j. Ảnh chụp cấu hình đang áp — 27/09/2026 (chỉ đọc)
Báo cáo đầy đủ: https://claude.ai/artifact/LGDaxgGujTga1hLjSqYize (vault/19-Harthliving-OTA/status/reports/pricelabs-current-setup.html) · dữ liệu gốc + ảnh: audits/2026-09-27-pricelabs-current-setup/ · đọc lại bằng scripts/pricelabs-setup-snapshot/.
- 14/37 listing bật sync = 7 căn × (Airbnb cha + Booking con). 23 dòng tắt sync (San Jose, 86 PCL, 36 DTG, hạng 2 của 305…).
- Min/Base/Max cha = con ở 6/7 căn; 25 AT 11 lệch: Min Airbnb 2.000.000, Booking 2.200.000. Max ≈ 2,5 × Base ở cả 14 dòng. Base Airbnb đổi 14/09, Base Booking đổi 15/09.
- Tuỳ chỉnh riêng cấp listing: 181 THT last-minute −5 % phẳng 7 ngày · 41 LHC −10 % giảm dần 4 ngày · 305/404 orphan −20 % cho khe 2–3 đêm (khe 1 đêm không được giảm) · 305/404 chọn last-minute theo thị trường ở cấp listing · 25 AT 11 override 26/09–01/10 (Airbnb −33 %, Booking −24 % + min stay 2) · 25 AT 11 Booking profile min stay
Huy SJ. Còn lại là mặc định (market-driven last-minute/far-out/OBA, booking recency, Safety Min 110 % ADR năm trước cho đêm > 180 ngày). - Cấp account: Airbnb không có gì · Booking.com Pricing Offset +4 % · không group, không override cấp account.
- Sync: Default Overnight Sync (GMT), không giờ riêng, không additional sync, Real-time Sync tắt (trang ghi $1/đơn vị/tháng). Lần đẩy cuối 26/09 tự động (
UserSync N). Gói đẩy: Airbnb 731 đêm, Booking 760 đêm. - Control Panel bật: Group Wizard, Data Widget, Portfolio OBA, Demand Factor, Seasonality, Smoothing, Day of Week, Pricing Offset. Tắt: Sub-groups, POBA weekday/weekend, Custom Seasonal Profile, Weekend Adjustments, Pricing Profiles, Rounding, No Price Updates for Unavailable Nights, Hotel compsets, Adjacent, Custom Safety Min, Min last-minute, Min orphan.
- Action Center 5 mục: last-minute "quá nhẹ" ở 181 THT và 41 LHC (cả hai kênh) · 502 Airbnb gợi ý hạ Min 1.360.000 → 1.292.000 (hết hạn 28/09).
- Safety Min làm sàn thật ở 0–250 đêm tuỳ dòng (404 Airbnb 250, 181 THT Airbnb 197); dòng Booking chưa có lịch sử năm trước thì không áp.
3. Bố cục giao diện
Menu chính: Dynamic Pricing · Portfolio Analytics · Market Research · Listing Optimizer · Action Center.
Bảng Pricing Dashboard — cột đo được 03/09/2026:
Listings · Calendar · Tags · Action Center · Sync Price · Property Type · Group · Min Price · Base Price · Max Price · BR · City · Total Occ (30P) · Rec/Base Price Ratio · Total Rev (30P) · ADR (30P) · MPI (30N)
- Min / Base / Max Price là ba chốt chặn của thuật toán — Base là giá gốc, thuật toán chạy trong khoảng Min–Max.
(30P)= 30 ngày đã qua (past),(30N)= 30 ngày tới (next).MPI= Market Penetration Index — so mình với thị trường.- Bảng nạp bất đồng bộ; đọc ngay sau khi mở sẽ ra một loạt
Loading.... Phải đợi nạp xong mới đọc số.
4. Cảnh báo đang chạy
Action Center có 99+ mục và một banner riêng 7.
Banner đỏ: ACTION REQUIRED: Airbnb fee change on Sep 15th 2026 — xem airbnb.md mục 1 và issues.md L-01.
5. Chưa biết — cần học thêm
- PriceLabs có phải channel manager đang đẩy XML xuống Booking không, hay còn bên thứ ba khác.
- 36 listing gồm những gì (cần mở
Add/Re-import Listings, chỉ đọc). - Đang chạy chiến lược giá nào, có customization theo mùa / theo ngày trong tuần không.
- 99+ mục trong Action Center là loại gì, mục nào thực sự cần xử lý.