Award Flight Scraper icon

Award Flight Scraper

Scrape award flight availability from Flightpoints.com and Roame.travel by route and date. Compare miles, taxes, available seats, cabins, stops, fare…

Start using this actor on Apify ↗Need a custom scraper?Contact us ↗

Award Flight Scraper at a glance

Award Flight Scraper is a ready-to-run Apify actor from abotapi for collecting travel data. Its documented output includes source, from, to, date and program, which you can export as JSON, CSV or Excel or read through the Apify API. It costs $2.00 per 1,000 results on the Apify Free plan and from $1.00 on paid plans, with smaller per-run or optional feature charges listed on Apify.

Runs on
Apify cloud: console, API, schedules and integrations
Data type
Travel, Developer Tools, Automation
Pricing
$2.00 per 1,000 results (Free plan), from $1.00 on paid plans
Output
Documented below · JSON, CSV, Excel
Inputs
31 options
Run success
96.2% of completed public runs in the last 30 days

Scrape award flight availability from Flightpoints.com and Roame.travel by route and date. Compare miles, taxes, available seats, cabins, stops, fare classes, loyalty programs and operating airlines. Includes per-cabin details across dozens of loyalty programs.

What Award Flight Scraper can do

  • Two sources, one schema. FlightPoints and Roame results are normalized into the same fields, so one run covers more loyalty programs than either source alone.
  • Per-cabin detail. Economy, premium, business and first each carry their own miles, taxes, seat count and stops, when award space exists for that cabin.
  • Dozens of loyalty programs, across Star Alliance, oneworld and SkyTeam, from a single search.
  • Optional per-flight detail. Turn on Add flight detail for segments with layover times, aircraft, cash prices and a booking link.
  • One route or a bulk campaign. Search a single origin, destination and date, pass a list of routes, or paste search links.
  • Built for monitoring. Incremental mode reports only new and updated itineraries on repeated runs, and a genuine outage fails the run loudly instead of quietly returning nothing.

Choose what to collect

These inputs let you configure Award Flight Scraper - Availability, Miles, Taxes & Seats. Open the actor on Apify to enter your values and review the current options.

Supported input fields
InputWhat it controls
modestring · requiredChoose 'search' to run one route or a bulk list of routes, or 'url' to scrape pasted search links from flightpoints.com/search or roame.travel/search.

Choices: search, url

originstringOrigin airport: a 3-letter IATA code (e.g. JFK) or an airport / city name (e.g. Heathrow). A name that matches no airport, or several, is reported in the log and that route is skipped. Used with Destination + Departure date for a single-route search.
destinationstringDestination airport: a 3-letter IATA code (e.g. LHR) or an airport / city name. A name that matches no airport, or several, is reported in the log and that route is skipped.
departureDatestringDeparture date as YYYY-MM-DD (within ~60 days forward). Leave blank to use the next ~30 days out.
routesarrayOptional. A list of routes to search in one run, overrides the single-route fields above. Each item is an object {"origin":"JFK","destination":"LHR","departureDate":"2026-09-16"} or a CSV-style line "JFK,LHR,2026-09-16". Paste multiple lines for a bulk campaign.
sourcesarrayWhich award-search engines to query. Default: both.
urlsarrayOnly used when mode = url. Paste one or more search links. Multiple origins or destinations in one link (origins=JFK,EWR) are expanded to every pair; cabin/class and direct are honoured. Leave untouched to scrape one example per supported link shape.
Show 24 more inputs
More input fields
InputWhat it controls
searchClassstringCabin class to search on Roame. Flightpoints returns all cabins regardless.

Choices: ECON, PREM, BUS, FIRST

daysAroundintegerWiden the search by +/- this many days around the departure date. Flightpoints returns every date in the window; Roame spreads the search across it.
directOnlybooleanReturn non-stop itineraries only.
startDatestringOptional. With End date, searches every day in the window (search mode, single route only; capped at 60 days). Overrides Departure date.
endDatestringOptional. Last day of the date window (YYYY-MM-DD). The window is capped at 60 days after the start date.
cabinstringKeep only itineraries with award space in this cabin, for BOTH sources. Leave empty for any cabin.

Choices: , economy, premiumEconomy, business, first

maxMilesintegerKeep itineraries whose (selected or any) cabin costs at most this many miles.
maxCashTaxesnumberKeep itineraries whose (selected or any) cabin has taxes and fees at most this amount.
minSeatsintegerKeep itineraries whose (selected or any) cabin has at least this many seats.
nonstopbooleanAlias of Direct flights only; either one turns the filter on.
issuersarrayKeep only these loyalty program codes, e.g. CX, AA. Empty = all programs.
operatingAirlinesarrayKeep itineraries operated by at least one of these airline codes, e.g. BA, VS. Empty = all.
sortBystringWithin each batch of results, list itineraries offering this cabin first, cheapest miles first.

Choices: , economy, premiumEconomy, business, first

maxItemsintegerMaximum number of award itineraries to return across the whole run. This is the run's cap. Use 0 for unlimited.
fetchDetailsbooleanOff by default. When on, Flightpoints results also return per-flight detail: departure/arrival times, duration, stops, distance, per-cabin cash prices and seats, the segments that make up each itinerary (with layover times, stopover info) and a booking link. Each enriched itinerary is charged a small surcharge; the base per-itinerary charge still applies.
resumeFromRunIdstringPaste a previous run ID or dataset ID to continue a large crawl without returning or charging for itineraries already collected there. Use this after an interrupted run, or when continuing a campaign in another run. For recurring daily monitoring of the same routes, use Incremental mode below instead.
incrementalModebooleanTurn this on for daily or recurring monitoring. The first run returns all matching itineraries as NEW. Later runs normally return only NEW, UPDATED, and REAPPEARED itineraries. UPDATED is decided by comparing every output field except the volatile ones: miles/points, taxes/surcharge, seats, stops, airlines, times and segments all count, while the source's last-seen/update timestamps, the scrape time and the derived Roame score and premium ratio never do (they stay in the output but never trigger UPDATED or changedFields, including inside cabins and segments). Turn on "Emit unchanged" or "Emit expired" only when you also want those itineraries returned (and billed). State is kept separately for each route/URL and detail-mode setup; use State key when you want to name or deliberately share a monitoring campaign. To continue one specific interrupted run instead, use Resume from a previous run above.
stateKeystringOptional. Name this monitoring campaign to keep its state stable, or to deliberately share state across differently-configured runs. Leave empty to let the actor derive a key automatically from the routes/URLs and detail settings, different routes then never mix state with each other.
emitUnchangedbooleanOff by default. Turn on to also return itineraries that have not changed since the last run, marked UNCHANGED. This returns, and bills, extra rows you already have, so leave it off unless you specifically want the full snapshot every run.
emitExpiredbooleanOff by default. Turn on to also return itineraries that were present in a previous run but are no longer found, marked EXPIRED. Only produced once a run has fully scanned the tracked routes, not when Max itineraries capped it or when Resume was used. This returns, and bills, extra synthetic rows, so leave it off unless you need expiry tracking.
ignoreFieldsForChangesarrayField names that must NOT make an itinerary count as UPDATED, in addition to the built-in volatile fields. A bare name such as seats matches at any depth (top level, cabins, segments); a dotted path such as cabins.economy.seats matches only that field. The field stays in the output. Only used when Incremental changes is on. Example: ["seats", "surcharge"] to track miles only.
mcpConnectorsarrayOptionally send results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize one under Apify, Settings, API & Integrations, then select it here. Notion gets a rich page-per-item export; other connectors get a best-effort write/digest. Leave empty to skip; never changes the dataset output. Supported: Notion (https://mcp.notion.com/mcp), Linear (https://mcp.linear.app/sse), Airtable (https://mcp.airtable.com/mcp), Apify (https://mcp.apify.com).
notionParentPageUrlstringURL or id of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors.
maxNotifyListingsintegerCap on items written to each connector per run. Does not affect the dataset.

Fields in the output

The documented dataset includes the fields below. Availability can depend on the source page and selected mode.

sourceSource
originFrom
destinationTo
departureDateDate
programProgram
programNameProgram name
airlineAirline
allianceAlliance
numStopsStops
fareClassFare class
awardPointsPoints
surchargeTaxes
Show 28 more fields
roameScoreRoame score
availableSeatsSeats
bookingUrlBooking (link)
changeTypeChange type (incremental mode) (text)
cabinsCabins (object)
segmentsSegments (array)
durationMinutesDuration (min)
idItinerary ID
changedFieldsChanged fields (incremental mode) (array)
firstSeenAtFirst seen (incremental mode) (date)
lastSeenAtLast seen (incremental mode) (date)
originNameoriginName
destinationNamedestinationName
coordinatescoordinates
searchIdsearchId
flightIdflightId
departureTimedepartureTime
arrivalDatearrivalDate
arrivalTimearrivalTime
stopsstops
distancedistance
connectionsconnections
airlinesairlines
economyeconomy
premiumEconomypremiumEconomy
businessbusiness
firstfirst
lastSeenlastSeen

Example output

An example from this actor’s documentation. Values are illustrative; this is not a fresh live result.

{
  "id": "fp|AA|JFK|LHR|2026-10-29",
  "source": "flightpoints",
  "origin": "JFK",
  "destination": "LHR",
  "departureDate": "2026-10-29",
  "program": "AA",
  "programName": "AAdvantage",
  "airline": "American Airlines",
  "alliance": "oneworld",
  "durationMinutes": null,
  "numStops": 0,
  "cabins": {
    "economy": {
      "miles": 30000,
      "taxes": 5.6,
      "seats": 1,
      "stops": 0,
      "airlines": [
        "AA",
        "BA"
      ]
    },
    "business": {
      "miles": 57500,
      "taxes": 19.7,
      "seats": 1,
      "stops": 0,
      "airlines": [
        "AA",
        "BA"
      ]
    }
  },
  "lastSeen": "2026-08-07T19:35:17Z",
  "scrapedAt": "2026-08-08T09:00:00Z"
}

Ways to use this data

  • Points and miles hunters: watch specific routes for award seats opening up in a preferred cabin or program.
  • Travel content and award-booking services: compare miles, taxes and seat counts across programs for a route in one run.
  • Availability and price monitors: schedule Incremental mode runs to catch new award openings or changes in miles, taxes or seats.
  • Travel-hacking dashboards and bots: feed live award availability into your own site, alert or tool.
  • Bulk route research: search many city pairs and dates in one run instead of one search at a time.

Before you run

Start with a small input and check the resulting records against your expected fields. Source content and actor options can change; the current Apify listing is the reference for availability and pricing.

Questions about this actor

What data does Award Flight Scraper return?

The documented output for Award Flight Scraper includes source, from, to, date, program, program name, airline and alliance. Availability of each field depends on the source page and the selected mode.

How much does Award Flight Scraper cost?

It costs $2.00 per 1,000 results on the Apify Free plan and from $1.00 on paid plans, with smaller per-run or optional feature charges listed on Apify. The Apify listing shows the current rate for every plan.

Can I monitor the same routes for award openings on a schedule?

Yes. Schedule the actor from the Schedules tab and turn on Incremental mode for the same routes or links. The first run returns every itinerary as NEW. Later runs return only NEW and UPDATED itineraries by default; unchanged ones are suppressed and not billed unless you turn on Emit unchanged. REAPPEARED is not produced by default: it only appears after a prior run has fully scanned the search with Emit expired on and marked a missing itinerary EXPIRED. Without that, an itinerary that briefly disappears and comes back is simply reported again as UPDATED or UNCHANGED, never REAPPEARED.

Why are some cabins or programs missing from a result?

A cabin only appears inside cabins when the source reports real award space for it on that exact itinerary, and a program or airline only appears when it actually has inventory for the route, date and cabin you searched. This is expected: award availability is sparse and volatile, so the same route and date can show different cabins minutes apart. A search with genuinely no award seats for that route and date is a normal, successful result, not a failure.

Why did my run fail instead of returning an empty dataset?

A run fails when it ends with no itineraries at all and at least one route, source or pasted link could not be completed (it failed, timed out, or a pasted link was not recognized), which is a genuine outage on the connection or on the source's side. In that case the run stops with a clear message instead of quietly reporting zero results, and it names whether the connection itself was refused (a plan or access limit) or the source simply could not be reached. The run reports success with an empty dataset only when every route and source completed and genuinely found no award seats for that date and cabin, since that is a normal outcome for award search, not a problem. If only some routes or sources could not be confirmed while others succeeded and scanned at least one itinerary, you still get whatever those found, and the run succeeds. In Incremental mode, a scheduled run where every tracked itinerary comes back unchanged also reports success quietly, with a status message noting that nothing changed, rather than the empty-result warning.

Can I use it with AI agents or MCP?

Yes. Call it from any Apify integration or MCP client, and use the connector field to push itineraries into Notion, Linear or Airtable.

Ready to collect with Award Flight Scraper?

Run it on Apify with your own input and export the results as JSON, CSV or Excel.