agentsclimarketplace

Money map

Skill djspiceroute/money-map

Ingest personal financial data from many sources - bank/credit-card CSV exports, finance-app exports (Copilot, Mint, Monarch, YNAB), Apple Card exports, and Plaid pulls - into one clean, de-duplicated, categorized transaction dataset, then turn it into a private local dashboard with spending, net-worth, recurring/subscription, debt, and trend insights. Use this skill whenever someone wants to combine statements or app exports, "import my transactions", build a personal finance or budgeting dashboard, track net worth, find subscriptions/recurring charges, de-duplicate merged statements, categorize spending, or analyze where their money goes - even if they only mention one CSV or don't say the word "dashboard". The user is typically non-technical and just provides exports; you do the plumbing.From its SKILL.md

Install
npx -y skills add djspiceroute/money-map

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

SKILL.md

7.7 KB, ~1.6k tokens by cl100k_base, as published. Nobody here has run it

money-map — personal finance ingestion & dashboard

Turn messy, heterogeneous financial exports into one trustworthy dataset and a private dashboard. Everything runs locally on the user's machine - no data is uploaded anywhere.

The user is usually non-technical. They will mostly drop CSV files in a folder (and optionally set up a live bank connection). Your job is to run the pipeline, make sensible decisions, and ask short, plain-language questions only when something genuinely needs their judgment (e.g. "is this $40 charge on two cards one purchase or two?").

The pipeline at a glance

  exports/pulls  ->  NORMALIZE  ->  MERGE + DEDUPE  ->  CATEGORIZE/ENRICH  ->  DASHBOARD
  (any format)      (one schema)   (flag duplicates)   (rules + detection)    (insights)

Five stages. Stages 1–4 ship as ready-to-run scripts in scripts/; stage 5 is a refresh routine built from rerunning the same scripts on new exports:

  1. Normalize every input to one canonical schema (ingest.py + adapters.py).
  2. Merge & de-duplicate the sources conservatively (dedup.py).
  3. Categorize & enrich - apply category rules, detect recurring charges, normalize account names (enrich.py; see references/enrichment.md).
  4. Build the dashboard from the clean dataset (build_dashboard.py; see references/dashboard.md).
  5. Refresh on a cadence (see references/refresh.md).

Read the linked reference file when you reach each stage; this file stays short on purpose.

Stage 1 - Normalize (the key idea: source adapters)

The hard part of financial data is that every exporter uses different column names, date formats, and sign conventions (some use negative for spending, some positive, some split debit/credit columns). The skill solves this with adapters: a small description of how one source's columns map onto the canonical schema. Auto-detection picks the right adapter from the file's headers; you rarely need to specify it.

Canonical schema (one row per transaction): date, description, amount (negative = money out), account, institution, category, subcategory, source

To ingest a folder of exports:

cd scripts
python ingest.py --in <folder-of-exports> --out canonical_transactions.csv

First run --inspect to show which adapter each file matched, so you can catch a misread before producing output:

python ingest.py --in <folder-of-exports> --inspect

Built-in adapters: Apple Card, Copilot, Mint, Monarch, YNAB, Plaid, plus two generic bank formats (single Amount column, or split Debit/Credit). Adding a new bank/app is one dict in adapters.py - see references/source-adapters.md.

For a live bank connection via Plaid, see references/plaid-setup.md. Convert a Plaid JSON dump with python plaid_to_csv.py dump.json --out plaid_canonical.csv. Apple Card cannot connect to Plaid; the user exports its CSV from card.apple.com.

Always sanity-check the sign after the first ingest: open a few rows and confirm purchases are negative and paychecks/refunds positive. A flipped sign is the single most common ingestion error.

Stage 2 - Merge & de-duplicate

When a long-history app export (the "backbone") is combined with a live bank/Plaid pull (the "top-up"), the same transaction often appears twice - sometimes under slightly different account labels. Deleting aggressively is dangerous: two identical coffees on one day really are two transactions. So the default is flag, don't delete.

python dedup.py --in canonical_transactions.csv plaid_canonical.csv --audit-only

This writes Duplicate Audit.md grouping suspected duplicates into:

  • EXACT - same date, amount, merchant AND same account. Almost always true duplicates; safe to remove all-but-one with --apply.
  • CROSS - same date, amount, merchant but DIFFERENT account/source. Usually a cross-source dupe, but sometimes the two legs of a transfer. Show these to the user before removing anything.

Only after the user reviews the audit, produce the master file:

python dedup.py --in canonical_transactions.csv plaid_canonical.csv \
    --out master_transactions.csv --apply        # removes EXACT dupes, keeps one

Stage 3 - Categorize & enrich

Make the dataset meaningful and tunable without code. All of this is driven by small editable CSVs so the user can correct mistakes and rebuild. See references/enrichment.md for the full method; the essentials:

  • Category rules (merchant_categories.csv: match, category) - substring -> category, applied to outflows only so a merchant rule never accidentally recategorizes income. Order matters (put specific rules before general).
  • Account aliases (account_aliases.csv) - merge generic labels like "CREDIT CARD" into real names and group them under an institution.
  • Recurring detection - automatically find subscriptions and bills by amount-repetition over time (see the method in references/enrichment.md): a merchant is "recurring" when it has enough charges, in enough separate months, clustered around a stable amount, at a regular cadence. Cadence (monthly/quarterly/annual) is inferred from the median gap between charges. Charges that stop for longer than expected are flagged as "possibly cancelled".
  • Recurring labels (recurring_labels.csv: match, label, category) - rename cryptic bank descriptors to friendly names.

Run the stage:

python enrich.py --in master_transactions.csv --out enriched_transactions.csv

Stage 4 - Build the dashboard

The clean dataset powers a single self-contained HTML dashboard (opens in any browser, no server, no internet). See references/dashboard.md for the build and the full list of screens and the insight each one provides - Overview, Net Worth, Spending (category treemap, calendar heatmap, merchants, income sources), Recurring/Subscriptions, Accounts, Debt & payoff simulators, Transactions, and multi-year Analytics/Insights.

Run the stage:

python build_dashboard.py --in enriched_transactions.csv --out "Finance Dashboard.html"

Stage 5 - Refresh

Personal finance data is never "done". See references/refresh.md for a simple monthly/weekly routine: re-export or re-pull, re-run ingest -> dedup -> build.

How to run this for a non-technical user

  1. Ask them to put all their exports in one folder (and help them export from each app/bank - references/source-adapters.md lists where each export lives).
  2. Run ingest.py --inspect, then ingest.py to normalize. Confirm signs.
  3. Run dedup.py --audit-only, summarize the audit in plain language, and ask about anything in the CROSS list before applying.
  4. Set up category/alias CSVs with sensible defaults; run enrich.py; invite them to correct any miscategorized merchants, then rebuild.
  5. Run build_dashboard.py and walk them through what each screen tells them.

Keep questions short and concrete, default to safe choices, and never delete their data without confirmation.

What ships with it: 24 files

101.9 KB alongside SKILL.md, 9 of them executable

scripts/

tests/

Gives 0 of the 12 instructions most finance skills give in ~1.6k tokens

Counted across 469 of the 469 authors here whose files we hold, read 2026-08-07

  • Extract date vendor amount and descriptionin 15 of 469, across 3 files
  • Scan folder for invoice filesin 14 of 469, across 2 files
  • Rename files to standard formatin 14 of 469, across 2 files
  • Show organization plan before movingin 14 of 469, across 2 files
  • Generate summary CSVin 14 of 469, across 2 files
  • Organize files by categoryin 13 of 469, across 1 file
  • Preserve original filesin 13 of 469, across 1 file
  • Flag files missing critical infoin 13 of 469, across 1 file
  • Produce the requested output filein 9 of 469, across 4 files
  • Build best, base, and worst case scenariosin 9 of 469, across 5 files
  • Implement backoff if rate limit errors occurin 8 of 469, across 3 files
  • Determine the weighted average cost of capitalin 8 of 469, across 4 files

Said here and by no other author read

  • run all processing locally
  • read the linked reference file at each stage
  • run ingest with inspect flag before producing output
  • check amounts for correct sign after first ingest
  • flag duplicates conservatively without deleting aggressively
  • ask the user to review cross-source duplicates before removing

Grouped from the skills themselves: near-identical wordings counted once, and counted by distinct author, so one author publishing three of these counts once. Length counted with cl100k_base; the agent that loads this file may tokenize it differently.

Keep looking

Skills are one crate of 325,949. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.