Get the notable campaigns across watched brands
/v1/email/competitive/watchlist/notable// Requires Insights preview access for the organization.
const report = await bird.email.competitive.watchlist.notable({ range: 30 });
console.log(report);# Requires Insights preview access for the organization.
report = client.email.competitive.watchlist.notable(range=30)
print(report.model_dump_json())// Requires Insights preview access for the organization.
client, err := bird.NewClient(option.WithAPIKey(os.Getenv("BIRD_API_KEY")))
if err != nil {
log.Fatal(err)
}
ctx := context.Background()
report, err := client.Email.Competitive.Watchlist.Notable(ctx, bird.EmailCompetitiveWatchlistNotableParams{Range: 30})
if err != nil {
log.Fatal(err)
}
encoded, err := json.MarshalIndent(report, "", " ")
if err != nil {
log.Fatal(err)
}
fmt.Println(string(encoded))// Requires Insights preview access for the organization.
$report = $bird->email->competitive->watchlist->notable(['range' => 30]);
var_dump($report);bird email competitive watchlist notablecurl -X GET "https://us1.platform.bird.com/v1/email/competitive/watchlist/notable" \
-H "Authorization: Bearer $TOKEN" \
--url-query "range=30"{
"period": {
"days": 30,
"from": "2026-07-13T09:00:00Z",
"to": "2026-08-12T09:00:00Z"
},
"panel_status": "ok",
"data": [
{
"watchlist_brand_id": "cwb_01krdgeqcxet5s7t44vh8rt9mg",
"brand_name": "Allbirds",
"signal": "read_rate_standout",
"claim": {
"text": "Biggest send in 7 days"
},
"evidence": {
"ratio_to_median": 29.61,
"read_rate_observations": 66,
"mailbox_provider_spam_rate": 0.79,
"mailbox_provider_observations": 199
},
"mailbox_provider": "gmail",
"campaign": {
"id": "3914827265",
"subject": "The Summer Sale: 40% off everything",
"sent_at": "2026-08-09T14:02:00Z",
"image_url": "https://images.example.com/creatives/c154c8c4-6356-40e6-92d2-7c6727ec36ca.jpg",
"reach": 410000,
"read_rate": 0.228,
"has_creative": true,
"discount_percent": 40,
"inbox_rate": 0.879,
"spam_rate": 0.121
}
}
],
"truncated": false
}
Returns the campaigns worth a second look across every brand the workspace watches, surfaced for what they did rather than for when they were sent.
Each campaign carries the signal that surfaced it: an unusually big send for its brand, a campaign read unusually well for its brand, or heavy spam placement at one mailbox provider. Every signal compares a campaign against its own brand's history, never against your other brands, so several brands can carry the same signal in one period.
Up to 100 findings are returned. Selection takes turns across brands in watchlist order until the response is full, prioritizing spam placement, biggest sends, then read-rate standouts within a brand. Returned findings retain watchlist, signal, domain, and source order. Your own sending is never included.
An empty list is an ordinary answer, not a failure: a signal only fires on a campaign
that stands out for its own brand, and a watchlist of steady senders produces nothing.
Check panel_status to tell that apart from the panel being unreachable.
This is a separate request from the watchlist on purpose, so a slow or degraded panel read cannot delay the watchlist itself.
API-key calls require Insights preview access for your organization.
Query Parameters
rangeintegerHow many days back the response covers, counting from now. One of three fixed trend windows rather than an open date range, matching how a competitive-intelligence chart is read. Defaults to 30.
Possible values: 7, 30, 90
Response Payload
periodThe period the campaigns were observed in, as the panel resolved it.
Two things differ from the other competitive reads. It ends at the last instant of the previous whole day rather than at the moment of the request, so a campaign sent this morning is never among these. And the panel holds its selection for a period once it has made it, so two requests a minute apart return the same campaigns rather than differing slightly.
Show child attributes
period.daysLength of the period in days.
period.fromStart of the period, inclusive.
period.toEnd of the period, exclusive. Daily figures therefore run through the previous whole UTC day and never include the one in progress.
panel_statusWhether the panel could be read for this feed, and when it could not, why.
Possible values: ok, not_in_panel, no_data, unavailable
dataUp to 100 campaigns selected across watched brands. Selection takes turns across brands in watchlist order until the response is full, prioritizing spam placement, biggest sends, then read-rate standouts within each brand. Within one signal, rows compare the matching spam rate, volume ratio, or read rate descending; missing values sort last and ties retain tracked-domain and source order. Selected rows are returned in watchlist order, then biggest-send, read-rate, and spam signal order, followed by tracked-domain and source order.
One campaign may appear once per signal because each row carries different evidence.
Empty when nothing qualified; check panel_status to distinguish that from an
unavailable panel.
truncatedWhether Bird omitted eligible panel findings to keep this response to 100 rows. False does not promise that the panel observed every qualifying campaign in the period.
Related resources
Continue with the documentation, guides and examples for this topic.