15% off your first purchase with code WELCOME15, up to 25 GB.

See pricing

Travel fares · Fare alerts

Fare alert data: building reliable price-drop alerts

A fare alert is only as good as the price it sends. Stale, wrong-market or unbookable fares use up subscribers' trust quickly. Poll watched routes cheaply, then confirm every candidate drop with a live search from the right market before anything goes out.

Pay per GB · No subscription · Prices in EUR, excl. VAT

Illustration. The URLs and values are fictional; the connection string is the real grammar.
€2.00
per GB on ARC Fast, excl. VAT
−44%
at 1 TB (€1.12 / GB)
185+
countries, city targeting
Never
expires — no subscription

Written for

  • Fare-alert and price-tracker apps
  • Flight-deal newsletters
  • Travel media deal desks
  • Product teams adding price watches

The short answer

  • Use two tiers: broad, cheap polling to find candidate drops, and a narrow live confirmation from the subscriber's market before sending.
  • Alert on the final price. In the EU, airlines must show the final price at all times, and unavoidable fees from the first price shown, so a fare without them is not the price your subscriber will see.
  • Judge a drop against the route's own history (median, low percentile), not a fixed euro amount.
  • Deduplicate watches across subscribers. Ten thousand people watching the same route and date are one poll, not ten thousand.

The problem

What goes wrong without the right IPs

Alerts for prices that no longer exist

Between detection and the subscriber's click, the cheapest seats can sell. Every minute of pipeline latency and every unconfirmed alert raises the 'price not found' rate, which is the first thing users complain about.

Alerts from the wrong market

A subscriber in Manchester who receives a fare observed from a German exit sees a different price, or currency, on click. Watches need a market, and confirmation has to run from it.

Polling everything all the time

Polling every watch at a fixed high frequency spends most of the budget on routes that have not moved. Adaptive cadence, frequent close to departure or after recent changes and slow otherwise, cuts cost without missing drops.

False drops from parsing and currency

A missing tax line, a currency switch or a one-passenger price shown for a two-passenger watch all look like drops. Validate the components and the party size before a candidate reaches confirmation.

Thresholds that ignore the route

Forty euros off is a bargain on a short hop and noise on a long-haul business fare. Drops measured against each route's own distribution produce fewer, better alerts.

What to collect

What you can collect

Watch definition
Route, date or date range, cabin, party size and market: the key you poll and confirm on.
Polled price and time
The cheap signal that a drop may have happened.
Confirmed final price
The live, bookable price from the subscriber's market. The only price you send.
Route history statistics
Median and low percentiles per route and lead time, to judge whether a drop matters.
Drop size vs baseline
Relative to the route's history, so thresholds travel across routes.
Availability at confirmation
Seats-left hints or bundle availability where shown.
Deep link
Where the subscriber lands, ideally the same market edition you confirmed on.
Detection-to-send latency
Your most important operational metric for alert quality.

How it runs

How a collection run works

  1. 01

    Normalise and deduplicate watches

    Collapse subscriber watches into unique keys (route, dates, cabin, party size and market). Polling cost scales with unique keys, not with subscribers.

  2. 02

    Poll adaptively

    Set cadence per key from days to departure and recent volatility; how often flight prices change gives sensible starting points. Use calendar or results views here: cheap and good enough to spot a candidate.

  3. 03

    Confirm every candidate live, from the right market

    Re-price the candidate on the full search flow with a fresh sticky session in the watch's market. Only a confirmed final price at or near the polled price becomes an alert.

    Confirm before you send
    import secretsimport httpxBASE_USER = "USERNAME_pool-arcfast_country-de"def live_client(market: str) -> httpx.Client:    user = BASE_USER.replace("_country-de", f"_country-{market}")    handle = secrets.token_hex(4)    proxy = f"http://{user}_session-{handle}_sesstime-5:PASSWORD@proxy.arcproxies.io:8000"    return httpx.Client(proxy=proxy, timeout=30)def confirmed_drop(watch, polled_price: float, baseline: float):    if polled_price > baseline * (1 - watch.min_drop):        return None                              # not a drop worth confirming    with live_client(watch.market) as client:        offer = reprice(client, watch)           # your search + fare-detail flow    if offer and offer.final_price <= polled_price * 1.02:        return offer                             # send this, not the polled price    return None
  4. 04

    Send fast, with the price's age

    Queue confirmed alerts immediately and include when the price was confirmed. A clear 'confirmed 4 minutes ago' sets honest expectations if the fare moves before the subscriber clicks.

  5. 05

    Feed outcomes back

    Log clicks that landed on a higher price. That 'miss rate' per route and source tells you where to poll more often, confirm more strictly, or stop alerting altogether.

Setup

Recommended setup

Polling is high-volume and light; confirmation is low-volume and has to be right. Give each its own pool.

PlanRoleSessionTargetingPrice
ARC Basic
Rotating ISP
Watch-list polling
High-frequency, low-weight requests to calendar and results views. The cheapest pool per GB keeps the polling bill flat as the watch list grows. Move a source to ARC Fast if it does not serve the ISP pool reliably.
RotatingCountry
€0.75 / GB
€0.59 at 1 TB (−21%)
ARC Fast
Rotating residential
Live confirmation before sending
Residential exits in the subscriber's market, held for one search-to-fare-detail flow. Only a small share of polls ever reach this stage.
Sticky, about 5 minutes per confirmationCountry, the watch's market
€2.00 / GB
€1.12 at 1 TB (−44%)

Prices are list prices in EUR, excl. VAT. Volume discounts apply automatically at checkout — full ladder on the pricing page.

Connect

One connection string per market

The country, city and sticky session are tokens in the username. Change the token, change the market; keep the session handle, keep the IP.

sticky · Germany · 10 min
http://USERNAME_pool-arcfast_country-de_session-k3f9a1x2_sesstime-10:PASSWORD@proxy.arcproxies.io:8000

Swap _country-de for any market you quote. The full grammar is on the residential proxies page.

Illustration

What five thousand watched routes costs

An illustration with round numbers — your pages, payloads and retry rate will differ. The arithmetic is the real price ladder.

Assumptions

Unique watch keys
5,000
Polls per key
4 a day, 200 KB each
Candidates sent to confirmation
5% of polls
Weight per confirmation flow
500 KB
Bandwidth per month
≈ 135 GB

On ARC Basic

€91.80per month, excl. VAT

135 GB bought in one purchase at €0.68 / GB (−9% volume rung, applied automatically).

The same 135 GB on ARC Fast: €183.60 at €1.36 / GB. Route only the jobs that need it through the pricier pool.

Roughly 120 GB of polling and 15 GB of confirmation. In practice the polling share runs on ARC Basic and the confirmation share on ARC Fast; the comparison shows the whole volume on each.

Bandwidth never expires, so a bigger single purchase is only ever cheaper per GB. See the ladder.

In depth

Fare alerts, in depth

The architecture of a fare-alert pipeline

StageJobPoolWeight
Watch storeDeduplicated keys: route, dates, cabin, party size, marketNoneNone
PollerAdaptive-cadence checks on calendar and results viewsARC Basic, rotatingLight, around 100–200 KB
Candidate filterValidate components and party size; compare with route historyNoneNone
ConfirmerFull live search from the watch's marketARC Fast, stickyHeavier, several hundred KB
SenderAlert with confirmed final price, its age and a market-matched linkNoneNone

Most of the cost sits in the poller and most of the quality in the confirmer. Teams that skip confirmation save a few percent of bandwidth and lose their subscribers' trust. The collection side is the same as for travel fare aggregation in general. How to build a flight price tracker walks through a minimal version end to end.

Setting thresholds that mean something

Keep a rolling distribution per route and lead-time band, for example the median and 10th percentile of confirmed prices for the same route 30–45 days out. Alert when a confirmed price falls below the low percentile, or by a set fraction below the median. Both travel across short-haul and long-haul without tuning per route.

Give the distribution enough history before you trust it, and exclude observations that failed validation. A broken parser that produced a week of artificially low prices will otherwise teach the threshold that broken prices are normal.

Alert copy that stays accurate

  • Send the final price. EU rules require the final price, including unavoidable taxes and fees, to be shown at all times, and the Court of Justice has held that unavoidable items belong in the first price shown. An alert quoting less than that will not match the booking page.
  • Name the market and currency. 'From London, in GBP' prevents most 'the price is wrong' replies.
  • Show the age. 'Confirmed 6 minutes ago' is honest and reduces complaints when a fare sells out.
  • Mention booking protections carefully. For flights covered by the US rule, carriers must allow a reservation to be held at the quoted fare without payment, or cancelled without penalty, for at least 24 hours if it is made one week or more before departure (14 CFR 259.5). Do not generalise it to flights it does not cover.

Freshness: how stale is too stale

Freshness requirements depend on how fast the underlying price moves. Close to departure, and on low-cost routes with few seats at each price step, a confirmation older than a few minutes is already a risk. Months out, an hour is usually fine.

Measure rather than guess. Log the share of alerts whose landing price was higher than the confirmed price, by route type and confirmation age. That curve tells you your real freshness budget. See also do airlines raise prices when you search?, the question subscribers will ask you when it goes wrong.

Keeping the polling bill flat

  • Deduplicate. Unique watch keys, not subscribers, drive cost.
  • Poll the lightest view. A calendar or JSON results endpoint is a fraction of a rendered page; see how to reduce proxy bandwidth.
  • Adapt cadence. Slow down keys that have not moved in a week; speed up keys near departure or after a change.
  • Be a light client. Airlines carry the cost of every shopping request; IATA's 2019 study found look-to-book ratios commonly above 10,000 to 1 for OTAs and metasearch. Fewer, better-aimed polls are cheaper for you and for them.

Works with anything that takes a proxy URL

  • Python requests / httpx
  • Node.js
  • Playwright
  • changedetection.io
  • Docker

FAQ

Questions

Something not covered? Write to contact@arcproxies.io.

How do fare alert apps check prices?

Most poll a list of watched routes on a schedule, using light views such as fare calendars, and compare the result with each route's price history. The better ones then confirm any candidate drop with a live search from the subscriber's market before sending, so the alert quotes a price that can actually be booked.

How often should a fare alert check prices?

Adaptively. Check frequently close to departure and on volatile routes, and slowly for dates months away or routes that have not moved recently. A fixed high frequency for everything spends most of the budget on prices that did not change.

Why do fare alerts show prices that are gone when I click?

Because the cheapest seats sold between the check and the click, or because the alert was not confirmed live in the right market. Confirming every candidate on a full search from the subscriber's market, and sending immediately with the price's age, reduces the problem a great deal.

Should a fare alert include taxes and fees?

Yes, it should quote the final price. In the EU, airlines must show the final price including unavoidable taxes and fees at all times, so an alert quoting a lower base fare will not match the booking page and will look wrong to the subscriber.

How much does running fare alerts cost in bandwidth?

In our illustration, 5,000 unique watched routes polled four times a day, with 5% of polls confirmed live, use about 135 GB a month. Cost scales with unique routes and cadence, not with subscriber numbers. Bandwidth is billed per GB and never expires.

Do I need residential proxies for fare alerts?

For confirmation, yes: you want consumer-like exits in each subscriber's market. Polling can often run on the cheaper rotating ISP pool, because it uses light views and only has to spot candidates. Split the two and most of the volume lands on the cheaper pool.

Sources & review

Last reviewed by the ARC Proxies team. Prices are read from the live catalog at build time.

  1. [1]EUR-Lex (Official Journal of the European Union): Regulation (EC) No 1008/2008 on common rules for the operation of air services in the Community
  2. [2]Court of Justice of the European Union: Press release No 49/20: Judgment in Case C-28/19, Ryanair and Others v AGCM
  3. [3]Legal Information Institute, Cornell Law School: 14 CFR § 259.5 – Customer Service Plan
  4. [4]IATA: Addressing NDC scalability challenges in the leisure market (March 2019)

Travel fares

More on travel fares

OverviewProxies for travel fare aggregationAirline, hotel and rail fares change with the point of sale. Query each market from an IP inside it so the fare you store is the fare a traveller is quoted.Deep diveAirline faresCollect airline fares per point of sale: the same flight priced from each market, taxes itemised, one sticky session per search, billed per GB.Deep diveLow-cost carrier faresMonitor low-cost carrier fares where they are sold: on the airline's own site, priced per leg and per seat bucket, with mandatory fees split out. Per GB.Deep diveAirline ancillary pricesTrack airline ancillary prices (checked bags, seats, priority and fare bundles) per route, date and market, so a trip's true cost can be compared.Deep diveRail and bus faresCollect European rail and intercity coach fares per operator, departure and fare family, including yield-managed long-distance tickets. Billed per GB.Deep diveFerry faresMonitor ferry fares by route, sailing, season and vehicle (foot passengers, cars, cabins) from each operator's own public booking site. Per GB.Deep diveCorporate travel benchmarkingBenchmark booked and negotiated corporate fares against public fares on the same flights, lead times and markets, for TMCs, travel managers and audits.Deep diveTravel metasearchHow to build a travel metasearch engine: partner feeds, cached prices, live re-pricing and look-to-book. Where proxies fit, and what it costs per GB.Deep diveHotel rate shoppingCollect competitor hotel rates per stay date, length of stay and market from local residential IPs. Sticky sessions per shop, billed per GB.Deep diveHotel rate parityCheck your hotel's own rates across OTAs, metasearch and markets from local IPs. Catch wholesale leakage and loading errors with evidence, billed per GB.GuideWhy flight prices differ by countryThe same flight costs different amounts in different countries because fares are filed and sold per point of sale, and taxes follow the departure airport.GuideDo airlines raise prices when you search?What regulators and researchers found about cookie and IP tracking in airline pricing, and what actually makes a fare change between two searches.GuideHow often flight prices changeFlight prices can change many times a day: filed fares update constantly and seat availability moves with every booking. What that means for collection.

Get started

Buy a gigabyte and try it on your own targets.

No subscription, no sales call. Code WELCOME15 takes 15% off your first purchase, and whatever you do not use is still there next quarter.