FSFinOps Studio
Developer SDK Cookbook • Python 3 • Node.js 20+ • CLI (`npx`) • Zero Dependencies

Python & Node.js Recipes for Bank-Grade SEPA XML, NACHA `.ach`, BAI2, Peppol & DATEV

Stop maintaining brittle fixed-width column offsets, floating-point `CtrlSum` bugs, and annual ISO 20022 / EPC schema migrations inside your app codebase. Drop these 35-line standard-library scripts into your backend, Airflow DAG, or cron job for $0/month + $0.02/row.

1. Node.js 20+ — Generate 2026 ISO 20022 SEPA XML (`pain.001.001.09`)

Download .mjs

Validates every European IBAN via MOD-97, enforces 2026 EPC structured addresses (eliminating `BE04` bank rejections), and outputs ready-to-upload XML:

const res = await fetch(
  `https://api.apify.com/v2/acts/finops_studio~sepa-xml-generator/run-sync-get-dataset-items?token=${process.env.APIFY_TOKEN}`,
  {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({
      messageType: 'pain.001.001.09',
      initiatingPartyName: 'Acme Europe GmbH',
      debtorName: 'Acme Europe GmbH',
      debtorIban: 'DE89370400440532013000',
      debtorBic: 'COBADEFFXXX',
      debtorAddress: { townName: 'Berlin', postCode: '10117', country: 'DE' },
      executionDate: '2026-11-16',
      transactions: [
        {
          endToEndId: 'INV-2026-4410',
          creditorName: 'Nordic Cloud AB',
          creditorIban: 'NL91ABNA0417164300',
          amount: 2450.75,
          currency: 'EUR',
          remittanceInfo: 'Invoice 4410 Cloud Hosting',
          creditorAddress: { townName: 'Amsterdam', postCode: '1012', country: 'NL' }
        }
      ]
    })
  }
);
const [{ xmlContent }] = await res.json();

2. Python 3 — Generate 94-Character US NACHA Direct Deposit (`.ach`)

Download .py

Verifies 9-digit Federal Reserve ABA routing checksums (`3-7-1` MOD-10), computes entry hashes, and pads final output to strict `9999...` block-of-10 lines for Chase, BofA, Wells Fargo, Citi, and Silicon Valley Bank:

import json, os, urllib.request

url = f"https://api.apify.com/v2/acts/finops_studio~nacha-ach-file-generator/run-sync-get-dataset-items?token={os.environ['APIFY_TOKEN']}"
payload = {
    "immediateDestination": "021000021",
    "immediateDestinationName": "JPMORGAN CHASE",
    "immediateOrigin": "1999999999",
    "immediateOriginName": "ACME CORP INC",
    "companyName": "ACME CORP",
    "companyIdentification": "1999999999",
    "standardEntryClassCode": "PPD",
    "companyEntryDescription": "PAYROLL",
    "effectiveEntryDate": "261116",
    "originatingDfiIdentification": "02100002",
    "entries": [{
        "transactionCode": "22",
        "receivingDfiRouting": "026009593",
        "receivingAccountNumber": "9876543210",
        "amount": 3250.00,
        "individualId": "EMP-1042",
        "individualName": "JANE DOE"
    }]
}
req = urllib.request.Request(url, json.dumps(payload).encode(), {"Content-Type": "application/json"})
items = json.loads(urllib.request.urlopen(req).read())
open("payroll.ach", "w").write(items[0]["achContent"])

3. Python — Parse Corporate `BAI2` to JSON/SQL

Unwrap `88` continuation lines and verify `49/98/99` control totals from JPMorgan, BofA CashPro, and Wells Fargo CEO statements before loading into Postgres or Snowflake.

Download bai2_to_json_and_csv.py →

4. Python — Stripe/Shopify → German `DATEV` CSV

Generate certified `EXTF` v700 semicolon `Buchungsstapel` files (`SKR03` / `SKR04`) ready for German Steuerberater import in DATEV Rechnungswesen.

Download stripe_to_datev_skr04.py →

5. Instant Terminal CLI (`npx`)

Run any of our 10 financial tools straight from CI/CD or terminal without installing a package:

npx github:Geornaden/finops-studio sepa payload.json

Explore All 10 Cloud APIs →