# Award Flights Scraper (`maximedupre/award-flights-scraper`) Actor

Scrape award flight availability for one route and departure date. Export miles, taxes, available seats, cabins, booking links, flight segments, times, and program details from Flightpoints.

- **URL**: https://apify.com/maximedupre/award-flights-scraper.md
- **Developed by:** [Maxime Dupré](https://apify.com/maximedupre) (community)
- **Categories:** Travel
- **Stats:** 3 total users, 1 monthly users, 99.6% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.70 / 1,000 award flights

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

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

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

### ✈️ Award flights scraper for miles, seats, and cabins

Award Flights Scraper searches [Flightpoints](https://www.flightpoints.com/search) for award flight availability on one airport route and departure date. It saves individual itinerary rows with loyalty program, miles, taxes or cash, cabin availability, available seats, booking links, flight times, segments, aircraft, distance, and scrape timestamps.

Use this Actor when you need structured award flight data for travel hacking research, points dashboards, route monitoring, loyalty program comparisons, trip planning, or internal travel tools. For a small first run, keep the prefilled `JFK` to `LHR` route, keep the prefilled departure date, and set `Maximum itineraries` to `25`.

Each run focuses on one origin airport, one destination airport, and one departure date. That keeps the first run easy to inspect and gives you clean rows you can export from Apify, read through the Apify API, schedule for repeat checks, or send to another tool with webhooks.

### 🔎 What this Actor does

- Searches Flightpoints for award flights between two IATA airport codes.
- Saves one dataset item per individual award flight itinerary.
- Returns loyalty program and airline context when the source provides it.
- Extracts cabin-level availability for economy, premium economy, business, and first class.
- Includes miles, taxes or cash, available seats, stops, airline codes, booking links, travel times, segments, aircraft, distance, and source metadata.
- Can include related loyalty program offers when Flightpoints returns them for an itinerary.
- Works with Apify exports, API clients, schedules, webhooks, and integrations.

The Actor is focused on public award flight availability returned by Flightpoints for the submitted route and date. It does not book flights, log in to airline loyalty accounts, redeem points, search flexible date calendars, price cash fares from Google Flights, or guarantee that an award seat remains available after the run.

### 📦 Data you can extract

Each dataset item is one award flight itinerary. Some fields can be empty when Flightpoints does not return that value for the itinerary or cabin.

- `source`, `sourceSearchUrl`, and `searchId` - source evidence for the run
- `origin`, `destination`, and `departureDate` - submitted route and date
- `program`, `programName`, `airline`, and `alliance` - loyalty program and airline context
- `flightId` - source flight identifier used for deduplication
- `bookingUrl` - booking or program URL when available
- `lastSeen`, `departureTime`, `arrivalDate`, and `arrivalTime`
- `durationMinutes`, `stops`, `dayCount`, and `distance`
- `economy`, `premiumEconomy`, `business`, and `first` - cabin objects with miles, tax, seats, stops, and airline codes
- `segments` - flight legs with airports, times, flight number, airline, aircraft, distance, layover time, and travel time
- `relatedOffers` - related program offers when requested and returned by the source
- `summary` and `scrapedAt` - source summary data and scrape timestamp

### 🚀 How to run it

1. Open the Input tab.
2. Enter the origin airport IATA code, such as `JFK`.
3. Enter the destination airport IATA code, such as `LHR`.
4. Pick the departure date.
5. Keep `Maximum itineraries` small for your first run.
6. Choose whether to include related offers.
7. Run the Actor and open the dataset.

You can export the finished dataset as JSON, CSV, Excel, XML, RSS, or HTML. You can also consume the same rows through the Apify API or schedule repeated route checks.

### ⚙️ Input options

`Origin airport` is the three-letter IATA code for the departure airport.

`Destination airport` is the three-letter IATA code for the arrival airport.

`Departure date` is the date to search for award flight availability.

`Maximum itineraries` caps the number of individual itinerary rows saved by the run. Use a small number while checking the output shape, then raise it when you need more rows.

`Related offers` includes related loyalty program offers when Flightpoints returns them for the itinerary. Leave it on when comparing programs; turn it off when you only want the primary itinerary rows.

### 🧾 Example input

```json
{
	"origin": "JFK",
	"destination": "LHR",
	"departureDate": "2026-06-10",
	"maxResults": 25,
	"includeRelatedOffers": true
}
````

### 📊 Example output

```json
{
	"rowType": "flightAward",
	"source": "Flightpoints",
	"origin": "JFK",
	"destination": "LHR",
	"departureDate": "2026-06-10",
	"program": "QF",
	"programName": "Qantas Frequent Flyer",
	"airline": "American Airlines",
	"alliance": "oneworld",
	"flightId": "QF_20260610_JFK_LHR_AA142",
	"bookingUrl": "https://www.qantas.com",
	"departureTime": "09:29",
	"arrivalDate": "2026-06-10",
	"arrivalTime": "21:40",
	"durationMinutes": 431,
	"stops": 0,
	"economy": {
		"miles": 25200,
		"tax": 77,
		"seats": 3,
		"stops": 0,
		"airlineCodes": ["AA"]
	},
	"business": {
		"miles": null,
		"tax": null,
		"seats": null,
		"stops": null,
		"airlineCodes": []
	},
	"segments": [
		{
			"segmentNumber": 1,
			"origin": "JFK",
			"destination": "LHR",
			"flightNumber": "AA142",
			"airlineCode": "AA",
			"aircraft": "Boeing 777-300ER"
		}
	],
	"scrapedAt": "2026-05-29T22:10:00.000Z"
}
```

### 💳 Pricing

This Actor uses pay-per-event pricing. You are charged for each saved award flight itinerary, with no separate Actor-start charge.

The per-itinerary price is set below the direct Flight Award & Itinerary competitor on every Apify tier:

- Free: `$0.045` per award flight
- Bronze: `$0.0045` per award flight
- Silver: `$0.0036` per award flight
- Gold, Platinum, and Diamond: `$0.0027` per award flight

Use `Maximum itineraries` to cap the number of charged results in a run.

### ⚠️ Limits and caveats

Award availability changes quickly. A saved row means the source returned that itinerary during the run; it does not reserve the seat or guarantee that the same mileage, tax, cabin, or booking link will still be available later.

The Actor searches one route and one departure date per run. If Flightpoints returns no award flights for that search, the run finishes successfully with no rows. Some cabins can be empty, and some fields can be missing when the source does not provide them for an itinerary.

### ❓ FAQ

#### 🎟️ Does this book award flights?

No. The Actor collects award flight availability data and booking links. You still book or redeem miles with the airline or loyalty program.

#### 🔐 Does it need my airline login?

No airline loyalty login is accepted by the Actor. It searches the public Flightpoints route data available for the submitted route and date.

#### 📅 Can I search many dates at once?

Not in this version. Run one date at a time, or schedule repeated runs for the route/date combinations you care about.

#### 🪑 Why are some cabin values empty?

Flightpoints may return availability for one cabin and not another. Empty cabin fields mean that value was not available in the source response for that itinerary.

### 📝 Changelog

- 0.0: Initial release.

### 🆘 Support

For issues, questions, or feature requests, [file a ticket](https://console.apify.com/actors/maximedupre~award-flights-scraper/issues) and I'll fix or implement it in less than 24h 🫡

### 🔗 Other actors

- [Realtor Scraper ↗](https://apify.com/maximedupre/realtor-scraper) - Export property listings with prices, addresses, photos, agents, and coordinates.
- [Google Shopping Ads Scraper ↗](https://apify.com/maximedupre/google-shopping-ads-scraper) - Track paid Shopping ads, prices, merchants, and landing pages.
- [SEMrush Free Website Stats Scraper ↗](https://apify.com/maximedupre/semrush-free-website-stats-scraper) - Collect public domain authority, traffic, backlink, and organic search metrics.
- [Website URL Crawler ↗](https://apify.com/maximedupre/website-url-crawler) - Crawl rendered websites and export discovered links for SEO and QA.
- [Business Address Scraper ↗](https://apify.com/maximedupre/business-address-scraper) - Find physical business addresses published on company websites.

**Made with ❤️ by Maxime Dupré**

# Actor input Schema

## `origin` (type: `string`):

Three-letter IATA airport code to depart from, such as JFK.

## `destination` (type: `string`):

Three-letter IATA airport code to arrive at, such as LHR.

## `departureDate` (type: `string`):

Departure date for the award flight search.

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

Maximum individual award flight itineraries to save. Use 25 for a small first run.

## `includeRelatedOffers` (type: `boolean`):

Include related award offers from other loyalty programs when Flightpoints provides them for an itinerary.

## Actor input object example

```json
{
  "origin": "JFK",
  "destination": "LHR",
  "departureDate": "2026-06-10",
  "maxResults": 100,
  "includeRelatedOffers": true
}
```

# Actor output Schema

## `results` (type: `string`):

Open the dataset with individual award flight itinerary 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 = {
    "origin": "JFK",
    "destination": "LHR",
    "departureDate": "2026-06-10",
    "maxResults": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("maximedupre/award-flights-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 = {
    "origin": "JFK",
    "destination": "LHR",
    "departureDate": "2026-06-10",
    "maxResults": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("maximedupre/award-flights-scraper").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "origin": "JFK",
  "destination": "LHR",
  "departureDate": "2026-06-10",
  "maxResults": 100
}' |
apify call maximedupre/award-flights-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=maximedupre/award-flights-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Award Flights Scraper",
        "description": "Scrape award flight availability for one route and departure date. Export miles, taxes, available seats, cabins, booking links, flight segments, times, and program details from Flightpoints.",
        "version": "0.0",
        "x-build-id": "dZEkMvpJa0PXmgH8W"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/maximedupre~award-flights-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-maximedupre-award-flights-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/maximedupre~award-flights-scraper/runs": {
            "post": {
                "operationId": "runs-sync-maximedupre-award-flights-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/maximedupre~award-flights-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-maximedupre-award-flights-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "origin",
                    "destination",
                    "departureDate",
                    "maxResults",
                    "includeRelatedOffers"
                ],
                "properties": {
                    "origin": {
                        "title": "Origin airport",
                        "minLength": 3,
                        "maxLength": 3,
                        "type": "string",
                        "description": "Three-letter IATA airport code to depart from, such as JFK.",
                        "default": "JFK"
                    },
                    "destination": {
                        "title": "Destination airport",
                        "minLength": 3,
                        "maxLength": 3,
                        "type": "string",
                        "description": "Three-letter IATA airport code to arrive at, such as LHR.",
                        "default": "LHR"
                    },
                    "departureDate": {
                        "title": "Departure date",
                        "type": "string",
                        "description": "Departure date for the award flight search.",
                        "default": "2026-06-10"
                    },
                    "maxResults": {
                        "title": "Maximum itineraries",
                        "minimum": 1,
                        "maximum": 500,
                        "type": "integer",
                        "description": "Maximum individual award flight itineraries to save. Use 25 for a small first run.",
                        "default": 100
                    },
                    "includeRelatedOffers": {
                        "title": "Related offers",
                        "type": "boolean",
                        "description": "Include related award offers from other loyalty programs when Flightpoints provides them for an itinerary.",
                        "default": true
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
