endpoint parameter for webhook delivery, or configure a cloud destination once and have every job write to it. The setup is identical for all scrapers; only the dataset_id changes.
Prerequisites
- A Bright Data account with an active API key
- Familiarity with the async request workflow
- For webhooks, a publicly accessible HTTPS endpoint (or a testing tool like webhook.site)
- For S3, an Amazon S3 bucket and permission to create IAM roles
Which delivery method should I use?
How to deliver results to a webhook
When you trigger an async collection with anendpoint URL, Bright Data sends a POST request to that URL with the scraped data once the job completes. No polling required.
Step 1: Set up a test webhook
For testing, use webhook.site to get a temporary public URL:- Open webhook.site in your browser
- Copy the unique URL displayed (e.g.,
https://webhook.site/abc-123-def) - Keep the page open to monitor incoming requests
Step 2: Trigger a collection with the webhook URL
Add theendpoint query parameter to your async /trigger request:
Step 3: Verify delivery
Once the collection completes (typically 30-60 seconds for a few records), check your webhook.site page. You should see aPOST request with the scraped data.
The payload is the same JSON array you would receive from a direct API download:
How to handle webhooks in production
For production, point theendpoint URL to your own server endpoint.
server.js
server.py
How to authenticate webhook deliveries
If your endpoint requires authentication, add thewebhook_header_Authorization parameter:
Which IPs do webhooks come from?
If your server uses an IP allowlist, add the following 14 Bright Data webhook source IPs:How to deliver results to Amazon S3
S3 delivery is configured once per scraper in the Control Panel. After setup, every job writes its results to your bucket automatically.Step 1: Create the IAM role
Bright Data writes to your bucket by assuming a role in your AWS account. Create a role that trusts Bright Data’s account422310177405, with your Bright Data customer ID as the external ID, and grant it s3:PutObject on your bucket.
The full policy and trust-relationship JSON is in Delivery options.
Step 2: Configure the delivery destination
- Navigate to your scraper configuration
- Click the Delivery settings tab
- Select Amazon S3 as the delivery destination
- Enter your credentials:
- Bucket name: Your S3 bucket name
- Role ARN: The IAM role ARN from Step 1
- Region: Your S3 bucket region
- Path prefix (optional): A folder path within the bucket (e.g.,
linkedin/profiles/)
- Select your preferred file format (JSON, NDJSON, or CSV)
- Click Save
Step 3: Trigger a collection
Trigger an async collection as normal. Results are delivered to your S3 bucket without any extra parameters:Step 4: Verify delivery
Once the collection completes, check your S3 bucket for the delivered file:s_m1a2b3c4d5e6f7g8h.json). Download and inspect it:
Troubleshooting
Webhook not receiving data?
Webhook not receiving data?
- Verify the URL is publicly accessible (not
localhost) - Check that your endpoint returns a
200status code within 30 seconds - Verify the 14 webhook IPs above are allowlisted if you have firewall rules
Receiving compressed data?
Receiving compressed data?
If you omit
uncompressed_webhook=true, data arrives gzip-compressed. Add uncompressed_webhook=true to your trigger URL, or decompress the payload on your server.Payload too large for your server?
Payload too large for your server?
Large collections can produce payloads up to 1 GB. Set
express.json({ limit: "100mb" }) in Express.js or equivalent in your framework. For very large datasets, use S3 delivery instead.Files not appearing in S3?
Files not appearing in S3?
- Verify the IAM role ARN and external ID are correct
- Check that the bucket policy allows
s3:PutObjectfrom Bright Data’s account - Ensure the bucket region matches your configuration
- Review delivery status in the Bright Data dashboard under Logs
Access denied errors on S3?
Access denied errors on S3?
Verify the trust policy on your IAM role includes Bright Data’s account (
422310177405) and that your external ID matches your Bright Data customer ID, found in Account settings.FAQ
Does delivery configuration differ per platform?
No. Webhook parameters and cloud destination setup are identical for every Bright Data scraper. Only thedataset_id in the trigger request changes.
Can I use a webhook and cloud storage at the same time?
Yes. Cloud delivery is configured per scraper in the Control Panel, and theendpoint parameter is set per request, so a single job can do both.
What happens if my webhook is down when a job finishes?
Bright Data retries delivery. If your endpoint stays unavailable, download the snapshot directly using thesnapshot_id returned by the trigger call; snapshots stay available for 30 days.