# Wingie Flights Scraper - Prices, Airlines & Routes Worldwide (`boring_internet_explorer/wingie-scraper`) Actor

Scrape flight prices and fares from Wingie in 29 country storefronts worldwide. Search many origins and destinations at once, one-way or round trip, and get airlines, stops, durations, baggage and fare options in the currency you choose.

- **URL**: https://apify.com/boring_internet_explorer/wingie-scraper.md
- **Developed by:** [Boring Internet Explorer](https://apify.com/boring_internet_explorer) (community)
- **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

## ✈️ Wingie Flights Scraper — Egypt, Saudi Arabia, UAE, Kuwait & more

### ❓ What is this scraper?

This scraper extracts live flight prices from **Wingie**, a flight comparison and booking website that compares fares from 450+ airlines. Wingie runs a separate storefront for each country (29 in total, including Egypt, Saudi Arabia, the UAE, Kuwait, Qatar, the UK, the US, Germany, India and more), each with its own local offers and currency.

Flight fares change every day, so a structured, repeatable feed of Wingie prices is useful for travel research, price monitoring and market analysis in the GCC and wider Arab region.

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

***

### ⚡ Why this scraper?

Wingie offers a powerful way to compare flight options, and this scraper allows you to:

- 🌍 Pick the country storefront, language and currency you want prices in (for example EGP for Egypt, SAR for Saudi Arabia, AED for the UAE)
- 🛫 Search many origins and many destinations in one run — every origin is searched against every destination
- 🔢 Set the number of flights you want **per search** (`maxItems` applies to each origin and destination pair)
- 🔁 Collect one-way and round-trip fares, with passengers (adults, children, infants) and economy or business cabin
- 🧳 Get airlines, stops, layovers, durations, baggage allowance, refundability and fare options for every flight

Perfect for:

- ✈️ Travel agencies and OTAs comparing fares in the region
- 📈 Price monitoring and fare-tracking tools
- 🧮 Market analysts studying route pricing and airline competition
- 🤖 Deal alerts and travel newsletters
- 🎓 Researchers working on aviation and tourism data

***

### 📥 Input

| Field                             | Type     | Default         | Description                                                                                              |
| --------------------------------- | -------- | --------------- | -------------------------------------------------------------------------------------------------------- |
| `country`                         | string   | `eg`            | Wingie storefront — 29 countries worldwide, from Egypt and Saudi Arabia to the UK, US, Germany and India |
| `language`                        | string   | `en`            | `en` or `ar` — language of airline, city and airport names                                               |
| `currency`                        | string   | `AUTO`          | Currency of the prices. `AUTO` uses the country's default (EGP for Egypt, SAR for Saudi Arabia, …)       |
| `origins`                         | string\[] | —               | Airport codes (`CAI`) or names (`Cairo`). A city name searches all of its airports                       |
| `destinations`                    | string\[] | —               | Same format as origins                                                                                   |
| `departureDate`                   | string   | `14 days`       | `YYYY-MM-DD` or a relative value such as `14 days`, `2 weeks`, `1 month`                                 |
| `returnDate`                      | string   | empty           | Set it to search round trips; leave empty for one-way                                                    |
| `adults` / `children` / `infants` | integer  | `1` / `0` / `0` | Passengers                                                                                               |
| `cabinClass`                      | string   | `economy`       | `economy` or `business`                                                                                  |
| `directOnly`                      | boolean  | `false`         | Only non-stop flights                                                                                    |
| `sortBy`                          | string   | `price`         | `price`, `duration` or `departure` — decides which flights are kept when `maxItems` is reached           |
| `maxItems`                        | integer  | `5`             | Maximum flights saved **per origin and destination pair**                                                |
| `proxyConfiguration`              | object   | no proxy        | Proxy settings. If the site blocks your runs, try a residential proxy                                    |

```json
{
  "country": "eg",
  "language": "en",
  "currency": "AUTO",
  "origins": ["CAI"],
  "destinations": ["DXB", "Jeddah"],
  "departureDate": "2026-11-15",
  "returnDate": "2026-11-22",
  "adults": 1,
  "cabinClass": "economy",
  "sortBy": "price",
  "maxItems": 5,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

With the example above the scraper runs two searches (CAI → DXB and CAI → Jeddah) and stores up to 50 round-trip fares for each.

***

### 📤 Output

Each item is one flight offer, returned as a structured JSON object. For round trips the price is the total of both directions and `inbound` holds the return flight.

```json
{
  "scrapedAt": "2026-10-08T08:06:31.388Z",
  "url": "https://eg.wingie.com/en/flights/search/cairo-intl-airport-to-dubai-intl-airport-cai-dxb/?departure=22.10.2026&adult=1&class=ekonomi",
  "title": "Cairo (CAI) → Dubai (DXB) · Flynas · 2026-10-22 11:10",
  "price": 8253.05,
  "currency": "EGP",
  "country": "Egypt",
  "market": "eg",
  "tripType": "one-way",
  "origin": "CAI",
  "originCity": "Cairo",
  "destination": "DXB",
  "destinationCity": "Dubai",
  "departureDate": "2026-10-22",
  "returnDate": null,
  "departureTime": "2026-10-22T11:10",
  "arrivalTime": "2026-10-22T18:55",
  "airlines": ["Flynas"],
  "stops": 1,
  "durationMinutes": 405,
  "passengers": {
    "adults": 1,
    "children": 0,
    "infants": 0
  },
  "averagePrice": 8253.05,
  "outbound": {
    "origin": "CAI",
    "originCity": "Cairo",
    "destination": "DXB",
    "destinationCity": "Dubai",
    "departureTime": "2026-10-22T11:10",
    "arrivalTime": "2026-10-22T18:55",
    "durationMinutes": 405,
    "stops": 1,
    "airlines": ["Flynas"],
    "flightNumbers": ["XY264", "XY207"],
    "cabinClass": "economy",
    "cabinBaggage": "1 piece X 7 kg cabin baggage (56x36x23 cm)",
    "checkedBaggage": "1 piece X 15 kg checked baggage",
    "refundable": true,
    "seatsLeft": 9,
    "bookingProvider": "flynas",
    "fareOptions": [
      {
        "name": "Light",
        "extraPrice": 0
      },
      {
        "name": "Light Flex",
        "extraPrice": 224.47
      },
      {
        "name": "Value",
        "extraPrice": 1721.93
      },
      {
        "name": "Plus",
        "extraPrice": 3623.56
      }
    ],
    "segments": [
      {
        "flightNumber": "XY264",
        "airline": "Flynas",
        "airlineCode": "XY",
        "origin": "CAI",
        "destination": "RUH",
        "departureTime": "2026-10-22T11:10",
        "arrivalTime": "2026-10-22T13:55",
        "durationMinutes": 165,
        "layoverMinutes": null,
        "originTerminal": "3",
        "destinationTerminal": "1",
        "seatsLeft": 9
      },
      {
        "flightNumber": "XY207",
        "airline": "Flynas",
        "airlineCode": "XY",
        "origin": "RUH",
        "destination": "DXB",
        "departureTime": "2026-10-22T15:50",
        "arrivalTime": "2026-10-22T18:55",
        "durationMinutes": 125,
        "layoverMinutes": 115,
        "originTerminal": null,
        "destinationTerminal": null,
        "seatsLeft": 9
      }
    ]
  },
  "inbound": null
}
```

#### Field reference

| Field                             | Type     | Description                                                                                                                                                            |
| --------------------------------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `scrapedAt`                       | string   | ISO 8601 timestamp of the scrape                                                                                                                                       |
| `url`                             | string   | Wingie search results page for this search                                                                                                                             |
| `title`                           | string   | Route, airlines and departure time                                                                                                                                     |
| `price`                           | number   | Total price for all passengers (both directions for round trips)                                                                                                       |
| `currency`                        | string   | Currency of the price                                                                                                                                                  |
| `country` / `market`              | string   | Selected storefront country and market code                                                                                                                            |
| `tripType`                        | string   | `one-way` or `round-trip`                                                                                                                                              |
| `origin` / `originCity`           | string   | Departure airport code and city                                                                                                                                        |
| `destination` / `destinationCity` | string   | Arrival airport code and city                                                                                                                                          |
| `departureDate` / `returnDate`    | string   | Searched dates                                                                                                                                                         |
| `departureTime` / `arrivalTime`   | string   | Outbound local departure and arrival time                                                                                                                              |
| `airlines`                        | string\[] | Airlines on the trip                                                                                                                                                   |
| `stops`                           | number   | Number of stops on the outbound flight                                                                                                                                 |
| `durationMinutes`                 | number   | Outbound journey duration                                                                                                                                              |
| `passengers`                      | object   | Adults, children and infants searched                                                                                                                                  |
| `averagePrice`                    | number   | Average price per passenger                                                                                                                                            |
| `outbound` / `inbound`            | object   | Flight details: segments, flight numbers, layovers, terminals, baggage, refundability, seats left, booking provider and fare options (`inbound` is `null` for one-way) |

***

### ❓ FAQ

**Can I search more than one origin or destination?**
Yes. Add several values to `origins` and `destinations`. Every origin is searched against every destination, and `maxItems` applies to each search separately.

**Which currency are the prices in?**
The default currency of the selected country (`AUTO`), or any currency you choose in `currency`.

**What can I type as an origin or destination?**
A 3-letter airport code such as `CAI`, or a name such as `Cairo`. A city name searches all airports of that city, for example Dubai Intl, Sharjah and Al Maktoum.

**How many flights can I get per search?**
Wingie shows roughly 125 to 250 flights per search, depending on the route and the moment of the search. Setting `maxItems` higher than that returns everything available.

**Why do I see the same flight more than once?**
The same flights are sometimes offered by different providers or fare families at different prices. Each offer is a separate item, identified by `bookingProvider` and `price`.

**Does it support Arabic?**
Yes. Set `language` to `ar` to get Arabic airline, city and airport names.

**How fresh is the data?**
Every run searches Wingie live, so prices reflect what the website shows at run time.

***

### ✈️ Related flight scrapers

Compare Wingie prices with other flight sources:

- [Wego Flights Scraper – MENA Flights Scraper](https://apify.com/boring_internet_explorer/wego-flights-scraper)
- [Almosafer المسافر Flights Scraper – Saudi Arabia Fares](https://apify.com/boring_internet_explorer/almosafer-flights-scraper)
- [flynas فلاي ناس Flight Fares Scraper – Saudi Arabia & GCC](https://apify.com/boring_internet_explorer/flynas-scraper)
- [flyadeal طيران أديل Flight Fares Scraper – Saudi Arabia](https://apify.com/boring_internet_explorer/flyadeal-scraper)
- [flydubai Fare Radar: Compare & Track Daily Flight Prices](https://apify.com/boring_internet_explorer/flydubai-flights-scraper)
- [Riyadh Air Flights Scraper: Fares for All Routes Worldwide](https://apify.com/boring_internet_explorer/riyadh-air-scraper)

***

### 🛠️ 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

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

The Wingie storefront to search. It decides the website version, local offers and the default currency.

## `language` (type: `string`):

Language of airline, city and airport names in the results.

## `currency` (type: `string`):

Currency of the returned prices. Auto uses the default currency of the selected country (for example EGP for Egypt, SAR for Saudi Arabia).

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

Departure airports or cities. Use 3-letter airport codes (CAI) or names (Cairo, Riyadh). A city name searches all of its airports. Add several to search each one.

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

Arrival airports or cities, same format as origins. Every origin is searched against every destination.

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

Departure date as YYYY-MM-DD (for example 2026-11-15) or a relative value such as "14 days", "2 weeks" or "1 month".

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

Set a return date to search round trips. Leave empty for one-way flights. Same format as the departure date.

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

Number of adult passengers (12+ years).

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

Number of children (2-12 years).

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

Number of infants (0-2 years). Cannot exceed the number of adults.

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

Cabin class to search.

## `directOnly` (type: `boolean`):

Only return flights without stops.

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

Order of the results. Together with Max items, this decides which flights are kept.

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

The maximum number of flights to save for each origin and destination pair. The site offers roughly 125-250 flights per search.

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

Your proxy configuration from Apify

## Actor input object example

```json
{
  "country": "eg",
  "language": "en",
  "currency": "AUTO",
  "origins": [
    "CAI"
  ],
  "destinations": [
    "DXB",
    "Jeddah"
  ],
  "departureDate": "14 days",
  "adults": 1,
  "children": 0,
  "infants": 0,
  "cabinClass": "economy",
  "directOnly": false,
  "sortBy": "price",
  "maxItems": 5,
  "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": [
        "CAI"
    ],
    "destinations": [
        "DXB",
        "Jeddah"
    ],
    "departureDate": "14 days"
};

// Run the Actor and wait for it to finish
const run = await client.actor("boring_internet_explorer/wingie-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": ["CAI"],
    "destinations": [
        "DXB",
        "Jeddah",
    ],
    "departureDate": "14 days",
}

# Run the Actor and wait for it to finish
run = client.actor("boring_internet_explorer/wingie-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": [
    "CAI"
  ],
  "destinations": [
    "DXB",
    "Jeddah"
  ],
  "departureDate": "14 days"
}' |
apify call boring_internet_explorer/wingie-scraper --silent --output-dataset

```

## MCP server setup

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