Skip to main content

SpendSignal

A deterministic behavioral feedback loop for personal purchases.

v0.7.0 · PyPI · Private (in development)


The loop

purchase (item level)
  → reflect  — answer questions about each item
  → knowledge base grows
  → deterministic engine — same input, same output, always
  → query your own history
  → answer grounded in your behavior

Run the full loop right now with the demo data:

pip install spendsignal

# 1. What does my history say about protein powder? (uses committed demo data)
spendsignal summarize --purchases fixtures/purchases.jsonl \
  --feedback fixtures/feedback.jsonl --subject protein-powder

# 2. Have I bought anything like protein powder?
spendsignal retrieve --purchases fixtures/purchases.jsonl \
  --feedback fixtures/feedback.jsonl --query "protein powder"

# 3. Answer questions — build your own knowledge base
spendsignal reflect --purchases fixtures/purchases.jsonl \
  --feedback fixtures/feedback.jsonl

# 4. Summarize again — your answers are now in the output
spendsignal summarize --purchases fixtures/purchases.jsonl \
  --feedback fixtures/feedback.jsonl --subject protein-powder

The fourth command returns different output than the first. Your feedback changed it. That is the loop.

Clone the repo to run the demo commands against the committed fixtures:

git clone git@github.com:YemaneSG/SpendSignal.git && cd SpendSignal

Your Amazon data

Amazon lets you download your full order history as a CSV with real item-level detail.

amazon.com → Account & Lists → Download Order Reports → Request Report → Download
# One command: converts your orders to SpendSignal format
spendsignal ingest --csv ~/Downloads/amazon-orders.csv

# Same loop, your real data
spendsignal reflect
spendsignal retrieve --query "protein powder"
spendsignal summarize --subject protein-powder

No bank credentials. No receipt photos. No API keys.


How it works

Four JSON schemas in schemas/ define the contracts. Same input in, same output out.

purchase-event        → what you bought and what was in the basket
reflection-exposure   → when you were asked about an item
feedback-event        → your answer (worth_it, would_buy_again, still_using)
evidence-summary      → the deterministic output of querying your knowledge

The engine lives in src/spendsignal/aggregate.py. It takes event streams, resolves supersession (you can change your mind — old answers are preserved), and returns an EvidenceSummary with coverage, per-axis distributions, contradictions, contributing event IDs, and explicit abstention when evidence is insufficient.

It never invents a score. Missing evidence = explicit abstention, not a guess.


License

MIT. See LICENSE.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

spendsignal-0.7.0.tar.gz (50.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

spendsignal-0.7.0-py3-none-any.whl (35.3 kB view details)

Uploaded Python 3

File details

Details for the file spendsignal-0.7.0.tar.gz.

File metadata

  • Download URL: spendsignal-0.7.0.tar.gz
  • Upload date:
  • Size: 50.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.13.15

File hashes

Hashes for spendsignal-0.7.0.tar.gz
Algorithm Hash digest
SHA256 518dd954c0e3d230bb6844361b3d58abdf784f357ae59bbabf7bfab03bca71ab
MD5 8444d861bbd6ee9e0037efe1579915ab
BLAKE2b-256 f6b8faca2f8018c933a0932655362be340a2376a0ab28be1f4bae399f2f4ebb9

See more details on using hashes here.

File details

Details for the file spendsignal-0.7.0-py3-none-any.whl.

File metadata

  • Download URL: spendsignal-0.7.0-py3-none-any.whl
  • Upload date:
  • Size: 35.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.13.15

File hashes

Hashes for spendsignal-0.7.0-py3-none-any.whl
Algorithm Hash digest
SHA256 56d1575cf867974d52b934b5f76661572baf731b8c775533c588b1dec4f3be5f
MD5 3281225c428737c8be7f6642a679b800
BLAKE2b-256 6c95d50ad65e6e360a90b309d100bdaed85f2bc59b3e8e5c20c871b5034442b5

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.7.0 This release

2 files

0.6.0

2 files

0.5.0

2 files

0.4.0

2 files

0.3.0

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page