Flightpoints & Roame Award Flight Scraper avatar

Flightpoints & Roame Award Flight Scraper

Pricing

from $1.00 / 1,000 award itineraries

Go to Apify Store
Flightpoints & Roame Award Flight Scraper

Flightpoints & Roame Award Flight Scraper

Multi-source award flight availability from Flightpoints.com + Roame.travel. Search any route and date for miles, taxes, available seats, cabins, stops, loyalty program and operating airline per itinerary โ€” across dozens of loyalty programs. Per-cabin miles/taxes/seats/stops, fare-class.

Pricing

from $1.00 / 1,000 award itineraries

Rating

0.0

(0)

Developer

Abot API

Abot API

Maintained by Community

Actor stats

0

Bookmarked

8

Total users

2

Monthly active users

5 days ago

Last modified

Share

FlightPoints & Roame Award Flight Scraper: Miles, Taxes, Seats and Cabins by Route

FlightPoints and Roame turn public airline award search engines into one clean data feed. Give any route and date and get the miles, taxes, available seats, cabins, stops, loyalty program and operating airline for every itinerary found on both sources, normalized into a single schema. Search one route, paste a bulk list of routes, or paste search links directly, then export the results to JSON, CSV or Excel, or pull them straight into your app through the API.

Why This Scraper?

  • 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.
  • Pipe results into the apps you already use through MCP connectors, without changing what lands in the dataset.

Use Cases

  • 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.

Data You Get

Sample shape: values are illustrative placeholders, not from a live record.

FieldExample
id"fp|AA|JFK|LHR|2026-10-29"
source"flightpoints" (also "roame")
origin / destination"JFK" / "LHR"
departureDate"2026-10-29"
program"AA"
programName"AAdvantage"
airline"American Airlines"
alliance"oneworld"
numStops0
durationMinutes420 (null on FlightPoints summary rows)
cabins.economy.miles30000
cabins.economy.taxes5.6
cabins.economy.seats1
cabins.economy.stops0
cabins.economy.airlines["AA", "BA"]
cabins.business.miles57500
cabins.business.taxes19.7
lastSeen"2026-08-07T19:35:17Z"
scrapedAt"2026-08-08T09:00:00Z"
changeType"NEW" (incremental mode only)
changedFields["cabins"] (incremental mode, UPDATED rows only)
firstSeenAt / lastSeenAtincremental mode timestamps

Roame rows carry one fare per record instead of a full per-program breakdown: fareClass, cabinClasses, awardPoints, surcharge, roameScore, availableSeats, operatingAirlines, flightNumberOrder, equipmentTypes, allAirports, itineraryHash and md5 sit alongside the same origin, destination, departureDate, program, numStops and cabins fields shown above. With Add flight detail on, FlightPoints also returns one row per individual flight, adding departureTime, arrivalDate, arrivalTime, dayCount, distance, bookingUrl and a segments array (one entry per flight leg, each with segmentNumber, origin, destination, departureTime, arrivalTime, flightNumber, airlineCode, aircraft, layoverTime, travelMinutes and airlineName).

How to Use

  1. Pick a mode: search (route and date, single or bulk) or url (paste search links).
  2. Fill in the route or links for that mode, then set the filters that apply to both modes: cabin, the plus or minus days window and direct only.
  3. Set Max itineraries to control run size and cost, and turn on Add flight detail if you also want segments, stopovers and a booking link.
  4. Click Start, then download the dataset as JSON, CSV or Excel, or read it through the API.

Single route:

{
"mode": "search",
"origin": "JFK",
"destination": "LHR",
"departureDate": "2026-10-29",
"sources": ["flightpoints", "roame"]
}

Bulk routes, direct flights only:

{
"mode": "search",
"routes": [
{ "origin": "JFK", "destination": "LHR", "departureDate": "2026-10-29" },
"LAX,NRT,2026-11-05"
],
"directOnly": true,
"maxItems": 100
}

Pasted search links:

{
"mode": "url",
"urls": [
"https://flightpoints.com/search?origins=JFK&destinations=LHR&date=2026-10-29",
"https://roame.travel/search?from=JFK&to=CDG&departureDate=2026-11-02"
]
}

Per-flight detail plus recurring monitoring:

{
"mode": "search",
"origin": "SFO",
"destination": "NRT",
"departureDate": "2026-11-15",
"fetchDetails": true,
"incrementalMode": true,
"stateKey": "sfo-nrt-daily"
}

Run it from your code

Python:

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("abotapi/flightpoints-award-scraper").call(run_input={
"mode": "search", "origin": "JFK", "destination": "LHR", "departureDate": "2026-10-29"
})
for itinerary in client.dataset(run["defaultDatasetId"]).iterate_items():
print(itinerary["program"], itinerary["cabins"])

JavaScript:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('abotapi/flightpoints-award-scraper').call({
mode: 'search', origin: 'JFK', destination: 'LHR', departureDate: '2026-10-29',
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();

Or connect it to Make, Zapier, n8n, Google Sheets or webhooks from the Integrations tab.

Resume and recurring updates

  • Resume (resumeFromRunId) continues one interrupted run: paste its run or dataset ID and the actor skips every itinerary already collected there, so you don't pay twice.
  • Incremental mode (incrementalMode) is for scheduled runs over the same routes or links. Each itinerary is classified NEW, UPDATED (with changedFields), UNCHANGED (suppressed and not billed unless emitUnchanged is on), or EXPIRED (only once a run has scanned this search's full scope end to end, and only with emitExpired on). REAPPEARED only appears after that: once an itinerary has actually been marked EXPIRED in a previous run, a later run that finds it again marks it REAPPEARED, not NEW. stateKey names or shares the stored state; leave it blank and the actor derives one from your routes or links and settings, so different searches never mix state. With incremental mode off, output is exactly as before.

Send results into your apps (MCP connectors)

Optionally pipe the scraped itineraries into the apps you already use, via Model Context Protocol (MCP) connectors. This is an extra delivery step after the scrape: the Apify dataset is never changed.

  1. Authorize a connector once under Apify, Settings, Integrations (Notion, Linear, Airtable, or Apify).
  2. Select it in the "Pipe results into your apps" input field. If the picker is empty, you haven't authorized a connector yet.
  3. For Notion, also set notionParentPageUrl to the page where items should be created.
  4. Use maxNotifyListings to cap how many itineraries are written to each connector per run. This does not affect the dataset.

The connection is mediated by Apify's MCP proxy, so this actor never sees your third-party credentials. Leave mcpConnectors empty to skip.

Input Parameters

ParameterTypeDefaultDescription
modestringsearchsearch (routes and filters) or url (pasted links).
originstringnone (prefill: JFK)Origin airport IATA code for a single-route search. Used only when routes is empty; if left blank in that case, the actor falls back to JFK.
destinationstringnone (prefill: LHR)Destination airport IATA code. Same fallback behavior, to LHR, when routes is empty and this is left blank.
departureDatestringnone (prefill: empty)YYYY-MM-DD, roughly 60 days forward. If left blank, the actor fills in a date about 30 days out before querying either source, since a blank date is rejected by the award engines.
routesarraynoneBulk list of {origin, destination, departureDate} objects or "ORIGIN,DEST,DATE" lines. Overrides the single-route fields above when present.
urlsarraynone (prefill: one sample FlightPoints link)Pasted FlightPoints or Roame search links (url mode).
sourcesarray["flightpoints", "roame"]Which award-search engines to query.
searchClassstringECONCabin filter for Roame (ECON, PREM, BUS, FIRST). FlightPoints returns all cabins regardless.
daysAroundinteger0Widen the search by this many days on each side of the departure date (0 to 7).
directOnlybooleanfalseReturn non-stop itineraries only. Applies to both sources.
maxItemsinteger20Cap on itineraries returned across the whole run. 0 means unlimited.
fetchDetailsbooleanfalseAdd per-flight segments, stopovers and booking links from FlightPoints. Billed per enriched itinerary.
resumeFromRunIdstringnoneContinue one specific previous run or dataset without re-collecting or re-billing what it already has.
incrementalModebooleanfalseReturn only new, updated (and optionally expired or reappeared) itineraries on repeated runs over the same search.
stateKeystringnoneName or share an incremental-mode state. Left blank, a key is derived automatically from the search.
emitUnchangedbooleanfalseAlso return, and bill, itineraries that have not changed since the last run.
emitExpiredbooleanfalseAlso return, and bill, itineraries that were tracked before but are no longer found, once a run has scanned the full search.
proxyobject{ "useApifyProxy": true }Connection settings. The default works for both sources; a residential group is an optional escalation.
mcpConnectorsarraynoneOptional: send a summary of each itinerary to apps you authorized under Integrations.
notionParentPageUrlstringnoneNotion connector only: page under which item pages are created.
maxNotifyListingsinteger50Cap on items written to each connector per run (1 to 1000). Does not affect the dataset.

Output Example

Sample shape: values are illustrative placeholders, not from a live record.

{
"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"
}

Plan Requirement

The default connection setting works for both sources without extra configuration. If the connection itself is refused or keeps failing, the actor automatically continues the run over a different connection rather than failing outright, though results can be sparser while that happens. For heavier or more frequent monitoring, picking the residential proxy group under Connection gives the most consistent access. Check the Pricing tab on the actor page for current plan and usage rates.

FAQ

How much does it cost?

You pay a flat charge when a run starts, plus a per-itinerary charge for each row returned in the dataset, plus a small extra charge per itinerary only when Add flight detail is switched on. The Pricing tab on the actor page shows current rates. Use Max itineraries to cap the cost of any run.

This actor reads only publicly available search results from FlightPoints.com and Roame.travel; it does not sign in to any account or read anything behind a login. Award seats and prices are not guaranteed to still be available or bookable by the time you check them, since availability changes constantly. You are responsible for using the data in line with each site's terms and the laws that apply to you, and for getting legal advice before any commercial redistribution.

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.

๐Ÿ”— Want more travel data?

Pair this actor with these related scrapers from the same team:

๐Ÿงฉ Flightradar24
Live aircraft positions by map area (callsign, lat/lng, altitude, speed, vertical speed...
โœˆ๏ธ Viator Scraper
Collect Viator.com tour and activity results from destinations, categories, search pages...
๐Ÿจ Booking.com Hotels, Prices and Reviews Scraper
Scrape booking.com hotels, apartments, villas and hostels. Search any destination with...
๐Ÿจ Expedia Hotels Scraper
From $1/1K. Scrape Expedia.com hotel listings and reviews for any destination. Extract...
โœˆ๏ธ Pollstar Scraper
Scrape Pollstar upcoming concerts and tour dates: play date, venue with full address and...
โœˆ๏ธ Naver Map Scraper
From $1/1K. Scrape Naver Map places by keyword or URL: names, categories, ratings...

๐Ÿ‘‰ Browse all abotapi scrapers

๐Ÿ’ฌ Support & custom scrapers

  • ๐Ÿž Found a bug or a missing field? Open a ticket on the Issues tab. We usually reply within hours.
  • ๐Ÿ› ๏ธ Need another site, extra fields or a private build? Email abotapi@proton.me or message Telegram @abotapi.
  • โญ Enjoying it? A quick review on the actor page helps other users find it.