How a video call with a friend turned into a workday-changing app for a wine agency.

What used to take a wine agency in Quebec two full days of manual SAQ invoice work every month now takes under half an hour — with zero errors, line by line.

Client

A wine agency in Quebec

Year

2025

Role

Builder

Techstack

PythonFlaskAnthropic API

Services

Custom Web Apps & AI Tools
zérosaisieLoading invoices...

Drop your SAQ invoices here

PDF · multiple files accepted

4 PDF files selected
My boss is telling me this year that I have to find a solution to automate a lot of my accounting tasks. Stefano, I don't really know what to do.

Accounting manager at a wine agency in Quebec

The problem.

ThisThisisiswhatwhataafriendfriendofofmineminesaidsaidininthethemiddlemiddleofofaavideovideocallcallwewewerewerehaving.having.SheSheworksworksasasananaccountingaccountingmanagermanageratataawinewineagencyagencyininQuebec.Quebec.

IIaskedaskedher:her:“What“Whataccountingaccountingprocedureprocedurespecifically?”specifically?”

”You”Yousee,see,everyeverymonthmonthIIreceivereceivedozensdozensofofinvoicesinvoicesfromfromthetheSAQSAQ(the(thewinewineandandspiritsspiritsgovernmentgovernmentauthorityauthorityininQuebec).Quebec).IIhavehavetotomanuallymanuallyextractextractthetheinformationinformationfromfromeveryeveryinvoice.invoice.SomeSomeinvoicesinvoicesarearequickquicktotoprocess,process,butbutsomesomeothersothersareareaatruetruepain.”pain.”

”So”Sowhatwhatyou'reyou'retellingtellingmemeisisthatthatyouyoutaketakeinformationinformationfromfromaaPDFPDFandandthenthenyouyouexportexportititto…”to…”IIasked.asked.

”A”Aspreadsheetspreadsheetforforthethewholewholeteamteamtotohavehaveaccessaccesstotothetheinformation,”information,”shesheanswered.answered.

Seeing the shape of it.

IIstartedstartedthinkingthinkingititthrough.through.TheThepredictablepredictablepartspartsofofeacheachinvoiceinvoicecouldcouldbebehandledhandledbybydeterministicdeterministiclogic,logic,codecodethatthatcomputescomputesthethesamesameansweranswereveryeverytimetimeandandsimplysimplycannotcannotdrift.drift.TheThemessy,messy,judgment-calljudgment-callpartspartscouldcouldbebehandedhandedtotoAI,AI,butbutfencedfencedinintightlytightlysosoititnevernevertouchestouchesaanumbernumberititcouldcouldgetgetwrong.wrong.RulesRulesalonealonewouldwouldbebetootoobrittlebrittletotosurvivesurviverealrealinvoices;invoices;AIAIalonealonewouldwouldbebetootoounreliableunreliableforforaafinancefinanceteamteamtototrust.trust.TheThetricktrickwaswascombiningcombiningthemthemsosothetheresultresultwaswassomethingsomethingyouyoucouldcouldactuallyactuallystakestakeyouryourbooksbookson.on.IIcouldcouldseeseethethewholewholeshapeshapeofofit.it.ThisThiswasn'twasn'tgoinggoingtotobebeeasyeasywork,work,butbutIIknewknewexactlyexactlywherewheretotocut.cut.

IIaskedaskedififshe'dshe'dbebewillingwillingtotosendsendmemeaafewfewmodelmodelinvoicesinvoicesandandthethereportsreportsneededneededtotododothethedatadataextraction,extraction,sosoIIcouldcouldseeseewhatwhatIIcouldcoulddo.do.SheSheagreed,agreed,andandIIpromisedpromisedtotocirclecirclebackbackininaacouplecoupleofofdays.days.

The two-hour prototype.

WithWithherherdatadataininhand,hand,IIgotgottotoworkworkthethenextnextday.day.IIblockedblockedoutouteveryeverydistractiondistractionandandlockedlockedininforforaacouplecoupleofofhours.hours.IIbuiltbuiltaaprototypeprototypeUIUIusingusingprettyprettystandardstandardHTMLHTMLandandCSS,CSS,wiredwiredinininvoiceinvoicetreatmenttreatmentandandextractionextractionthroughthroughPythonPythonscripts,scripts,andandsetsetupupaaFlaskFlaskserverservertotolaunchlaunchthetheUI.UI.

TheThetimetimecamecametototesttestthethefirstfirstinvoiceinvoicetypetypeIIhadhadprogrammedprogrammedfor.for.IIuploaduploadthetheinvoiceinvoicePDFPDFandandthetheSAQSAQreport.report.Nervously,Nervously,IIclickclick“process“processinvoice.”invoice.”TheTheloaderloaderanimationanimationspinsspinsforforaafewfewseconds.seconds.IIgetgetevenevenmoremorenervous.nervous.

ItItdoesn'tdoesn'ttaketakelonglongbeforebeforethetheprogramprogramspinsspinsoutoutthetheresults.results.InvoiceInvoicetotal:total:$1,919.80.$1,919.80.CouldCouldititmatchmatchthetherealrealinvoice?invoice?IIopenopenthethePDFPDF$1,919.80.$1,919.80.NoNoway.way.

ButButaamatchingmatchingtotaltotalcancanbebeluck.luck.TheTherealrealtesttestisiswhetherwhetherititmatchesmatcheslinelinebybyline.line.IIopenopenthetheSAQSAQreportreportandandstartstartcomparingcomparingrowsrowsagainstagainstthethetabletablemymyprogramprogramproduced.produced.LineLineone,one,match.match.LineLinetwo,two,match.match.EveryEverysinglesinglelinelinereconciledreconciledagainstagainstthethesourcesourcereport,report,zerozerodiscrepancies.discrepancies.

I'dI'dbebelyinglyingififIItoldtoldyouyouIIdidn'tdidn'tbreakbreakintointoaacelebratorycelebratorydance.dance.ITITWORKEDWORKEDFLAWLESSLY.FLAWLESSLY.ThereTheremaymayhavehavebeenbeensomesomeair-pumpingair-pumpinginvolvedinvolvedtoo.too.

InInjustjusttwotwohourshoursIIhadhadaaworkingworkingprototype.prototype.IIknewknewIIcouldcouldturnturnthisthisintointosomethingsomethinggenuinelygenuinelyworkday-changing.workday-changing.IIimmediatelyimmediatelyopenedopenedLoom,Loom,screen-recordedscreen-recordedthetheprototype,prototype,andandsentsentitittotoher.her.

From a favour to a real engagement.

TheThefollowingfollowingdaydaymymyfriendfriendtextstextsme:me:“Wow,“Wow,lookslooksgood.good.IIthinkthinkweweneedneedtototalktalktotomymyboss.”boss.”

SoSowewesettledsettledononaa30-minute30-minutemeetingmeetingthatthatsamesameweek.week.ThisThistimetimeIIwasn'twasn'taafriendfrienddoingdoingaademo,demo,IIwaswasshowingshowingupuptotopitchpitchaacompany.company.IIwalkedwalkedherherbossbossthroughthroughthethefeaturesfeaturesI'dI'dbuiltbuiltandandwhatwhatIIenvisionedenvisionedthetheprogramprogramcouldcouldbecome.become.HeHeturnedturnedtotoher:her:“Does“Doesthisthislooklookinterestinginterestingtotoyou?”you?”SheSheanswered,answered,“Of“Ofcourse.”course.”AndAndthenthenhehesaid:said:“OK“OKwithwithmemethen.then.SendSendususaaproposal,proposal,Stefano.”Stefano.”

ThatThatwaswasthethemomentmomentaafavorfavorforforaafriendfriendbecamebecameaarealrealengagement.engagement.AAfewfewweeksweeksofofback-and-forthback-and-forthfollowed,followed,hashinghashingoutoutspecifications,specifications,draftingdraftingthetheproposalproposalandandofofcourse,course,thethecontract.contract.FinallyFinallythethesalesalewaswasmade.made.

ThenThenthetherealrealworkworkbegan.began.

Building the real product.

TheThetwo-hourtwo-hourprototypeprototypeprovedprovedthetheidea.idea.TurningTurningititintointosomethingsomethingthetheagencyagencycouldcouldreliablyreliablyprocessprocesstheirtheirmonthlymonthlyinvoicesinvoicestooktookmuchmuchlonger.longer.TheTheprototypeprototypehandledhandledoneoneinvoice;invoice;thetheproductproducthadhadtotohandlehandleallallofofthem.them.IImademadeananinventoryinventoryofofeveryeveryinvoiceinvoicetypetypethetheSAQSAQsendssendsandandworkedworkedoutoutthetheextractionextractionlogiclogicbehindbehindeacheachone.one.IIbuiltbuiltthethesystemsystemsosothatthatanythinganythingthatthatcancanbebecomputedcomputeddeterministicallydeterministicallyisisthosethosenumbersnumberscan'tcan'tbebehallucinatedhallucinatedandandAIAIonlyonlystepsstepsininforforthethegenuinegenuinejudgmentjudgmentcalls,calls,neverneverforforthethefigures.figures.ThatThatsinglesinglearchitecturalarchitecturaldecisiondecisionisisthethereasonreasonititreconcilesreconcileseveryeverylinelinewithwithzerozeroerrors.errors.AccuracyAccuracyisisneverneveraacompromisecompromisewhenwhenititcomescomestotonumbers.numbers.IIalsoalsomademadesuresurethetheappapphandleshandlesaacompany'scompany'sfinancialfinancialdatadatawithoutwithoutexposingexposingititoutsideoutsidethetheagency,agency,withwithlicensinglicensingthatthatkeepskeepsititcontrolled.controlled.

AndAndit'sit'sbuiltbuilttotobebeupdatedupdatedandandextendedextendedwithoutwithoutrewritingrewritingthethewholewholething!thing!IfIfaanewnewinvoiceinvoiceformatsformatsappear,appear,thetheappappgrowsgrowswithwiththem.them.

A workday, changed.

WhenWhenIIsaidsaidearlyearlyononthatthatthisthiscouldcouldbecomebecomeaaworkday-changingworkday-changingapp,app,itithas.has.MyMyfriendfriendusedusedtotodreaddreadthosethosetwotwodaysdaysaamonth.month.HerHereyeseyeswouldwouldburnburnfromfromextractingextractinginvoiceinvoicelineslinesoneonebybyone.one.ThatThatkindkindofoftasktaskisissoul-sucking.soul-sucking.NowNowsheshetellstellsmemeit'sit'sactuallyactuallyfunfunititfeelsfeelslikelikeshe'sshe'sgotgotsomeonesomeoneelseelsedoingdoingthethejobjobforforher,her,freeingfreeingherhertotofocusfocusononthethestrategicstrategicworkworkherherroleroleisisactuallyactuallyabout.about.

TwoTwostatsstatsstillstillmakemakememesmile:smile:

98%

Reduction in processing time

What used to take two full days of painstaking manual work now takes under half an hour — drag, drop, and watch the program work.

0

Errors, line by line

Every invoice reconciles against the SAQ report exactly, every time.

FastFastandandcorrect.correct.ForForaafinancefinanceteam,team,youyouneedneedboth.both.Fast-and-wrongFast-and-wrongisisaanightmare.nightmare.That'sThat'sthethewholewholepointpointofofhowhowit'sit'sbuilt.built.

IfIfyouryourteamteamisislosinglosingdaysdayseveryeverymonthmonthtotomanual,manual,soul-suckingsoul-suckingdatadatawork,work,that'sthat'sexactlyexactlythethekindkindofofproblemproblemIIlikeliketotosolve.solve.Let'sLet'stalk.talk.