How does Foresight WFM work?
Fill an Excel template, upload it, set your forecast method and guardrails, then review and download an audited forecast, capacity plan, and optimized schedule — typically in 20–40 minutes. No integration project.
What are the three steps?
Gather
Fill the Excel template with your history.
Upload & set
Upload, pick a forecast method — or bring your own — and set your goals.
Review & download
Visualize results, fine-tune schedules, download everything.
Have your own forecast already? Use the BYOF template and we'll staff and schedule it.
What file do I need to upload?
What goes in the Build Data workbook?
A single Build Data .xlsx with the tabs and column names below. 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.
Can I bring my own forecast instead?
Yes. Use a smaller BYOF workbook when you already have an interval-level volume forecast and AHT pattern. 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.
What settings do I choose before a run?
What do forecast method, C2/P0/P1, and locale mean?
You pick how forecasting should run (or skip it with BYOF), set hard and soft coverage guardrails, and choose the country calendar for holidays and DST.
Which forecast method should I use?
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.
What are the staffing and coverage guardrails?
- C2 — Total staffing guardrailSet your guardrail for total staffed hours to stay between these multiples of total required hours.Defaults: 1.05 – 1.30
- P0 — Acceptable coverage rangeSet the widest coverage range you will accept in any single interval. The optimizer minimizes the number of intervals that fall outside it.Defaults: −15% / +50%
- P1 — Target coverage rangeSet the tighter range you want most intervals to land inside, and the share of intervals that should achieve it. The optimizer maximizes how many intervals fall within this range.Defaults: −10% / +10%; target share of intervals 90% (fixed).
How these work together: Foresight satisfies your total staffing guardrail (C2) first — it is a hard constraint, and any schedule that violates it is rejected. It then minimizes coverage-range violations (P0), and finally maximizes the intervals inside your target range (P1). Each goal is pursued only as far as it does not compromise the one above it, so the schedule lands as close to all three as your data allows.
How do holidays and DST get applied?
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.
What do I get when a run finishes?
How do I read the results?
The app shows summary inputs, model scores, staffing, schedules, constraint badges, and appendix grids — plus a Fine-tune tab for what-if edits.
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.
Common questions
- How long does a run take?
- Typically 20–40 minutes. Larger datasets can take longer. BYOF runs skip forecasting and are usually faster. You can close the run page and check back later — we email you when the run 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.