Home › Blog › How I Automated Accounting for SyncTools Using Hermes Agent (Step by Step)How I Automated Accounting for SyncTools Using Hermes Agent (Step by Step) Chintan Prajapati June 2, 2026 16 min read Key takeaways I built an AI accounting pipeline for my Singapore SaaS company (SyncTools) in ~6–8 hours of active work using Hermes Agent connected to Zoho Books, Gmail, Aspire bank, Stripe, and Telegram. Hermes Agent shipped with 91 generalist skills out of the box. About 10 were directly useful for accounting. I did not use a single MCP server, the agent wrote its own Python scripts against the official APIs. The agent automates AP, bank statement import, vendor bill posting, bank reconciliation, exception queueing, and Stripe revenue reconciliation. I run it in parallel with a human accountant on two separate Zoho Books org sets. There were 7 sharp errors I had to correct, from filename-only document classification to a critical tax-amount bug on vendor bills. Every one of them was a “reasoning from code, not from accounting” mistake. Estimated bookkeeping reduction: ~85–90% on routine month-end work. Break-even on setup time: under one month.I built an AI accounting pipeline for SyncTools in ~6–8 hours using Hermes Agent connected to Zoho Books, Gmail, Aspire, Stripe, and Telegram—with zero MCP servers.There were 7 sharp errors to correct. Every one was a “reasoning from code, not from accounting” mistake.Why I Started This Experiment in the First PlaceI run a Singapore-based SaaS company called SyncTools (synctools.ai). When I incorporated it, I went through a third-party service called OSOME.They helped me register the company and bundled their accounting package on top. Honestly, for the first few years, it was a clean experience.You hand them your documents through their portal, they handle the books, you stay out of it.But there were two structural problems I lived with for a long time without realising how much they were costing me: The accounting package was annual-only. The numbers landed once a year, at filing time. There was no monthly close. There was no direct channel to the accountant. Everything had to go through the portal. No quick chat, no email thread, no “hey can you look at this credit card line by EOD?”For a small company, that’s fine. For a growing SaaS business, it’s a real problem. Once I started scaling, I needed to see cash flow, MRR, and an income-vs-expense bifurcation every month, not at the end of the year.And it kept biting me. Duplicate charges on the company card slipped through. SaaS subscriptions I’d cancelled were still billing me. Vendor overcharges sat in the statements for months unnoticed. There was just no monthly mechanism to catch any of it.So I switched to month-on-month accounting. I hired an in-house accountant and delegated the work to him. But my actual goal was bigger than that.I wanted to build a parallel version of the same accounting, automated, running on Zoho Books, that I could operate myself with an AI agent.Here’s the plan I went in with: One set of Zoho Books managed by the human accountant. A second set of Zoho Books managed by me, using an agentic AI workflow. Compare both at month end. Where they diverge, learn why.That’s how this experiment was born. I picked up Hermes Agent (the open-source agent runtime from Nous Research), connected it to my real business systems, and started building.This article is the honest log of what worked, what broke, and how long it took. If you’re a business owner who’s tired of waiting for year-end, or if you run an accounting firm and you’re wondering whether agentic AI is something your practice should be exploring, read on.What Hermes Agent Actually Is (and Why It Mattered Here)Quick note on the agent runtime before I get into the workflow, because this is where SyncTools ended up doing something most teams haven’t tried yet.When I first connected Hermes Agent to my environment, it came with 91 installed skills out of the box.Of those, maybe 10 were directly useful for an end-to-end accounting workflow, Gmail automation, Google Workspace, OCR and document parsing, browser automation, scheduling, that sort of thing.There was no pre-built “accounting” skill. The agent was a generalist with strong building blocks. I had to compose the accounting workflow on top.Here’s the part that surprised me: I didn’t use a single MCP server in this build. No QuickBooks MCP, no Zoho MCP, no Stripe MCP.Hermes Agent wrote its own Python code on the fly to talk to every system, Gmail API, Zoho Books REST API, Stripe API, Aspire bank statement parsing, Telegram Bot API, using nothing but the official HTTP APIs and the agent’s ability to write, save, and reuse Python scripts.Every “skill” the agent built during the experiment became a durable file that I could re-invoke next month. By the end, I had a personal toolkit of accounting Python scripts that the agent runs on its own.Compare that with the human workflow I was paying for. Working with any accountant, I have to: Re-explain my instructions every single month Email or upload statements every single month Watch them log into dozens of vendor portals, download PDFs, paste into Excel, and do manual mappingThe agent eliminated all of that on the channels it owned. The cost was the up-front training time, which is what the rest of this article is about.The SetupWhat Hermes Agent connected to for SyncTools: Gmail, to ingest forwarded vendor invoices, bank statements, and credit card statements Zoho Books (the second, agentic set), accounting system of record Aspire, business bank account and corporate cards (one for me, one for my colleague Barkha) Stripe, revenue side (SaaS subscriptions, charges, refunds, payouts) Telegram, so the agent could message me when it was unsure My chart of accounts uploaded as a CSV (72 accounts)I didn’t write any code myself. The agent generated Python scripts as it went, saved them in a working folder, and stored the reusable patterns as Hermes “skills.” Meaning next month, the same workflow runs without retraining.The 9-Step Workflow (and Where AI Went Wrong on Each One)Step 1, Email IngestionI set up Gmail labels for SyncTools/Accounting/Inbox, AP, Bank, CreditCards, Processed, and Ask Business Owner.Then I forwarded a quarter’s worth of vendor bills and bank statements into a dedicated Gmail address. The agent ingested everything and applied labels automatically.Where AI went wrong: The first version of the classifier looked at the email subject and the attachment filename, that’s it. Confidence scores stuck at 60–70%.The agent was guessing “this looks like a bank statement” purely from a filename like Invoice_2026.pdf.The correction: I told the agent that any document with confidence below 70% had to be flagged as Ask Business Owner and pinged to me on Telegram.Then I asked it to add a PDF preview pass: extract the first one or two pages with PyMuPDF, and reclassify based on actual content. Confidence jumped immediately. The Ask Owner queue shrank to almost nothing.Lesson: Don’t trust metadata-only classification for financial documents. Always read the content.Step 2, Document NormalizationThe agent extracted structured data from every PDF, vendor name, date, currency, line items, totals, into a normalized JSONL and CSV.From two months of Aspire statements, it pulled 89 individual transactions. From four vendor bills, it pulled clean line items.This part worked on the first attempt. OCR and structured extraction is mature enough now that it just works, as long as your PDFs aren’t garbage quality.Step 3, Chart of Accounts and Zoho Books SetupI uploaded my chart of accounts (72 accounts) as a CSV and told the agent that Zoho Books was the system of record on the agentic side. Posting mode set to draft until I confirmed.Where AI went badly wrong (and repeatedly): Connecting to the Zoho Books API was painful.Round 1: I sent the agent what I thought was a refresh token. It was actually a grant code. The agent didn’t understand the difference and kept trying to use it as a refresh token. Auth failed with invalid_code over and over.Round 2: Once that was sorted, posting bills failed with Account does not exist. The reason: the chart of accounts CSV I’d uploaded had account names but stale account IDs from a different Zoho org I’d been testing with.Round 3: After I uploaded a fresh CSV with live IDs, things started working.The correction: I asked the agent to build a “sync settings from live Zoho” step. Pull the current chart of accounts, currencies, and tax codes from the Zoho API at the start of every run, instead of trusting a static export. The agent saved this as a reusable Python script that now runs first thing every month.Lesson: OAuth flows trip up even the best agents. And always sync your chart of accounts, currencies, and tax codes from the live system. Static exports go stale faster than you think.Step 4, Multi-Currency HandlingSyncTools vendors bill me in USD, GBP, and INR. My base currency is SGD. I asked the agent to handle this dynamically: if it sees an invoice in GBP, enable GBP in Zoho and post the bill in the original currency.The agent inspected my Zoho org, confirmed INR/GBP/USD were already active, and set itself up to post in the original currency using Zoho’s currency_id field.Lesson: Multi-currency isn’t the hard part anymore. If your accounting system supports it natively, an AI agent can wire it up without manual mapping.Step 5, Posting Vendor Bills and ExpensesThe agent posted two IONOS vendor bills (USD 119.90 each) and one Shopify platform fee (SGD 42.51) as a draft expense.Where AI went badly wrong, and this one was a critical accounting error. The agent posted the bills at subtotal (USD 110.00) instead of total payable (USD 119.90).Why? Because Zoho didn’t have a tax code mapped, the agent decided to strip the tax line from the posted amount. From a coder’s logic, that was “clean”, no tax code, no tax. From an accountant’s perspective, it was wrong.IONOS is going to charge my card USD 119.90 regardless of whether SyncTools is GST-registered. If the bill goes in at USD 110.00, the bank reconciliation mismatches by USD 9.90 and the books don’t balance.The correction: I explained that, regardless of tax registration, vendor bills must be posted at the full amount the vendor is actually being paid. Tax is metadata in the audit log, not a deduction from the payable.The agent updated its logic, repushed the bills at USD 119.90, and stored the original tax breakdown in a metadata field for audit purposes.Lesson: This is the single biggest reason you can’t leave AI accounting unsupervised in the first month. Agents reason from code, not from accounting principles. Subtle GAAP and tax behaviours need to be spelled out as explicit business rules.Step 6, Bank Statement ImportThe agent extracted 89 transactions from my Aspire bank and card statements. I assumed they were in Zoho. They weren’t.Where AI went wrong: The agent had built a clean local “reconciliation staging” file but had never actually pushed the transactions to Zoho’s bank feed.When I asked “why aren’t bank transactions in Zoho?”, the agent’s reply, paraphrased: “the Zoho posting loop only handles vendors and bills. Bank transactions weren’t in scope.”The correction: I asked it to fix the flow. Import bank statement transactions to the Zoho bank account first, leave them uncategorized, then do matching inside Zoho.I also asked for idempotency so re-runs would not duplicate anything. The agent built the dedup logic, reran twice, and confirmed zero duplicates the second time.Lesson: Always verify that extracted data actually reaches the target accounting system. “Processed locally” is not the same as “posted to the books.”Step 7, Bank ReconciliationThis is where accounting AI either pays for itself or falls apart.The agent matched the two IONOS bills against the corresponding card transactions on the Aspire statement, exact amount, vendor name in the description, dates one day apart. Clean.Where AI went wrong (twice):Language: The agent kept calling proposed matches “candidates.”; That’s a software engineering word, not an accounting word. Accountants say “proposed match,” “approved match,” “exception,” “uncategorized.”I made the agent switch its terminology so the output reads like an accounting workflow, not a CRUD operation.Over-matching: For a Shopify platform fee, the agent matched the expense to a card transaction 30 days off.The amount matched, sure, but the date was nowhere near, and the credit card I’d actually used for that expense was on a card whose statement hadn’t been ingested yet. The agent was anchoring on amount alone.The correction: I gave it a stricter matching rule. A reconciliation match needs date proximity + exact amount + vendor name fuzzy match. If the expense was paid on a card whose statement hasn’t been ingested, skip the match and leave it as an exception.After the rule change, the agent went from “two suspicious-looking matches” to “two confident matches plus one honest exception.” That’s exactly what a junior accountant would produce.Lesson: Match rules need to be business rules, not similarity scores. And the agent needs to know when not to match. Over-eager matching is worse than no matching at all.Step 8, Exception Queue and Receipt RequestsFor every card transaction with no source receipt, I needed to chase the cardholder.Where AI went wrong: The agent’s first proposal was to send 43 individual receipt-request emails, one per missing transaction.Technically correct. Humanly unusable.Nobody at SyncTools is going to dig through 43 emails on a Friday morning.The correction: One weekly summary email per cardholder. One email goes to me for the transactions on my card. A separate email goes to Barkha for the transactions on her card. Each email holds that week’s outstanding receipts in a single HTML table.Cardholders can reply with attachments, forward the original receipt emails to the ingestion inbox, or send them via Telegram. The Request ID in the table is how the agent matches the incoming receipt back to the original transaction and closes the exception automatically. Scheduled as a weekly cron, every Friday at 8:00 AM IST.Here’s what one of those weekly summary emails actually looks like when Hermes Agent sends it.Each cardholder gets a single email listing every outstanding receipt that needs evidence: date, vendor, amount, the card it hit, and the Request ID that ties the reply back to the right transaction.The same exception loop also handles source documents that aren’t in email at all.If the agent needs something from an external portal, say, a Shopify Partner payout CSV, it composes a targeted request with the exact portal URL, the export period, the steps to extract the file, and the reply channels. The operator just follows the steps.Lesson: AI agents will optimise for technical correctness over human ergonomics unless you steer them. Always think about the human on the other side.Step 9, Stripe Integration (Revenue Side)I asked the agent to pull two months of Stripe data, charges, refunds, payouts, and stage clearing entries for Zoho.The agent connected with a read-only restricted API key (deliberately not OAuth, restricted keys are safer for server-side single-tenant use), backfilled 145 balance transactions and 36 payouts, and generated 357 Zoho clearing rows ready for posting.This step went smoothly. By the time we got to Stripe, the agent had learned my preferences and the patterns of how I wanted things mapped, so I barely had to step in.All of This Now Runs on a ScheduleOnce each step was working, Hermes Agent registered the workflows as scheduled jobs. Gmail ingestion every two hours. Stripe sync every six hours. Weekly receipt summary every Friday morning at 08:00 IST.Shopify App Store sync every six hours. Shopify Partner payout CSV requests every few days.The whole accounting back-office of SyncTools is now a set of recurring cron jobs the agent runs on its own. I only touch the exception queue.How Long Did This Take? (And What’s the ROI?)Setup: roughly 6–8 hours of active work across 1–2 days. Initial setup and Gmail label configuration: ~45 minutes OAuth troubleshooting and COA sync: ~1.5 hours Document extraction review and corrections: ~1 hour Vendor bill posting corrections: ~45 minutes Reconciliation logic debugging: ~1.5 hours Exception queue and cron configuration: ~1 hour Stripe backfill and verification: ~1 hourMonthly time savings (estimated for a SaaS company at this scale, 2–3 bank accounts, one payment processor, 10–20 vendor bills per month):TaskManual time / monthDownloading + sorting bank statements1–2 hoursVendor bill entry and matching2–3 hoursBank reconciliation2–4 hoursStripe / payment processor reconciliation1–2 hoursChasing missing receipts1–2 hoursTotal before automation7–13 hoursAfter automation, the workload shifts to exception review:TaskTime / monthReview reconciliation exceptions20–30 minutesApprove proposed matches10–15 minutesHandle receipt follow-ups15–20 minutesTotal after automation45–65 minutesThat’s roughly an 85–90% reduction in bookkeeping time for routine month-end work. The remaining time is the judgment work, exceptions the agent correctly escalated rather than guessed at.The 6–8 hours of setup amortises across every month the pipeline runs. For a company that was already spending 10 hours a month on manual reconciliation, the break-even on setup time is less than one month.Where AI Went Wrong, All Seven Issues, in One PlaceIf you only take one section from this article, take this one.#What Hermes Agent did wrongWhy it was wrongWhat I told it instead1Classified documents using filename onlyFilenames lie; PDFs have the truthAdd a PDF preview classifier; flag < 70% confidence to owner2Confused Zoho grant code with refresh tokenOAuth flows are fiddlyWalk through the exact token exchange step by step3Posted bills at subtotal (USD 110.00) instead of total payable (USD 119.90)Stripped tax line when no tax code existedVendor payable equals what the card was charged. Always. Tax is a metadata field.4Extracted bank transactions locally but never pushed them to ZohoConfused “processed” with “imported”Push to Zoho bank feed first; reconcile inside Zoho second5Used “candidate” to describe a proposed matchThat’s engineering language, not accountingUse proposed / approved / exception / uncategorized6Matched a recurring charge to a transaction 30 days offAnchored on amount; ignored date and statement sourceMatch needs date proximity + amount + fuzzy vendor + correct statement7Wanted to send 43 individual receipt-request emailsTechnically correct, humanly unusableOne weekly summary email per cardholder, CC accounts, multi-channel replySeven sharp corrections turned the agent from “demo that crashes in production” into “junior accountant who needs a senior to review their work.” That’s a real, useful baseline.What AI Agents Still Cannot Do ReliablyThe experiment worked. That should not be mistaken for “AI is ready to replace an accountant.” Accounting judgment. The agent can post a vendor bill or match a bank transaction. It cannot look at an unusual charge and decide whether it belongs in cost of goods sold, a prepaid asset, or a one-time write-off. Those calls depend on business context that isn’t in the transaction data. Tax interpretation. Determining whether a vendor’s service qualifies for input tax credit, or how a particular expense is treated under a bilateral tax treaty, requires a tax professional. The agent in this experiment already demonstrated this gap: it dropped a tax line because no matching tax code existed, rather than flagging the item for review. Correct in one reading, wrong in practice. Unusual transactions. Edge cases, intercompany transfers, foreign currency deposits with non-standard exchange rates, refunds offset across periods, break rule-based matching. The agent surfaced Shopify as an exception rather than guessing. That’s the right behaviour, but it means a human still has to classify a meaningful share of the transaction volume in any real accounting environment. Audit decisions. What gets substantiated, what’s a materiality threshold, which expense needs a receipt versus which one doesn’t, these are judgment calls that sit with the accountant, not the automation layer. An AI agent can prepare the reconciliation and flag exceptions. It cannot decide what level of documentation is sufficient.This isn’t a disclaimer. It’s a scope definition. The value of AI in accounting comes from removing the mechanical work so that human expertise goes to the decisions that actually require it. That’s also why I keep my human accountant in the loop on the second Zoho Books set, and compare month-end.Lessons for Business Owners and Accounting FirmsAlways post the full vendor payable amount on bills, regardless of tax registration. If you take nothing else from this article, take this one. It’s the failure mode that silently breaks reconciliation.Parallel-run is the safe migration path. I’m running two sets of Zoho Books in parallel: accountant-managed and agent-managed. At month end, I compare. Where they diverge, the agent learns. That’s the only honest way to roll out agentic accounting in a real business. AI agents are real now, but they’re not autonomous yet. Treat the agent like a smart junior accountant: capable, fast, occasionally wrong on subtle business logic. You still need a senior accountant in the loop. The hardest part is not the AI. It’s the integrations and business rules. OAuth, chart-of-accounts hygiene, tax handling, reconciliation rules, that’s where your time goes. Sync your chart of accounts and currencies from the live accounting system on every run. Static exports go stale fast. Build the human-in-the-loop layer from day one. Telegram for quick questions. Weekly summary emails for batched receipt requests. An Ask Business Owner queue for low-confidence items. Use accounting language, not engineering language, in operator-facing output. Sounds trivial. It isn’t. It’s the difference between an accounting team adopting the tool and abandoning it.What’s Next for SyncTools (and the Replicable Model for Accounting Firms)The setup I have today handles ingestion, normalization, posting, bank import, basic reconciliation, exception queueing, and Stripe revenue. Coming next at SyncTools: A tighter reconciliation engine with vendor master fuzzy matching Customer-side invoicing automation from Stripe and the SyncTools billing system Payroll journal entries, importing from HR and posting to the right GL accounts A monthly “close” workflow that auto-generates a tie-out file for my human accountant, so the comparison between his Zoho set and the agent’s Zoho set runs in minutes, not daysAnd the replicable insight: the same model works for accounting firms. If you run a multi-client accounting practice, this approach turns each client into a Hermes “skill.” Once configured, the agent runs that client’s books on a recurring schedule, and your accountants only handle exceptions.That’s a real productivity unlock for the firm, and a much better client experience than the annual-only model I started with at OSOME.Frequently Asked QuestionsWhat accounting systems can AI agents integrate with for automation?AI agents can connect to any accounting platform with an API: Zoho Books, QuickBooks Online, Xero, NetSuite, Sage Business Cloud, and Microsoft Dynamics 365 Business Central. Integration depth varies, some platforms support full read/write access, others restrict automated posting to specific transaction types.How accurate is AI document classification for financial documents?Metadata-only classification (filenames, email subjects) typically produces 60–70% confidence, which is too low for financial data. Extracting actual document content before classifying significantly improves accuracy. In this experiment, that single change produced the biggest accuracy gain of the whole project.Can an AI agent handle multi-currency accounting?Yes, provided the accounting system supports the required currencies and the agent is configured to detect currency from source documents. In this experiment, transactions in USD, GBP, and INR were handled correctly once Zoho Books confirmed those currencies were active in the org.What does AI accounting automation actually cost to set up?Setup time for a small SaaS company with 2–3 bank accounts, a payment processor, and 5–20 monthly vendor bills is roughly 6–8 hours of active configuration and testing. Ongoing maintenance drops to 45–65 minutes per month for exception review and reconciliation sign-off.What are the biggest risks of AI accounting automation?The three highest-risk failure modes from this experiment: vendor bills posted at subtotal instead of total when tax codes are missing; extracted data sitting in a local file instead of being pushed to the accounting system; and reconciliation matching without date proximity constraints producing false positives. All are preventable with explicit business logic rules written in advance.Do I need MCP servers to build an AI accounting agent?No. The SyncTools pipeline described here uses zero MCP servers. Hermes Agent writes its own Python scripts directly against the official APIs of Gmail, Zoho Books, Stripe, and the rest. MCP is useful for some workflows; for an end-to-end accounting pipeline owned by a single business, it isn’t required.Want to Run This for Your Business or Firm?At Satva Solutions, we build, deploy, and operate agentic AI accounting workflows for SaaS companies, e-commerce businesses, and accounting firms. We have hands-on production experience, including every failure mode in the table above and the corrections that fix them. The SyncTools pipeline described here is real. We can build the equivalent for your business.If you want to explore whether agentic AI can run part of your accounting workflow, contact our team for a working session. We’ll show you a live demo on a sandbox and map out a 30-day pilot for your business or firm.Contact Satva Solutions