agentsclimarketplace

Flight search

Skill clairem0/technically-curious-skills/travel/flight-search

Search for flights across preferred airlines by scraping Google Flights. Presents structured comparison tables by leg with flight numbers, times, and prices. Use when the user says "find flights", "search flights", "flights from X to Y", or needs to compare flight options.From its SKILL.md

Install
npx -y skills add clairem0/technically-curious-skills --skill flight-search

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

2 things to look at

  • no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
  • 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

SKILL.md

6.0 KB, ~1.5k tokens by cl100k_base, as published. Nobody here has run it

Flight Search

Search for flights across your preferred airlines by scraping Google Flights. Returns a comparison table per leg with real flight numbers, sorted by direct flights first then connecting, by departure time.

Connectors

ConnectorRequiredPurpose
Web scraperYesScrape Google Flights with JSON extraction

Examples below use Firecrawl MCP syntax. Adapt the scraping calls for your tool.

Configuration

Load config.md for airline preferences. Load env.md for shared values.

Edit config.md with your preferred and excluded airlines.

Workflow

Step 1: Parse the Request

Extract from the user's message:

InputRequired?Default
Origin(s)Yes
DestinationYes
Date(s)Yes
TravelersNo1
ConstraintsNoNonstop preferred, any time

Multi-leg / multi-origin support: Users often book trips where travelers come from different cities. Parse each leg separately.

Example: "flights from Denver to San Francisco Thu Aug 13, Alex from NYC, both return to Austin Sun Aug 16" → Leg 1: DEN → SFO, Aug 13 (Traveler 1) → Leg 2: JFK → SFO, Aug 13 (Traveler 2) → Leg 3: SFO → AUS, Aug 16 (both)

Echo back before searching:

Searching flights:
- Leg 1: DEN → SFO — Thu Aug 13
- Leg 2: JFK → SFO — Thu Aug 13
- Leg 3: SFO → AUS — Sun Aug 16

Preferred airlines: [from config]. Excluding: [from config].

Step 2: Search Google Flights

For each leg, scrape Google Flights using your web scraper.

Build the URL:

https://www.google.com/travel/flights?q=flights+from+{ORIGIN}+to+{DEST}+on+{YYYY-MM-DD}

For nonstop-only results, add +nonstop:

https://www.google.com/travel/flights?q=nonstop+flights+from+{ORIGIN}+to+{DEST}+on+{YYYY-MM-DD}

Scrape with JSON extraction:

{
  "url": "<google_flights_url>",
  "formats": ["json"],
  "jsonOptions": {
    "prompt": "Extract all flight options showing airline, full flight number with numeric part (e.g. UA 1234 not just UA), departure time, arrival time, number of stops, layover details if connecting, duration, and price",
    "schema": {
      "type": "object",
      "properties": {
        "flights": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "airline": {"type": "string"},
              "flight_number": {"type": "string"},
              "departure_time": {"type": "string"},
              "arrival_time": {"type": "string"},
              "stops": {"type": "string"},
              "duration": {"type": "string"},
              "price": {"type": "string"}
            }
          }
        }
      }
    }
  },
  "waitFor": 10000
}

Run legs in parallel when possible (use multiple tool calls in one message).

Step 3: Filter and Sort Results

For each leg's results:

  1. Filter — Only keep flights on preferred airlines (from config). Drop excluded airlines.
  2. Group — Direct/nonstop flights first, then connecting flights.
  3. Sort — Within each group, sort by departure time ascending.
  4. Limit — Show top 5-7 options per leg. If more exist, note "N more options available."

Step 4: Present Results

One markdown table per leg:

## DEN → SFO — Thu Aug 13

| # | Airline | Flight | Depart | Arrive | Stops | Duration | Price |
|---|---------|--------|--------|--------|-------|----------|-------|
| 1 | United | UA 1234 | 8:00a | 9:33a | Nonstop | 1h 33m | $275 |
| 2 | United | UA 5678 | 11:58a | 1:29p | Nonstop | 1h 31m | $275 |
| 3 | Delta | DL 910/2282 | 7:05a | 10:49a | 1 (SLC 56m) | 3h 44m | $295 |

After all tables: "Which flights look good? You can say things like 'leg 1 option 2, leg 3 option 1' or ask me to search different dates."

Step 5: Done

The user books directly on the airline website using the flight details from the table.

Note on prices: Google Flights prices are point-in-time snapshots. Note: "Prices as of [time]. They can change within hours."

Error Handling

ScenarioResponse
Google Flights scrape returns emptyRetry once with waitFor: 15000. If still empty, try KAYAK as fallback: https://www.kayak.com/flights/{ORIGIN}-{DEST}/{YYYY-MM-DD}?sort=bestflight_a
No preferred airlines on routeShow what's available: "No [preferred airlines] on this route. Here's what's available:"
Partial data (missing prices or times)Present what we have, flag missing fields with "—"
Date is in the pastCatch before searching: "That date has passed. Did you mean [next occurrence]?"
Flight numbers missingGoogle Flights usually includes them. If missing, present without and note "flight numbers not available for this route — check the airline site."

Customization Notes

How to adapt this skill to your own setup.

  • Airline preferences — Edit config.md to set your preferred and excluded airlines.
  • Scraper swap — Replace Firecrawl calls with your web scraper's equivalent. The key requirement is JSON extraction from a JavaScript-heavy page.
  • KAYAK fallback — If Google Flights doesn't work well in your region, swap to KAYAK URLs as the primary source. Note that KAYAK doesn't reliably show flight numbers.
  • Booking automation — This skill stops at presenting results. If you want to automate booking, you'd need browser automation (Chrome MCP) to navigate the airline's checkout flow.
  • One-way vs round-trip — This skill searches one-way legs by default (more flexible). To search round-trip, modify Step 2 to include return dates in the URL.

Keep looking

Skills are one crate of 326,679. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.