Гео-арбитраж авиабилетов: эксперимент на 186 странах и 2000+ ценах
Один и тот же рейс. Одна и та же дата. Один и тот же класс. Париж → София: $387, если бронировать «из Австралии», и $646 — из страны по умолчанию. Разница — 40%. Билет не поменялся. Поменялась только страна, которую видит система бронирования.
Я наткнулся на это случайно (Антон, привет!), проверил на 186 странах и в итоге собрал Telegram-бота, который делает такую проверку за 60 секунд. Ниже — как это устроено, реальные цифры из моей базы и как повторить руками, вообще без бота.
Откуда берётся разница
Когда вы открываете Google Flights (или любой агрегатор), под ценой авиакомпании висит список онлайн-агентств (OTA) — eDreams, Kiwi, lastminute, Trip.com и десятки других. У каждого агентства свои цены для каждого рынка: разные комиссии, разные промо, разная конкуренция. В Германии агентство демпингует, в Штатах — нет. А некоторые агентства вообще показываются только в «своих» странах.
Цена самой авиакомпании при этом почти везде одинакова. Вся разница живёт на уровне агентств. И этот уровень никто не перебирает — все смотрят цены из своей страны.
Эксперимент: 186 стран
Гипотезу я проверял тупо в лоб: взял тестовый рейс (Париж → София) и прогнал booking-страницу Google Flights по всем 186 странам через параметр gl. Результат:
- Дефолт (то, что видит обычный пользователь): $110 у агентства Jettzy - Минимум: $90 у lastminute.com — если «смотреть из Швеции» - Экономия: 18%, не сделав ничего, кроме перебора стран
Дальше — 10 контрольных маршрутов по всему миру (США, Латам, Африка, Индия, Азия, Европа, Залив) × 186 стран, с полным списком агентств в каждой. Выводы:
- Примерно у половины стран список агентств «дефолтный» — сигнал есть в ~99 рынках - Для покрытия глобального минимума хватает 15 стран: ЮАР, Норвегия, Австралия, Германия, Корея, США и ещё девять - На дешёвых трансатлантических рейсах перебор почти бесполезен: агентства не бьют цену авиакомпании. Максимум профита — среднемагистральная Европа, Азия, Залив
Реальные цифры (из базы бота, ~2 200 ценовых точек)
Средний разброс цен между странами на один и тот же рейс — 9,6% (~$51). Но хвост распределения жирный:
Какие страны выигрывают чаще всего (по моей базе): ЮАР, Норвегия, Австралия, Германия. Почему именно они — честно, до конца не знаю: гипотеза в том, что это рынки с высокой конкуренцией OTA и агрессивным демпингом местных игроков.
Как повторить руками (без бота)
1. Найдите рейс в Google Flights, дойдите до страницы бронирования (список агентств)
2. В URL замените/добавьте параметр &gl=ZA (ЮАР), &gl=NO (Норвегия), &gl=DE, &gl=AU и &curr=USD
3. Сравните список агентств и цены. VPN не нужен — достаточно параметра
Минус: руками это 10 минут на маршрут, и легко пропустить страну-победителя.
Что я собрал
Telegram-бот: кидаешь ссылку на рейс из Google Flights (или пишешь маршрут текстом — «Москва Дубай 15 сентября», но это не точно, лучше прямую ссылку), он за ~60 секунд перебирает 20 стран-кандидатов, показывает полный рейтинг и даёт прямую ссылку на бронь у победителя.
Технически:
- Playwright + обход анти-бот детекта (AutomationControlled, подмена navigator.webdriver) — иначе Google отдаёт обрезанный список из одного агентства - Страница грузится только до первого XHR GetBookingResults, дальше запрос повторяется напрямую через httpx с тем же токеном — трафик ×2–7 меньше, список стабильно полный - Никаких платных API. Всё крутится на домашнем Маке под launchd: бот, монитор каналов и ежедневный бэкап в приватный git - Отдельный забавный слой: детектор «деградации» выдачи — отличить троттлинг Google от честной монополии авиакомпании (когда Etihad в 17 странах стоит одинаково — это не бан, это Etihad)
Где это НЕ работает (честный дисклеймер)
- Рейсы из России: Google Flights после 2022 почти не покрывает РФ-рынок, агрегаторы типа Авиасейлс там системно дешевле - Ультра-лоукост микрофары ($40 туда-обратно): разброс есть, но в абсолюте копейки - Монополии: если на маршруте одна авиакомпания и нет OTA-конкуренции — перебирать нечего - Средний случай — это ~10%, а не 40%. Сорок — это хвост распределения, за которым и охотимся
Оплата в другой стране — это законно/безопасно?
Бронь идёт у обычного международного OTA, просто через его «витрину» для другого рынка. Билет тот же, PNR тот же, валюта — USD. Единственный практический нюанс: у некоторых агентств может отличаться поддержка/возвраты по рынкам. Дорогие и сложные билеты я бы по-прежнему брал у авиакомпании напрямую — а вот на средний сегмент $100–700 арбитраж работает отлично.
Бот: @geofare_bot (бесплатный). Находки, которые он ловит автоматически из мониторинга каналов с дешёвыми билетами, выкладываю в @geofaredeals — там каждый деш перепроверен через перебор стран, формат «где-то продают за $48 → та же бронь через Швецию $40».
P.S. Про нагрузку — честно
Бот крутится на локальной машине, а не в облаке. Каждый поиск — это реальный перебор стран браузером, поэтому запросы встают в очередь. Если после этой статьи придёт сто человек разом — бот, скорее всего, «отвиснет» не сразу. Не суетитесь: запрос не теряется, когда машина освободится — бот отпишет, и можно будет спокойно потестить.
Почему не прокси/облако: резидентский прокси я тестировал (DataImpulse) — он оказался сильно хуже домашнего соединения: треть запросов флапала по SSL, страна отвечала за 46 секунд вместо 3, а иногда возвращала пустоту. Пока дешевле и стабильнее без него. Вырастет нагрузка — перееду на нормальную инфраструктуру.
geofare_bot - присылайте в комментариях свои находки!