ooligo
claude-skill

Prepare a forecast meeting from two weekly pipeline snapshots

Difficulty
intermediate
For
revops
RevOps

Stack

A sales manager preparing for a weekly forecast meeting needs to know which deals moved and what to ask the rep. This download compares two dated CSV snapshots for one rep. It produces a Markdown briefing with category totals, changed opportunity IDs and questions tied to each change. Use the fictional example first to see exactly which conclusions the data supports. Download the complete bundle.

Run the fictional example

Extract the ZIP into one directory. Open a terminal in the directory containing forecast.py. The runner requires Python 3.9 or later and uses the standard library. The sample needs zero vendor accounts, API calls or model tokens.

python3 forecast.py demo

The demo reads examples/pipeline-2026-10-16.csv and examples/pipeline-2026-10-23.csv, generates the briefing and compares its text with the included expected file. A match prints the report. A validation or fixture error exits with status 2 and a diagnostic. You can inspect the result before running anything. Expected briefing.

Each snapshot has four fictional opportunities for REP-F01. Across both weeks, five distinct IDs appear. Commit rises from $30,000 to $50,000, best case falls from $58,000 to $30,000 and upside rises from $20,000 to $32,000. Total open pipeline grows by $4,000. The larger $20,000 commit movement includes transfers between categories.

Pine Mill (D-101) moves from best case to commit, increases from $48,000 to $50,000 and shifts its close date from November 6 to November 20. Ask who confirmed the revised date. Cedar Loom (D-102) leaves commit and stays in the current export. Maple Ferry (D-104) disappears. Check its CRM status and export scope before labeling it won or lost. Fern Desk is unchanged. Amber Finch appears for the first time in the current file.

Compare your own authorized exports

Use two complete snapshots of the same rep’s open pipeline. Retain stable opportunity IDs across both dates. Match on ID even when the displayed account label changes. Use the same filters, currency and forecast-category definitions for both extracts. A silent filter change can resemble real pipeline movement and requires the export owner to investigate.

python3 forecast.py compare prior.csv current.csv

README.md specifies eight columns. The runner accepts reordered columns and rejects missing, unexpected or repeated headers. It checks that every row has the same rep and date within its file, both files represent the same rep, and the current snapshot falls 1–10 days after the previous one. That window is a sample policy for weekly meetings. A skipped week requires a fresh, comparable pair.

Use commit, best_case or upside as the category. Supply a nonnegative USD amount with up to two decimal places and an ISO close date. The runner sums integer cents to preserve exact amounts. Duplicate IDs, unsupported currencies, malformed rows, empty snapshots and invalid dates stop the comparison. Investigate an empty export separately because it cannot establish the rep or snapshot date.

Review the briefing with the rep

Read the category totals, then trace each changed ID to the two records. A new ID prompts a question about its appearance. An absent ID prompts a status and scope check. Changes to category, amount, close date or account label select fixed questions. The unchanged count helps reconcile a quiet week. The output contains observed fields and questions. The rep supplies the customer explanation and the manager owns the submitted forecast.

Use references/01-briefing-format.md to inspect the output sections. references/02-question-library.md explains how field changes select prompts. references/03-deal-deepdive-template.md gives the manager space to record confirmed context, an owner and a follow-up date after the meeting. Editing that worksheet leaves the calculated totals intact. The runner produces its briefing in English.

If the team wants an assistant to invoke the runner, the bundle includes SKILL.md for Claude. Copy the extracted bundle into .claude/skills/forecast-meeting-prep/ in the project and invoke /forecast-meeting-prep with the approved input paths. Check the processing environment before supplying real deals. The local Python command is sufficient for the entire fictional example. Claude Code skill setup.

Connecting Salesforce is a separate implementation

A Salesforce adapter must authenticate the requester and enforce their rights to the rep, records and fields before reading or exporting pipeline data. A service account carries its own permissions. Explicitly verify the requesting manager’s access in the adapter and test both an allowed and a denied caller before enabling live exports. Assign ownership for snapshot scheduling, storage permissions and retention. A CSV rep_id checks consistency within the supplied data. The file reader has no way to establish who originally extracted it. Salesforce access guidance.

When the sample fits

Choose this workflow for a repeatable conversation about changes between two exports. A spreadsheet pivot and manual notes are a reasonable baseline when there are few deals and the manager can already trace every change. Use the pipeline review prompt pack for a broader review or the forecast narrative workflow when the job is writing commentary around an approved forecast. Forecast accuracy, probability estimates and customer-call interpretation require evidence beyond these two files.

For a pilot, log source corrections, questions the manager keeps, unexplained movements and minutes spent preparing and reviewing the brief. Record any live export, storage and assistant costs separately. Compare the same meeting scope with the team’s existing process before claiming savings.

Verification. On November 2, 2026, the local runner matched the expected fictional briefing. Ten automated checks cover fixtures and failure cases. Run them with python3 -B test_forecast.py. A human-operated Salesforce or Claude deployment, actual pricing and meeting outcomes remain unverified.

Files in this artifact

Download all (.zip)