{
  "openapi": "3.0.1",
  "info": {
    "title": "Google Flights Deal Finder",
    "description": "Scan many Google Flights routes across months of dates and get the fares below Google's usual price, with savings, best flight and a booking-search link. Monitor mode reports only new deals and price drops. No login or proxy needed.",
    "version": "1.0",
    "x-build-id": "LLbzrQWL2NTAxKmIp"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/axlymxp~google-flights-deal-finder/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-axlymxp-google-flights-deal-finder",
        "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/axlymxp~google-flights-deal-finder/runs": {
      "post": {
        "operationId": "runs-sync-axlymxp-google-flights-deal-finder",
        "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/axlymxp~google-flights-deal-finder/run-sync": {
      "post": {
        "operationId": "run-sync-axlymxp-google-flights-deal-finder",
        "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",
        "properties": {
          "routes": {
            "title": "Routes",
            "type": "array",
            "description": "One route per line as ORIGIN-DESTINATION with 3-letter IATA airport or city codes, e.g. JFK-LAX, NYC-LON, SFO-NRT.",
            "items": {
              "type": "string"
            }
          },
          "origins": {
            "title": "Origins (optional)",
            "type": "array",
            "description": "Instead of listing routes: every origin is paired with every destination below (up to 200 routes).",
            "items": {
              "type": "string"
            }
          },
          "destinations": {
            "title": "Destinations (optional)",
            "type": "array",
            "description": "Used together with Origins.",
            "items": {
              "type": "string"
            }
          },
          "tripType": {
            "title": "Trip type",
            "enum": [
              "round_trip",
              "one_way"
            ],
            "type": "string",
            "description": "Round trip prices the outbound and return together; one way prices a single flight.",
            "default": "round_trip"
          },
          "tripLengthDays": {
            "title": "Trip length (days)",
            "minimum": 1,
            "maximum": 60,
            "type": "integer",
            "description": "Round trips: return this many days after departure.",
            "default": 7
          },
          "daysAhead": {
            "title": "Start the window N days from today",
            "minimum": 0,
            "maximum": 330,
            "type": "integer",
            "description": "Relative window start, handy for scheduled runs. Ignored when 'Earliest departure' is set.",
            "default": 7
          },
          "windowDays": {
            "title": "Window length (days)",
            "minimum": 1,
            "maximum": 330,
            "type": "integer",
            "description": "How many departure days to scan per route. Ignored when 'Latest departure' is set.",
            "default": 60
          },
          "dateFrom": {
            "title": "Earliest departure (optional)",
            "type": "string",
            "description": "YYYY-MM-DD. Overrides 'Start the window N days from today'."
          },
          "dateTo": {
            "title": "Latest departure (optional)",
            "type": "string",
            "description": "YYYY-MM-DD. Overrides 'Window length'."
          },
          "minSavingsPercent": {
            "title": "Deal threshold (% below the usual price)",
            "minimum": 0,
            "maximum": 90,
            "type": "integer",
            "description": "A fare is a deal when it is at least this much below Google's usual price for that trip (or below the route's median fare in the window when Google gives no usual price), or when Google rates it low.",
            "default": 15
          },
          "candidatesPerRoute": {
            "title": "Cheapest days to check per route",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "The cheapest N days of each route are checked against Google's usual price and get the best flight details.",
            "default": 5
          },
          "onlyDeals": {
            "title": "Only output deals",
            "type": "boolean",
            "description": "Turn off to get every checked cheap day, deal or not.",
            "default": true
          },
          "monitor": {
            "title": "Monitor mode (only new fares and price drops)",
            "type": "boolean",
            "description": "For scheduled runs: remember the last price per route and date, and output only fares not seen before or that dropped by at least the percentage below.",
            "default": false
          },
          "monitorDropPercent": {
            "title": "Report a drop of at least (%)",
            "minimum": 1,
            "maximum": 90,
            "type": "integer",
            "description": "Monitor mode: a known fare is reported again when it is at least this much cheaper than last time.",
            "default": 5
          },
          "maxStops": {
            "title": "Stops",
            "enum": [
              "any",
              "nonstop",
              "up_to_1",
              "up_to_2"
            ],
            "type": "string",
            "description": "Limit the number of stops per direction.",
            "default": "any"
          },
          "cabin": {
            "title": "Cabin",
            "enum": [
              "economy",
              "premium_economy",
              "business",
              "first"
            ],
            "type": "string",
            "description": "Cabin class for the fare.",
            "default": "economy"
          },
          "adults": {
            "title": "Adults",
            "minimum": 1,
            "maximum": 9,
            "type": "integer",
            "description": "Number of adult passengers; prices are for the whole party.",
            "default": 1
          },
          "currency": {
            "title": "Currency",
            "type": "string",
            "description": "3-letter code, e.g. USD, EUR, GBP.",
            "default": "USD"
          },
          "country": {
            "title": "Country (point of sale)",
            "type": "string",
            "description": "2-letter code; prices can differ by country.",
            "default": "US"
          },
          "maxConcurrency": {
            "title": "Routes in parallel",
            "minimum": 1,
            "maximum": 8,
            "type": "integer",
            "description": "How many routes are scanned at the same time.",
            "default": 4
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Leave off: Google answers Apify's servers directly, and its fare calendar refuses residential and many datacenter proxies."
          }
        }
      },
      "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}