Every price, approval and AI answer your software gives - traced step by step, readable by your support team, your customers and your auditors.
Every decision on the record. Its inputs and outcome, tagged with your own IDs so you can find it later.


Credit decisions
8,412 records, kept for 25 months
| Application ID | Lender | Product | Amount | Credit score | Decision | Reason |
|---|---|---|---|---|---|---|
| APP-554559 | Tidewell Mutual | Car loan | $20,500 | 778 | Declined | Defaults in last 5 years |
| APP-731204 | Corella Credit Union | Personal loan | $12,000 | 812 | Approved | |
| APP-208817 | Tidewell Mutual | Debt consolidation | $34,500 | 702 | Referred | Gambling spend share of income |
| APP-660093 | Northgate Finance | Credit card | $8,000 | 745 | Approved | |
| APP-118452 | Tidewell Mutual | Personal loan | $6,500 | 566 | Declined | Credit score |
| APP-947310 | Corella Credit Union | Car loan | $41,000 | 791 | Approved | |
| APP-385526 | Tidewell Mutual | Personal loan | $15,000 | 734 | Referred | Sanctions and PEP screen |
| APP-502781 | Northgate Finance | Debt consolidation | $27,500 | 688 | Declined | Monthly surplus at assessment rate |
Whenever software applies rules, someone eventually asks why. Recount records the answer while it happens.
Pricing
Why did this customer get that rate?
Claims
Why was this claim declined?
AI
What did the model actually see?
Billing
How was this charge calculated?
Access
Why was this request blocked?
Compliance
Can you show the auditor how?
01/How it works
Recount is an SDK for Node.js and Python. It records what your code decided and why, in a form people outside engineering can follow.
Put a trace around the code that decides - a quote, an approval, a model call. Your logic stays as it is.
Add a span for each step: the data you fetched, the rules you applied, what the model said. Flag anything unusual with an alert. Fields you mark sensitive are removed before anything leaves your app.
Every trace becomes a step-by-step timeline in the dashboard - for your team, for a customer in their own portal, as a row in a searchable record set, or rolled up into a report.
import recount from '@refactorlabs/recount';
await recount.startTrace('Home insurance quote', async () => {
const res = await recount.fetch('Property data', propertyUrl);
const property = await res.json();
const risk = scoreRiskFactors(property);
recount.addSpan('json', 'Risk factors', { output: risk });
if (risk.floodZone === 'HIGH') {
recount.addAlert('Elevated flood risk', 'warn', {
checks: [{ target: 'Flood loading', value: risk.floodLoading }]
});
}
const quote = buildQuote(risk);
recount.addSpan('json', 'Final quote', { output: quote });
return quote;
});import recount
async def home_insurance_quote():
res = await recount.fetch("Property data", property_url)
property_data = res.json()
risk = score_risk_factors(property_data)
recount.add_span("json", "Risk factors", {"output": risk})
if risk["flood_zone"] == "HIGH":
recount.add_alert("Elevated flood risk", "warn", {
"checks": [{"target": "Flood loading", "value": risk["flood_loading"]}]
})
quote = build_quote(risk)
recount.add_span("json", "Final quote", {"output": quote})
return quote
await recount.start_trace("Home insurance quote", home_insurance_quote)Nine span types, each drawn the way a person would want to read it. Drop-in wrappers for fetch, MongoDB, Anthropic and OpenAI.
02/Who reads it
The same trace answers your engineers, your customers and your auditors - each in the view that suits them.
Your team
All plansSearch traces by customer, outcome or any metadata, and step through exactly what happened. Invite anyone outside engineering - support, legal, the CEO - as a read-only viewer.
Your customers
Standard & ProGive each business you serve a portal in its own logo and colours, showing only its own data, so it can answer its own “why” without opening a ticket.
Your auditors
Standard & ProTurn a period of traces into a short PDF report, for your team or shared in a customer’s portal. On Pro, every decision is also kept as a record you can search and export. Every report and export is fingerprinted, so anyone can check a copy is genuine.
Your AI assistant
ProConnect any MCP client and ask why a quote, price or decision came out the way it did. It reads the trace and explains it in plain English. Access is read-only, so it can never change your data.
get_trace · Home insurance quote
Two loadings drove it up: the property is in a high flood zone (+18%) and was built in 1985 (+12%). Brick construction (-5%) only partly offset them, and every eligible discount was applied.
03/Built for production
Recount sits in the code paths that matter most, so it’s built to be careful with what it sees.
Mark a field sensitive and it’s removed inside your app, before anything is sent.
Everything is encrypted in transit and at rest, and records can’t be edited once they’re made.
Choose how long each trace is kept, up to 365 days. Reports are kept separately: up to a year on Standard, or as long as you need on Pro.
Flag any step as a warning or error, along with the values that caused it.
Wrap your Anthropic or OpenAI client once to record every prompt, response and token count.
Node.js and Python, with the same concepts in both. Free to start, no credit card.
04/Pricing
Every plan includes the dashboard, alerts, redaction and both SDKs. Prices in AUD.
For trying it out
$0/ month
For growing teams
$29/ month
For agencies and teams at scale
$99/ month
Need higher volumes, invoicing or help with a security review? Talk to us.
05/FAQ
Recount is a decision tracing SDK for Node.js and Python. Wrap the code behind a price, approval or AI answer, and Recount records every step - the data it used, the rules it applied, the model calls it made - as a timeline that your support team, your customers and your auditors can read without opening the code.
Those tools show engineers how a system is running: what ran, how long it took and where it failed. Recount records why your software reached a particular result - the data, rules and model calls behind it - in a form your support team, customers and auditors can follow. It works alongside them rather than replacing them.
Usually a few lines. Install the Node.js or Python SDK, wrap the code behind a decision and add a step for each part that matters. HTTP requests, MongoDB queries and Anthropic and OpenAI calls are recorded automatically. Most teams start with one decision, such as quotes or claims, and add more from there.
If you serve other businesses, you can give each of them a read-only portal showing only their own decisions, records and reports, in their logo and colours. Portals are on the Standard and Pro plans, and on Pro they can be served from your own domain, like portals.yourcompany.com.
On the Standard and Pro plans you can generate PDF reports for any period, such as a monthly health summary or an exceptions log. Pro adds record sets, which keep every decision as a searchable row for up to 25 months, plus scheduled reports and exports. Every report and export is fingerprinted, so anyone can check a copy is genuine.
Fields you mark as sensitive are removed inside your app, so they never reach us. Everything else is encrypted in transit and at rest, stored in Australia, and can’t be edited once it’s recorded. You choose how long it’s kept and who can see it. If you need a security questionnaire completed, email support@refactor.gg.
Yes. The free plan includes 50,000 spans a month, 7-day retention, 2 projects and 2 team members. No credit card is needed.
Free to start. No credit card required.