
Cash Flow Forecasting
- 92 installs
- 41 repo stars
- Updated March 13, 2026
- finsilabs/awesome-ecommerce-skills
Build a 13-week rolling cash flow forecast from platform sales data that accounts for processor holds, payment terms, seasonality, and receivables timing.
About
A skill for forecasting ecommerce cash flow based on when money actually moves, not when revenue is recognized. A developer uses it to model runway and working capital across sales channels with different payout timing.
- 13-week rolling forecast with per-channel cash timing
- Accounts for processor holds and delayed marketplace disbursements
Cash Flow Forecasting by the numbers
- 92 all-time installs (skills.sh)
- Ranked #527 of 1,106 Finance & Trading skills by installs in the Skillselion catalog
- Data as of Aug 3, 2026 (Skillselion catalog sync)
npx skills add https://github.com/finsilabs/awesome-ecommerce-skills --skill cash-flow-forecastingAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 92 |
|---|---|
| repo stars | ★ 41 |
| Last updated | March 13, 2026 |
| Repository | finsilabs/awesome-ecommerce-skills ↗ |
What it does
Build a 13-week rolling cash flow forecast from platform sales data that accounts for processor holds, payment terms, seasonality, and receivables timing.
Files
Cash Flow Forecasting
Overview
Cash flow forecasting predicts when money actually enters and leaves your bank account — not when revenue is recognized. For ecommerce businesses, cash and revenue timing diverge significantly: payment processors hold funds for days or weeks, inventory must be purchased and paid for weeks before it sells, and marketplace disbursements are bi-weekly or delayed by account reviews.
This skill guides you through building a 13-week rolling cash flow forecast using your platform's data, covering the key cash timing differences by sales channel, and setting up a simple model in a spreadsheet or BI tool that you update weekly.
When to Use This Skill
- When managing cash position and needing to know your runway
- When planning inventory buys and needing to confirm you have the cash to fund them
- When preparing for a fundraise and needing to show investors a 12–18 month cash model
- When stress-testing the business against a revenue shortfall scenario
- When selling on Amazon and managing bi-weekly disbursement timing
- When planning for seasonal cash flow gaps (Q1 trough after Q4 peak)
Core Instructions
Step 1: Pull your historical revenue and expense data from your platform
Before building a forecast, gather 12 months of actuals. Here is where to find the data by platform:
---
Shopify
1. Revenue data: Go to Analytics → Reports → Sales over time — export to CSV; this gives you daily/weekly/monthly gross sales, discounts, returns, and net sales 2. Order-level data: Go to Analytics → Reports → Orders over time — shows order count and AOV trends useful for projecting future orders 3. Finance summary: Go to Analytics → Finances summary — shows gross sales, discounts, returns, shipping charged, and net sales for any date range 4. Payouts: Go to Finances → Payouts — shows exactly when Shopify Payments transferred funds to your bank and the amount; this is your actual cash inflow history, not just revenue recognition 5. Export orders: Go to Orders → Export — download all orders with financial data; use this to build a detailed spreadsheet model
Shopify Payments cash timing:
- Standard payout: 2–3 business days after the transaction
- After confirming your payout schedule in Finances → Payout schedule, build this lag into your inflow model
---
WooCommerce
1. Revenue data: Go to WooCommerce → Analytics → Revenue — shows gross revenue, refunds, coupons, net revenue, and taxes by day/week/month; export to CSV 2. Orders export: Go to WooCommerce → Orders → Export — download order history with payment method, dates, and amounts 3. Payment gateway timing: Check your gateway dashboard (Stripe, PayPal, Square) for payout history and typical lag:
- Stripe: typically 2 business days
- PayPal: 1–3 business days (can vary for new accounts)
4. Expenses: WooCommerce does not track expenses natively; pull these from your accounting system (QuickBooks, Xero) or bank statements
---
BigCommerce
1. Go to Analytics → Store Overview — shows revenue, orders, and conversion trends; export to CSV 2. Go to Analytics → Purchase Funnel and Analytics → Marketing for additional revenue breakdowns 3. Use BigCommerce's data export API or connect via Stitch or Fivetran to pull order data into a spreadsheet or warehouse for multi-month analysis
---
Step 2: Map cash timing by channel
The most important step is understanding the lag between when revenue is earned and when cash arrives. Build a channel-by-channel timing table:
| Channel | Typical Cash Lag | Notes |
|---|---|---|
| Shopify Payments (credit card) | 2–3 business days | Set in Shopify under Finances → Payout schedule |
| Stripe (direct) | 2 business days | Configurable; can be daily |
| PayPal | 1–3 business days | New accounts may have longer holds |
| Amazon FBA | 14 days | Bi-weekly disbursements; check Seller Central → Payments |
| Amazon FBM | 14 days | Same bi-weekly schedule |
| eBay Managed Payments | 2 business days | Check eBay Payments dashboard |
| Walmart Marketplace | 14 days | Monthly disbursement cycle |
| Wholesale / Net-30 | 30 days | Invoice date to expected payment |
| Wholesale / Net-60 | 60 days | Factor in 2–5% bad debt rate |
| Buy Now Pay Later (Afterpay, Klarna) | 2–3 business days | BNPL providers pay merchant immediately; no customer lag |
Build this timing into your cash inflow schedule: For each week's projected revenue, create a separate row showing when that cash actually arrives. Revenue earned this week from Amazon arrives in the week two weeks from now.
Step 3: Build a 13-week rolling cash flow model
Use a spreadsheet (Google Sheets or Excel) with this structure. Update it every Monday morning.
Model structure (one column per week, 13 weeks forward):
WK1 WK2 WK3 WK4 ... WK13
OPENING CASH BALANCE
OPERATING INFLOWS
+ Shopify Payments (2-day lag from prior week sales)
+ Amazon disbursement (bi-weekly; map exact dates)
+ PayPal settlements
+ B2B/wholesale payments (net-30 invoices due this week)
OPERATING OUTFLOWS
- Inventory purchases (PO payments due this week)
- Inbound freight & duties
- 3PL / fulfillment fees (typically billed weekly)
- Outbound shipping not passed to customer
- Marketing & ad spend (credit card charge date, not spend date)
- Payroll (exact pay dates)
- Platform/software subscriptions
- Rent & facilities
- Customer refunds (process in same week issued)
- Sales tax remittances (quarterly — schedule known dates)
NET WEEKLY CASH FLOW
CLOSING CASH BALANCEGetting outflow data:
- Inventory payments: Pull open purchase orders from your supplier portal or inventory system; note the due date for each PO
- Marketing spend: Check your credit card statement for when ad platform charges clear (usually monthly billing cycle); Meta and Google bill in arrears or when threshold is reached
- Payroll: Use exact pay dates from your payroll system (Gusto, ADP, Rippling)
Step 4: Build base / bear / bull scenarios
Run three scenarios:
| Scenario | Revenue Assumption | Purpose |
|---|---|---|
| Base case | Current trajectory (prior 4-week average) | Day-to-day planning |
| Bear case | 70–75% of base case revenue | Stress test; answers "how long can we survive?" |
| Bull case | 120–125% of base case revenue | Upside planning; "can we fund the growth?" |
Critical rule: In the bear case, reduce inflows by the revenue shortfall percentage but do NOT reduce fixed outflows (payroll, rent, software). Only variable costs (COGS, marketing, variable fulfillment) should scale with revenue. This is the most common forecasting mistake — in a revenue downturn, fixed costs remain, which dramatically worsens cash position.
Runway calculation: Find the first week in the bear case where the Closing Cash Balance reaches your minimum viable cash threshold (typically 4–6 weeks of fixed operating costs). The number of weeks until that point is your runway under the bear case.
Step 5: Connect to live data for automatic updates
---
Shopify
Use Shopify's built-in Finances export (scheduled weekly) or connect via:
- Shopify + Google Sheets: Install the Sheets for Shopify app to sync orders and payouts automatically into your cash flow spreadsheet
- Shopify + Xero/QuickBooks: Use the Xero or QuickBooks Shopify integration to sync payout data into your accounting system, then build your forecast in your accounting tool
WooCommerce
- Connect WooCommerce → QuickBooks (via the official WooCommerce QuickBooks plugin) or WooCommerce → Xero (via the WooCommerce Xero extension)
- Use Metorik to export weekly revenue data into a CSV that feeds your spreadsheet model
Dedicated cash flow tools (all platforms)
These tools connect to your bank, payment processors, and ecommerce platforms to build automated cash flow forecasts:
- Float (floatapp.com): Connects to Xero/QuickBooks; great for 13-week cash forecasting
- Pulse (pulseapp.com): Simple cash flow tool with manual and bank-feed inputs
- Dryrun: More advanced; supports scenario modeling and connects to accounting systems
- Runway (runway.com): More comprehensive financial planning tool; connects to QuickBooks/Xero
Best Practices
- Update the 13-week forecast every Monday morning — use prior-week actuals to replace the oldest week's projection and roll the forecast forward one week
- Reconcile the forecast to your actual bank balance weekly — if there is a gap between forecast and actual closing balance, find it before it compounds
- Model Amazon payment timing explicitly — Amazon bi-weekly disbursements are the single largest source of cash timing surprises for marketplace sellers; map the exact disbursement dates for the next 13 weeks
- Build a minimum viable cash threshold — define the minimum cash balance needed to operate; alert yourself when the forecast shows cash approaching this floor
- Track the ad spend cash outflow date, not the spend date — Meta and Google bill monthly or when a threshold is reached; the credit card payment date is when cash leaves, not when impressions run
- Schedule tax remittances as known outflows — sales tax remittances, quarterly estimated income taxes, and VAT payments are predictable; put them on the calendar in the model
Common Pitfalls
| Problem | Solution |
|---|---|
| Confusing revenue with cash | A $50K wholesale invoice recognized in March will not generate cash until May under Net-60 terms; always model the timing layer separately |
| Ignoring seasonal inventory build-up | Heavy inventory spend in July–September (buying Q4 stock) causes a cash trough months before holiday revenue arrives; forecast the inventory payment schedule explicitly |
| Not modeling returns as cash outflows | Refunds are cash outflows that happen before you recover inventory; high-return categories need a return cash reserve modeled into weekly outflows |
| Ad spend lag not accounted for | Monthly credit card billings for ad platforms clear days after the billing period; model the card payment date as the cash outflow, not the daily spend date |
| Single-point estimate only | Always run base and bear scenarios; a model showing only the base case gives false confidence |
| Missing one-time outflows | Tax payments, insurance renewals, software annual contracts, and trade show expenses are predictable; add them to a forward calendar and populate the model |
Related Skills
- @ecommerce-budgeting-forecasting
- @financial-reporting-dashboard
- @profit-margin-analysis
- @unit-economics-tracking
- @marketplace-fee-reconciliation
{
"context": "Tests whether the agent correctly implements a 13-week cash flow model with the right inventory purchase timing logic, treats sales tax as a scheduled outflow, builds a one-time payment calendar, uses known transactions for near-term weeks, and keeps capital expenditures separate from operating cash flows.",
"type": "weighted_checklist",
"checklist": [
{
"name": "13-week / 91-day window",
"max_score": 8,
"description": "Forecast covers exactly 13 weeks (91 days forward), not a different horizon such as 12 weeks or 6 months"
},
{
"name": "Inventory lead time",
"max_score": 8,
"description": "Inventory purchase order receipt date is computed as PO date + lead_time_days (45 days), not as payment date directly"
},
{
"name": "Inventory payment after receipt",
"max_score": 8,
"description": "Inventory payment date is receipt date + payment_terms_days (30 days), not directly from PO date"
},
{
"name": "Target weeks of stock = 8",
"max_score": 8,
"description": "The inventory reorder logic targets 8 weeks of forward stock coverage (target_weeks_of_stock = 8)"
},
{
"name": "Sales tax as scheduled outflow",
"max_score": 10,
"description": "Sales tax remittance ($22,000) is modeled as a scheduled cash outflow in the outflow schedule, NOT deducted from inflows or treated as a revenue reduction"
},
{
"name": "One-time payment calendar",
"max_score": 10,
"description": "Software renewal ($28,000 at week 6) and trade show expense ($15,000 at week 9) are included as discrete one-time outflow entries in specific weeks"
},
{
"name": "Near-term known transactions",
"max_score": 12,
"description": "Weeks 1–4 use the specified known transaction amounts (confirmed PO payment week 2 = $95,000, confirmed customer payments week 3 = $67,000) rather than model-derived estimates for those entries"
},
{
"name": "Running cash balance",
"max_score": 8,
"description": "Running cash balance is computed as opening_cash + cumulative sum of net weekly cash flows (not recalculated from scratch each week)"
},
{
"name": "Outflow categorization",
"max_score": 8,
"description": "Output table separates outflows into at least two categories (e.g. operating/recurring vs one-time, or operating vs inventory vs one-time)"
},
{
"name": "CapEx separation",
"max_score": 10,
"description": "Capital expenditures are kept in a separate section or variable from operating cash flows — NOT mixed into the operating outflow total"
},
{
"name": "Opening balance carried forward",
"max_score": 10,
"description": "The $450,000 opening balance is used as the starting point for the running cash balance calculation"
}
]
}
13-Week Cash Flow Model for an Ecommerce Operator
Problem/Feature Description
Birchwood Supply Co. is an ecommerce business selling home organization products. Their operations team has been running the business on gut feel and a spreadsheet, but after nearly running out of cash during a slow January (they had ordered heavily for Q4 and the holiday revenue came in later than expected), the CEO has decided to build a proper short-term cash flow model.
They need a Python script that produces a 13-week forward-looking cash flow, giving them clear visibility into their net operating cash position each week. The business buys inventory from overseas suppliers who require payment 30 days after warehouse receipt, and the lead time from order placement to receipt is 45 days. Current inventory on hand is worth approximately $180,000 and they use a 40% COGS rate. The team targets maintaining 8 weeks of forward stock coverage.
The script also needs to handle the fact that some large outflows are not monthly — they have a $28,000 annual software contract renewal in week 6 of the forecast, a $15,000 trade show expense in week 9, and they remit quarterly sales tax at the end of the quarter (approximately $22,000 due in week 11). These are easily forgotten but material.
Finally, the ops team knows exactly what is happening in the first four weeks: they have a confirmed $95,000 purchase order payment due in week 2, scheduled payroll of $18,000 per week, and two confirmed customer payments totalling $67,000 arriving in week 3. They want the model to use these concrete commitments for the near term rather than relying on averages or models.
Output Specification
Produce a Python script cash_model.py that:
1. Generates a 13-week (91-day) cash flow forecast starting from an opening balance of $450,000. 2. Models inventory purchase order timing and payment dates based on the supplier terms and stock coverage target described above, using a sales forecast of $85,000/week base case. 3. Includes the one-time outflows (software renewal, trade show, sales tax remittance) at the specific weeks described above. 4. Uses the confirmed transaction amounts for weeks 1–4 (where specified above) rather than model-derived estimates. 5. Produces a week-by-week table showing: week number, total inflows, total outflows, net cash flow, and running cash balance.
The script should run with standard Python libraries. Output to console or a CSV file.
{
"context": "Tests whether the agent correctly implements channel-specific payment timing for multi-channel ecommerce, including exact payout lags, reserve rates, bad debt rates, Amazon bi-weekly disbursement logic, return cash outflows, and ad spend billing lag — rather than using naive averages.",
"type": "weighted_checklist",
"checklist": [
{
"name": "Shopify payout lag",
"max_score": 8,
"description": "Shopify Payments channel uses a payout lag of exactly 3 days (not 2 or another value)"
},
{
"name": "Amazon FBA payout lag",
"max_score": 8,
"description": "Amazon FBA channel uses a payout lag of exactly 14 days"
},
{
"name": "Amazon bi-weekly disbursement",
"max_score": 10,
"description": "Amazon FBA cash dates are snapped to bi-weekly disbursement cycles (not treated as daily or weekly continuous payouts)"
},
{
"name": "eBay reserve holdback",
"max_score": 10,
"description": "eBay channel applies a 5% hold rate, reducing the expected cash received to 95% of gross revenue"
},
{
"name": "B2B Net-30 payout lag",
"max_score": 8,
"description": "B2B wholesale (Net-30) channel uses a payout lag of exactly 30 days"
},
{
"name": "B2B bad debt rate",
"max_score": 8,
"description": "B2B wholesale channel applies a bad debt reduction of 2% (collectable amount = gross * 0.98)"
},
{
"name": "Return cash outflow",
"max_score": 10,
"description": "Returns are modeled as negative cash entries (cash outflows), not merely deducted from inflows — they appear as separate negative rows in the cash schedule"
},
{
"name": "Return rate applied",
"max_score": 8,
"description": "Return outflows use the stated 18% return rate on the relevant channel/category revenue"
},
{
"name": "Ad spend billing lag",
"max_score": 10,
"description": "Ad spend outflow is dated to when the credit card payment clears (billing date + clearing days), not the date the spend was incurred"
},
{
"name": "Per-channel cash dates",
"max_score": 10,
"description": "Each revenue entry produces a cash receipt date computed as sale date + channel-specific payout lag (not a uniform lag applied to all channels)"
},
{
"name": "Weekly net cash summary",
"max_score": 10,
"description": "Output includes a weekly summary aggregating net cash (inflows minus outflows) by week"
}
]
}
Cash Inflow Projection for a Multi-Channel DTC Brand
Problem/Feature Description
Meridian Home Goods is a direct-to-consumer brand selling premium kitchenware across four channels: their own Shopify storefront (processed through Shopify Payments), Amazon FBA, eBay, and a growing B2B wholesale line (Net-30 terms) with independent kitchen retailers. The finance team currently tracks sales in their ERP but has no visibility into when that revenue will actually land in their bank accounts. They need a Python script that takes a week-by-week sales forecast by channel and produces a precise cash inflow schedule — showing the expected cash receipt date and amount for each sale, not just the sale date.
The team has also flagged that their eBay storefront requires a reserve that is held back, and their B2B accounts occasionally result in uncollectible invoices. They want the model to reflect these realities. Additionally, their cookware and tableware products have a meaningful customer return rate (approximately 18%) and they want returns modeled as a cash cost in the schedule as well.
Finally, the business runs monthly paid social campaigns billed in arrears by the ad platforms. The finance team has been burned before when a large ad bill hit the bank account weeks after the spend occurred; they want the script to account for this correctly in the outflow schedule.
Output Specification
Produce a single Python script cash_projection.py that:
1. Accepts or hardcodes a sample weekly revenue forecast dataset (at least 8 weeks, covering the channels listed below) as input data defined within the script itself. 2. Computes a projected cash inflow schedule — a table/DataFrame with columns for the sale date, expected cash receipt date, channel, gross revenue, and expected cash received. 3. Models the return cash outflows for the cookware/tableware category at an 18% return rate, adding these as negative cash entries to the schedule. 4. Models the ad spend cash outflow schedule (use a sample monthly ad budget of $12,000 billed on the last day of the month with payment clearing 5 days later). 5. Outputs a combined cash schedule (inflows and outflows) sorted by cash date, and a weekly summary showing total net cash by week.
The script should run with standard Python data science libraries (pandas, numpy, etc.) and produce console output or a CSV file showing the results.
Input Files (optional)
No external input files are required. All sample data should be generated or hardcoded within the script.
{
"context": "Tests whether the agent uses Holt-Winters triple exponential smoothing with the correct parameters for seasonal ecommerce forecasting, generates bootstrap confidence intervals at the correct percentiles, and computes runway scenarios with the correct multipliers applied only to the revenue-driven (variable) portion of cash flows.",
"type": "weighted_checklist",
"checklist": [
{
"name": "statsmodels ExponentialSmoothing",
"max_score": 10,
"description": "Uses ExponentialSmoothing from statsmodels.tsa.holtwinters (not a different forecasting library or manual implementation)"
},
{
"name": "Additive trend",
"max_score": 8,
"description": "ExponentialSmoothing is initialized with trend='add'"
},
{
"name": "Additive seasonal",
"max_score": 8,
"description": "ExponentialSmoothing is initialized with seasonal='add'"
},
{
"name": "52 seasonal periods",
"max_score": 8,
"description": "seasonal_periods is set to 52 (weekly data, annual cycle)"
},
{
"name": "Damped trend",
"max_score": 8,
"description": "ExponentialSmoothing is initialized with damped_trend=True"
},
{
"name": "Bootstrap simulation",
"max_score": 8,
"description": "Confidence intervals are generated using fitted.simulate() with random_errors='bootstrap' (not analytical confidence intervals)"
},
{
"name": "1000 repetitions",
"max_score": 6,
"description": "The simulate() call uses repetitions=1000"
},
{
"name": "10th/90th percentile bounds",
"max_score": 8,
"description": "Bear case uses the 10th percentile (0.10 quantile) and bull case uses the 90th percentile (0.90 quantile) of the simulation"
},
{
"name": "Bear multiplier 0.70",
"max_score": 8,
"description": "Bear scenario applies a revenue multiplier of 0.70 (30% shortfall)"
},
{
"name": "Bull multiplier 1.20",
"max_score": 6,
"description": "Bull scenario applies a revenue multiplier of 1.20 (20% upside)"
},
{
"name": "Fixed costs not scaled",
"max_score": 12,
"description": "Fixed costs ($42,000/week: payroll, rent, software) are NOT multiplied by the scenario multiplier — only revenue-driven variable costs and inflows scale with the multiplier"
},
{
"name": "Runway output format",
"max_score": 10,
"description": "Results include runway_weeks (numeric or '>52 weeks'), minimum_balance, and minimum_balance_week for each scenario"
}
]
}
Cash Runway Forecast for Seasonal Ecommerce Business
Problem/Feature Description
Solstice Outdoor Gear is a seasonal ecommerce company selling camping and hiking equipment. Their revenue peaks sharply in May–August (summer) and has a smaller secondary peak in November–December (holiday gifts). The founding team is preparing for a Series A pitch and their lead investor wants to see a rigorous 52-week cash flow projection showing how long the business can operate under different revenue outcomes before needing to raise.
The CFO has three years of weekly revenue data and wants a Python script that: (1) fits a forecasting model to the historical data to project the next 52 weeks of revenue, capturing both the upward trend and the seasonal pattern; (2) converts that revenue forecast into a cash runway model by combining it with the company's known weekly fixed costs ($42,000/week: payroll $25k, rent $8k, software/ops $9k) and variable costs (COGS at 38% of revenue, marketing at 12% of revenue); (3) shows the runway under multiple revenue scenarios so the board can see the downside risk clearly.
The company has $1,200,000 in the bank today. The script should show the investor exactly when cash hits zero under each scenario — or confirm there is no cash-out event within the 52-week window.
Output Specification
Produce a Python script runway_forecast.py that:
1. Generates or hardcodes 3 years of synthetic historical weekly revenue data that exhibits seasonal patterns consistent with an outdoor gear business (summer peak, smaller Q4 peak, weekly granularity = 156 data points). 2. Fits a forecasting model to the historical data and produces a 52-week forward forecast with confidence bands. 3. Computes net weekly cash flow for each scenario by combining the revenue forecast with weekly fixed costs ($42,000) and variable costs (COGS 38%, marketing 12%). 4. Calculates the cash runway for each scenario starting from an opening cash balance of $1,200,000. 5. Outputs a results summary (to console or CSV) showing: scenario name, weeks until cash reaches zero (or ">52 weeks"), minimum cash balance, and the week of minimum balance.
Delete any intermediate large files if generated. The script should run end-to-end with standard Python data science libraries.
{
"name": "finsi/cash-flow-forecasting",
"version": "0.1.0",
"summary": "Forecast cash flow using historical sales patterns, payment terms, seasonal trends, and receivables modeling with scenario planning and runway tracking",
"skills": {
"cash-flow-forecasting": {
"path": "SKILL.md"
}
}
}