2026-03-22 23:30:38 -04:00
2026-03-22 23:30:38 -04:00
2026-03-22 23:30:38 -04:00
2026-03-22 23:30:38 -04:00
2026-03-22 23:30:38 -04:00
2026-03-22 23:30:38 -04:00
2026-03-22 23:30:38 -04:00
2026-03-22 23:30:38 -04:00
2026-03-22 23:30:38 -04:00
2026-03-22 23:30:38 -04:00
2026-03-22 23:30:38 -04:00
2026-03-22 23:30:38 -04:00
2026-03-22 23:30:38 -04:00
2026-03-22 23:30:38 -04:00
2026-03-22 23:30:38 -04:00
2026-03-22 23:30:38 -04:00
2026-03-22 23:30:38 -04:00
2026-03-22 23:30:38 -04:00
2026-03-22 23:30:38 -04:00
2026-03-22 23:30:38 -04:00

FargoImport extractor

This utility reads a HAR-style JSON file (for example posted.dat), scans:

  • log.entries[*].response.content.text

It only processes text values that start with:

  • /*WellFargoProprietary%

For each matching value, it extracts the JSON string between:

  • start: /*WellFargoProprietary%
  • end: %WellFargoProprietary*/

Then it parses that extracted string with Python json.loads and outputs the resulting Python objects.

Run

python .\main.py --input .\posted.dat

Optionally write extracted objects to a file:

python .\main.py --input .\posted.dat --output .\extracted.json

Show parse/skip errors while extracting:

python .\main.py --input .\posted.dat --show-errors

For HAR files where the payload is specifically at /log/entries/0/response/content/text, use:

python .\main.py --input .\checking.dat --entry0-only --output .\checking_extracted.json

Programmatic usage

from wf_debit_extractor import WellsFargoPayloadExtractor

extractor = WellsFargoPayloadExtractor()
objects = extractor.extract_from_file("posted.dat")

# For entry0-only HAR variants:
# objects = extractor.extract_from_file("checking.dat", entry0_only=True)

# Access converted Python objects.
print(len(objects))
print(extractor.get_objects()[0])

# Optional: review skipped/parse errors.
print(extractor.errors)

Legacy imports from main still work, but wf_debit_extractor is now the preferred module for programmatic use.

Transaction Processing

Once you've extracted WellsFargo payloads, use transaction_processor.py to extract and transform transaction data.

from transaction_processor import TransactionProcessor
from wf_debit_extractor import WellsFargoPayloadExtractor

# Extract payloads
extractor = WellsFargoPayloadExtractor()
payloads = extractor.extract_from_file("posted.dat")

# Process transactions
processor = TransactionProcessor()
transactions = processor.extract_transactions(payloads)

# Each transaction has:
#  - id (string)
#  - transaction_amount_cents (integer, e.g., 9.11 → 911)
#  - transaction_date_timestamp (milliseconds since epoch)
#  - transaction_date_datetime (Python datetime object)
#  - post_date_timestamp (milliseconds since epoch)
#  - post_date_datetime (Python datetime object)
#  - transaction_description (string)

for txn in transactions:
    print(txn["id"], txn["transaction_amount_cents"], txn["transaction_description"])

See example_usage.py for a working example that also saves all transactions to processed_transactions.json.

YNAB Integration

Use ynab_client.py to fetch transactions from your YNAB account. Configuration is loaded from ynab.yml which should contain your YNAB token, plan ID, and account IDs to track.

from ynab_client import YNABClient

# Initialize with config file
client = YNABClient("ynab.yml")

# Fetch transactions from past 30 days
transactions = client.get_transactions_for_days(days=30)

# Each transaction includes:
#  - id
#  - date (YYYY-MM-DD)
#  - payee_name
#  - category_name
#  - amount_milliCurrency (in milliCurrency units, divide by 1000 for dollars)
#  - memo
#  - account_id
#  - account_name
#  - cleared (cleared status)

for txn in transactions:
    print(f"{txn['date']} | {txn['payee_name']} | ${txn['amount_milliCurrency'] / 1000:.2f}")

# Get account balance
balance = client.get_account_balance("7282c2e6-0470-423d-9748-ec36e29f5698")
print(f"Balance: ${balance / 1000:.2f}")

See ynab_example.py for a complete example that also saves all transactions to ynab_transactions.json.

ynab.yml Format

ynab:
  - token: "your_ynab_api_token_here"
    plan_id: "your_budget_id_here"
    accounts:
        - name: "Credit Card"
          id: "account_id_here"

Integration & Reconciliation

Use reconcile.py to fetch both WellsFargo and YNAB transactions side-by-side for reconciliation.

python .\reconcile.py

This will:

  1. Extract WellsFargo transactions from posted.dat
  2. Fetch YNAB transactions for past 30 days
  3. Display summary comparison
  4. Save combined report to reconciliation_report.json

Example Output

============================================================
RECONCILIATION SUMMARY
============================================================
WellsFargo transactions: 179
WellsFargo total: $5,432.15

YNAB transactions: 42
YNAB total: $3,210.50
============================================================

Note: Ensure your YNAB API token in ynab.yml is valid and has permission to access the budget/plan specified.

Description
Import Wells Fargo transactions from HAR into YNAB
Readme 66 KiB
Languages
Python 98.5%
Batchfile 1.5%