CNPJ Scraper avatar

CNPJ Scraper

Pricing

from $2.00 / 1,000 results

Go to Apify Store
CNPJ Scraper

CNPJ Scraper

Find Brazilian companies by CNAE + state + municipality and enrich with full Receita Federal data. 55M+ companies, municipality iteration past the 20-result cap, BrasilAPI/Minha Receita/OpenCNPJ failover. Keyless, no browser, no proxy.

Pricing

from $2.00 / 1,000 results

Rating

0.0

(0)

Developer

Aurenic

Aurenic

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Categories

Share

Google Flights Scraper

Scrape Google Flights for live fares, airlines, times, stops, duration, aircraft and CO2 emissions by route and date — keyless, no API key, no browser.

What does Google Flights Scraper do?

This actor reverse-engineers the search payload that Google Flights inlines into its own public results page. It builds the same base64url Protobuf tfs parameter the website uses, fetches the results page with a Chrome TLS fingerprint, and decodes the embedded ds:1 data blob into structured itinerary records. It covers one-way and round-trip searches across any cabin class, passenger mix and stop ceiling, and returns every itinerary Google inlines for that route — typically 15 to 150 options on a busy route.

Output fields

One record per itinerary

FieldTypeDescription
originstringOrigin IATA code from your input
destinationstringDestination IATA code from your input
departure_datestringDeparture date (YYYY-MM-DD)
return_datestringReturn date, or null for one-way
trip_typestringone-way or round-trip
cabinstringCabin class priced
pricenumberTotal fare in the requested currency, or null when Google has not pre-computed one
currencystringISO currency code
airlinesarrayUnique marketing carrier IATA codes
airline_namestringPrimary operating airline display name
flight_numbersarrayCarrier + number per leg, e.g. ["AA2413"]
stopsintegerNumber of stops (0 = non-stop)
duration_minutesintegerTotal journey duration in minutes
departure_timestringFirst leg departure, ISO 8601 local time
arrival_timestringFinal leg arrival, ISO 8601 local time
legsarrayPer-leg detail (see below)
layoversarrayPer-stop airport, city and wait time, or null
co2_emissions_gintegerEstimated CO2 for this itinerary, grams
co2_emissions_typical_gintegerTypical CO2 for the route, grams
co2_emissions_delta_pctintegerPercentage difference from typical
emissions_tagstringlower, typical or higher
is_bestbooleanWhether Google flagged this as a best result
result_groupstringbest or other
booking_tokenstringOpaque token Google uses to deep-link this itinerary
source_searchstringWhich input search produced this row
scraped_atstringISO timestamp

Leg object

FieldTypeDescription
airlinestringMarketing carrier IATA code
flight_numberstringFlight number
operating_airlinestringOperating carrier, when different
departure_airportstringOrigin IATA
arrival_airportstringDestination IATA
departure_airport_namestringAirport display name
arrival_airport_namestringAirport display name
departure_timestringISO 8601 local time
arrival_timestringISO 8601 local time
duration_minutesintegerLeg duration
aircraftstringAircraft type, when Google publishes it
legroomstringSeat pitch, e.g. 31 in
cabinstringCabin for this leg
overnightbooleanWhether the leg arrives the next day
co2_emissions_gintegerLeg-level CO2 estimate

Who is it for?

  • Fare-monitoring teams tracking a fixed route set daily and alerting on price drops
  • Travel agencies benchmarking negotiated fares against the public Google Flights price
  • Corporate travel teams enforcing booking-window policy across a route catalogue
  • Fare-comparison and metasearch products needing a cheap structured price feed
  • Airline and airport analysts studying pricing volatility, stop patterns and capacity
  • Data teams building route-level price history for forecasting or emissions reporting

Pricing

Pay per result: $0.15 per 1,000 flight itineraries.

You are charged only for itineraries actually written to the dataset. A run that returns nothing is not billed.

How to use it

  1. Open the actor in Apify Console.
  2. Set your route: either fill in Origin, Destination and Departure date, or use the Search specs list to run several routes in one run.
  3. For a round trip, fill in Return date. Leave it empty for one-way.
  4. Choose the cabin class, passenger mix and maximum stops.
  5. Set currency, country and language to match the market you want to price.
  6. Optionally cap results per search to control cost.
  7. Leave the proxy at the default and click Start. Export as JSON, CSV or Excel.

Search spec format: JFK>LAX>2026-11-15 for one-way, JFK>LAX>2026-11-15>2026-11-22 for round-trip.

Output example

{
"origin": "JFK",
"destination": "LAX",
"departure_date": "2026-11-15",
"return_date": null,
"trip_type": "one-way",
"cabin": "economy",
"price": 189,
"currency": "USD",
"airlines": ["AA"],
"airline_name": "American Airlines",
"flight_numbers": ["AA2413"],
"stops": 0,
"duration_minutes": 380,
"departure_time": "2026-11-15T08:15:00",
"arrival_time": "2026-11-15T11:35:00",
"legs": [
{
"airline": "AA",
"flight_number": "2413",
"operating_airline": null,
"departure_airport": "JFK",
"arrival_airport": "LAX",
"departure_airport_name": "John F. Kennedy International Airport",
"arrival_airport_name": "Los Angeles International Airport",
"departure_time": "2026-11-15T08:15:00",
"arrival_time": "2026-11-15T11:35:00",
"duration_minutes": 380,
"aircraft": "Airbus A321neo",
"legroom": "31 in",
"cabin": "economy",
"overnight": false,
"co2_emissions_g": 312000
}
],
"layovers": null,
"co2_emissions_g": 312000,
"co2_emissions_typical_g": 340000,
"co2_emissions_delta_pct": -8,
"emissions_tag": "lower",
"is_best": true,
"result_group": "best",
"booking_token": "CjRIQ...",
"source_search": "JFK->LAX 2026-11-15",
"scraped_at": "2026-09-28T12:00:00.000Z"
}

Technical details

  • Stack: Node.js 24, apify SDK, impit HTTP client with Chrome TLS impersonation, tough-cookie for the consent cookie.
  • Transport: the public Google Flights results page. Google's GetShoppingResults RPC endpoint has been gated since August 2026 by an x-goog-batchexecute-bgr header that only the page's own JavaScript can produce, so this actor reads the same rows from the page's inline ds:1 data blob instead.
  • Encoding: the tfs URL parameter is a hand-rolled Protobuf message carrying trip type, per-direction date, origin/destination airports, cabin, stop ceiling and passenger codes. The encoder is 40 lines with no protobuf runtime dependency.
  • Consent: a pre-accepted SOCS cookie is sent on every request, which skips Google's EU consent interstitial.
  • Retries: a 200 response that carries no ds:1 blob is a known transient page variant and is retried up to three times with backoff. HTTP 429 and 503 are also retried; other HTTP errors fail fast.
  • Proxy: defaults to the Apify datacenter pool, which is sufficient when the request carries a Chrome TLS fingerprint. Residential proxy is available by changing the proxy input.

Known limits

  • Multi-city itineraries are not supported. Google loads multi-city results client-side through the gated RPC, so the page carries no rows to read. Search each leg separately.
  • Page 1 only. Google inlines every row it is willing to show for a route on one page. There is no deeper pagination to fetch, so a search returns what Google shows a browser on first load — typically 15 to 150 itineraries.
  • Premium-cabin and child fares are often unpriced. Google prices parties with children or infants client-side and frequently omits an aggregate fare for premium-cabin round trips. Those rows come through with price: null and a populated booking_token.
  • Prices are snapshots. Google's fares move on inventory buckets and can change within minutes. Treat each row as a point-in-time observation.
  • Low-traffic airports may return fewer rows. The actor sets the on-demand pricing flag Google uses for regional airports, but very thin routes can still come back with little or nothing.
  • Google can change the page shape. The ds:1 blob key and the row index layout are reverse-engineered. If Google reshapes the payload, the actor fails loudly with the marker line in the log rather than silently returning wrong data.

FAQ

Do I need a Google account or API key? No. The actor reads the same public results page a logged-out browser sees. No login, no token, no developer account.

Why is there no official Google Flights API? Google retired the public QPX Express API in April 2018 and now offers airfare data only through enterprise contracts. Scraping the consumer site is the only programmatic route for everyone else.

Why does my run return zero results? Open the run log and find the ds:1 marker line. If it shows a consent interstitial, a sorry page or a captcha, switch the proxy input to residential and re-run. If it shows AF_initDataCallback=true but key 'ds:1'=false, Google has reshaped the page and the actor needs an update.

Can I get business class prices? Yes — set the cabin class to business. Note that Google often omits an aggregate price for premium-cabin round trips, so you may see price: null on those rows even though the itinerary is returned.

How many flights do I get per search? One page load, which is everything Google inlines: typically 15 to 30 on a thin route, 100 or more on a busy one. There is no way to fetch more for the same search without changing the search.

Does it support one-way and round-trip? Yes, both. Round-trip prices are the combined return fare. Multi-city is not supported — see Known limits.

Support

Open an issue on the Actor's page for bugs or feature requests.

Changelog

0.1 — 2026-09-28

  • Initial build. Keyless extraction of Google Flights results from the public search page.
  • Hand-rolled Protobuf tfs encoder (trip type, dates, airports, cabin, stops, passengers) with no protobuf runtime dependency.
  • AF_initDataCallback ds:1 payload extraction and full itinerary decoding: price, currency, per-leg airline, flight number, airports, times, aircraft, legroom, cabin, layovers, CO2 and emissions tag.
  • SOCS consent cookie sent on every request to skip the EU interstitial.
  • Retry on the transient no-ds:1 page variant, on HTTP 429 and on HTTP 503.
  • One-way and round-trip support; multi-city explicitly rejected with a clear message.
  • Single-route fields plus a searches list for multi-route runs in one execution.
  • Defaults to Apify datacenter proxy; residential available via the proxy input.

Changelog

0.1 — 2026-09-28

  • Initial build. Keyless extraction of Google Flights results from the public search page.
  • Hand-rolled Protobuf tfs encoder (trip type, dates, airports, cabin, stops, passengers) with no protobuf runtime dependency.
  • AF_initDataCallback ds:1 payload extraction and full itinerary decoding: price, currency, per-leg airline, flight number, airports, times, aircraft, legroom, cabin, layovers, CO2 and emissions tag.
  • SOCS consent cookie sent on every request to skip the EU interstitial.
  • Retry on the transient no-ds:1 page variant, on HTTP 429 and on HTTP 503.
  • One-way and round-trip support; multi-city explicitly rejected with a clear message.
  • Single-route fields plus a searches list for multi-route runs in one execution.
  • Defaults to Apify datacenter proxy; residential available via the proxy input.

Changelog

0.1 — 2026-09-28

  • Initial build. Keyless extraction of Google Flights results from the public search page.
  • Hand-rolled Protobuf tfs encoder (trip type, dates, airports, cabin, stops, passengers) with no protobuf runtime dependency.
  • AF_initDataCallback ds:1 payload extraction and full itinerary decoding: price, currency, per-leg airline, flight number, airports, times, aircraft, legroom, cabin, layovers, CO2 and emissions tag.
  • SOCS consent cookie sent on every request to skip the EU interstitial.
  • Retry on the transient no-ds:1 page variant, on HTTP 429 and on HTTP 503.
  • One-way and round-trip support; multi-city explicitly rejected with a clear message.
  • Single-route fields plus a searches list for multi-route runs in one execution.
  • Defaults to Apify datacenter proxy; residential available via the proxy input.