Get Holiday Benchmark Data

Get holiday benchmark timeseries

Retrieve seasonal event benchmarking timeseries data (Holiday Index and Brand Benchmark) for a shopping event such as BFCM or Labor Day.

Returns a list of datapoints along the chosen x-axis, with value fields populated according to the chosen mode. Use this endpoint for time-indexed chart data across the event window. For a single period-to-date KPI summary, use POST /analytics/event/snapshot.

Enumerations

event — the seasonal event identifier:

  • "BFCM" — Black Friday / Cyber Monday
  • "laborDay"
  • "memorialDay"
  • "presidentsDay"

metric — the KPI to return:

  • "revenue" — net revenue
  • "orders" — order count
  • "priceLevels" — average unit price

Request

FieldRequiredTypeNotes
eventyesevent enumSee above.
metricyesmetric enumSee above.
xAxisyes"actualDate" | "daysFromEvent"Controls how dt is labeled in the response.
granularityyes"hourly" | "daily"hourly returns one datapoint per hour for the event day; daily returns one per day across the window.
modeyes"index" | "brand" | "brandWithIndex"Controls which fields are populated per datapoint.
yearnointeger (2021–2026)Which event year. Defaults to the most recently completed occurrence.
startyesISO 8601 datetime stringBeginning of the analysis window. For the Q4 dashboard view, pass Oct 1 of the event year. Ignored for hourly.
endyesISO 8601 datetime stringEnd of the analysis window. For the Q4 dashboard view, pass Dec 31 of the event year. For hourly, this is the single day to analyze.

With xAxis: "actualDate", each datapoint's dt is a full ISO datetime. With xAxis: "daysFromEvent", dt is a signed day offset as a string (e.g. "-3", "0", "2"). For granularity: "hourly", dt falls back to the ISO hour label regardless of xAxis.

Note on the daily window. For granularity: "daily" the returned range is always widened to reach the event day, so the effective window is [min(start, eventDay), max(end, eventDay)]. Requesting start and end that both sit on one side of the event still returns every day between your range and the event: for BFCM 2025 (event day 2025-11-28), start 2025-12-20T00:00:00Z / end 2025-12-25T00:00:00Z returns 28 datapoints beginning 2025-11-28, and start 2025-10-01T00:00:00Z / end 2025-10-10T00:00:00Z returns 59 datapoints ending 2025-11-28. Filter on dayOffset or dt client-side if you need a sub-window that excludes the event day.

Note also that the last bucket is rounded up to the next day boundary, so an end of 2025-12-05T23:59:59Z yields a final dt of 2025-12-06T00:00:00. That rounding adds a datapoint, so it compounds with the widening above — the first example sent with end 2025-12-25T23:59:59Z instead of 2025-12-25T00:00:00Z returns 29 datapoints, through dt 2025-12-26T00:00:00 (dayOffset 0 through 28). Both counts are correct; pass a day-aligned end when the datapoint count matters.

Note on prior-year windowing. Prior-year values on each datapoint align by days-from-event, not by calendar date. Because the event falls on a different calendar date each year (e.g. Black Friday is the fourth Friday of November, so 2024-11-29 corresponds to 2025-11-28), the prior-year window may extend beyond your requested end by up to ±6 days. The dayOffset field on each datapoint reflects the canonical event-offset and is consistent across years.

Response

{
  "currency": "USD",
  "data": [
    {
      "dt": "2025-11-26T00:00:00",
      "dayOffset": -2,
      "currentValue": 5200.15,
      "baselineValue": 4100.0,
      "priorYearValue": 4800.5,
      "currentYearIndex": 1.27,
      "priorYearIndex": 1.19,
      "brandIndex": 1.27
    }
  ]
}

dayOffset is a signed integer indicating each datapoint's position relative to the event (0 = event day, negative = before, positive = after). It is populated on daily responses and omitted on hourly responses. Use dayOffset for unambiguous year-over-year alignment: for any given offset, currentYearIndex / currentValue and priorYearIndex / priorYearValue represent the same event-relative day in different years.

Field population by mode:

FieldindexbrandbrandWithIndex
currentYearIndex●●
priorYearIndex●●
currentValue●●
baselineValue●●
priorYearValue●●
brandIndex●

All numeric fields are number | null. A null indicates the underlying brand or index row was missing for that cell (e.g. a brand with no prior-year data).

Rate limits

Uses the same rate limit as the /analytics/sitewide/* endpoints. Aggregated, cacheable data — see the Rate Limiting Reference.

Rate Limit: 10 requests per 30s window, refilling 5 tokens every 30s.

post/v25-10-beta/analytics/event/timeseries

Request

Request body

event'BFCM' | 'laborDay' | 'memorialDay' | 'presidentsDay' required

Seasonal event identifier. Supported values: "BFCM" (Black Friday / Cyber Monday), "laborDay", "memorialDay", "presidentsDay".

metric'revenue' | 'orders' | 'priceLevels' required

Metric to return. Supported values: "revenue" (net revenue), "orders" (order count), "priceLevels" (average unit price).

xAxis'actualDate' | 'daysFromEvent' required

How each datapoint's dt is labeled. "actualDate" returns an ISO 8601 datetime; "daysFromEvent" returns a signed integer string (e.g. "-3", "0", "2") relative to the event day.

granularity'hourly' | 'daily' required

"hourly" returns one datapoint per hour for the event day (uses the holiday_benchmarking_single_day dataset). "daily" returns one datapoint per day across a range spanning the event (uses holiday_benchmarking_multiple_days).

mode'index' | 'brand' | 'brandWithIndex' required

"index" returns industry-wide index values only (currentYearIndex, priorYearIndex). "brand" returns the caller's brand actuals vs baseline (currentValue, baselineValue, priorYearValue). "brandWithIndex" returns brand actuals plus the brand's own index (brandIndex) and industry index overlays.

yearinteger

Which year of the event to fetch (e.g. 2025 for BFCM 2025). Defaults to the most recently completed occurrence of the event. The prior-year comparison cohort is always year - 1. For hourly granularity, leave this unset or pass a year matching end's year — passing a mismatched year + end will yield nonsensical results.

startstring date-time required

Required. Start of analysis period as an ISO 8601 datetime string. Used to size the window before the event (days-before-holiday); does not influence which event year is fetched. For hourly granularity, ignored. To match the Intelligems dashboard's Q4 view, pass Oct 1 of the event year (58 days before BFCM).

endstring date-time required

Required. End of analysis period as an ISO 8601 datetime string. Used to size the window after the event (days-after-holiday); does not influence which event year is fetched. For hourly granularity this is interpreted as "the day to analyze" and is expected to fall within year. To match the Intelligems dashboard's Q4 view, pass Dec 31 of the event year (33 days after BFCM).

Response

OK

currencystring required

ISO 4217 currency code for monetary values (e.g. 'USD').

Example response

{
  "currency": "USD",
  "data": [
    {
      "dt": "2025-11-27T00:00:00Z",
      "dayOffset": -1,
      "currentValue": 84200.5,
      "baselineValue": 61350,
      "priorYearValue": 72180.25,
      "currentYearIndex": 1.37,
      "priorYearIndex": 1.18,
      "brandIndex": 1.37
    },
    {
      "dt": "2025-11-28T00:00:00Z",
      "dayOffset": 0,
      "currentValue": 152980.75,
      "baselineValue": 61350,
      "priorYearValue": 118420,
      "currentYearIndex": 2.49,
      "priorYearIndex": 1.93,
      "brandIndex": 2.49
    },
    {
      "dt": "2025-11-29T00:00:00Z",
      "dayOffset": 1,
      "currentValue": 121540,
      "baselineValue": 61350,
      "priorYearValue": 96310.5,
      "currentYearIndex": 1.98,
      "priorYearIndex": 1.57,
      "brandIndex": 1.98
    }
  ]
}

Changes

No recorded changes to this operation across all 1 revision of this API.