Skip to content

Generate a monthly P&L income statement

Generates a monthly income statement for the fiscal year with Revenue, COGS, Gross Profit, OpEx, and Net Income as rows.

Workflow · Close & Reporting | Role · Controller | Intermediate | 6 min | Updated Jun 2, 2026
The prompt

Copy and customize

prompt.txt
You are a controller producing a monthly income statement for the fiscal year.

Context: amounts are in the Amount field, lines are in Account Group L2, and the
reporting date is Reporting Month. Use the current fiscal year.

{pl_data}

Task: build a standard income statement with monthly columns.

Output format:
- Rows in this order: Revenue, COGS, Gross Profit, Operating Expenses, Net Income.
- One column per month, plus a YTD total column.
- Gross Profit and Net Income as computed subtotals, with the formula stated.
- Map each Account Group L2 line to exactly one statement row; place any line
  that does not clearly map under a labeled "Unmapped" row rather than guessing.
- Confirm the YTD column equals the sum of the monthly columns, and flag it if not.
Open in
We’ll copy the prompt and open the chat.
How to use

Run it in four steps

  1. Export the full fiscal year from the Amount field, grouped by Account Group L2 mapped to standard statement lines.
  2. Paste it into {pl_data}.
  3. Run it for the monthly statement with subtotals and a YTD column.
  4. Use it for layout, not as a system of record; check the mapping of any below-the-line items before it ties anywhere official.
When to use

When to reach for this prompt

Use this when you need a standard statement layout quickly, for a board-pack appendix, a lender, or an internal review. It is a mapping-and-formatting task more than an analytical one, which is where an assistant saves real time. It is not a system of record; if the output must tie to the GL to the dollar, generate it in the close system and use this for the readable layout only.
Example output

What you can expect back

Income statement — FY (Amount, by Account Group L2)

RowJanFebMarAprMayJunYTD
Revenue1,840K1,910K2,050K1,880K1,920K1,820K11,420K
COGS(552K)(573K)(615K)(564K)(576K)(546K)(3,426K)
Gross Profit1,288K1,337K1,435K1,316K1,344K1,274K7,994K
OpEx(1,010K)(1,040K)(1,065K)(1,090K)(1,120K)(1,150K)(6,475K)
Net Income278K297K370K226K224K124K1,519K

Formula: Gross Profit = Revenue - COGS; Net Income = Gross Profit - OpEx.

YTD ties to the sum of the monthly columns. No unmapped lines were found, though classification should be reviewed for any below-the-line items.

Limitations · Worth knowing

This prompt has real limitations you should understand.

A statement layout implies the numbers have been reconciled, but this one has only been formatted. The structure is correct; the mapping is the user's responsibility, and the mapping decisions are invisible on the page. Every Account Group L2 line is placed into one statement row, and a line that arguably belongs in COGS but lands in OpEx shifts Gross Profit with no trace. The "Unmapped" row catches the unknowns, not the confidently mis-mapped. Below-the-line treatment is the second exposure. Whether interest, tax, depreciation, and one-time items sit above or below Net Income changes the bottom line, and unless the L2 grouping is explicit about this the model picks a convention on its own. Sign conventions, intercompany eliminations, and rounding then mean a hand-built statement rarely matches the close system exactly. A statement that can be trusted to tie needs a complete and unambiguous mapping from every account to a standard line, with below-the-line items explicitly designated, before the prompt assembles it. That mapping is a property of the chart of accounts and the data model behind it, and it is what stands between a statement that ties to the GL and one that merely looks like it should.
Prerequisites

What your data needs to look like

  • An Amount field at monthly grain across the full fiscal year
  • A complete Account Group L2 mapping to standard statement lines
  • An explicit treatment of below-the-line items in the grouping
  • A consistent sign convention for costs
See it run on real data

See how FinanceOS handles this prompt on real financial data.

Book a 20-minute walkthrough. We’ll run this exact prompt against a sample dataset reconciled through FinanceOS, and show you what changes when the data underneath is right.

Book a walkthrough
The Hub

Join the FinanceOS Hub.

Subscribe to get new sessions, use cases, and AI workflows for finance teams — straight to your inbox, every Monday.

  • Weekly · ~4 min read
  • No spam, unsubscribe anytime
  • 2,400+ finance leaders