curl --request GET \
--url https://api.brightdata.com/dca/collector/jobs \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.brightdata.com/dca/collector/jobs"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.brightdata.com/dca/collector/jobs', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.brightdata.com/dca/collector/jobs",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.brightdata.com/dca/collector/jobs"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.brightdata.com/dca/collector/jobs")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.brightdata.com/dca/collector/jobs")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"total": 3,
"offset": 0,
"limit": 50,
"data": [
{
"id": "j_example1234567890",
"status": "done",
"queued": "2026-07-02T12:21:04.121Z",
"started": "2026-07-02T12:21:04.387Z",
"finished": "2026-07-02T12:21:09.566Z",
"inputs": 1,
"page_loads": 1,
"total_pages": 1,
"failed_pages": 0,
"data_lines": 50,
"trigger": {
"type": "CP",
"user": "user@example.com",
"ip": "192.0.2.10"
},
"expired": "2026-07-19T00:00:00.000Z"
},
{
"id": "j_example0987654321",
"status": "done",
"queued": "2026-07-02T12:14:17.941Z",
"started": "2026-07-02T12:14:18.098Z",
"finished": "2026-07-02T12:14:25.122Z",
"inputs": 1,
"page_loads": 1,
"total_pages": 1,
"failed_pages": 0,
"data_lines": 50,
"trigger": {
"type": "CP",
"user": "user@example.com",
"ip": "192.0.2.10"
},
"expired": "2026-07-19T00:00:00.000Z"
}
]
}List Scraper Studio jobs
GET /dca/collector/jobs returns the Scraper Studio jobs in your account. Filter by scraper ID and date range, and paginate with offset and limit.
curl --request GET \
--url https://api.brightdata.com/dca/collector/jobs \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.brightdata.com/dca/collector/jobs"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.brightdata.com/dca/collector/jobs', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.brightdata.com/dca/collector/jobs",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.brightdata.com/dca/collector/jobs"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.brightdata.com/dca/collector/jobs")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.brightdata.com/dca/collector/jobs")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"total": 3,
"offset": 0,
"limit": 50,
"data": [
{
"id": "j_example1234567890",
"status": "done",
"queued": "2026-07-02T12:21:04.121Z",
"started": "2026-07-02T12:21:04.387Z",
"finished": "2026-07-02T12:21:09.566Z",
"inputs": 1,
"page_loads": 1,
"total_pages": 1,
"failed_pages": 0,
"data_lines": 50,
"trigger": {
"type": "CP",
"user": "user@example.com",
"ip": "192.0.2.10"
},
"expired": "2026-07-19T00:00:00.000Z"
},
{
"id": "j_example0987654321",
"status": "done",
"queued": "2026-07-02T12:14:17.941Z",
"started": "2026-07-02T12:14:18.098Z",
"finished": "2026-07-02T12:14:25.122Z",
"inputs": 1,
"page_loads": 1,
"total_pages": 1,
"failed_pages": 0,
"data_lines": 50,
"trigger": {
"type": "CP",
"user": "user@example.com",
"ip": "192.0.2.10"
},
"expired": "2026-07-19T00:00:00.000Z"
}
]
}GET /dca/collector/jobs to retrieve the Bright Data Scraper Studio jobs in your account. Filter the list by scraper ID and date range, and control pagination with offset and limit.
from_date and to_date are required. Use a narrower date range for faster responses and easier pagination.
collector parameter to return only that scraper’s jobs. Get scraper IDs from List Scrapers.Filter, paginate and sort
- Filter by scraper. Pass a scraper ID as the
collectorparameter to return only that scraper’s jobs. Get IDs from List Scrapers. - Paginate. Use
offsetandlimitto page through jobs. To retrieve the next page, increaseoffsetby the previouslimit, for exampleoffset=0&limit=100, thenoffset=100&limit=100.limitmust be between 0 and 500. - Sort. Use
sort_asc=1for ascending order orsort_asc=-1for descending order. The default is-1.
When to use this endpoint
- Build a dashboard that lists recent jobs for a scraper across a date range
- Audit job history and compute success rates from
inputs,data_linesandfailed_pages - Look up job IDs, then fetch per-job metadata with Job data
- Spot scrapers that need attention by watching
failed_pages
Errors
| Status | Cause | Fix |
|---|---|---|
400 Bad Request | Missing or malformed from_date or to_date | Send both dates in YYYY-MM-DD format |
401 Unauthorized | Token missing, malformed or revoked | Re-copy from Account Settings → API Tokens |
5xx | Transient Bright Data API error | Retry with exponential backoff, for example 1s, 2s, 4s |
Related
- List Scrapers: find the scraper
idto pass as thecollectorparameter - Job data: job-level metadata for a single job
- Receive batch data: download the records a job produced
- Trigger async batch collection: the endpoint that creates jobs
Authorizations
Use your Bright Data API Key as a Bearer token in the Authorization header.
How to authenticate:
- Obtain your API Key from the Bright Data account settings at https://brightdata.com/cp/setting/users
- Include the API Key in the Authorization header of your requests
- Format:
Authorization: Bearer YOUR_API_KEY
Example:
Authorization: Bearer b5648e1096c6442f60a6c4bbbe73f8d2234d3d8324554bd6a7ec8f3f251f07df
Learn how to get your Bright Data API key: https://docs.brightdata.com/api-reference/authentication
Query Parameters
Start date for the jobs list, in YYYY-MM-DD format.
"2026-06-01"
End date for the jobs list, in YYYY-MM-DD format.
"2026-07-13"
Scraper ID used to filter jobs for a specific scraper. Get IDs from the List Scrapers endpoint.
"c_example1234567890"
Number of jobs to skip before returning results. Used for pagination.
Maximum number of jobs to return. Must be between 0 and 500.
0 <= x <= 500Sort direction. Use 1 for ascending order or -1 for descending order.
1, -1 Was this page helpful?