# Cheapflightsfares Flights Scraper – US & Worldwide Fares (`boring_internet_explorer/cheapflightsfares-scraper`) Actor

Extract flight fares from Cheapflightsfares.com for any origins and destinations: price per passenger and total, airline, stops, durations, segments, baggage and booking links. One-way and round trips on routes to and from the USA & Worldwide.

- **URL**: https://apify.com/boring_internet_explorer/cheapflightsfares-scraper.md
- **Developed by:** [Boring Internet Explorer](https://apify.com/boring_internet_explorer) (community)
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.50 / 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

## ✈️ Cheapflightsfares Flights Scraper — Flight Fares, Airlines & Routes

[Cheapflightsfares.com](https://www.cheapflightsfares.com/) is an online flight booking site that compares fares across airlines for one-way and round-trip itineraries. This scraper extracts structured flight fares from it for **any number of origins and destinations in a single run** — price per passenger, total price, airline, stops, durations, full segment details, baggage and a booking link. Useful for fare monitoring from Saudi Arabia, the UAE, Kuwait, Qatar, Bahrain, Oman and any other market.

The extracted data is normalized into a structured format, making it easy to use for analysis, integrations, or storage.

### Why use this scraper?

- 💸 **Fare monitoring** – track the cheapest fares on your routes day by day
- 🌍 **Multi-route comparison** – add several origins and destinations; every pair is searched with its own item limit
- 🛫 **Airline benchmarking** – compare airlines, stops, layovers and total travel time
- 🧳 **Baggage insight** – see which fares include carry-on and checked bags
- 📈 **Travel analytics** – build price history for GCC, Saudi Arabia and UAE routes
- 🤖 **Deal alerts** – feed results into your own alerts, dashboards or LLM pipelines
- 👨‍👩‍👧 **Any passenger mix** – adults, children, infants, and any cabin class

### Supported search types

| Type                           | Example                                 |
| ------------------------------ | --------------------------------------- |
| One-way, single route          | `JFK` → `LAX` on 2026-12-20             |
| Round trip                     | `JFK` → `LHR`, 2026-12-20 to 2026-12-27 |
| Several origins × destinations | `JFK, LAX` → `LHR, MIA` (4 searches)    |
| Cabin / stops / sort           | Business, nonstop only, shortest first  |

Airports and cities are entered as 3-letter IATA codes (for example `JFK`, `NYC`, `LHR`). The site covers routes touching the United States; routes between two non-US airports are reported as unavailable.

### Input fields

| Field                  | Type    | Default         | Description                                                  |
| ---------------------- | ------- | --------------- | ------------------------------------------------------------ |
| `origins`              | array   | `["JFK"]`       | Departure IATA codes                                         |
| `destinations`         | array   | `["LAX","MIA"]` | Arrival IATA codes                                           |
| `tripType`             | string  | `oneWay`        | `oneWay` or `roundTrip`                                      |
| `departureDate`        | string  | –               | `YYYY-MM-DD`, not in the past                                |
| `departureDaysFromNow` | integer | `30`            | Alternative to `departureDate`: days from today (0 = today)  |
| `returnDate`           | string  | –               | `YYYY-MM-DD`, required for round trips                       |
| `returnDaysFromNow`    | integer | –               | Alternative to `returnDate` for round trips: days from today |
| `adults`               | integer | `1`             | 1–9                                                          |
| `children`             | integer | `0`             | Ages 2–11                                                    |
| `infants`              | integer | `0`             | Infants on lap (max = adults)                                |
| `infantsWithSeat`      | integer | `0`             | Infants with their own seat                                  |
| `cabinClass`           | string  | `economy`       | `economy`, `premiumEconomy`, `business`, `first`             |
| `stops`                | string  | `any`           | `any`, `nonstop`, `max1`                                     |
| `sortBy`               | string  | `price`         | `price` (cheapest first) or `duration`                       |
| `maxItems`             | integer | `5`             | Maximum flights saved **per origin/destination pair**        |
| `country`              | string  | `US`            | Your market; labels results and sets the proxy country       |
| `proxyConfiguration`   | object  | no proxy        | Apify Proxy settings                                         |

### Example input

```json
{
  "origins": ["JFK", "LAX"],
  "destinations": ["LHR", "MIA"],
  "tripType": "roundTrip",
  "departureDate": "2026-12-20",
  "returnDate": "2026-12-27",
  "adults": 2,
  "maxItems": 5,
  "country": "US",
  "proxyConfiguration": { "useApifyProxy": false }
}
```

### Output

Each flight is stored as one record in the default dataset.

### Example output

```json
{
  "scrapedAt": "2026-10-09T16:06:08.981Z",
  "url": "https://www.cheapflightsfares.com/cffpaymentMeta/?…",
  "title": "JFK → LHR · American Airlines · Nonstop",
  "price": 1209.2,
  "currency": "USD",
  "country": "United States",
  "market": "us",
  "totalPrice": 2418.4,
  "taxesPerPerson": 940.59,
  "origin": "JFK",
  "originName": "New York (JFK)",
  "destination": "LHR",
  "destinationName": "London (LHR)",
  "tripType": "roundTrip",
  "cabin": "Economy",
  "departureDate": "2026-12-20",
  "returnDate": "2026-12-27",
  "adults": 2,
  "children": 0,
  "infants": 0,
  "infantsWithSeat": 0,
  "airline": "AA",
  "airlineName": "American Airlines",
  "stops": 0,
  "returnStops": 0,
  "departureTime": "2026-12-20T10:00:00",
  "arrivalTime": "2026-12-20T22:10:00",
  "returnDepartureTime": "2026-12-27T10:15:00",
  "returnArrivalTime": "2026-12-27T13:20:00",
  "outboundDuration": "7h 10m",
  "outboundFlyingTime": "7h 10m",
  "outboundLayover": "0h 0m",
  "returnDuration": "8h 5m",
  "returnFlyingTime": "8h 5m",
  "returnLayover": "0h 0m",
  "outboundSegments": [
    {
      "flightNumber": "AA142",
      "airline": "AA",
      "operatingAirline": "AA",
      "from": "JFK",
      "fromTerminal": "8",
      "to": "LHR",
      "toTerminal": "3",
      "departureTime": "2026-12-20T10:00:00",
      "arrivalTime": "2026-12-20T22:10:00",
      "durationMinutes": 430,
      "layoverMinutes": null,
      "aircraft": "BOEING 777-200/200ER",
      "cabin": "Economy"
    }
  ],
  "returnSegments": [
    {
      "flightNumber": "AA103",
      "airline": "AA",
      "operatingAirline": "AA",
      "from": "LHR",
      "fromTerminal": "3",
      "to": "JFK",
      "toTerminal": "8",
      "departureTime": "2026-12-27T10:15:00",
      "arrivalTime": "2026-12-27T13:20:00",
      "durationMinutes": 485,
      "layoverMinutes": null,
      "aircraft": "BOEING 777-200/200ER",
      "cabin": "Economy"
    }
  ],
  "baggage": [
    {
      "name": "Personal Item",
      "included": true,
      "price": 0
    },
    {
      "name": "Carry-on Bag",
      "included": true,
      "price": 0
    },
    {
      "name": "Checked Bag",
      "included": false,
      "price": 0
    }
  ],
  "seatsLeft": 9,
  "refundable24h": true,
  "basicEconomy": null,
  "flightId": "finv1001"
}
```

### Field reference

| Field                                                       | Type    | Description                                                        |
| ----------------------------------------------------------- | ------- | ------------------------------------------------------------------ |
| `scrapedAt`                                                 | string  | ISO 8601 scrape time                                               |
| `url`                                                       | string  | Booking link for the fare                                          |
| `title`                                                     | string  | Route, airline and stops summary                                   |
| `price`                                                     | number  | Price per passenger                                                |
| `currency`                                                  | string  | Currency returned by the site                                      |
| `country` / `market`                                        | string  | Selected market name and code                                      |
| `totalPrice`                                                | number  | Price for all passengers                                           |
| `taxesPerPerson`                                            | number  | Taxes per adult                                                    |
| `origin`, `destination`                                     | string  | IATA codes searched                                                |
| `originName`, `destinationName`                             | string  | City and airport code                                              |
| `tripType`, `cabin`                                         | string  | Trip type and cabin                                                |
| `departureDate`, `returnDate`                               | string  | Searched dates                                                     |
| `adults`, `children`, `infants`, `infantsWithSeat`          | number  | Passenger mix                                                      |
| `airline`, `airlineName`                                    | string  | Airline code and name                                              |
| `stops`, `returnStops`                                      | number  | Stops outbound and on return                                       |
| `departureTime`, `arrivalTime`                              | string  | Outbound local times                                               |
| `returnDepartureTime`, `returnArrivalTime`                  | string  | Return local times                                                 |
| `outboundDuration`, `outboundFlyingTime`, `outboundLayover` | string  | Outbound timings                                                   |
| `returnDuration`, `returnFlyingTime`, `returnLayover`       | string  | Return timings                                                     |
| `outboundSegments`, `returnSegments`                        | array   | Per-leg flight number, airports, terminals, times, aircraft, cabin |
| `baggage`                                                   | array   | Baggage allowance per fare                                         |
| `seatsLeft`                                                 | number  | Seats left at this fare                                            |
| `refundable24h`                                             | boolean | Free 24-hour cancellation                                          |
| `basicEconomy`                                              | boolean | Basic economy fare                                                 |
| `flightId`                                                  | string  | Fare identifier                                                    |

### ❓ FAQ

**Which airports can I search?** Any airport or city code the site accepts, entered as IATA codes. Invalid codes are skipped with a warning.

**What does `maxItems` limit?** Each origin/destination pair is its own search, so `maxItems` applies to every pair separately.

**Which currency are prices in?** The site quotes the currency it returns for your session, currently USD. The `currency` field always reflects what the site returned; the `country` input labels results and selects the proxy country.

**Why is a route returning nothing?** The site does not serve routes between two non-US airports, very distant dates, or some cabin and infant combinations. The run log explains why each search returned no flights.

**Is a proxy required?** No, runs work without a proxy. Enable Apify Proxy if you see blocking.

**How fresh is the data?** Fares are fetched live at run time.

### 🔗 Want More Data?

- [Wego Flights Scraper](https://apify.com/boring_internet_explorer/wego-flights-scraper) – MENA flights
- [Almosafer Flights Scraper](https://apify.com/boring_internet_explorer/almosafer-flights-scraper) – Saudi Arabia fares
- [Wingie Flights Scraper](https://apify.com/boring_internet_explorer/wingie-scraper) – worldwide flight prices
- [flydubai Fare Radar](https://apify.com/boring_internet_explorer/flydubai-flights-scraper) – flydubai fares
- [Riyadh Air Flights Scraper](https://apify.com/boring_internet_explorer/riyadh-air-scraper) – Riyadh Air fares

### 🛠️ Need a custom scraper?

Need this scraper adapted to your use case — extra fields, additional filters, a different output format, or a new website? Reach out at boringinternetexplorer@gmail.com and we'll make it happen.

# Actor input Schema

## `origins` (type: `array`):

Departure airports or cities as 3-letter IATA codes (e.g. JFK, NYC, LAX). Add several to search each one against every destination.

## `destinations` (type: `array`):

Arrival airports or cities as 3-letter IATA codes (e.g. LHR, MIA). Every origin is searched against every destination.

## `tripType` (type: `string`):

One way or round trip. Round trips need a return date.

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

Departure date in YYYY-MM-DD format. Leave empty to use 'Departure in N days' instead. Must not be in the past.

## `departureDaysFromNow` (type: `integer`):

Alternative to the departure date: number of days from today (0 = today). Ignored if a departure date is set.

## `returnDate` (type: `string`):

Return date in YYYY-MM-DD format. Required for round trips unless 'Return in N days' is set.

## `returnDaysFromNow` (type: `integer`):

Alternative to the return date for round trips: number of days from today. Ignored if a return date is set.

## `adults` (type: `integer`):

Number of adults (12+ years), 1 to 9.

## `children` (type: `integer`):

Number of children (2-11 years).

## `infants` (type: `integer`):

Infants under 2 travelling on an adult's lap. Cannot exceed the number of adults.

## `infantsWithSeat` (type: `integer`):

Infants under 2 with their own seat.

## `cabinClass` (type: `string`):

Cabin class to search.

## `stops` (type: `string`):

Keep only flights with at most this many stops.

## `sortBy` (type: `string`):

Order in which results are kept when the item limit cuts the list.

## `maxItems` (type: `integer`):

Maximum flights saved for each origin/destination pair.

## `country` (type: `string`):

Your market. Used to label results and as the Apify Proxy exit country when a proxy is enabled. The site currently quotes prices in the currency it returns (USD); the output currency field always reflects what the site returned.

## `proxyConfiguration` (type: `object`):

Your proxy configuration from Apify

## Actor input object example

```json
{
  "origins": [
    "JFK"
  ],
  "destinations": [
    "LAX",
    "MIA"
  ],
  "tripType": "oneWay",
  "departureDaysFromNow": 30,
  "adults": 1,
  "children": 0,
  "infants": 0,
  "infantsWithSeat": 0,
  "cabinClass": "economy",
  "stops": "any",
  "sortBy": "price",
  "maxItems": 5,
  "country": "US",
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

# 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 = {
    "origins": [
        "JFK"
    ],
    "destinations": [
        "LAX",
        "MIA"
    ],
    "departureDaysFromNow": 30
};

// Run the Actor and wait for it to finish
const run = await client.actor("boring_internet_explorer/cheapflightsfares-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 = {
    "origins": ["JFK"],
    "destinations": [
        "LAX",
        "MIA",
    ],
    "departureDaysFromNow": 30,
}

# Run the Actor and wait for it to finish
run = client.actor("boring_internet_explorer/cheapflightsfares-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 '{
  "origins": [
    "JFK"
  ],
  "destinations": [
    "LAX",
    "MIA"
  ],
  "departureDaysFromNow": 30
}' |
apify call boring_internet_explorer/cheapflightsfares-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,boring_internet_explorer/cheapflightsfares-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/U4l4rRolwdRoBfQhK/builds/DYfu4dLdhhgVIcPJ3/openapi.json
