Highlights
- Sync client parity —
SyncBrightDataClientnow mirrors the async surface. Addsclient.datasets(fixes the
AttributeError), the 5 missing scrapers (scrape.tiktok/youtube/reddit/perplexity/digikey), the 2 missing
search verticals (search.tiktok/youtube), Pinterest trigger/status/fetch, and Instagram-searchprofiles/reels_all. - Service-level job verbs (colorless pattern) — every scraper now exposes generic
status/wait/fetch/
to_result(snapshot_id)(onBaseWebScraper), andDiscoverServicegainsstatus/wait/fetch/to_result(task_id).
A triggered job can be driven by its id alone, like the crawler. Purely additive — existingjob.fetch()etc. are unchanged. - Discover sync manual path —
SyncBrightDataClientaddsdiscover_status/discover_wait/discover_fetch/
discover_to_result(task_id)plus a colorlessDiscoverSnapshothandle. - Better dataset errors — failed snapshots now expose the API failure reason (and the raw status response as a fallback)
plus thesnapshot_id, instead ofDatasetError: Snapshot failed: None.SnapshotStatusretains the full response (.raw)
and matches more reason keys (error/error_message/message/failure_reason). The sync path inherits the fix.
⚠️ Breaking / Contract change
- Sync
discover_trigger()now returns aDiscoverSnapshot(a typed, drivable handle) instead of the async-onlyDiscoverJob,
which couldn't be used from sync.
Migration: poll viaclient.discover_status(snap.task_id)/client.discover_fetch(snap.task_id).
Full changelog: https://github.com/brightdata/sdk-python/blob/main/CHANGELOG.md