How it works

From spreadsheet to optimized schedules in three steps.

1

Gather

Fill the Excel template with your history.

2

Upload & set

Upload, pick a forecast method — or bring your own — and set your goals.

3

Review & download

Visualize results, fine-tune schedules, download everything.

Input format in detail

The input file

Foresight expects a single Build Data workbook (.xlsx) with exactly these tabs and column names. The validator checks your upload before a run starts and returns plain-English fix lists.

historic-daily

Columns: date, volume, x1

Weekly history for forecasting. Minimum ~67 complete Sun–Sat weeks; ~130 weeks recommended for seasonal models.

interval-volume

Columns: date + 48 half-hour columns (00:00 … 23:30)

Intraday volume pattern. Needs at least 52 complete weeks in the design window.

interval-aht

Columns: date + 48 half-hour columns

Average handle time by interval. Minimum ~6 complete weeks.

forecast-daily

Columns: date, x1

Future dates to forecast. Must be continuous, unique, and sorted.

inputs

Columns: date, % auxilary time, % absence, % efficiency, % proficiency, sla-%, sla-wait time (s), effective chat concurrency, non-live channel?, hitl % auto, hitl % semi auto, closure

One row per forecast date. Percent columns as fractions 0–1; flag columns 0 or 1.

hoop

Columns: days_of_the_week, hoop_begin, hoop_end

Hours of operation per weekday (sun–sat). Times as Excel time values.

schedule change

Columns: schedule change (weeks)

Required. One cell: a positive whole number of weeks between schedule revisions (1, 2, 4, …). Blank, zero, negative, or decimal values fail validation.

Date columns must be real Excel dates (not text), unique, sorted, and gap-free within each tab. Interval tabs must use 48 half-hour headers from 00:00 through 23:30.

Bring-your-own-forecast (BYOF) file

Already have an interval-level forecast? Use a smaller BYOF workbook instead of full Build Data. Foresight skips forecasting and goes straight to staffing and schedule optimization. The upload validator checks these tabs the same way the engine does (validate_byof_data).

interval-forecast

Columns: date, day, forecasted_daily_volume + 48 half-hour columns (00:00 … 23:30)

Your interval-level volume forecast. Continuous dates spanning at least one full Sunday–Saturday week. Interval cells must be numeric. Do not include event or DST columns — if present (e.g. copied from a report appendix), they are ignored.

aht-pattern

Columns: day + 48 half-hour columns (same headers as interval-forecast)

Weekly AHT pattern in seconds. Exactly one row per weekday (sun…sat).

inputs

Columns: date, % auxilary time, % absence, % efficiency, % proficiency, sla-%, sla-wait time (s), effective chat concurrency, non-live channel?, hitl % auto, hitl % semi auto, closure

Identical to Build Data. One row per horizon date — dates must match interval-forecast exactly.

hoop

Columns: days_of_the_week, hoop_begin, hoop_end

Identical to Build Data. Required so scheduling can read hours of operation.

schedule change

Columns: schedule change (weeks)

Identical to Build Data — positive whole number of weeks.

Tip: download the BYOF template tile above (or from the new-run wizard), replace the example rows, and upload. After a full run you can also build a filled sample from that report's appendix tabs plus your Build Data inputs / hoop / schedule change using scripts/make_byof_sample.py.

Run settings explained (forecast methods, C2/P0/P1, locale)

Run settings

Forecast method

Used only for full Build Data runs. BYOF mode hides this choice — your uploaded forecast is used as-is.

  • Auto (recommended): runs all models in both families; lowest MAPE wins.
  • Contact rate: force the contact-rate family's best model.
  • Volume: force the volume family's best model.

Guardrails (advanced)

  • C2 (1.05–1.30 default): hard band on total staffed vs needed — the optimizer must stay inside.
  • P0 (-15% / +50% default): signed coverage band — lower is usually negative (e.g. -15 means an interval may fall to 85% of need) before it counts as a violation.
  • P1 (-10% / +10% default): tighter signed band the optimizer tries to keep at least 90% of intervals inside. Widen if schedules look over-constrained.

Locale — holidays & DST

Pick the country whose public holidays should shape the calendar. Holiday adjustments are learned from your historical volume — use history from the same country. DST transition weeks are derived automatically from a representative timezone for that country.

Understanding your results

Reading your results

Summary of Inputs

Date ranges, HOOP, and operating assumptions.

Model Selection

Every candidate model, MAPE, and the winner.

Forecasted Staffing

Weekly volume and FTE agents required.

Shifts & Schedules

Editable shift grid and optimized start counts.

Model Metrics

C2/P0/P1 pass badges and coverage ratios.

Appendix

Interval forecast, AHT, needs, and comparison grids.

The Fine-tune tab in the app lets you adjust shift-start counts and see coverage update live. Changes are what-if only — download the report for the official optimized schedule. BYOF runs show a slim Your forecast tab (no model tournament or volatility card) and the Excel report omits Summary of Inputs / Model Selection.

FAQ
How long does a run take?
Typically 20–40 minutes depending on data size. BYOF runs skip forecasting and are usually faster. You can close the run page and check back later; when email notifications are enabled, we also notify you when it finishes.
What is bring-your-own-forecast (BYOF)?
If you already have an interval-level volume forecast and AHT pattern, upload a BYOF workbook instead of full Build Data. Foresight staffs and schedules from your forecast without running the model tournament.
What happens to my data?
You can keep multiple completed runs and start up to a few at once. Uploaded files and outputs auto-delete after 30 days; signing out clears all of your runs.
What file limits apply?
Excel (.xlsx) only, 25 MB maximum.

Still stuck? Contact us.

Ready to right-size your staffing?

Currently onboarding a limited number of beta teams.