# Google Flights Fare Calendar: Cheapest Fare for Every Day (`cozybit/google-flights-fare-calendar`) Actor

Google Flights' date grid as data: the cheapest fare for every departure day over up to 180 days per route, one way or round trip, any currency and market, with a cheapest-day flag and a link per day. Up to 100 routes per run. Trial: 0.01 USD per 1,000 days until 30 Nov 2026.

- **URL**: https://apify.com/cozybit/google-flights-fare-calendar.md
- **Developed by:** [Cozybit](https://apify.com/cozybit) (community)
- **Categories:** Travel, E-commerce, Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$0.01 / 1,000 calendar days

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## Google Flights Fare Calendar: the cheapest fare for every day, up to 180 days ahead

Get Google Flights' date grid as data: for each route, the cheapest fare Google shows for every departure day over up to 180 days. One row per day, ready for a spreadsheet, a chart or a price alert. No browser and no Google account needed.

- **Cheapest fare per day** for your whole party, one way or round trip with a fixed trip length.
- **Up to 180 days per route** in a single request, and up to 100 routes per run.
- **Cheapest-day flag** on the lowest-priced day(s) of each route's window.
- A Google Flights link for every day, to see that day's flights.
- Your currency, market, cabin class and passengers.

Typical uses: finding the cheapest day to fly, fare alerts, travel-deal sites, route and seasonality research, price monitoring for travel agencies.

Prices include all platform costs: you pay per calendar day returned and nothing for proxies or compute.

### Input

| Field | What it does | Default |
|---|---|---|
| Airport routes | 1-100 routes as `FROM-TO` with three-letter airport codes, such as `JFK-CDG` (airport codes, not city codes like `NYC`) | required |
| First departure date | `YYYY-MM-DD`, or a time from the run date such as `3 weeks` | 14 days from today |
| Calendar days | 1-180 consecutive departure days per route | 60 |
| Return after days | 0 for one way; 1-30 for a round trip returning that many days after each departure | 0 |
| Adults, children, lap infants | 1-9 adults; children and lap infants are experimental | 1 adult |
| Cabin class | Economy, premium economy, business or first | economy |
| Maximum stops | Any, nonstop, at most 1 or at most 2 (experimental) | any |
| Currency | Any currency Google supports, such as `USD`, `EUR`, `GBP` | `USD` |
| Search market | The Google market to search from, such as `US`, `DE`, `GB` | `US` |

Example: cheapest day to fly New York to Paris over the next two months:

```json
{ "routes": ["JFK-CDG"], "days": 60 }
```

Example: week-long round trips from Berlin and Madrid, 90 departure days from 1 December, prices in euros:

```json
{ "routes": ["BER-LIS", "MAD-BCN"], "startDate": "2026-12-01", "days": 90, "returnAfterDays": 7, "currency": "EUR", "country": "DE" }
```

### Output

One record per route and departure day:

```json
{
  "record_type": "calendar_day", "route": "JFK-CDG", "origin": "JFK", "destination": "CDG",
  "departure_date": "2026-11-08", "return_date": null, "trip_type": "one_way",
  "price": 316, "currency": "USD", "is_cheapest": true,
  "passengers": { "adults": 1, "children": 0, "infants_on_lap": 0 }, "cabin_class": "economy",
  "source_url": "https://www.google.com/travel/flights/search?tfs=...&hl=en&gl=us&curr=USD",
  "status": "ok", "error": null, "scraped_at": "2026-11-02T19:15:04.633Z"
}
```

- `price` is the lowest fare Google shows for that day for your whole party (round trips: the whole trip). Days without a fare, such as days with no flights, have `price: null` and are free.
- `is_cheapest` marks the cheapest day(s) in the route's window. `source_url` opens that day's search on Google Flights.
- Records use the same format as the fare-calendar mode of [Google Flights Scraper](https://apify.com/cozybit/google-flights-scraper).
- A route that fails returns one `error` record that says why; a city code (such as `NYC`) returns an error asking for airport codes. You never pay for error records.

### Use it from code

Python (`pip install apify-client`):

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_API_TOKEN>")
run = client.actor("cozybit/google-flights-fare-calendar").call(run_input={"routes": ["JFK-CDG"], "days": 90})
days = list(client.dataset(run["defaultDatasetId"]).iterate_items())
best = min((d for d in days if d["price"] is not None), key=lambda d: d["price"])
print("Cheapest day:", best["departure_date"], best["price"], best["currency"])
```

HTTP API, one request that runs the actor and returns the days as JSON:

```bash
curl -X POST "https://api.apify.com/v2/acts/cozybit~google-flights-fare-calendar/run-sync-get-dataset-items" \
  -H "Authorization: Bearer <YOUR_API_TOKEN>" -H "Content-Type: application/json" \
  -d '{"routes": ["JFK-CDG"], "days": 90}'
```

### Pricing

**Trial price until 30 November 2026:** 0.01 USD per 1,000 calendar days (the lowest price Apify allows). From 1 December 2026: 0.80 USD per 1,000 calendar days. Apify notifies all users before a price change.

| Event | Price |
|---|---|
| Calendar day (one route's cheapest fare for one departure day) | 0.80 USD per 1,000 (0.0008 USD each) |

Worked examples:

- One route, 60 days: **0.048 USD**.
- One route, 180 days: **0.144 USD**.
- 20 routes, 90 days each, checked weekly: 1,800 days per run, **1.44 USD** per run.

To cap spending, set a maximum cost per run in the run options; the actor stops cleanly when it is reached.

### Free Apify plan

On the free Apify plan a run returns at most **60 calendar days**. When the limit is reached the run finishes successfully with the status message "Free Apify plan limit reached". Any paid Apify plan removes the limit.

### Reliability

In 10 test runs on the Apify platform (20 route calendars across the US, Europe, Asia and Australia, one way and round trip, economy and business, 30-180 days each), the actor returned **1,155 calendar days** in 3-30 seconds per run. Prices matched another fare-calendar scraper's for all 30 days of a JFK-CDG comparison. Google sometimes answers a calendar request with a temporary error; the actor then retries through new IPs, up to four attempts.

### Limits

- Airport codes only: city codes such as `NYC` or `LON` are not accepted by Google's calendar.
- One trip length per run for round trips.
- Prices are what Google shows at the time of the run and change often; the fare on the day's search can differ slightly once you pick flights.
- Google Flights has no official public API; when Google changes its site the actor may fail until it is updated.

### Related actors

- [Google Flights Scraper](https://apify.com/cozybit/google-flights-scraper): every itinerary for a route and date, with schedules, stops, bags and amenities.
- [Google Hotels Scraper](https://apify.com/cozybit/google-hotels-scraper): hotel prices, ratings and details for any city and dates.
- [Google Hotels Booking-Site Prices](https://apify.com/cozybit/google-hotels-booking-prices): every booking site's price for a hotel and your dates.

### Support

Report problems and feature requests on the actor's **Issues** tab, ideally with the run link.

# Actor input Schema

## `routes` (type: `array`):

Enter 1-100 routes using uppercase three-letter airport codes, such as JFK-CDG. Requires airport codes, not city codes: use JFK instead of NYC. Spaces and duplicate routes are removed.

## `startDate` (type: `string`):

YYYY-MM-DD or a relative date such as 3 weeks. Empty means 14 days from today. Relative dates count from the run date (UTC). The whole window, including returns, must stay within 330 days ahead.

## `days` (type: `integer`):

Cover 1-180 consecutive departure dates per route, starting at startDate. One Google request per route. Free plans return at most 60 calendar rows across the run. Cheapest-day flags are calculated over the full requested window before that cap.

## `returnAfterDays` (type: `integer`):

0 for one way; 1-30 for a round trip returning this many days after each departure. Round-trip prices cover the entire trip.

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

Number of adults, from 1 to 9. Prices cover the whole party.

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

Number of children, from 0 to 8. Child passenger request codes are unverified; Google may ignore them.

## `infantsOnLap` (type: `integer`):

Number of lap infants, from 0 to 4, at most one per adult. Infant request codes are unverified; Google may ignore them.

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

Requested cabin class. Non-economy calendar requests have not been live-verified.

## `maxStops` (type: `string`):

Any, nonstop (0), at most 1 or at most 2 stops. This request encoding is unverified; Google may ignore it.

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

Three-letter uppercase currency code. A returned price-token currency mismatch is an error.

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

Two-letter uppercase country code. Sets Google's market and, for residential proxies only, the proxy country. Datacenter and custom proxies retain their routing.

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

Datacenter by default. Residential proxies are optional and use the search country. No automatic fallback. Turn off for direct requests, which cannot rotate a blocked IP.

## Actor input object example

```json
{
  "routes": [
    "JFK-CDG"
  ],
  "startDate": "2027-03-12",
  "days": 60,
  "returnAfterDays": 0,
  "adults": 1,
  "children": 0,
  "infantsOnLap": 0,
  "cabinClass": "economy",
  "maxStops": "any",
  "currency": "USD",
  "country": "US",
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

One calendar_day row per departure date, with whole-party fares and cheapest-day ties across the requested window. Null price means no fare was listed for that day.

# 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 = {
    "routes": [
        "JFK-CDG"
    ],
    "startDate": "3 weeks"
};

// Run the Actor and wait for it to finish
const run = await client.actor("cozybit/google-flights-fare-calendar").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 = {
    "routes": ["JFK-CDG"],
    "startDate": "3 weeks",
}

# Run the Actor and wait for it to finish
run = client.actor("cozybit/google-flights-fare-calendar").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 '{
  "routes": [
    "JFK-CDG"
  ],
  "startDate": "3 weeks"
}' |
apify call cozybit/google-flights-fare-calendar --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,cozybit/google-flights-fare-calendar"
        }
    }
}
```

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/No8f8yBUfvpGhB7mj/builds/X275JU5S4b4ri6FYw/openapi.json
