Skip to content
Months Ahead

Import with AI

Let an AI assistant do the categorising

The built-in CSV importer is fully private but deliberately simple — it spots obvious repeats and leaves the judgement calls to you. If you'd rather have an AI read messy statements and sort them into income, bills and balances, copy the prompt below into an assistant like Claude, attach your CSVs, and restore the file it gives back.

One thing to know first. This is the one step that leaves your device — you're sharing your bank data with whichever AI assistant you choose, and its privacy terms apply, not ours. It's a deliberate trade-off for convenience. If you'd prefer nothing ever leaves your browser, use the in-app Import bank CSV option instead.

How it works

  1. Export your statements from your bank as CSV files.
  2. Open an AI assistant that accepts file uploads (e.g. Claude Desktop), paste the prompt below, and attach your CSV files.
  3. It returns a JSON backup. Save it as a file ending in .json (for example months-ahead-backup.json).
  4. Back here, open the ⋮ menu → Restore backup (JSON) and choose that file.

Restoring replaces your current data, so if you've already entered anything, export a backup first (same menu). Everything the AI produces is fully editable once it's in the app.

The prompt

Copy this, paste it into your assistant, and attach your CSV files.

You are helping me prepare a backup file for "Months Ahead" (monthsahead.app), a
free, private cashflow forecaster. I'm attaching one or more raw bank-statement
CSV files. Read them and produce a single JSON backup file I can restore into the
app.

WHAT TO PRODUCE
Output ONE JSON object (the backup envelope), and nothing else, in a single code
block I can save as "months-ahead-backup.json". Do not include commentary,
explanations, or the raw transactions — only the summarized model below.

EXACT SHAPE (match field names, types, and allowed values precisely):

{
  "app": "monthsahead",
  "version": 1,
  "exportedAt": "<current date-time in ISO 8601, e.g. 2026-06-03T00:00:00.000Z>",
  "model": {
    "accounts": [
      {
        "id": "<short unique string, e.g. acc1>",
        "name": "<account name>",
        "amount": <positive whole number>,
        "kind": "asset" | "debt",
        "include": true | false
      }
    ],
    "recurring": [
      {
        "id": "<short unique string, e.g. rec1>",
        "label": "<human label, e.g. Salary, Rent, Groceries>",
        "amount": <positive whole number>,
        "kind": "income" | "expense",
        "frequency": "daily" | "weekly" | "fortnightly" | "monthly" | "quarterly" | "annually",
        "nextDue": "<YYYY-MM-DD>",
        "endDate": "",
        "escalationPct": 0
      }
    ],
    "oneOff": [
      {
        "id": "<short unique string, e.g. evt1>",
        "label": "<label>",
        "amount": <positive whole number>,
        "kind": "income" | "expense",
        "date": "<YYYY-MM-DD>"
      }
    ],
    "settings": {
      "startDate": "<today as YYYY-MM-DD>",
      "horizonYears": 3,
      "returnPct": 0,
      "inflationPct": 3,
      "realDollars": false,
      "spendingAdj": 0
    }
  }
}

CRITICAL RULES
- All "amount" values are POSITIVE whole numbers. Never use negatives or decimals.
  Direction is carried by "kind", never by the sign of the number.
- Strip currency symbols, commas, and signs from amounts; round to whole dollars.
- Dates are "YYYY-MM-DD". "exportedAt" is a full ISO timestamp.

ACCOUNTS (one per statement / account you can identify)
- "amount" = the latest/closing balance in that statement, as a positive number.
- "kind": "asset" for money you have (everyday, savings, term deposit);
  "debt" for money you owe (credit card, loan, mortgage).
- "include": true for spending/savings accounts that fund day-to-day life.
  Set "include": false for big loans you're only servicing (e.g. a mortgage) —
  they still count in net position but shouldn't drain the forecast; their
  monthly repayment belongs in "recurring" instead.

RECURRING ITEMS (the important categorization)
- Group transactions with similar descriptions/amounts that repeat on a regular
  cadence (3+ occurrences). Examples: salary, rent/mortgage, utilities,
  subscriptions, insurance, regular groceries.
- Infer "frequency" from the typical gap between occurrences:
  ~1 day = daily, ~7 = weekly, ~14 = fortnightly, ~30 = monthly,
  ~91 = quarterly, ~365 = annually.
- "amount" = the median (typical) amount for that group.
- "kind": "income" for money in, "expense" for money out.
- "nextDue" = the next expected occurrence date (last seen date + one interval);
  if that's in the past, roll forward to the next future date.
- Leave "endDate": "" and "escalationPct": 0 unless a clear annual increase is
  evident, in which case set escalationPct to that yearly % (whole or decimal).

ONE-OFF EVENTS (optional)
- Large, clearly non-recurring amounts (a tax refund, a bonus, a big purchase).
  Skip ordinary one-time spending — only add events that materially move the
  balance.

If something is ambiguous, make a reasonable choice and keep going; the file is
fully editable in the app afterwards. Output only the final JSON.