# Airline Baggage Allowance API: Carry-on & Checked Bag Rules (`messnomore/airline-baggage-allowance`) Actor

Airline baggage allowance API: carry-on size and weight, personal item, checked bags and fee notes per fare, from official airline pages. Clean JSON, checked weekly, with change alerts.

- **URL**: https://apify.com/messnomore/airline-baggage-allowance.md
- **Developed by:** [Wong Xian Qi](https://apify.com/messnomore) (community)
- **Categories:** Travel, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $14.00 / 1,000 baggage rules

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/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

### What does Airline Baggage Allowance API do?

**Airline Baggage Allowance API** gives you each airline's baggage rules as clean JSON, one record per fare: carry-on size and weight, personal item size, checked baggage allowance with fee notes, and the rules for strollers, musical instruments and sports equipment. The rules come only from the airlines' own official baggage pages. They are re-checked every week, and every change is dated, so you can also use it as a **baggage policy change alert**.

Use it in Apify Console with no code, or call it as a **baggage policy API** from your app, chatbot or spreadsheet.

Covered now: **Air Arabia (G9), Malaysia Airlines (MH), Thai Airways (TG) and Vietnam Airlines (VN)**, 60 fares in total. We only add airlines whose websites allow automated reading (see the FAQ).

### Why use Airline Baggage Allowance API?

Every airline describes carry-on and checked bag rules differently: per fare bundle, per route, in tables, pop-ups and footnotes. And the rules change without notice. This Actor does the reading for you:

- 🧳 **One format for every airline**: carry-on pieces, weight and dimensions in cm, personal item size, piece or weight concept for checked bags, and linear size limits, in the same fields for every fare.
- 🔔 **Change alerts**: set **Only fares changed since** to "7 days" and run it weekly. You get only the fares whose baggage rules changed, with a summary such as "Carry-on max weight: 7 kg → 10 kg". When nothing changed, the run costs a fraction of a cent.
- 🎟️ **Per fare, not per airline**: "Fly Light" and "Fly Grande" are separate records, and route-specific rules (e.g. domestic vs. international) are separate too.
- 🔗 **Source links and dates**: every record links to the official page and says when it was extracted, last verified and last changed.
- ⚡ **Fast and cheap**: answers come from the weekly-checked data, so a run takes seconds.
- 🤖 **Apify platform features**: run it on a schedule, call it by API, or send the results to Slack, email, Google Sheets, Make or Zapier with [integrations](https://docs.apify.com/platform/integrations).

Who uses it: **travel apps and booking sites** that show baggage rules, **travel agents and TMCs** answering "can I bring this bag?", **luggage brands and retailers** checking cabin bag dimensions, and **content teams** keeping baggage guides up to date.

### What data does Airline Baggage Allowance API return?

| Field                                          | Description                                                                                                |
| ---------------------------------------------- | ---------------------------------------------------------------------------------------------------------- |
| `airlineIata`, `airlineName`                   | Airline, e.g. `TG`, `Thai Airways`                                                                         |
| `fareClass`                                    | Fare or bundle name as the airline uses it, e.g. `Fly Grande`                                              |
| `cabinClass`                                   | `economy`, `premium` (premium economy), `business` or `first`                                              |
| `routeScope`                                   | Routes the rules apply to, e.g. `Domestic (Malaysia)`; `null` = all routes                                 |
| `carryOn`                                      | `pieces`, `maxWeightKg`, `maxDimensionsCm` \[length, width, height], `maxLinearCm`, `notes`                 |
| `personalItem`                                 | `allowed`, `maxWeightKg`, `maxDimensionsCm`, `notes`                                                       |
| `checked`                                      | `allowanceType` (`piece`, `weight` or `none`), `pieces`, `maxWeightKg`, `maxLinearCm`, `feeNotes`, `notes` |
| `specialItems`                                 | `stroller`, `musicalInstrument`, `sportsEquipment` (short summaries)                                       |
| `confidence`                                   | `high`, `medium` or `low`: how clearly the airline's pages state these rules                               |
| `lastChanged`, `changeSummary`                 | Day a baggage value last changed and what changed                                                          |
| `sourceUrl`, `sourceUrls`                      | Official pages the rules come from                                                                         |
| `firstSeenAt`, `extractedAt`, `lastVerifiedAt` | When the fare was first published here, extracted, and last checked                                        |

A value is `null` when the airline's pages don't state it. We never guess.

### How to get airline baggage rules with Airline Baggage Allowance API

1. Click **Try for free** and open the **Input** tab.
2. Enter **Airlines** as IATA codes or names (e.g. `MH`, `Thai Airways`), or leave the list empty for every covered airline.
3. Optionally choose a **Cabin class**, and turn off **Include special items** if you don't need them.
4. For change alerts, set **Only fares changed since** to a date or a period such as `7 days`.
5. Set **Maximum results** and click **Start**. In a few seconds, open the **Output** tab and download the results as JSON, CSV or Excel.

### How much does it cost to get airline baggage allowance data?

Airline Baggage Allowance API uses **pay-per-event pricing**:

- **$0.02 per fare** returned (a "Baggage rule" result).
- **$0.05 per changed fare** when you use **Only fares changed since** (a "Change alert", charged instead of the normal result).
- A start fee of $0.00005 per run. There is no charge for compute time.

Examples:

- One airline, e.g. Malaysia Airlines' 10 fares: **$0.20**.
- Every covered airline (60 fares): about **$1.20**.
- A weekly change check of every airline when nothing changed: **$0.00005**.

**Maximum results** is a hard cap, and Apify also stops charging when your run reaches the maximum cost you set. If your input is invalid or the data is temporarily unavailable, the run fails before returning anything, so you pay no result fees. Apify's free plan includes monthly platform credit, which is enough for many runs.

### Input

See the **Input** tab for every option. Example input:

```json
{
    "airlines": ["MH", "Thai Airways"],
    "cabinClass": "economy",
    "includeSpecialItems": true,
    "maxResults": 500
}
```

- **airlines**: IATA codes or names. Names match the full airline name or an unambiguous start ("Thai" matches Thai Airways). Airlines not covered yet are listed in the run status and summary, and cost nothing.
- **onlyChangedSince**: a date (`2026-10-01`) or a period back from today (`7 days`, `2 weeks`, `3 months`). Fares that an airline **removed** in that period are listed in the run summary (`removedFares`), free of charge.

### Output

You can download the dataset in various formats such as **JSON, HTML, CSV or Excel**. Example result from a real run:

```json
[
    {
        "airlineIata": "TG",
        "airlineName": "Thai Airways",
        "fareClass": "Economy Saver",
        "cabinClass": "economy",
        "routeScope": "International",
        "carryOn": {
            "pieces": 1,
            "maxWeightKg": 7,
            "maxDimensionsCm": [56, 45, 25],
            "maxLinearCm": 115,
            "notes": "Linear limit stated as 45 linear inches (around 115 cm)."
        },
        "personalItem": {
            "allowed": true,
            "maxWeightKg": 1.5,
            "maxDimensionsCm": [37.5, 25, 12.5],
            "notes": "Free items: handbag, wallet, purse or laptop; sum of three dimensions up to 75 cm."
        },
        "checked": {
            "allowanceType": "piece",
            "pieces": 1,
            "maxWeightKg": 23,
            "maxLinearCm": 158,
            "feeNotes": null,
            "notes": "Saver W and L fares have no checked baggage allowance in some destinations (e.g. sectors between BKK and CLMV). Row also covers Redeem and Others (X/N)."
        },
        "specialItems": {
            "stroller": "One foldable stroller or one child car seat per infant or child is carried free as checked baggage with no weight or size limit. A stroller may also go in the cabin if it fits, but it cannot be unfolded on board.",
            "musicalInstrument": "Instruments up to 158 cm total dimensions are included in the checked allowance. A cello or other fragile instrument can travel in its own seat as cabin baggage (up to 50 kg), booked at least 2 days ahead.",
            "sportsEquipment": "Sports items such as golf sets, bicycles and skis count as one piece in the allowance if within size and weight limits, and flat fees apply for excess (e.g. golf: 760 THB domestic, 80 USD / 2780 THB international). Request at least 3 working days ahead."
        },
        "confidence": "medium",
        "firstSeenAt": "2026-10-12",
        "lastChanged": null,
        "changeSummary": null,
        "sourceUrl": "https://www.thaiairways.com/en-th/content/baggage/carry-on-baggage/",
        "sourceUrls": [
            "https://www.thaiairways.com/en-th/content/baggage/carry-on-baggage/",
            "https://www.thaiairways.com/en-th/content/baggage/checked-baggage/",
            "https://www.thaiairways.com/en-th/content/baggage/special-baggage/"
        ],
        "extractedAt": "2026-10-12T16:11:34.596Z",
        "lastVerifiedAt": "2026-10-12T16:11:34.596Z"
    }
]
```

The run summary (`SUMMARY` in the key-value store) lists the airlines requested and not covered, fares matched and returned, the charged event, fares removed in your change window, airlines not re-checked lately, and when the data was last updated.

### Use Airline Baggage Allowance API as an API

```bash
curl -X POST "https://api.apify.com/v2/acts/messnomore~airline-baggage-allowance/run-sync-get-dataset-items" \
  -H "Authorization: Bearer YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"airlines": ["MH", "TG"], "cabinClass": "economy"}'
```

See the **API** tab for clients in JavaScript and Python. You can also run it from AI assistants through the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp).

### Tips for better results

- **Watch for changes cheaply**: schedule a weekly run with **Only fares changed since** = `7 days`. You pay only for fares that actually changed.
- **Check `routeScope`**: some airlines have different allowances for domestic, regional and long-haul routes. Each appears as its own record.
- **Check `confidence` and `notes`**: `low` means the airline's pages leave some values unclear (they are `null` rather than guessed).
- **Filter by cabin** to get fewer, cheaper results when you only need economy.

### Related guides

- [Is there an airline baggage allowance API? Carry-on and checked bag limits by airline and fare, as JSON](https://wong13977-oss.github.io/airline-baggage-allowance-api/)

### FAQ

#### How are the baggage rules extracted?

Every week the official baggage pages of each covered airline are read. An AI model (Anthropic's Claude) turns the page text into the fields above. Every number must appear on the airline's page, and values outside plausible ranges block publishing. A change is published automatically only when two independent extractions find exactly the same change. Anything uncertain is held for manual review before it is published. Pages that did not change are not re-processed.

#### Which airlines are covered?

Air Arabia, Malaysia Airlines, Thai Airways and Vietnam Airlines. Vueling is paused because its website doesn't answer requests from the Apify platform. Some data gaps are known: Vietnam Airlines' cabin baggage limits are only shown in pop-ups, so its carry-on fields are empty, and for some fares the airline's pages don't state every value. Want another airline? Ask in the **Issues** tab.

#### Why isn't my airline covered?

We only read airline websites whose terms and robots.txt allow automated access, and we identify ourselves honestly instead of pretending to be a browser. Many large airlines block automated reading, so we don't cover them. We add an airline when its website allows it or the airline gives us permission.

#### Does it include baggage fees?

`checked.feeNotes` summarizes what the airline's pages say about paid and extra bags. Live prices for extra bags depend on route, date and booking channel, and are not included.

#### How fresh is the data?

Every airline is checked weekly. `lastVerifiedAt` is the last check, and `lastChanged` is the last day the rules changed. Airlines that could not be checked for over two weeks are listed in the run summary (`staleAirlines`). Always confirm the rules with the airline before you travel: rules can differ by route, date and booking.

#### Why did I get fewer results than I asked for?

Results stop at **Maximum results** or when your maximum cost per run is reached; the run status says which. With **Only fares changed since**, only fares that changed in that period are returned.

#### Is my input stored or shared?

Your input is only used to filter the stored data. It is not sent to any AI service. Like every Apify run, your input stays in your own run storage, which you can delete at any time.

#### Is it legal to use airline baggage data?

The Actor reads only public baggage pages from the airlines' official websites, respects robots.txt and each site's terms, and reads each page once a week. It does not collect any personal data. Our Actors are ethical and do not extract any private user data, such as email addresses, gender, or location. They only extract what the user has chosen to share publicly. We therefore believe that our Actors, when used for ethical purposes by Apify users, are safe. However, you should be aware that your results could contain personal data. Personal data is protected by the GDPR in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers.

#### I found wrong or missing data. What can I do?

Open the **Issues** tab and include the airline, the fare and the official page. Feedback and feature requests are welcome there too.

# Actor input Schema

## `airlines` (type: `array`):

IATA codes or airline names, e.g. "MH", "Thai Airways", "Vietnam Airlines". Leave empty for every covered airline. Covered now: G9 (Air Arabia), MH (Malaysia Airlines), TG (Thai Airways), VN (Vietnam Airlines).

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

Return only fares of this cabin. Leave empty for every cabin.

## `includeSpecialItems` (type: `boolean`):

Add the airline's rules for strollers, musical instruments and sports equipment to every record.

## `onlyChangedSince` (type: `string`):

Change alerts: return only fares whose baggage rules changed on or after this date, or within this period back from today (e.g. "7 days"). Each changed fare is charged as a change alert instead of a normal result. Leave empty for every fare. Fares an airline removed are listed in the run summary.

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

Upper limit on returned fares. You pay per returned fare, so this also caps the cost of a run.

## Actor input object example

```json
{
  "airlines": [
    "MH",
    "TG"
  ],
  "includeSpecialItems": true,
  "maxResults": 500
}
```

# Actor output Schema

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

No description

## `summary` (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 = {
    "airlines": [
        "MH",
        "TG"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("messnomore/airline-baggage-allowance").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 = { "airlines": [
        "MH",
        "TG",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("messnomore/airline-baggage-allowance").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 '{
  "airlines": [
    "MH",
    "TG"
  ]
}' |
apify call messnomore/airline-baggage-allowance --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,messnomore/airline-baggage-allowance"
        }
    }
}
```

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/HaqTYOhrrdrpamL4g/builds/8kJg4sHZMTP13qAMx/openapi.json
