← Back to recipes

Automate monthly reporting with Claude Code

operationsadvancedemerging

The problem

Every month, someone spends hours pulling together reports - extracting data from your CRM, copying figures from spreadsheets, formatting everything into a Word document or slide deck for the board. It's tedious, error-prone, and the person who knows how to do it is a single point of failure.

The solution

Use Claude Code to build a reporting automation that pulls data from your sources, processes it, and generates a formatted report. Describe your current manual process; Claude builds a script that replicates it. Run it monthly with a single command. When requirements change, describe the change and Claude updates the script.

What you get

A monthly report generated automatically from your data sources. Consistent formatting, no copy-paste errors, runs in minutes instead of hours. The process is documented in code, so it survives staff turnover. You can also get intermediate data files for further analysis.

Before you start

  • Claude Code set up and working (see setup recipes)
  • Comfort running Claude Code commands (practice with simpler recipes first)
  • Access to your data sources (even if just as exported files)
  • A clear understanding of your current reporting process
  • At least one month of historical data to test with

When to use this

  • You create the same report every month with updated data
  • The report involves pulling from multiple data sources
  • Current process takes more than 2 hours monthly
  • Errors have crept in from manual copy-paste
  • You want the process documented so others can run it
  • You're worried about what happens when the report-creator leaves

When not to use this

  • The report changes significantly every month (it's more like analysis than reporting)
  • Data sources change frequently and unpredictably
  • You only create this report quarterly or annually (automation ROI is lower)
  • The data is highly confidential and can't go through any external service
  • A simple pivot table refresh would achieve the same result

Steps

  1. 1

    Document your current process in detail

    Write down every step you currently take to create the report. Be specific: 'Open Salesforce, run the Donations This Month report, export to CSV. Open the CSV, filter to only include completed donations, sum by fund code.' Include where files come from, what transformations you apply, and what the final output looks like.

  2. 2

    Gather example data sources

    Collect the data files from last month's report. Export from your CRM, download from Google Sheets, save copies of any spreadsheets you pull from. Put them all in one folder that Claude Code can access. Name them clearly: donations_dec2024.csv, volunteer_hours_dec2024.xlsx.

  3. 3

    Show Claude an example of the finished report

    Give Claude Code access to a completed report so it understands the target format. Say: 'This is the monthly board report we produce. I want to automate creating this from the raw data files.' Claude will analyse the structure and understand what output you need.

  4. 4

    Describe the workflow to Claude

    Walk Claude through your documented process: 'Here's how I currently create this report. Step 1: I load donations.csv and filter to only Status=Complete...' Include any business logic: 'Donations over £5000 need to be flagged. The overhead percentage is always 15% of direct costs.'

  5. 5

    Build the automation incrementally

    Don't try to automate everything at once. Start with the first data source: 'Let's start by just processing the donations data and creating the donations summary table.' Get that working, then add the next source. This makes debugging much easier.

  6. 6

    Test with historical data

    Run the automation on last month's data and compare to the report you manually created. Do the numbers match? If not, debug with Claude: 'The volunteer hours total shows 342 but my manual report shows 356. Can you check the calculation?' Fix discrepancies before moving on.

  7. 7

    Add narrative generation (optional)

    If your report includes written commentary, Claude can generate that too: 'Add a paragraph summarising the key trends in this month's data. Flag if donations are significantly up or down versus the previous month. Keep the tone factual and suitable for board trustees.'

  8. 8

    Create a simple run script

    Ask Claude: 'Create a simple script I can run each month. It should: 1) Ask me to confirm the data files are in the folder, 2) Process everything, 3) Generate the report, 4) Tell me when it's done and where to find the output.' This makes future runs one-click.

  9. 9

    Document for handover

    Ask Claude: 'Write documentation explaining: what this automation does, what files it needs, how to run it, common problems and solutions, and how to modify it if report requirements change.' Save this alongside the scripts. Your successor will thank you.

  10. 10

    Run with human review

    Even when automation is working, keep a human review step. The first few months, compare automated output to what you would have produced manually. Over time you'll trust it more, but never skip the final check before board papers go out.

Example code

Example prompt for board reporting automation

A sample initial prompt for automating a monthly board report.

I want to automate our monthly board report. Here's my current process:

DATA SOURCES (all in the 'data' folder):
1. donations.csv - exported from Salesforce, contains all donations this month
2. volunteer_hours.xlsx - manual spreadsheet tracking volunteer time
3. service_users.csv - exported from our case management system
4. budget_tracking.xlsx - our finance team's budget vs actuals

CURRENT MANUAL PROCESS:
1. Donations summary: Filter to Status=Complete, sum by Fund, count unique donors
2. Volunteer hours: Sum total hours, break down by activity type
3. Service users: Count new registrations, count active cases, count closed cases
4. Budget: Calculate variance (actual vs budget) for each budget line

REPORT SECTIONS:
- Executive summary (2-3 bullet points on key headlines)
- Fundraising table: Fund name, Amount raised, Number of donors, vs Last month
- Service delivery table: Metric, This month, Last month, Year to date
- Volunteer engagement: Total hours, breakdown pie chart data
- Financial summary: Budget line, Budget, Actual, Variance, RAG status
- Key risks and issues (I write this manually - don't automate)

OUTPUT FORMAT:
- Word document matching our template (attached example)
- Separate Excel file with all the underlying data tables

Let's start by just getting the donations summary working. The file donations.csv has columns: DonationID, Date, Amount, Fund, DonorName, Status, PaymentMethod.

Example prompt for iterating on the automation

How to refine the automation after initial testing.

The donations section is working but I noticed some issues:

1. Gift Aid eligible donations should be shown separately
   - There's a GiftAidEligible column (Yes/No) I forgot to mention
   - Add a row showing "Potential Gift Aid claim" = sum of eligible amounts * 0.25

2. The "vs Last month" comparison is wrong
   - You're comparing raw amounts but we need to compare like-for-like
   - Exclude any exceptional donations over £10,000 from the comparison
   - Add a note if there were exceptional donations

3. Please also add:
   - Average donation amount
   - Number of first-time donors (DonorType = "New")
   - Number of regular givers (PaymentMethod = "Direct Debit")

Can you update the donations processing and regenerate just that section?

Tools

Claude Codeservice · paid
Visit →
Anthropic APIservice · paid
Visit →

Resources

At a glance

Time to implement
days
Setup cost
low
Ongoing cost
low
Cost trend
decreasing
Organisation size
medium, large
Target audience
operations-manager, data-analyst, finance, ceo-trustees

Initial setup may take several Claude sessions (£5-15 total). Monthly runs cost £1-5 depending on data volume and report complexity. Time savings typically pay back within 2-3 months. Claude for Nonprofits 75% discount applies.