Skip to main content
This guide shows you how to scrape Google data at scale using the asynchronous /trigger endpoint. Use this when you have more than 20 inputs, need discovery by keyword, location or input filters, or want delivery to a webhook or S3.
Not sure whether to use sync or async? Read Understanding sync vs. async requests.

Prerequisites

Step 1: Trigger the collection

Send a POST request to the /trigger endpoint with your input array. This example collects five Google Maps places in a single batch:
curl -X POST \
  "https://api.brightdata.com/datasets/v3/trigger?dataset_id=gd_m8ebnr0q2qlklc02fz&format=json" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '[
    {"url": "https://www.google.com/maps/place/Empire+State+Building"},
    {"url": "https://www.google.com/maps/place/Central+Park"},
    {"url": "https://www.google.com/maps/place/Times+Square"},
    {"url": "https://www.google.com/maps/place/Statue+of+Liberty"},
    {"url": "https://www.google.com/maps/place/Brooklyn+Bridge"}
  ]'
You should see a 200 response with a snapshot_id:
{
  "snapshot_id": "s_m1a2b3c4d5e6f7g8h"
}
Save this ID. You need it to check progress and download results.

Discovery with async

Discovery is the primary reason to use async. Most Google discovery modes can return large result sets, and some require structured inputs that aren’t URLs. Discover Google Maps places by location:
curl -X POST \
  "https://api.brightdata.com/datasets/v3/trigger?dataset_id=gd_m8ebnr0q2qlklc02fz&format=json&type=discover_new&discover_by=location" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '[{"country": "US", "lat": 40.7484, "long": -73.9857, "zoom_level": 14, "keyword": "coffee shop"}]'
Discover Google Shopping products by keyword:
curl -X POST \
  "https://api.brightdata.com/datasets/v3/trigger?dataset_id=gd_ltppk50q18kdw67omz&format=json&type=discover_new&discover_by=keyword" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '[{"keyword": "wireless headphones", "country": "US"}]'
Discover Google Flights by input filters:
curl -X POST \
  "https://api.brightdata.com/datasets/v3/trigger?dataset_id=gd_mhng7wen1rw0a3gvpf&format=json&type=discover_new&discover_by=input_filters" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '[{
    "origin": "JFK",
    "destination": "LAX",
    "departure": "2026-06-15",
    "return": "2026-06-22",
    "trip_type": "round_trip",
    "adults": 1,
    "cabin": "economy"
  }]'
Discover Google Hotels by search:
curl -X POST \
  "https://api.brightdata.com/datasets/v3/trigger?dataset_id=gd_mg3gjfmg12tc2n5d4d&format=json&type=discover_new&discover_by=search" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '[{
    "search_term": "New York",
    "check_in_date": "2026-06-15",
    "check_out_date": "2026-06-18",
    "guest_number": 2,
    "country": "US",
    "currency": "USD"
  }]'

Step 2: Monitor progress

Poll the snapshot status until it shows ready. This takes 30 seconds to several minutes depending on input count and whether discovery is involved.
curl "https://api.brightdata.com/datasets/v3/progress/s_m1a2b3c4d5e6f7g8h" \
  -H "Authorization: Bearer YOUR_API_KEY"
Status values:
StatusMeaning
collectingScraping is in progress
digestingData is being processed
readyResults are available for download
failedThe collection encountered an error

Step 3: Download results

Once the status is ready, download the scraped data:
curl "https://api.brightdata.com/datasets/v3/snapshot/s_m1a2b3c4d5e6f7g8h?format=json" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -o results.json
You’ve successfully triggered, monitored and downloaded a batch Google scraping job. See the Download Snapshot API reference for format options and part-by-part download flow.

Skip polling with webhooks

If you don’t want to poll for status, add a webhook parameter to receive results automatically:
curl -X POST \
  "https://api.brightdata.com/datasets/v3/trigger?dataset_id=gd_m8ebnr0q2qlklc02fz&format=json&webhook=https://your-server.com/webhook" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '[{"url": "https://www.google.com/maps/place/Empire+State+Building"}]'
See Webhook delivery for the full setup.

Limits and constraints

ConstraintValue
Max inputs per async request5,000
Max input file size1 GB
Max concurrent batch requests100
Max concurrent single-input requests1,500
Webhook delivery sizeUp to 1 GB
API download sizeUp to 5 GB

Troubleshooting

You’ve exceeded the concurrent request limit. Reduce the number of parallel requests or combine inputs into fewer, larger batches. Each batch can include up to 1 GB of input data.
Check that all input URLs are valid and correctly formatted for the target Google product. Review the error details in the snapshot response or in the Logs tab of your Bright Data dashboard.
Individual inputs can fail while the overall job succeeds. Check the snapshot response for any errors field and retry failed inputs in a separate request.
Verify your discovery parameters. Location-based Maps discovery needs valid lat/long and a realistic zoom level (12 to 16). Flights discovery needs IATA codes and future dates. Hotels discovery needs a valid destination string.

Next steps

Webhook delivery

Push results to your HTTP endpoint automatically.

API reference

Full endpoint specs, parameters and response schemas.