Inspiration
Slide five of nearly every seed deck says something like "12 enterprise customers, $1.2M ARR", and almost nobody checks it against the ledger before wiring money. Checking means reconciling a Stripe export by hand, then searching the news for each logo. Anne & Zaeem works in Finance, where you don't say a number without the proof behind it. Receipts applies that rule to the customer slide.
What it does
Drop in a deck and a Stripe export, and every logo gets a receipt with three columns: Ledger (what it pays and for how long), Profile (Akta company data) and World (Akta news). Four numbers lead the output: Deck ARR $1,200,000 · Recurring ARR $840,000 · ARR flagged (policy-weighted) $111,600 · Top customer 18.0% of MRR. Each number shows the exact Stripe charge rows (and, for the flagged number, the Akta articles) behind it, and the whole trail downloads as JSON.
On the demo data room:
Five logos pay today, three were pilots, two paid a one-time fee, and two never appear in the ledger. The bridge from $1.2M to $840K removes September's nine implementation fees and three one-time services, then adds back the annual contracts. monday.com (18% of MRR) cut about 20% of its workforce, and Salesforce announced it is acquiring Braze. Both are flagged, each with a second-meeting question. Relay is on the slide but not in the ledger. Akta news says it shut down, while Akta's company record still says operating, and the receipt prints that conflict. A "Check any company" panel runs live Akta lookups on any company.
How we built it
Engine: deterministic pandas, and no model touches a number. 176 tests run against an oracle of expected values. akta.pro: company data and event-tagged news fill the Profile and World columns. NicrronNinoo: every model call goes through the gateway (anthropic/claude-haiku-5-5). PRISM by Block Convey: traces every run and records our guardrail: every number in the summary must appear verbatim in the engine's output. Roundtable: stores claims.json and findings.json with version history on every run. Streamlit, with our designer's theme.
Challenges we ran into
News is noisy. At first Mercury was flagged as shutting down because of an article about a different company's collapse. Now an article counts only when the logo is its primary subject, a percentage counts only as a share of the workforce, funding codes need funding language, and multi-company news digests never set a verdict. Nicrron's Claude models think before answering, and that thinking counts against max_tokens, so a 400-token budget returned empty text. We moved to 2,000 tokens with a retry. Roundtable's edge rejected Python's default User-Agent. We send roundtable-transfer/1.0.
Accomplishments that we're proud of
The deck's $1.2M is reproduced to the dollar from its own definition, then bridged to $840K. On the PRISM challenge, summarizer v1 failed the number rule in 5 of 5 runs and v2 passed 5 of 5. In a usability test, five first-time-user personas each reached a result twice, and no crashes were found. All four sponsor tools make real calls in the live app.
What we learned
The slow part of diligence is reconciling, not reading. Rules beat prompts for anything with a dollar sign. Outside-in data helps most when it is tied to a specific ledger row, a specific article and a specific question.
What's next for Receipts
An upload screen, so anyone can run their own data room. Every deck claim, not just the logo slide. Read-only Stripe access, so receipts stay current between rounds. A monthly customer-health check across a fund's portfolio.
Log in or sign up for Devpost to join the conversation.