The trap of pre-set "intelligent tools"
Most management apps sell "intelligent matching". In reality, it's:
- A list of hardcoded patterns (URSSAF, HMRC, Stripe, common SaaS)
- A text-similarity score between labels
- That's it
It works for 60-70% of your transactions. The remaining 30%, you classify by hand every month. No learning.
The difference: persisted rules + evolving confidence
In Freelance Budget, each time you validate or create a classification, the app generates or updates a ReconciliationRule:
- Pattern (substring or regex) of the bank label
- Target match (mission, expense, salary, other income)
- Confidence score: 0-100, rises with each validation, drops if you reject
Concrete example:
-
Month 1: First debit from OVH SAS. You classify it as "Web hosting". A rule is created:
pattern: "OVH SAS"→expense: "OVH Hosting", confidence 50. -
Month 2: New OVH SAS debit. The engine applies the rule automatically. You validate the auto-match. Confidence rises to 65.
-
Month 3: Confidence 80. The engine auto-applies without even asking.
-
Month 6: Confidence 95. The engine applies silently. You just see "9 transactions auto-matched" at the top of the dashboard.
A system that gets smarter over time
Here's what actually happens for an active freelancer after 3-6 months of use:
| Month | Manual classification % | Time spent | |---|---|---| | Month 1 | 95% of statement | 1h30 | | Month 3 | 35% of statement | 30 min | | Month 6 | 12% of statement | 10 min | | Month 12+ | 5-8% of statement | 5 min |
Those remaining 5-8% are typically:
- A unique transaction (exceptional purchase, new client wire)
- An unusual variation (usual debit but different amount)
- A pattern deletion (you canceled a subscription, the pattern is obsolete)
The regex vs substring mechanism
Rules support two modes:
- Substring (default): matches if the label contains the pattern. Simple, handles 80% of cases.
- Regex: for tricky cases. Example:
^STRIPE.*ACMEcaptures all Stripe payouts for client Acme specifically.
Regex modes are earned automatically when you correct a false match repeatedly. If you reject "STRIPE — Acme Consulting" matched to "STRIPE — Other Client", the app hardens the rule with a more specific regex.
Confidence also goes down
If you reject or modify a classification, confidence drops. Essential — prevents the app from getting stuck on an error.
Example: you classified "STRIPE PAYOUT" as "Other income". But actually you have 2 Stripe sources: your shop (revenue) and your Pro app (rebillings). When you reject 3 times, the rule loses confidence and the app asks again.
Why few SaaS tools do this
Building an evolving, behavior-adaptive learning engine requires:
- A
ReconciliationRuletable with a rich schema (confidence, regex flag, applied/confirmed counts) - A matching engine that queries these rules before hardcoded patterns
- A UI making correction explicit (not just an "x" that erases the suggestion)
It's invisible product engineering — the average freelancer doesn't explicitly ask for "persisted rules with confidence". But after 3 months, they see the effect: their monthly statement classifies itself.
The moment you notice
Typical month 4: you upload your April statement. The app shows "47 transactions, 44 auto-matched using 31 learned rules, 3 to classify".
You classify the 3 in 1 minute. Done.
You remember spending 1h30 in month 1. You realize you just saved 15-20 hours per year on bank reconciliation alone.
That's exactly the benefit you can't see in a 5-minute demo — but that becomes obvious after 90 days of regular use.