# Airline Mileage Chart Redemption Rate Scraper (`nimbryxo-studio/airline-mileage-chart-redemption-rate-scraper`) Actor

Compare published award redemption rates in miles and taxes between world regions across 13 frequent-flyer programs, including Aeroplan, British Airways Avios, LifeMiles, United, and Flying Blue.

- **URL**: https://apify.com/nimbryxo-studio/airline-mileage-chart-redemption-rate-scraper.md
- **Developed by:** [Nimbryxo-studio](https://apify.com/nimbryxo-studio) (community)
- **Categories:** Travel, Automation, Developer tools
- **Features:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.49 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Airline Mileage Chart Redemption Rate Scraper

Most frequent-flyer programs publish a fixed mileage chart showing how many miles (plus taxes) a redemption costs between two regions — separate from the live seat-availability search. This actor reads those published charts directly from each program's own page and returns one row per chart rate, so you can compare redemption cost across programs without opening a dozen airline websites.

### What this actor does

- Looks up published award-chart rates between an origin and destination region for the loyalty programs you select.
- Filters results by cabin class, one-way vs. roundtrip, and partner-only redemptions.
- Returns the miles cost, tax estimate, and any chart notes (e.g. distance band) exactly as published by the program.
- Cleanly skips any selected program whose chart isn't implemented yet, without emitting placeholder rows for it.
- Fields a given program's chart doesn't publish (e.g. a one-way rate, or a partner name) are left out of that row.

### Output per rate

| Field | Description |
|---|---|
| `recordType` | Always `"mileage_chart"`. |
| `issuer` | Program key (e.g. `aeroplan`, `united`). |
| `issuerName` | Full program name (e.g. "Air Canada Aeroplan"). |
| `originRegion` / `destinationRegion` | The two regions this rate applies between. |
| `cabin` | Cabin class the rate applies to. |
| `miles` | Miles cost for the rate (roundtrip unless `oneWay` was requested). |
| `milesOneWay` | One-way miles cost, when the chart publishes one separately. |
| `isPartner` | Whether this is a partner-airline redemption rather than the issuer's own flights. |
| `partnerName` | Name of the partner airline, when `isPartner` is true and the chart names one. |
| `milesNote` | Any additional note published alongside the rate, such as the distance band it falls under. |
| `taxes_min_usd` / `taxes_max_usd` | Published tax/fee range for the redemption, in USD, when the chart publishes one. |
| `sourceUrl` | The program's own page this rate was read from. |
| `scrapedAt` | ISO 8601 timestamp of when this actor fetched the record. |

### Input

| Field | Type | Default | Description |
|---|---|---|---|
| `originRegion` | String (select) | `"north_america"` | Region the trip departs from: North America, South America/Caribbean, Europe, Africa, Middle East, Asia, or Oceania. |
| `destinationRegion` | String (select) | `"europe"` | Region the trip ends in, from the same list. |
| `cabin` | String (select) | `"business"` | Cabin class to filter rates by: Economy, Premium Economy, Business, or First. |
| `issuers` | Array (select) | `["aeroplan", "alaska", "american", "anaMileage", "britishAirways", "emirates", "flyingBlue", "lifemiles", "lufthansa", "qatar", "singaporeKrisflyer", "united", "virginAtlantic"]` | Which frequent-flyer programs to query (see supported list below). Order affects which runs first. |
| `oneWay` | Boolean | `false` | Return one-way rates instead of roundtrip, for charts that publish both. |
| `partnerOnly` | Boolean | `false` | Only return partner-airline redemption rates. |
| `maxResults` | Integer | `100` | Maximum number of chart rows to return. |

#### Example: roundtrip business-class comparison

```json
{
    "originRegion": "north_america",
    "destinationRegion": "europe",
    "cabin": "business",
    "issuers": ["aeroplan", "united", "virginAtlantic", "flyingBlue"]
}
```

#### Example: one-way, partner-only rates

```json
{
    "originRegion": "north_america",
    "destinationRegion": "asia",
    "cabin": "business",
    "oneWay": true,
    "partnerOnly": true,
    "issuers": ["aeroplan", "united", "lifemiles"]
}
```

#### Example: economy rates across all implemented programs

```json
{
    "originRegion": "europe",
    "destinationRegion": "middle_east",
    "cabin": "economy",
    "maxResults": 200
}
```

### Supported loyalty programs

Chart data is currently implemented for: Air Canada Aeroplan (`aeroplan`), Alaska Mileage Plan (`alaska`), American AAdvantage (`american`), ANA Mileage Club (`anaMileage`), British Airways Avios (`britishAirways`), Emirates Skywards (`emirates`), Air France/KLM Flying Blue (`flyingBlue`), Avianca LifeMiles (`lifemiles`), Lufthansa Miles & More (`lufthansa`), Qatar Privilege Club (`qatar`), Singapore KrisFlyer (`singaporeKrisflyer`), United MileagePlus (`united`), and Virgin Atlantic Flying Club (`virginAtlantic`).

The input also lists Aeromexico Club Premier, Azul TudoAzul, Copa ConnectMiles, Delta SkyMiles, Etihad Guest, Finnair Plus, JAL Mileage Bank, Qantas Frequent Flyer, SAS EuroBonus, and Turkish Miles\&Smiles for forward compatibility — selecting one of these today simply returns no rows for that program, with no effect on the others you selected.

### Use cases

- **Redemption comparison** — see which program charges the fewest miles for the same route and cabin before booking.
- **Travel-hacking content** — source up-to-date published chart values for blog posts, spreadsheets, or redemption calculators.
- **Points valuation** — combine `miles` and `taxes_min_usd`/`taxes_max_usd` with a program's point value to estimate true redemption cost.
- **Partner-award research** — set `partnerOnly: true` to focus on the partner-airline rates that are often cheaper or open up routes the issuer doesn't fly itself.

### FAQ

**Is this live seat availability?**
No. It's the published mileage chart — the fixed miles-and-taxes rate a program advertises for a region pair and cabin, not a live search for bookable award seats on a specific date.

**Why did some of my selected programs return no rows?**
A few programs listed in the `issuers` input aren't implemented yet (see the list above); they're skipped cleanly rather than returning empty or fake rows.

**Why is `sourceUrl` included?**
So you can open the exact page a rate was read from and confirm it against the program's own published chart.

**What does `partnerOnly: true` change?**
It keeps only rows for redemptions on a partner airline rather than the issuer's own flights, for programs that publish a distinct partner rate.

**Why do some rows have `milesOneWay` and others don't?**
Only programs that publish a separate one-way chart value populate `milesOneWay`; others publish roundtrip-only pricing.

**Does `maxResults` limit results per program or overall?**
It's a hard cap on the total number of rows returned across every selected program.

**Will re-running this actor pick up a chart change the same day a program updates it?**
Not necessarily. Each program's rates are a snapshot of its published chart rather than a page fetched fresh on every run, so a same-day change on the program's own site may not be reflected until the snapshot is refreshed. Use `sourceUrl` to confirm the current published rate.

**Is this affiliated with any airline or loyalty program?**
No. This actor reads publicly published mileage charts and is not affiliated with or endorsed by any airline, alliance, or frequent-flyer program named above.

# Actor input Schema

## `originRegion` (type: `string`):

Region the trip departs from. The chart returns redemption rates between origin and destination regions.

## `destinationRegion` (type: `string`):

Region the trip ends in.

## `cabin` (type: `string`):

Filter the published rates by cabin class.

## `issuers` (type: `array`):

Which frequent-flyer programs to query. Order matters — earlier issuers run first.

## `oneWay` (type: `boolean`):

Return one-way award rates instead of roundtrip. Roundtrip is the default for charts that publish in both formats.

## `partnerOnly` (type: `boolean`):

Only return partner-redemption rates (i.e. flying on a partner airline, not the issuer's own metal).

## `maxResults` (type: `integer`):

Hard cap on emitted chart rows.

## Actor input object example

```json
{
  "originRegion": "north_america",
  "destinationRegion": "europe",
  "cabin": "business",
  "issuers": [
    "aeroplan",
    "alaska",
    "american",
    "anaMileage",
    "britishAirways",
    "emirates",
    "flyingBlue",
    "lifemiles",
    "lufthansa",
    "qatar",
    "singaporeKrisflyer",
    "united",
    "virginAtlantic"
  ],
  "oneWay": false,
  "partnerOnly": false,
  "maxResults": 100
}
```

# Actor output Schema

## `rates` (type: `string`):

Dataset containing all scraped mileage chart rows.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "originRegion": "north_america",
    "destinationRegion": "europe",
    "cabin": "business",
    "issuers": [
        "aeroplan",
        "alaska",
        "american",
        "anaMileage",
        "britishAirways",
        "emirates",
        "flyingBlue",
        "lifemiles",
        "lufthansa",
        "qatar",
        "singaporeKrisflyer",
        "united",
        "virginAtlantic"
    ],
    "oneWay": false,
    "partnerOnly": false,
    "maxResults": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("nimbryxo-studio/airline-mileage-chart-redemption-rate-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "originRegion": "north_america",
    "destinationRegion": "europe",
    "cabin": "business",
    "issuers": [
        "aeroplan",
        "alaska",
        "american",
        "anaMileage",
        "britishAirways",
        "emirates",
        "flyingBlue",
        "lifemiles",
        "lufthansa",
        "qatar",
        "singaporeKrisflyer",
        "united",
        "virginAtlantic",
    ],
    "oneWay": False,
    "partnerOnly": False,
    "maxResults": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("nimbryxo-studio/airline-mileage-chart-redemption-rate-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "originRegion": "north_america",
  "destinationRegion": "europe",
  "cabin": "business",
  "issuers": [
    "aeroplan",
    "alaska",
    "american",
    "anaMileage",
    "britishAirways",
    "emirates",
    "flyingBlue",
    "lifemiles",
    "lufthansa",
    "qatar",
    "singaporeKrisflyer",
    "united",
    "virginAtlantic"
  ],
  "oneWay": false,
  "partnerOnly": false,
  "maxResults": 100
}' |
apify call nimbryxo-studio/airline-mileage-chart-redemption-rate-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,nimbryxo-studio/airline-mileage-chart-redemption-rate-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/eIZgfI7pDY3WRqtPZ/builds/r77fQ6nopV6iUx08D/openapi.json
