This tutorial shows how to scrape Google Flights prices into CSV with the Google Flights Scraper template for UScraper. You will import the workflow, edit the route and dates, set the export path, run the browser flow, and validate the rows before using them for travel research.
Before you start
Prerequisites and scope
You need UScraper installed as a local desktop app, a Google Flights search you are allowed to research, and a folder where CSV exports can be written. Start with one route and one date pair. The bundled template uses Barcelona to Madrid, round trip, departing 2026-09-28 and returning 2026-10-02, but that sample exists only to show the workflow shape.
This guide covers visible Google Flights result cards. It does not cover account data, booking flows, airline private inventory, CAPTCHA bypassing, or volume that belongs with a licensed travel-data provider. Third-party APIs are better when you need structured responses instead of browser-supervised CSV exports.
Treat the CSV as a point-in-time research snapshot. Flight prices can change quickly, and a row should always be tied to the route, dates, region, currency, and run time that produced it.
Workflow anatomy
What the Google Flights scraper template does
The companion JSON is built around a practical browser path: Set Window Size -> Navigate -> Wait for Page Load -> consent helper -> scroll trigger -> more-flights loop -> normalize rows -> Structured Export. The normalization step creates hidden .uscraper-flight-row elements with data attributes, and Structured Export writes those attributes into CSV columns.
If Google shows verification, CAPTCHA, or a page with no detectable flight cards, the workflow creates a diagnostic row instead of silently returning an empty file.
| Stage | Block behavior | What to check |
|---|---|---|
| Search setup | Opens the configured Google Flights search URL | Route, trip type, dates, language, country, currency |
| Loading | Waits, accepts common consent prompts, and scrolls | Browser shows actual flight cards, not a consent or verification page |
| Pagination | Repeatedly clicks visible "More flights" or similar controls | Result cards are expanded before export |
| Normalization | Parses visible card text into row attributes | Times, airline, duration, airports, stops, and prices look plausible |
| Export | Saves google_vuelos_scraper.csv with headers | Destination folder and file mode are correct |
Runbook
How to scrape Google Flights prices to CSV
Edit the Google Flights search
Replace the sample URL with the route, trip type, dates, currency, region, and filters you want to inspect.
Set the CSV destination
In Structured Export, confirm google_vuelos_scraper.csv, headers, create mode, and a project-specific save folder.
Run one search
Let the browser open Google Flights, handle consent prompts, scroll, click more-flight controls, normalize rows, and write the CSV.
Validate before batching
Compare exported rows against the browser view before duplicating the workflow for more routes.
CSV shape
Google Flights export columns
The export follows the bundled JSON. Some headers use the original Spanish labels, so keep them stable if your spreadsheet formulas or BI imports already depend on the file shape.
| Column | Meaning | Validation check |
|---|---|---|
tipo_de_viaje | Trip type, such as round trip | Matches the search URL |
titulo | Google Flights section title | Helps separate best and other departing flights |
partida, destino | Departure and destination city | No route reversal |
fecha_ida, fecha_vuelta | Outbound and return date | Dates match the intended query |
hora | Departure and arrival time range | Time text appears on the visible card |
areolinea | Airline text from the card | Airline is not confused with duration or airport codes |
durancion | Displayed duration text | Duration format is plausible |
aeropuertos | Airport-code pair, such as BCN - MAD | Codes align with the route |
escala | Nonstop, direct, or stop count text | Stop status matches the card |
precio | Visible fare text | Price is text, not a guaranteed final booking price |
google_vuelos_scraper.csvColumn
tipo_de_viaje
Trip type text from the configured Google Flights search.
Column
partida
Departure city from the route settings.
Column
destino
Destination city from the route settings.
Column
fecha_ida
Outbound date configured in the search URL.
Column
hora
Departure and arrival time range parsed from the card.
Column
areolinea
Airline text when it appears in the visible result.
Column
durancion
Displayed duration text from the result card.
Column
precio
Visible fare text captured for spreadsheet review.
Sample rows
2 of many
| tipo_de_viaje | partida | destino | fecha_ida | hora | areolinea | durancion | precio |
|---|---|---|---|---|---|---|---|
| Round trip | Barcelona | Madrid | 2026-09-28 | 07:00 - 08:25 | Iberia | 1 h 25 min | $64 |
| Round trip | Barcelona | Madrid | 2026-09-28 | 16:30 - 20:05 | Air Europa | 3 h 35 min | $118 |
QA
Validate the export before using the data
Validation is part of the tutorial, not cleanup after the fact. Keep the Google Flights browser tab open beside the CSV and inspect one row from the top, middle, and bottom of the export.
| Symptom | Likely cause | Fix |
|---|---|---|
| Only one diagnostic row | Verification, CAPTCHA, consent screen, or no detectable cards | Resolve the browser state manually and rerun one route |
Blank precio cells | Google did not show a visible fare for that card | Confirm the same card in the browser and keep the row as incomplete |
| Airline text looks wrong | Card layout changed or parser picked a nearby label | Update the normalization selector after inspecting live text |
| Fewer rows than expected | More-flight button was absent, hidden, or localized differently | Add a manual scroll, review button labels, then rerun |
| Route or dates mismatch | Search URL was edited inconsistently | Rebuild the URL from Google Flights and paste it back into Navigate |
Do not merge currencies or regions without recording them. For recurring fare research, log route, date pair, run timestamp, currency, region, row count, and selector changes.
Alternatives
Google Flights scraper vs API alternatives
UScraper is strongest when an analyst wants a visible browser run and a local CSV they can audit in Excel, Google Sheets, or a BI import. A hosted Google Flights API alternative is usually better for scheduled requests, JSON responses, proxy infrastructure, retries, or vendor support contracts.
| Option | Best fit | Trade-off |
|---|---|---|
| UScraper template | Supervised route snapshots and CSV exports | You validate browser behavior and maintain selectors when layouts drift |
| Hosted scraper actor | Cloud runs, scheduling, and managed execution | Usage-based cost and data leaves your local machine |
| Search API vendor | App integration and structured JSON | Vendor dependency, pricing, and coverage limits |
| Official or partner route | Commercial travel products and licensed data | Access requirements, contracts, and implementation overhead |
For most research teams, the decision is custody and workflow first. Use the local desktop app path for small visible-price CSVs; use a contracted API for production flight-search backends.
FAQ
Google Flights scraper FAQ
Google Flights results may be visible in a browser and still be governed by Google terms, airline or agency data rights, copyright, privacy rules, robots guidance, and local law. Do not bypass CAPTCHA or access controls, keep runs conservative, and get legal review before commercial reuse.
Next step
Download the Google Flights scraper template
Download the workflow from Google Flights Scraper for CSV Export, import it into UScraper, and keep this guide open while validating the first route. For neighboring travel workflows, browse all UScraper templates or read more UScraper tutorials.

